From 02cb61dcb7a120b7a5f7a480fd2b43f49e28dafc Mon Sep 17 00:00:00 2001 From: Jesse Gross Date: Fri, 4 May 2012 16:55:03 +0200 Subject: 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 --- kernel/net/netfilter/ipset/ip_set_getport.c | 8 ++++++++ 1 file changed, 8 insertions(+) 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; -- cgit v1.2.3