aboutsummaryrefslogtreecommitdiffstats
path: root/samples
diff options
context:
space:
mode:
authorDavid Ahern <dsa@cumulusnetworks.com>2016-12-01 11:48:07 -0500
committerDavid S. Miller <davem@davemloft.net>2016-12-02 13:46:09 -0500
commit4f2e7ae56e04cfe670cf39152a8d015984c90351 (patch)
treec0d08eb983e657c56dd9249e64d44929d14014f0 /samples
parentaa4c1037a30f4e88f444e83d42c2befbe0d5caf5 (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.c14
-rw-r--r--samples/bpf/bpf_load.h1
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 @@
7extern int map_fd[MAX_MAPS]; 7extern int map_fd[MAX_MAPS];
8extern int prog_fd[MAX_PROGS]; 8extern int prog_fd[MAX_PROGS];
9extern int event_fd[MAX_PROGS]; 9extern int event_fd[MAX_PROGS];
10extern 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