[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20180913194335.fszwj4jj4yputxlv@ast-mbp>
Date: Thu, 13 Sep 2018 12:43:37 -0700
From: Alexei Starovoitov <alexei.starovoitov@...il.com>
To: Petar Penkov <peterpenkov96@...il.com>
Cc: netdev@...r.kernel.org, davem@...emloft.net, ast@...nel.org,
daniel@...earbox.net, simon.horman@...ronome.com,
ecree@...arflare.com, songliubraving@...com, tom@...bertland.com,
Petar Penkov <ppenkov@...gle.com>,
Willem de Bruijn <willemb@...gle.com>
Subject: Re: [bpf-next, v3 1/5] flow_dissector: implements flow dissector BPF
hook
On Thu, Sep 13, 2018 at 10:45:53AM -0700, Petar Penkov wrote:
> From: Petar Penkov <ppenkov@...gle.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 <ppenkov@...gle.com>
> Signed-off-by: Willem de Bruijn <willemb@...gle.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.
Powered by blists - more mailing lists