netfilter: nat: remove csum_recalc hook
authorFlorian Westphal <fw@strlen.de>
Tue, 19 Feb 2019 16:38:25 +0000 (17:38 +0100)
committerPablo Neira Ayuso <pablo@netfilter.org>
Wed, 27 Feb 2019 09:53:47 +0000 (10:53 +0100)
We can now use direct calls.

Signed-off-by: Florian Westphal <fw@strlen.de>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
include/net/netfilter/nf_nat_l3proto.h
net/netfilter/nf_nat_helper.c
net/netfilter/nf_nat_proto.c

index c112303..8ee0b5b 100644 (file)
@@ -4,15 +4,14 @@
 
 struct nf_nat_l3proto {
        u8      l3proto;
-
-       void    (*csum_recalc)(struct sk_buff *skb, u8 proto,
-                              void *data, __sum16 *check,
-                              int datalen, int oldlen);
 };
 
 unsigned int nf_nat_manip_pkt(struct sk_buff *skb, struct nf_conn *ct,
                              enum nf_nat_manip_type mtype,
                              enum ip_conntrack_dir dir);
+void nf_nat_csum_recalc(struct sk_buff *skb,
+                       u8 nfproto, u8 proto, void *data, __sum16 *check,
+                       int datalen, int oldlen);
 
 int nf_nat_l3proto_register(const struct nf_nat_l3proto *);
 void nf_nat_l3proto_unregister(const struct nf_nat_l3proto *);
index 12dea97..0a8dd5f 100644 (file)
@@ -97,7 +97,6 @@ bool __nf_nat_mangle_tcp_packet(struct sk_buff *skb,
                                const char *rep_buffer,
                                unsigned int rep_len, bool adjust)
 {
-       const struct nf_nat_l3proto *l3proto;
        struct tcphdr *tcph;
        int oldlen, datalen;
 
@@ -117,9 +116,8 @@ bool __nf_nat_mangle_tcp_packet(struct sk_buff *skb,
 
        datalen = skb->len - protoff;
 
-       l3proto = __nf_nat_l3proto_find(nf_ct_l3num(ct));
-       l3proto->csum_recalc(skb, IPPROTO_TCP, tcph, &tcph->check,
-                            datalen, oldlen);
+       nf_nat_csum_recalc(skb, nf_ct_l3num(ct), IPPROTO_TCP,
+                          tcph, &tcph->check, datalen, oldlen);
 
        if (adjust && rep_len != match_len)
                nf_ct_seqadj_set(ct, ctinfo, tcph->seq,
@@ -149,7 +147,6 @@ nf_nat_mangle_udp_packet(struct sk_buff *skb,
                         const char *rep_buffer,
                         unsigned int rep_len)
 {
-       const struct nf_nat_l3proto *l3proto;
        struct udphdr *udph;
        int datalen, oldlen;
 
@@ -175,9 +172,8 @@ nf_nat_mangle_udp_packet(struct sk_buff *skb,
        if (!udph->check && skb->ip_summed != CHECKSUM_PARTIAL)
                return true;
 
-       l3proto = __nf_nat_l3proto_find(nf_ct_l3num(ct));
-       l3proto->csum_recalc(skb, IPPROTO_UDP, udph, &udph->check,
-                            datalen, oldlen);
+       nf_nat_csum_recalc(skb, nf_ct_l3num(ct), IPPROTO_TCP,
+                          udph, &udph->check, datalen, oldlen);
 
        return true;
 }
index 8a306a7..8284ed1 100644 (file)
@@ -535,9 +535,28 @@ static void nf_nat_ipv6_csum_recalc(struct sk_buff *skb,
 }
 #endif
 
+void nf_nat_csum_recalc(struct sk_buff *skb,
+                       u8 nfproto, u8 proto, void *data, __sum16 *check,
+                       int datalen, int oldlen)
+{
+       switch (nfproto) {
+       case NFPROTO_IPV4:
+               nf_nat_ipv4_csum_recalc(skb, proto, data, check,
+                                       datalen, oldlen);
+               return;
+#if IS_ENABLED(CONFIG_IPV6)
+       case NFPROTO_IPV6:
+               nf_nat_ipv6_csum_recalc(skb, proto, data, check,
+                                       datalen, oldlen);
+               return;
+#endif
+       }
+
+       WARN_ON_ONCE(1);
+}
+
 static const struct nf_nat_l3proto nf_nat_l3proto_ipv4 = {
        .l3proto                = NFPROTO_IPV4,
-       .csum_recalc            = nf_nat_ipv4_csum_recalc,
 };
 
 int nf_nat_icmp_reply_translation(struct sk_buff *skb,
@@ -788,7 +807,6 @@ void nf_nat_l3proto_exit(void)
 #if IS_ENABLED(CONFIG_IPV6)
 static const struct nf_nat_l3proto nf_nat_l3proto_ipv6 = {
        .l3proto                = NFPROTO_IPV6,
-       .csum_recalc            = nf_nat_ipv6_csum_recalc,
 };
 
 int nf_nat_icmpv6_reply_translation(struct sk_buff *skb,