From: Jesse Gross Date: Fri, 4 May 2012 14:55:03 +0000 (+0200) Subject: ipv6: Add fragment reporting to ipv6_skip_exthdr(). X-Git-Tag: v6.12.1~21 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=02cb61dcb7a120b7a5f7a480fd2b43f49e28dafc;p=ipset ipv6: Add fragment reporting to ipv6_skip_exthdr(). While parsing through IPv6 extension headers, fragment headers are skipped making them invisible to the caller. This reports the fragment offset of the last header in order to make it possible to determine whether the packet is fragmented and, if so whether it is a first or last fragment. Signed-off-by: Jesse Gross --- diff --git a/kernel/net/netfilter/ipset/ip_set_getport.c b/kernel/net/netfilter/ipset/ip_set_getport.c index a66c67b..bfe535d 100644 --- a/kernel/net/netfilter/ipset/ip_set_getport.c +++ b/kernel/net/netfilter/ipset/ip_set_getport.c @@ -119,9 +119,17 @@ ip_set_get_ip6_port(const struct sk_buff *skb, bool src, { int protoff; u8 nexthdr; +#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,3,0) + __be16 frag_off; +#endif nexthdr = ipv6_hdr(skb)->nexthdr; +#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,3,0) + protoff = ipv6_skip_exthdr(skb, sizeof(struct ipv6hdr), &nexthdr, + &frag_off); +#else protoff = ipv6_skip_exthdr(skb, sizeof(struct ipv6hdr), &nexthdr); +#endif if (protoff < 0) return false;