summaryrefslogtreecommitdiffstats
path: root/tools/lib/bpf/libbpf.c
diff options
context:
space:
mode:
authorJohn Fastabend2017-08-16 07:34:22 +0200
committerDavid S. Miller2017-08-16 20:27:53 +0200
commit6f6d33f3b3d0f53799d120d28abd13ad90041549 (patch)
treedbd263882c3bc49c8bc1d7a08b7d0eadd0f4ddb3 /tools/lib/bpf/libbpf.c
parentbpf: selftests: add tests for new __sk_buff members (diff)
downloadkernel-qcow2-linux-6f6d33f3b3d0f53799d120d28abd13ad90041549.tar.gz
kernel-qcow2-linux-6f6d33f3b3d0f53799d120d28abd13ad90041549.tar.xz
kernel-qcow2-linux-6f6d33f3b3d0f53799d120d28abd13ad90041549.zip
bpf: selftests add sockmap tests
This generates a set of sockets, attaches BPF programs, and sends some simple traffic using basic send/recv pattern. Additionally, we do a bunch of negative tests to ensure adding/removing socks out of the sockmap fail correctly. Signed-off-by: John Fastabend <john.fastabend@gmail.com> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'tools/lib/bpf/libbpf.c')
-rw-r--r--tools/lib/bpf/libbpf.c29
1 files changed, 29 insertions, 0 deletions
diff --git a/tools/lib/bpf/libbpf.c b/tools/lib/bpf/libbpf.c
index 1a2c07eb7795..1cc3ea0ffdc3 100644
--- a/tools/lib/bpf/libbpf.c
+++ b/tools/lib/bpf/libbpf.c
@@ -1744,3 +1744,32 @@ long libbpf_get_error(const void *ptr)
return PTR_ERR(ptr);
return 0;
}
+
+int bpf_prog_load(const char *file, enum bpf_prog_type type,
+ struct bpf_object **pobj, int *prog_fd)
+{
+ struct bpf_program *prog;
+ struct bpf_object *obj;
+ int err;
+
+ obj = bpf_object__open(file);
+ if (IS_ERR(obj))
+ return -ENOENT;
+
+ prog = bpf_program__next(NULL, obj);
+ if (!prog) {
+ bpf_object__close(obj);
+ return -ENOENT;
+ }
+
+ bpf_program__set_type(prog, type);
+ err = bpf_object__load(obj);
+ if (err) {
+ bpf_object__close(obj);
+ return -EINVAL;
+ }
+
+ *pobj = obj;
+ *prog_fd = bpf_program__fd(prog);
+ return 0;
+}