函数名称:bpf_prog_attach 函数原型:static int bpf_prog_attach(const union bpf_attr *attr) 返回类型:int 参数: 类型参数名称 const union bpf_attr * attr 2054 如果非操作权限检查则返回:负EPERM 2057 如果helper macro to check that unused fields 'union bpf_attr' are zero (BPF_PROG_ATTACH)则返回...
link_create → bpf_tracing_prog_attach → bpf_trampoline_link_prog → bpf_trampoline_update → arch_prepare_bpf_trampoline 在bpf_tracing_prog_attach函数中,内核会尝试查找或者创建当前目标函数对应的bpf_trampoline实例,这个是在bpf_trampoline_get函数中实现的。所有的bpf_trampoline实例都存在在一个全局哈希表...
BPF 程序的主要运行过程如下: BPF 用户态程序调用 BPF_PROG_LOAD 系统调用加载已经编译成 BPF 字节码的 BPF 内核态程序.根据 BPF 程序中的 BPF 映射表定义为 BPF 映射表分配内存 BPF 用户态程序调用 BPF_PROG_ATTACH 系统调用将 BPF 内核态程序和事件关联起来并向内核注册事件 事件被触发, 内核收集“事件上下文...
3.8 bpf_prog_new_fd返回给应用bpf-prog的fd信息 创建名字叫"bpf-prog"的fd给回应用 3.9 load总结 load主要是加载maps和即时编译bpf函数(和内核有交互),返回给应用的是bpf-prog的fd 4. bpf_object__attach_skeleton附着bpf程序 调用的是bpf_program__attach 这个运行的是attach_fn,前面介绍了通过sec_name = ...
各种BPF类型到相应的attach函数的关联关系记录在libbpf/src/libbpf.c:section_defs[]中. raw_tracepoint的定义为: SEC_DEF("raw_tracepoint+",RAW_TRACEPOINT,0,SEC_NONE,attach_raw_tp), 也就是调用attach_raw_tp来attach raw_tracepoint类型的BPF prog. ...
为了避免bpf prog和map对象在bpfloader执行之后被销毁, 最后会通过bpf_obj_pin把这些bpf对象映射到/sys/fs/bpf文件节点。映射的文件节点,其命名有特定的规则,以便其它的程序能够通过文件路径名称来找到对应的bpf程序。 四、Attach Bpf程序 Bpf程序被加载之后,并没有附着到内核函数上,此时bpf程序不会有任何执行,还需...
对于cgroupskb类型的bpf程序, 还需要通过BPF_PROG_ATTACH命令把固定到/sys/fs/bpf的代码附着到对应的cgroup上(这样我们就可以监控特定cgroup上的进程的网络状态了): mount bpf bpf /sys/fs/bpfmkdir/dev/cg2_bpf 0600 root rootchmod0600 /dev/cg2_bpf ...
(&attr);break;case BPF_OBJ_PIN:err = bpf_obj_pin(&attr);break;case BPF_OBJ_GET:err = bpf_obj_get(&attr);break;#ifdef CONFIG_CGROUP_BPFcase BPF_PROG_ATTACH:err = bpf_prog_attach(&attr);break;case BPF_PROG_DETACH:err = bpf_prog_detach(&attr);break;#endifdefault:err = -EINVAL...
一个完整的ebpf程序一般由两个部分组成,一个是ebpf部分(prog、map的定义等等),另外一个是用户态部分(解析ebpf部分的.o文件,根据解析的结果创建map、attach prog,与ebpf进行数据交换等等)。 下面我们就开始分析libbpf-bootstrap中maps的创建流程。 2.1 编译生成ebpf.o和skeleton ...
现在我们将eBPF program attach到veth1上: $ sudo ip link set dev veth1 xdp object xdp_ipv6_filter.o 1. 您可能已经注意到,我将eBPF程序的部分称为“prog”。这是iproute2希望查找的节的名称,使用其他名称命名该节将导致错误。