]> asedeno.scripts.mit.edu Git - linux.git/blobdiff - tools/lib/bpf/bpf.c
Merge tag 'uuid-for-4.13-2' of git://git.infradead.org/users/hch/uuid
[linux.git] / tools / lib / bpf / bpf.c
index 6e178987af8e3f45d63da349e38c39b4e4cd6d84..412a7c82995ae1cb595f6eb1637703ae8a1a359b 100644 (file)
@@ -120,7 +120,7 @@ int bpf_load_program(enum bpf_prog_type type, const struct bpf_insn *insns,
 int bpf_verify_program(enum bpf_prog_type type, const struct bpf_insn *insns,
                       size_t insns_cnt, int strict_alignment,
                       const char *license, __u32 kern_version,
-                      char *log_buf, size_t log_buf_sz)
+                      char *log_buf, size_t log_buf_sz, int log_level)
 {
        union bpf_attr attr;
 
@@ -131,7 +131,7 @@ int bpf_verify_program(enum bpf_prog_type type, const struct bpf_insn *insns,
        attr.license = ptr_to_u64(license);
        attr.log_buf = ptr_to_u64(log_buf);
        attr.log_size = log_buf_sz;
-       attr.log_level = 2;
+       attr.log_level = log_level;
        log_buf[0] = 0;
        attr.kern_version = kern_version;
        attr.prog_flags = strict_alignment ? BPF_F_STRICT_ALIGNMENT : 0;
@@ -257,3 +257,71 @@ int bpf_prog_test_run(int prog_fd, int repeat, void *data, __u32 size,
                *duration = attr.test.duration;
        return ret;
 }
+
+int bpf_prog_get_next_id(__u32 start_id, __u32 *next_id)
+{
+       union bpf_attr attr;
+       int err;
+
+       bzero(&attr, sizeof(attr));
+       attr.start_id = start_id;
+
+       err = sys_bpf(BPF_PROG_GET_NEXT_ID, &attr, sizeof(attr));
+       if (!err)
+               *next_id = attr.next_id;
+
+       return err;
+}
+
+int bpf_map_get_next_id(__u32 start_id, __u32 *next_id)
+{
+       union bpf_attr attr;
+       int err;
+
+       bzero(&attr, sizeof(attr));
+       attr.start_id = start_id;
+
+       err = sys_bpf(BPF_MAP_GET_NEXT_ID, &attr, sizeof(attr));
+       if (!err)
+               *next_id = attr.next_id;
+
+       return err;
+}
+
+int bpf_prog_get_fd_by_id(__u32 id)
+{
+       union bpf_attr attr;
+
+       bzero(&attr, sizeof(attr));
+       attr.prog_id = id;
+
+       return sys_bpf(BPF_PROG_GET_FD_BY_ID, &attr, sizeof(attr));
+}
+
+int bpf_map_get_fd_by_id(__u32 id)
+{
+       union bpf_attr attr;
+
+       bzero(&attr, sizeof(attr));
+       attr.map_id = id;
+
+       return sys_bpf(BPF_MAP_GET_FD_BY_ID, &attr, sizeof(attr));
+}
+
+int bpf_obj_get_info_by_fd(int prog_fd, void *info, __u32 *info_len)
+{
+       union bpf_attr attr;
+       int err;
+
+       bzero(&attr, sizeof(attr));
+       bzero(info, *info_len);
+       attr.info.bpf_fd = prog_fd;
+       attr.info.info_len = *info_len;
+       attr.info.info = ptr_to_u64(info);
+
+       err = sys_bpf(BPF_OBJ_GET_INFO_BY_FD, &attr, sizeof(attr));
+       if (!err)
+               *info_len = attr.info.info_len;
+
+       return err;
+}