X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=net%2Fipv6%2Fnetfilter.c;h=d750cfc019dcabc7efa187266e0001e550d30fe5;hb=987b0145d94eecf292d8b301228356f44611ab7c;hp=395a417ba9554baaeb0d9678c543abe4e802b3eb;hpb=f7ed79d23a47594e7834d66a8f14449796d4f3e6;p=linux-2.6.git diff --git a/net/ipv6/netfilter.c b/net/ipv6/netfilter.c index 395a417ba..d750cfc01 100644 --- a/net/ipv6/netfilter.c +++ b/net/ipv6/netfilter.c @@ -7,7 +7,6 @@ #include #include #include -#include int ip6_route_me_harder(struct sk_buff *skb) { @@ -55,7 +54,7 @@ struct ip6_rt_info { struct in6_addr saddr; }; -static void nf_ip6_saveroute(const struct sk_buff *skb, struct nf_info *info) +static void save(const struct sk_buff *skb, struct nf_info *info) { struct ip6_rt_info *rt_info = nf_info_reroute(info); @@ -67,7 +66,7 @@ static void nf_ip6_saveroute(const struct sk_buff *skb, struct nf_info *info) } } -static int nf_ip6_reroute(struct sk_buff **pskb, const struct nf_info *info) +static int reroute(struct sk_buff **pskb, const struct nf_info *info) { struct ip6_rt_info *rt_info = nf_info_reroute(info); @@ -80,50 +79,15 @@ static int nf_ip6_reroute(struct sk_buff **pskb, const struct nf_info *info) return 0; } -unsigned int nf_ip6_checksum(struct sk_buff *skb, unsigned int hook, - unsigned int dataoff, u_int8_t protocol) -{ - struct ipv6hdr *ip6h = skb->nh.ipv6h; - unsigned int csum = 0; - - switch (skb->ip_summed) { - case CHECKSUM_HW: - if (hook != NF_IP6_PRE_ROUTING && hook != NF_IP6_LOCAL_IN) - break; - if (!csum_ipv6_magic(&ip6h->saddr, &ip6h->daddr, - skb->len - dataoff, protocol, - csum_sub(skb->csum, - skb_checksum(skb, 0, - dataoff, 0)))) { - skb->ip_summed = CHECKSUM_UNNECESSARY; - break; - } - /* fall through */ - case CHECKSUM_NONE: - skb->csum = ~csum_ipv6_magic(&ip6h->saddr, &ip6h->daddr, - skb->len - dataoff, - protocol, - csum_sub(0, - skb_checksum(skb, 0, - dataoff, 0))); - csum = __skb_checksum_complete(skb); - } - return csum; -} - -EXPORT_SYMBOL(nf_ip6_checksum); - -static struct nf_afinfo nf_ip6_afinfo = { - .family = AF_INET6, - .checksum = nf_ip6_checksum, - .saveroute = nf_ip6_saveroute, - .reroute = nf_ip6_reroute, - .route_key_size = sizeof(struct ip6_rt_info), +static struct nf_queue_rerouter ip6_reroute = { + .rer_size = sizeof(struct ip6_rt_info), + .save = &save, + .reroute = &reroute, }; int __init ipv6_netfilter_init(void) { - return nf_register_afinfo(&nf_ip6_afinfo); + return nf_register_queue_rerouter(PF_INET6, &ip6_reroute); } /* This can be called from inet6_init() on errors, so it cannot @@ -131,5 +95,5 @@ int __init ipv6_netfilter_init(void) */ void ipv6_netfilter_fini(void) { - nf_unregister_afinfo(&nf_ip6_afinfo); + nf_unregister_queue_rerouter(PF_INET6); }