+
+ uint8_t v6nexthdr;
+ if (ip6->nexthdr == IP6_PROTO_FRAG) {
+ if (unlikely(l4hdr + sizeof(struct ip6_fraghdr) > data_end))
+ return XDP_DROP;
+ frag6 = (struct ip6_fraghdr*) l4hdr;
+ l4hdr = l4hdr + sizeof(struct ip6_fraghdr);
+ v6nexthdr = frag6->nexthdr;
+ } else {
+ v6nexthdr = ip6->nexthdr;
+ }
+
+ if (v6nexthdr == IP_PROTO_TCP) {
+ if (unlikely(l4hdr + sizeof(struct tcphdr) > data_end))