libbpf: add support for BPF_PROG_QUERY
authorAlexei Starovoitov <ast@fb.com>
Tue, 3 Oct 2017 05:50:27 +0000 (22:50 -0700)
committerDavid S. Miller <davem@davemloft.net>
Wed, 4 Oct 2017 23:05:05 +0000 (16:05 -0700)
add support for BPF_PROG_QUERY command to libbpf

Signed-off-by: Alexei Starovoitov <ast@kernel.org>
Acked-by: Daniel Borkmann <daniel@iogearbox.net>
Signed-off-by: David S. Miller <davem@davemloft.net>
tools/lib/bpf/bpf.c
tools/lib/bpf/bpf.h

index d4b6ba8292eecb929c6cf99c707625a58ffd2e1e..5128677e41179e89ca0a7ad1cddbfd7d8d69cce6 100644 (file)
@@ -303,6 +303,26 @@ int bpf_prog_detach2(int prog_fd, int target_fd, enum bpf_attach_type type)
        return sys_bpf(BPF_PROG_DETACH, &attr, sizeof(attr));
 }
 
+int bpf_prog_query(int target_fd, enum bpf_attach_type type, __u32 query_flags,
+                  __u32 *attach_flags, __u32 *prog_ids, __u32 *prog_cnt)
+{
+       union bpf_attr attr;
+       int ret;
+
+       bzero(&attr, sizeof(attr));
+       attr.query.target_fd    = target_fd;
+       attr.query.attach_type  = type;
+       attr.query.query_flags  = query_flags;
+       attr.query.prog_cnt     = *prog_cnt;
+       attr.query.prog_ids     = ptr_to_u64(prog_ids);
+
+       ret = sys_bpf(BPF_PROG_QUERY, &attr, sizeof(attr));
+       if (attach_flags)
+               *attach_flags = attr.query.attach_flags;
+       *prog_cnt = attr.query.prog_cnt;
+       return ret;
+}
+
 int bpf_prog_test_run(int prog_fd, int repeat, void *data, __u32 size,
                      void *data_out, __u32 *size_out, __u32 *retval,
                      __u32 *duration)
index afd64727c9cff02b314c4cbb44a7cc3237195d89..6534889e2b2f1d0dea0c0d33b9d63e00c7bc7447 100644 (file)
@@ -75,5 +75,6 @@ int bpf_map_get_next_id(__u32 start_id, __u32 *next_id);
 int bpf_prog_get_fd_by_id(__u32 id);
 int bpf_map_get_fd_by_id(__u32 id);
 int bpf_obj_get_info_by_fd(int prog_fd, void *info, __u32 *info_len);
-
+int bpf_prog_query(int target_fd, enum bpf_attach_type type, __u32 query_flags,
+                  __u32 *attach_flags, __u32 *prog_ids, __u32 *prog_cnt);
 #endif