diff mbox

[v3,01/30] tools lib bpf: Add missing BPF functions

Message ID 20161126070354.141764-2-wangnan0@huawei.com
State Accepted
Commit 9742da0150788e6ea7796372c3e643f876a49741
Headers show

Commit Message

Wang Nan Nov. 26, 2016, 7:03 a.m. UTC
Add more BPF map operations to libbpf. Also add bpf_obj_{pin,get}(). They
can be used on not only BPF maps but also BPF programs.

Signed-off-by: Wang Nan <wangnan0@huawei.com>

Cc: Alexei Starovoitov <ast@fb.com>
Cc: Arnaldo Carvalho de Melo <acme@redhat.com>
Cc: Joe Stringer <joe@ovn.org>
Cc: Li Zefan <lizefan@huawei.com>
---
 tools/lib/bpf/bpf.c | 56 +++++++++++++++++++++++++++++++++++++++++++++++++++++
 tools/lib/bpf/bpf.h |  7 +++++++
 2 files changed, 63 insertions(+)

-- 
2.10.1

Comments

Alexei Starovoitov Nov. 26, 2016, 5:10 p.m. UTC | #1
On Sat, Nov 26, 2016 at 07:03:25AM +0000, Wang Nan wrote:
> Add more BPF map operations to libbpf. Also add bpf_obj_{pin,get}(). They

> can be used on not only BPF maps but also BPF programs.

> 

> Signed-off-by: Wang Nan <wangnan0@huawei.com>

> Cc: Alexei Starovoitov <ast@fb.com>

> Cc: Arnaldo Carvalho de Melo <acme@redhat.com>

> Cc: Joe Stringer <joe@ovn.org>

> Cc: Li Zefan <lizefan@huawei.com>

> ---

>  tools/lib/bpf/bpf.c | 56 +++++++++++++++++++++++++++++++++++++++++++++++++++++

>  tools/lib/bpf/bpf.h |  7 +++++++

>  2 files changed, 63 insertions(+)

> 

> diff --git a/tools/lib/bpf/bpf.c b/tools/lib/bpf/bpf.c

> index 4212ed6..8143536 100644

> --- a/tools/lib/bpf/bpf.c

> +++ b/tools/lib/bpf/bpf.c

> @@ -110,3 +110,59 @@ int bpf_map_update_elem(int fd, void *key, void *value,

>  

>  	return sys_bpf(BPF_MAP_UPDATE_ELEM, &attr, sizeof(attr));

>  }

> +

> +int bpf_map_lookup_elem(int fd, void *key, void *value)

> +{

> +	union bpf_attr attr;

> +

> +	bzero(&attr, sizeof(attr));

> +	attr.map_fd = fd;

> +	attr.key = ptr_to_u64(key);

> +	attr.value = ptr_to_u64(value);

> +

> +	return sys_bpf(BPF_MAP_LOOKUP_ELEM, &attr, sizeof(attr));

> +}


Acked-by: Alexei Starovoitov <ast@kernel.org>
diff mbox

Patch

diff --git a/tools/lib/bpf/bpf.c b/tools/lib/bpf/bpf.c
index 4212ed6..8143536 100644
--- a/tools/lib/bpf/bpf.c
+++ b/tools/lib/bpf/bpf.c
@@ -110,3 +110,59 @@  int bpf_map_update_elem(int fd, void *key, void *value,
 
 	return sys_bpf(BPF_MAP_UPDATE_ELEM, &attr, sizeof(attr));
 }
+
+int bpf_map_lookup_elem(int fd, void *key, void *value)
+{
+	union bpf_attr attr;
+
+	bzero(&attr, sizeof(attr));
+	attr.map_fd = fd;
+	attr.key = ptr_to_u64(key);
+	attr.value = ptr_to_u64(value);
+
+	return sys_bpf(BPF_MAP_LOOKUP_ELEM, &attr, sizeof(attr));
+}
+
+int bpf_map_delete_elem(int fd, void *key)
+{
+	union bpf_attr attr;
+
+	bzero(&attr, sizeof(attr));
+	attr.map_fd = fd;
+	attr.key = ptr_to_u64(key);
+
+	return sys_bpf(BPF_MAP_DELETE_ELEM, &attr, sizeof(attr));
+}
+
+int bpf_map_get_next_key(int fd, void *key, void *next_key)
+{
+	union bpf_attr attr;
+
+	bzero(&attr, sizeof(attr));
+	attr.map_fd = fd;
+	attr.key = ptr_to_u64(key);
+	attr.next_key = ptr_to_u64(next_key);
+
+	return sys_bpf(BPF_MAP_GET_NEXT_KEY, &attr, sizeof(attr));
+}
+
+int bpf_obj_pin(int fd, const char *pathname)
+{
+	union bpf_attr attr;
+
+	bzero(&attr, sizeof(attr));
+	attr.pathname = ptr_to_u64((void *)pathname);
+	attr.bpf_fd = fd;
+
+	return sys_bpf(BPF_OBJ_PIN, &attr, sizeof(attr));
+}
+
+int bpf_obj_get(const char *pathname)
+{
+	union bpf_attr attr;
+
+	bzero(&attr, sizeof(attr));
+	attr.pathname = ptr_to_u64((void *)pathname);
+
+	return sys_bpf(BPF_OBJ_GET, &attr, sizeof(attr));
+}
diff --git a/tools/lib/bpf/bpf.h b/tools/lib/bpf/bpf.h
index e8ba540..253c3db 100644
--- a/tools/lib/bpf/bpf.h
+++ b/tools/lib/bpf/bpf.h
@@ -35,4 +35,11 @@  int bpf_load_program(enum bpf_prog_type type, struct bpf_insn *insns,
 
 int bpf_map_update_elem(int fd, void *key, void *value,
 			u64 flags);
+
+int bpf_map_lookup_elem(int fd, void *key, void *value);
+int bpf_map_delete_elem(int fd, void *key);
+int bpf_map_get_next_key(int fd, void *key, void *next_key);
+int bpf_obj_pin(int fd, const char *pathname);
+int bpf_obj_get(const char *pathname);
+
 #endif