netfilter: nat: remove csum_recalc hook
We can now use direct calls. Signed-off-by: Florian Westphal <fw@strlen.de> Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
This commit is contained in:
parent
03fe5efc4c
commit
dac3fe7259
3 changed files with 27 additions and 14 deletions
|
@ -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,
|
||||||
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,
|
||||||
|
|
||||||
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,
|
||||||
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,
|
||||||
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,
|
||||||
}
|
}
|
||||||
#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)
|
||||||
#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,
|
||||||
|
|
Loading…
Add table
Reference in a new issue