diff options
author | Petar Penkov <ppenkov@google.com> | 2018-09-14 10:46:18 -0400 |
---|---|---|
committer | Alexei Starovoitov <ast@kernel.org> | 2018-09-14 15:04:33 -0400 |
commit | d58e468b1112dcd1d5193c0a89ff9f98b5a3e8b9 (patch) | |
tree | aca881df342a9ac9bcef834f5fc2621f5a095403 /kernel/bpf/syscall.c | |
parent | 1edb6e035eb72a17462ba275fe2db36c37a62909 (diff) |
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>
Diffstat (limited to 'kernel/bpf/syscall.c')
-rw-r--r-- | kernel/bpf/syscall.c | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/kernel/bpf/syscall.c b/kernel/bpf/syscall.c index 3c9636f03bb2..b3c2d09bcf7a 100644 --- a/kernel/bpf/syscall.c +++ b/kernel/bpf/syscall.c | |||
@@ -1615,6 +1615,9 @@ static int bpf_prog_attach(const union bpf_attr *attr) | |||
1615 | case BPF_LIRC_MODE2: | 1615 | case BPF_LIRC_MODE2: |
1616 | ptype = BPF_PROG_TYPE_LIRC_MODE2; | 1616 | ptype = BPF_PROG_TYPE_LIRC_MODE2; |
1617 | break; | 1617 | break; |
1618 | case BPF_FLOW_DISSECTOR: | ||
1619 | ptype = BPF_PROG_TYPE_FLOW_DISSECTOR; | ||
1620 | break; | ||
1618 | default: | 1621 | default: |
1619 | return -EINVAL; | 1622 | return -EINVAL; |
1620 | } | 1623 | } |
@@ -1636,6 +1639,9 @@ static int bpf_prog_attach(const union bpf_attr *attr) | |||
1636 | case BPF_PROG_TYPE_LIRC_MODE2: | 1639 | case BPF_PROG_TYPE_LIRC_MODE2: |
1637 | ret = lirc_prog_attach(attr, prog); | 1640 | ret = lirc_prog_attach(attr, prog); |
1638 | break; | 1641 | break; |
1642 | case BPF_PROG_TYPE_FLOW_DISSECTOR: | ||
1643 | ret = skb_flow_dissector_bpf_prog_attach(attr, prog); | ||
1644 | break; | ||
1639 | default: | 1645 | default: |
1640 | ret = cgroup_bpf_prog_attach(attr, ptype, prog); | 1646 | ret = cgroup_bpf_prog_attach(attr, ptype, prog); |
1641 | } | 1647 | } |
@@ -1688,6 +1694,8 @@ static int bpf_prog_detach(const union bpf_attr *attr) | |||
1688 | return sockmap_get_from_fd(attr, BPF_PROG_TYPE_SK_SKB, NULL); | 1694 | return sockmap_get_from_fd(attr, BPF_PROG_TYPE_SK_SKB, NULL); |
1689 | case BPF_LIRC_MODE2: | 1695 | case BPF_LIRC_MODE2: |
1690 | return lirc_prog_detach(attr); | 1696 | return lirc_prog_detach(attr); |
1697 | case BPF_FLOW_DISSECTOR: | ||
1698 | return skb_flow_dissector_bpf_prog_detach(attr); | ||
1691 | default: | 1699 | default: |
1692 | return -EINVAL; | 1700 | return -EINVAL; |
1693 | } | 1701 | } |