libbpf: add bpf_raw_tracepoint_open helper
authorAlexei Starovoitov <ast@kernel.org>
Wed, 28 Mar 2018 19:05:38 +0000 (12:05 -0700)
committerDaniel Borkmann <daniel@iogearbox.net>
Wed, 28 Mar 2018 20:55:19 +0000 (22:55 +0200)
add bpf_raw_tracepoint_open(const char *name, int prog_fd) api to libbpf

Signed-off-by: Alexei Starovoitov <ast@kernel.org>
Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
tools/include/uapi/linux/bpf.h
tools/lib/bpf/bpf.c
tools/lib/bpf/bpf.h

index d245c41213ac20850a1b9b58f1925b827899ff04..58060bec999dda3c2c428d908be3f77d8d7953eb 100644 (file)
@@ -94,6 +94,7 @@ enum bpf_cmd {
        BPF_MAP_GET_FD_BY_ID,
        BPF_OBJ_GET_INFO_BY_FD,
        BPF_PROG_QUERY,
+       BPF_RAW_TRACEPOINT_OPEN,
 };
 
 enum bpf_map_type {
@@ -134,6 +135,7 @@ enum bpf_prog_type {
        BPF_PROG_TYPE_SK_SKB,
        BPF_PROG_TYPE_CGROUP_DEVICE,
        BPF_PROG_TYPE_SK_MSG,
+       BPF_PROG_TYPE_RAW_TRACEPOINT,
 };
 
 enum bpf_attach_type {
@@ -344,6 +346,11 @@ union bpf_attr {
                __aligned_u64   prog_ids;
                __u32           prog_cnt;
        } query;
+
+       struct {
+               __u64 name;
+               __u32 prog_fd;
+       } raw_tracepoint;
 } __attribute__((aligned(8)));
 
 /* BPF helper function descriptions:
@@ -1151,4 +1158,8 @@ struct bpf_cgroup_dev_ctx {
        __u32 minor;
 };
 
+struct bpf_raw_tracepoint_args {
+       __u64 args[0];
+};
+
 #endif /* _UAPI__LINUX_BPF_H__ */
index 592a58a2b6810866b64f08eef118c624bca19c08..e0500055f1a66be661acce5367603843a16ef27a 100644 (file)
@@ -428,6 +428,17 @@ int bpf_obj_get_info_by_fd(int prog_fd, void *info, __u32 *info_len)
        return err;
 }
 
+int bpf_raw_tracepoint_open(const char *name, int prog_fd)
+{
+       union bpf_attr attr;
+
+       bzero(&attr, sizeof(attr));
+       attr.raw_tracepoint.name = ptr_to_u64(name);
+       attr.raw_tracepoint.prog_fd = prog_fd;
+
+       return sys_bpf(BPF_RAW_TRACEPOINT_OPEN, &attr, sizeof(attr));
+}
+
 int bpf_set_link_xdp_fd(int ifindex, int fd, __u32 flags)
 {
        struct sockaddr_nl sa;
index 8d18fb73d7fb2978e0ba44ffc58a5c814f1f09e8..ee59342c6f42b4f319cbf5b649c93b95f2259f5e 100644 (file)
@@ -79,4 +79,5 @@ 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);
+int bpf_raw_tracepoint_open(const char *name, int prog_fd);
 #endif