Commit dac3fe72 authored by Florian Westphal's avatar Florian Westphal Committed by Pablo Neira Ayuso

netfilter: nat: remove csum_recalc hook

We can now use direct calls.
Signed-off-by: default avatarFlorian Westphal <fw@strlen.de>
Signed-off-by: default avatarPablo Neira Ayuso <pablo@netfilter.org>
parent 03fe5efc
...@@ -4,15 +4,14 @@ ...@@ -4,15 +4,14 @@
struct nf_nat_l3proto { struct nf_nat_l3proto {
u8 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, unsigned int nf_nat_manip_pkt(struct sk_buff *skb, struct nf_conn *ct,
enum nf_nat_manip_type mtype, enum nf_nat_manip_type mtype,
enum ip_conntrack_dir dir); 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 *); int nf_nat_l3proto_register(const struct nf_nat_l3proto *);
void nf_nat_l3proto_unregister(const struct nf_nat_l3proto *); void nf_nat_l3proto_unregister(const struct nf_nat_l3proto *);
......
...@@ -97,7 +97,6 @@ bool __nf_nat_mangle_tcp_packet(struct sk_buff *skb, ...@@ -97,7 +97,6 @@ bool __nf_nat_mangle_tcp_packet(struct sk_buff *skb,
const char *rep_buffer, const char *rep_buffer,
unsigned int rep_len, bool adjust) unsigned int rep_len, bool adjust)
{ {
const struct nf_nat_l3proto *l3proto;
struct tcphdr *tcph; struct tcphdr *tcph;
int oldlen, datalen; int oldlen, datalen;
...@@ -117,9 +116,8 @@ bool __nf_nat_mangle_tcp_packet(struct sk_buff *skb, ...@@ -117,9 +116,8 @@ bool __nf_nat_mangle_tcp_packet(struct sk_buff *skb,
datalen = skb->len - protoff; datalen = skb->len - protoff;
l3proto = __nf_nat_l3proto_find(nf_ct_l3num(ct)); nf_nat_csum_recalc(skb, nf_ct_l3num(ct), IPPROTO_TCP,
l3proto->csum_recalc(skb, IPPROTO_TCP, tcph, &tcph->check, tcph, &tcph->check, datalen, oldlen);
datalen, oldlen);
if (adjust && rep_len != match_len) if (adjust && rep_len != match_len)
nf_ct_seqadj_set(ct, ctinfo, tcph->seq, nf_ct_seqadj_set(ct, ctinfo, tcph->seq,
...@@ -149,7 +147,6 @@ nf_nat_mangle_udp_packet(struct sk_buff *skb, ...@@ -149,7 +147,6 @@ nf_nat_mangle_udp_packet(struct sk_buff *skb,
const char *rep_buffer, const char *rep_buffer,
unsigned int rep_len) unsigned int rep_len)
{ {
const struct nf_nat_l3proto *l3proto;
struct udphdr *udph; struct udphdr *udph;
int datalen, oldlen; int datalen, oldlen;
...@@ -175,9 +172,8 @@ nf_nat_mangle_udp_packet(struct sk_buff *skb, ...@@ -175,9 +172,8 @@ nf_nat_mangle_udp_packet(struct sk_buff *skb,
if (!udph->check && skb->ip_summed != CHECKSUM_PARTIAL) if (!udph->check && skb->ip_summed != CHECKSUM_PARTIAL)
return true; return true;
l3proto = __nf_nat_l3proto_find(nf_ct_l3num(ct)); nf_nat_csum_recalc(skb, nf_ct_l3num(ct), IPPROTO_TCP,
l3proto->csum_recalc(skb, IPPROTO_UDP, udph, &udph->check, udph, &udph->check, datalen, oldlen);
datalen, oldlen);
return true; return true;
} }
......
...@@ -535,9 +535,28 @@ static void nf_nat_ipv6_csum_recalc(struct sk_buff *skb, ...@@ -535,9 +535,28 @@ static void nf_nat_ipv6_csum_recalc(struct sk_buff *skb,
} }
#endif #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 = { static const struct nf_nat_l3proto nf_nat_l3proto_ipv4 = {
.l3proto = NFPROTO_IPV4, .l3proto = NFPROTO_IPV4,
.csum_recalc = nf_nat_ipv4_csum_recalc,
}; };
int nf_nat_icmp_reply_translation(struct sk_buff *skb, int nf_nat_icmp_reply_translation(struct sk_buff *skb,
...@@ -788,7 +807,6 @@ void nf_nat_l3proto_exit(void) ...@@ -788,7 +807,6 @@ void nf_nat_l3proto_exit(void)
#if IS_ENABLED(CONFIG_IPV6) #if IS_ENABLED(CONFIG_IPV6)
static const struct nf_nat_l3proto nf_nat_l3proto_ipv6 = { static const struct nf_nat_l3proto nf_nat_l3proto_ipv6 = {
.l3proto = NFPROTO_IPV6, .l3proto = NFPROTO_IPV6,
.csum_recalc = nf_nat_ipv6_csum_recalc,
}; };
int nf_nat_icmpv6_reply_translation(struct sk_buff *skb, int nf_nat_icmpv6_reply_translation(struct sk_buff *skb,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment