lkml.org 
[lkml]   [2016]   [Dec]   [2]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[tip:perf/core] tools lib bpf: Add missing BPF functions
    Commit-ID:  9742da0150788e6ea7796372c3e643f876a49741
    Gitweb: http://git.kernel.org/tip/9742da0150788e6ea7796372c3e643f876a49741
    Author: Wang Nan <wangnan0@huawei.com>
    AuthorDate: Sat, 26 Nov 2016 07:03:25 +0000
    Committer: Arnaldo Carvalho de Melo <acme@redhat.com>
    CommitDate: Tue, 29 Nov 2016 12:09:36 -0300

    tools lib bpf: Add missing BPF functions

    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>
    Acked-by: Alexei Starovoitov <ast@kernel.org>
    Cc: He Kuang <hekuang@huawei.com>
    Cc: Joe Stringer <joe@ovn.org>
    Cc: Zefan Li <lizefan@huawei.com>
    Cc: pi3orama@163.com
    Link: http://lkml.kernel.org/r/20161126070354.141764-2-wangnan0@huawei.com
    Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.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));
    +}
    +
    +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
    \
     
     \ /
      Last update: 2016-12-02 11:37    [W:3.553 / U:0.080 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site