Parse NEXTHDR_FRAGMENT. When seen account for it in the fragment bits of
key_control. Also, check if first fragment should be parsed.

Signed-off-by: Tom Herbert <t...@herbertland.com>
---
 net/core/flow_dissector.c | 25 +++++++++++++++++++++++++
 1 file changed, 25 insertions(+)

diff --git a/net/core/flow_dissector.c b/net/core/flow_dissector.c
index 7536a46..907de2f 100644
--- a/net/core/flow_dissector.c
+++ b/net/core/flow_dissector.c
@@ -409,6 +409,31 @@ ip_proto_again:
 
                goto ip_proto_again;
        }
+       case NEXTHDR_FRAGMENT: {
+               struct frag_hdr _fh, *fh;
+
+               if (proto != htons(ETH_P_IPV6))
+                       break;
+
+               fh = __skb_header_pointer(skb, nhoff, sizeof(_fh),
+                                         data, hlen, &_fh);
+
+               if (!fh)
+                       goto out_bad;
+
+               key_control->is_fragment = 1;
+
+               nhoff += sizeof(_fh);
+
+               if (!(fh->frag_off & htons(IP6_OFFSET))) {
+                       key_control->first_frag = 1;
+                       if (flags & FLOW_DISSECTOR_F_PARSE_1ST_FRAG) {
+                               ip_proto = fh->nexthdr;
+                               goto ip_proto_again;
+                       }
+               }
+               goto out_good;
+       }
        case IPPROTO_IPIP:
                proto = htons(ETH_P_IP);
                goto ip;
-- 
1.8.1

--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to