flow_dissector: implements flow dissector BPF hook
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@google.com> Signed-off-by: Willem de Bruijn <willemb@google.com> Signed-off-by: Alexei Starovoitov <ast@kernel.org>
This commit is contained in:

committed by
Alexei Starovoitov

parent
1edb6e035e
commit
d58e468b11
@@ -152,6 +152,7 @@ enum bpf_prog_type {
|
||||
BPF_PROG_TYPE_LWT_SEG6LOCAL,
|
||||
BPF_PROG_TYPE_LIRC_MODE2,
|
||||
BPF_PROG_TYPE_SK_REUSEPORT,
|
||||
BPF_PROG_TYPE_FLOW_DISSECTOR,
|
||||
};
|
||||
|
||||
enum bpf_attach_type {
|
||||
@@ -172,6 +173,7 @@ enum bpf_attach_type {
|
||||
BPF_CGROUP_UDP4_SENDMSG,
|
||||
BPF_CGROUP_UDP6_SENDMSG,
|
||||
BPF_LIRC_MODE2,
|
||||
BPF_FLOW_DISSECTOR,
|
||||
__MAX_BPF_ATTACH_TYPE
|
||||
};
|
||||
|
||||
@@ -2333,6 +2335,7 @@ struct __sk_buff {
|
||||
/* ... here. */
|
||||
|
||||
__u32 data_meta;
|
||||
struct bpf_flow_keys *flow_keys;
|
||||
};
|
||||
|
||||
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;
|
||||
__u8 ip_proto;
|
||||
__be16 n_proto;
|
||||
__be16 sport;
|
||||
__be16 dport;
|
||||
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 */
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
#endif /* _UAPI__LINUX_BPF_H__ */
|
||||
|
Reference in New Issue
Block a user