BPF_MAP_GET_FD_BY_ID,
        BPF_OBJ_GET_INFO_BY_FD,
        BPF_PROG_QUERY,
+       BPF_RAW_TRACEPOINT_OPEN,
 };
 
 enum bpf_map_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 {
                __aligned_u64   prog_ids;
                __u32           prog_cnt;
        } query;
+
+       struct {
+               __u64 name;
+               __u32 prog_fd;
+       } raw_tracepoint;
 } __attribute__((aligned(8)));
 
 /* BPF helper function descriptions:
        __u32 minor;
 };
 
+struct bpf_raw_tracepoint_args {
+       __u64 args[0];
+};
+
 #endif /* _UAPI__LINUX_BPF_H__ */
 
        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;
 
 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