struct bpf_flow_dissector;
 bool bpf_flow_dissect(struct bpf_prog *prog, struct bpf_flow_dissector *ctx,
-                     __be16 proto, int nhoff, int hlen);
+                     __be16 proto, int nhoff, int hlen, unsigned int flags);
 
 bool __skb_flow_dissect(const struct net *net,
                        const struct sk_buff *skb,
 
        BPF_FD_TYPE_URETPROBE,          /* filename + offset */
 };
 
+#define BPF_FLOW_DISSECTOR_F_PARSE_1ST_FRAG            (1U << 0)
+#define BPF_FLOW_DISSECTOR_F_STOP_AT_FLOW_LABEL                (1U << 1)
+#define BPF_FLOW_DISSECTOR_F_STOP_AT_ENCAP             (1U << 2)
+
 struct bpf_flow_keys {
        __u16   nhoff;
        __u16   thoff;
                        __u32   ipv6_dst[4];    /* in6_addr; network order */
                };
        };
+       __u32   flags;
 };
 
 struct bpf_func_info {
 
        time_start = ktime_get_ns();
        for (i = 0; i < repeat; i++) {
                retval = bpf_flow_dissect(prog, &ctx, eth->h_proto, ETH_HLEN,
-                                         size);
+                                         size, 0);
 
                if (signal_pending(current)) {
                        preempt_enable();
 
 }
 
 bool bpf_flow_dissect(struct bpf_prog *prog, struct bpf_flow_dissector *ctx,
-                     __be16 proto, int nhoff, int hlen)
+                     __be16 proto, int nhoff, int hlen, unsigned int flags)
 {
        struct bpf_flow_keys *flow_keys = ctx->flow_keys;
        u32 result;
        flow_keys->nhoff = nhoff;
        flow_keys->thoff = flow_keys->nhoff;
 
+       BUILD_BUG_ON((int)BPF_FLOW_DISSECTOR_F_PARSE_1ST_FRAG !=
+                    (int)FLOW_DISSECTOR_F_PARSE_1ST_FRAG);
+       BUILD_BUG_ON((int)BPF_FLOW_DISSECTOR_F_STOP_AT_FLOW_LABEL !=
+                    (int)FLOW_DISSECTOR_F_STOP_AT_FLOW_LABEL);
+       BUILD_BUG_ON((int)BPF_FLOW_DISSECTOR_F_STOP_AT_ENCAP !=
+                    (int)FLOW_DISSECTOR_F_STOP_AT_ENCAP);
+       flow_keys->flags = flags;
+
        preempt_disable();
        result = BPF_PROG_RUN(prog, ctx);
        preempt_enable();
                        }
 
                        ret = bpf_flow_dissect(attached, &ctx, n_proto, nhoff,
-                                              hlen);
+                                              hlen, flags);
                        __skb_flow_bpf_to_target(&flow_keys, flow_dissector,
                                                 target_container);
                        rcu_read_unlock();