aboutsummaryrefslogtreecommitdiffstats
path: root/kernel/bpf/syscall.c
diff options
context:
space:
mode:
authorPetar Penkov <ppenkov@google.com>2018-09-14 10:46:18 -0400
committerAlexei Starovoitov <ast@kernel.org>2018-09-14 15:04:33 -0400
commitd58e468b1112dcd1d5193c0a89ff9f98b5a3e8b9 (patch)
treeaca881df342a9ac9bcef834f5fc2621f5a095403 /kernel/bpf/syscall.c
parent1edb6e035eb72a17462ba275fe2db36c37a62909 (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.c8
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 }