diff options
| author | David Ahern <dsa@cumulusnetworks.com> | 2016-12-01 11:48:07 -0500 |
|---|---|---|
| committer | David S. Miller <davem@davemloft.net> | 2016-12-02 13:46:09 -0500 |
| commit | 4f2e7ae56e04cfe670cf39152a8d015984c90351 (patch) | |
| tree | c0d08eb983e657c56dd9249e64d44929d14014f0 /samples | |
| parent | aa4c1037a30f4e88f444e83d42c2befbe0d5caf5 (diff) | |
samples/bpf: Update bpf loader for cgroup section names
Add support for section names starting with cgroup/skb and cgroup/sock.
Signed-off-by: David Ahern <dsa@cumulusnetworks.com>
Acked-by: Alexei Starovoitov <ast@kernel.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'samples')
| -rw-r--r-- | samples/bpf/bpf_load.c | 14 | ||||
| -rw-r--r-- | samples/bpf/bpf_load.h | 1 |
2 files changed, 12 insertions, 3 deletions
diff --git a/samples/bpf/bpf_load.c b/samples/bpf/bpf_load.c index 62f54d6eb8bf..49b45ccbe153 100644 --- a/samples/bpf/bpf_load.c +++ b/samples/bpf/bpf_load.c | |||
| @@ -52,6 +52,8 @@ static int load_and_attach(const char *event, struct bpf_insn *prog, int size) | |||
| 52 | bool is_tracepoint = strncmp(event, "tracepoint/", 11) == 0; | 52 | bool is_tracepoint = strncmp(event, "tracepoint/", 11) == 0; |
| 53 | bool is_xdp = strncmp(event, "xdp", 3) == 0; | 53 | bool is_xdp = strncmp(event, "xdp", 3) == 0; |
| 54 | bool is_perf_event = strncmp(event, "perf_event", 10) == 0; | 54 | bool is_perf_event = strncmp(event, "perf_event", 10) == 0; |
| 55 | bool is_cgroup_skb = strncmp(event, "cgroup/skb", 10) == 0; | ||
| 56 | bool is_cgroup_sk = strncmp(event, "cgroup/sock", 11) == 0; | ||
| 55 | enum bpf_prog_type prog_type; | 57 | enum bpf_prog_type prog_type; |
| 56 | char buf[256]; | 58 | char buf[256]; |
| 57 | int fd, efd, err, id; | 59 | int fd, efd, err, id; |
| @@ -72,6 +74,10 @@ static int load_and_attach(const char *event, struct bpf_insn *prog, int size) | |||
| 72 | prog_type = BPF_PROG_TYPE_XDP; | 74 | prog_type = BPF_PROG_TYPE_XDP; |
| 73 | } else if (is_perf_event) { | 75 | } else if (is_perf_event) { |
| 74 | prog_type = BPF_PROG_TYPE_PERF_EVENT; | 76 | prog_type = BPF_PROG_TYPE_PERF_EVENT; |
| 77 | } else if (is_cgroup_skb) { | ||
| 78 | prog_type = BPF_PROG_TYPE_CGROUP_SKB; | ||
| 79 | } else if (is_cgroup_sk) { | ||
| 80 | prog_type = BPF_PROG_TYPE_CGROUP_SOCK; | ||
| 75 | } else { | 81 | } else { |
| 76 | printf("Unknown event '%s'\n", event); | 82 | printf("Unknown event '%s'\n", event); |
| 77 | return -1; | 83 | return -1; |
| @@ -85,7 +91,7 @@ static int load_and_attach(const char *event, struct bpf_insn *prog, int size) | |||
| 85 | 91 | ||
| 86 | prog_fd[prog_cnt++] = fd; | 92 | prog_fd[prog_cnt++] = fd; |
| 87 | 93 | ||
| 88 | if (is_xdp || is_perf_event) | 94 | if (is_xdp || is_perf_event || is_cgroup_skb || is_cgroup_sk) |
| 89 | return 0; | 95 | return 0; |
| 90 | 96 | ||
| 91 | if (is_socket) { | 97 | if (is_socket) { |
| @@ -334,7 +340,8 @@ int load_bpf_file(char *path) | |||
| 334 | memcmp(shname_prog, "tracepoint/", 11) == 0 || | 340 | memcmp(shname_prog, "tracepoint/", 11) == 0 || |
| 335 | memcmp(shname_prog, "xdp", 3) == 0 || | 341 | memcmp(shname_prog, "xdp", 3) == 0 || |
| 336 | memcmp(shname_prog, "perf_event", 10) == 0 || | 342 | memcmp(shname_prog, "perf_event", 10) == 0 || |
| 337 | memcmp(shname_prog, "socket", 6) == 0) | 343 | memcmp(shname_prog, "socket", 6) == 0 || |
| 344 | memcmp(shname_prog, "cgroup/", 7) == 0) | ||
| 338 | load_and_attach(shname_prog, insns, data_prog->d_size); | 345 | load_and_attach(shname_prog, insns, data_prog->d_size); |
| 339 | } | 346 | } |
| 340 | } | 347 | } |
| @@ -353,7 +360,8 @@ int load_bpf_file(char *path) | |||
| 353 | memcmp(shname, "tracepoint/", 11) == 0 || | 360 | memcmp(shname, "tracepoint/", 11) == 0 || |
| 354 | memcmp(shname, "xdp", 3) == 0 || | 361 | memcmp(shname, "xdp", 3) == 0 || |
| 355 | memcmp(shname, "perf_event", 10) == 0 || | 362 | memcmp(shname, "perf_event", 10) == 0 || |
| 356 | memcmp(shname, "socket", 6) == 0) | 363 | memcmp(shname, "socket", 6) == 0 || |
| 364 | memcmp(shname, "cgroup/", 7) == 0) | ||
| 357 | load_and_attach(shname, data->d_buf, data->d_size); | 365 | load_and_attach(shname, data->d_buf, data->d_size); |
| 358 | } | 366 | } |
| 359 | 367 | ||
diff --git a/samples/bpf/bpf_load.h b/samples/bpf/bpf_load.h index dfa57fe65c8e..4adeeef53ad6 100644 --- a/samples/bpf/bpf_load.h +++ b/samples/bpf/bpf_load.h | |||
| @@ -7,6 +7,7 @@ | |||
| 7 | extern int map_fd[MAX_MAPS]; | 7 | extern int map_fd[MAX_MAPS]; |
| 8 | extern int prog_fd[MAX_PROGS]; | 8 | extern int prog_fd[MAX_PROGS]; |
| 9 | extern int event_fd[MAX_PROGS]; | 9 | extern int event_fd[MAX_PROGS]; |
| 10 | extern int prog_cnt; | ||
| 10 | 11 | ||
| 11 | /* parses elf file compiled by llvm .c->.o | 12 | /* parses elf file compiled by llvm .c->.o |
| 12 | * . parses 'maps' section and creates maps via BPF syscall | 13 | * . parses 'maps' section and creates maps via BPF syscall |
