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 <jesse@nicira.com>
{
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;