On Thu, Sep 13, 2018 at 10:45:53AM -0700, Petar Penkov wrote: > From: Petar Penkov <ppen...@google.com> > > Adds a hook for programs of type BPF_PROG_TYPE_FLOW_DISSECTOR and > attach type BPF_FLOW_DISSECTOR that is executed in the flow dissector > path. The BPF program is per-network namespace. > > Signed-off-by: Petar Penkov <ppen...@google.com> > Signed-off-by: Willem de Bruijn <will...@google.com> ... > @@ -2333,6 +2335,7 @@ struct __sk_buff { > /* ... here. */ > > __u32 data_meta; > + struct bpf_flow_keys *flow_keys;
the bpf prog form patch 4 looks much better now. Thanks! > }; > > struct bpf_tunnel_key { > @@ -2778,4 +2781,27 @@ enum bpf_task_fd_type { > BPF_FD_TYPE_URETPROBE, /* filename + offset */ > }; > > +struct bpf_flow_keys { > + __u16 nhoff; > + __u16 thoff; > + __u16 addr_proto; /* ETH_P_* of valid addrs */ > + __u8 is_frag; > + __u8 is_first_frag; > + __u8 is_encap; > + __be16 n_proto; > + __u8 ip_proto; > + union { > + struct { > + __be32 ipv4_src; > + __be32 ipv4_dst; > + }; > + struct { > + __u32 ipv6_src[4]; /* in6_addr; network order */ > + __u32 ipv6_dst[4]; /* in6_addr; network order */ > + }; > + }; > + __be16 sport; > + __be16 dport; > +}; can you please pack it? struct bpf_flow_keys { __u16 nhoff; /* 0 2 */ __u16 thoff; /* 2 2 */ __u16 addr_proto; /* 4 2 */ __u8 is_frag; /* 6 1 */ __u8 is_first_frag; /* 7 1 */ __u8 is_encap; /* 8 1 */ /* XXX 1 byte hole, try to pack */ __be16 n_proto; /* 10 2 */ __u8 ip_proto; /* 12 1 */ /* XXX 3 bytes hole, try to pack */ union { also is_frag and other fields are not used by the kernel and only used by the prog to pass data between tail_calls ? In such case reserve some space in bpf_flow_keys similar to skb->cb so it can contain any fields and accommodate for inevitable changes to bpf flow dissector prog in the future.