因此,用于替换tcp_congestion_ops结构的ops结构的名字为bpf_tcp_congestion_ops, 这是加载新的ops结构时用户空间必须(通过BTF的ID)引用的“特殊结构”。 最后,在kernel/bpf/bpf_struct_ops_types.h中添加如下的一行代码: BPF_STRUCT_OPS_TYPE(tcp_congestion_ops) 借助宏操作,以及将此文件四次include到bpf_struct...
BPF_PROG_TYPE_LWT_SEG6LOCAL, BPF_PROG_TYPE_LIRC_MODE2, BPF_PROG_TYPE_SK_REUSEPORT, BPF_PROG_TYPE_FLOW_DISSECTOR, BPF_PROG_TYPE_CGROUP_SYSCTL, BPF_PROG_TYPE_RAW_TRACEPOINT_WRITABLE, BPF_PROG_TYPE_CGROUP_SOCKOPT, BPF_PROG_TYPE_TRACING, BPF_PROG_TYPE_STRUCT_OPS, BPF_PROG_TYPE_EXT, BPF...
用户态是通过系统调用来加载BPF程序到内核的,在加载程序时,需要传递的参数中有一个字段叫prog_type,这个就是BPF的程序类型,跟踪相关的是:BPF_PROG_TYPE_KPROBE和BPF_PROG_TYPE_TRACEPOINT,网络相关是:BPF_PROG_TYPE_SK_SKB、BPF_PROG_TYPE_SOCK_OPS等。下面是描述BPF程序类型的枚举结构:enum bpf_prog_typ...
PROG_TYPE_SCHED_ACT BPF_PROG_TYPE_XDP BPF_PROG_TYPE_SK_LOOKUP BPF_PROG_TYPE_CGROUP_SKB BPF_PROG_TYPE_LWT_IN BPF_PROG_TYPE_LWT_OUT BPF_PROG_TYPE_LWT_XMIT BPF_PROG_TYPE_LWT_SEG6LOCAL BPF_PROG_TYPE_FLOW_DISSECTOR BPF_PROG_TYPE_STRUCT_OPS BPF_PROG_TYPE_RAW_TRACEPOINT BPF_PROG_TYPE_...
在bpf_object__open 阶段,libbpf 将寻找 SEC(".struct_ops") 部分,并找出 struct_ops 所实现的 btf 类型。 需要注意的是,这里的 btf-type 指的是 bpf_prog.o 的 btf 中的一个类型。 "struct bpf_map" 像其他 map 类型一样, 通过 bpf_object__add_map() 进行添加。 然后 libbpf 会收集(通过 SHT_...
BPF_PROG_TYPE_LWT_OUT, BPF_PROG_TYPE_LWT_XMIT, BPF_PROG_TYPE_SOCK_OPS, BPF_PROG_TYPE_SK_SKB, BPF_PROG_TYPE_CGROUP_DEVICE, BPF_PROG_TYPE_SK_MSG, BPF_PROG_TYPE_RAW_TRACEPOINT, BPF_PROG_TYPE_CGROUP_SOCK_ADDR, BPF_PROG_TYPE_LWT_SEG6LOCAL, ...
PROG_TYPE_SCHED_ACT BPF_PROG_TYPE_XDP BPF_PROG_TYPE_SK_LOOKUP BPF_PROG_TYPE_CGROUP_SKB BPF_PROG_TYPE_LWT_IN BPF_PROG_TYPE_LWT_OUT BPF_PROG_TYPE_LWT_XMIT BPF_PROG_TYPE_LWT_SEG6LOCAL BPF_PROG_TYPE_FLOW_DISSECTOR BPF_PROG_TYPE_STRUCT_OPS BPF_PROG_TYPE_RAW_TRACEPOINT BPF_PROG_TYPE_...
bpf_perf_prog_read_value, bpf_getsockopt, bpf_override_return, bpf_sock_ops_cb_flags_set, bpf_msg_redirect_map, bpf_msg_apply_bytes、bpf_msg_cork_bytes、bpf_msg_pull_data、bpf_bind、bpf_xdp_adjust_tail、bpf_skb_get_xfrm_state、bpf_get_stack、bpf_skb_load_bytes_reativel bpf_...
BPF_PROG_TYPE_FLOW_DISSECTOR, /* See /usr/include/linux/bpf.h for the full list. */ }; BPF MAP BPF 的 map 可用于内核 BPF 程序和用户应用程序之间实现双向的数据交换, 是重要基础数据结构,它可以通过声明 struct bpf_map_def 结构完成创建。
BPF_PROG_LOAD: 验证并加载一个eBPF程序, 返回一个与此程序关联的新文件描述符. close-on-exec标志也会自动加上 公用体bfp_attr由多种用于不同bfp命令的匿名结构体组成: unionbpf_attr{struct{/* 被BPF_MAP_CREATE使用 */__u32 map_type;/* 映射的类型 */__u32 key_size;/* key有多少字节 size of...