aboutsummaryrefslogtreecommitdiffstats
path: root/tools/lib/bpf/libbpf.c
diff options
context:
space:
mode:
authorJohn Fastabend <john.fastabend@gmail.com>2017-08-16 01:34:22 -0400
committerDavid S. Miller <davem@davemloft.net>2017-08-16 14:27:53 -0400
commit6f6d33f3b3d0f53799d120d28abd13ad90041549 (patch)
treedbd263882c3bc49c8bc1d7a08b7d0eadd0f4ddb3 /tools/lib/bpf/libbpf.c
parent41bc94f535ef454e325a6d4db085ec345376de6c (diff)
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)
1744 return PTR_ERR(ptr); 1744 return PTR_ERR(ptr);
1745 return 0; 1745 return 0;
1746} 1746}
1747
1748int bpf_prog_load(const char *file, enum bpf_prog_type type,
1749 struct bpf_object **pobj, int *prog_fd)
1750{
1751 struct bpf_program *prog;
1752 struct bpf_object *obj;
1753 int err;
1754
1755 obj = bpf_object__open(file);
1756 if (IS_ERR(obj))
1757 return -ENOENT;
1758
1759 prog = bpf_program__next(NULL, obj);
1760 if (!prog) {
1761 bpf_object__close(obj);
1762 return -ENOENT;
1763 }
1764
1765 bpf_program__set_type(prog, type);
1766 err = bpf_object__load(obj);
1767 if (err) {
1768 bpf_object__close(obj);
1769 return -EINVAL;
1770 }
1771
1772 *pobj = obj;
1773 *prog_fd = bpf_program__fd(prog);
1774 return 0;
1775}