它具有可以传递给 libbpf API 函数的struct bpf_object *obj;。 它还具有maps、progs和links“部分”,可直接访问 BPF 映射和 BPF 代码中定义的程序(例如,handle_tpBPF 程序)。 这些引用可以直接传递给 libbpf API,以使用 BPF map/program/link 做一些额外的事情。 Skeleton 还可以选择包含bss、data和rodata部分...
staticinlineintattach(structminimal_bpf *skel); staticinlinevoiddetach(structminimal_bpf *skel); staticinlinevoiddestroy(structminimal_bpf *skel); staticinlineconstvoid*elf_bytes(size_t*sz); #endif/* __cplusplus */ }; staticvoid minimal_bpf__destroy(structminimal_bpf *obj) { if(!obj) return...
&bpf_prog_fops, prog, O_RDWR | O_CLOEXEC); } ↓ int anon_inode_getfd(const char *name, const struct file_operations *fops, void *priv, int flags) { int error, fd; struct file *file; error = get_unused_fd_flags(flags); if (error < 0) return error; fd = error; file = ...
setsockopt(2)调用SO_DETACH_FILTER不需要任何参数,调用SO_LOCK_FILTER来预防filter被解绑附带一个整数参数0或1. 注意socket filter没有限制仅仅用在PF_PACKET socket上,也可以用于其他socket家族。 相关系统调用概要: *setsockopt(sockfd, SOL_SOCKET, SO_ATTACH_FILTER,&val,sizeof(val));*setsockopt(sockfd, SOL_...
ip linksetdev[device name]xdp obj xdp-drop-world.o sec[section name] 简单解释下: sec [section name]就是上文提到的通过Section来指定程序入口 device name是本机某个网卡设备的名称,可以通过ip a查看本机所有的网卡设备。一般可以选取本机对外的IP所在的网卡设备。
(&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...
int bpf_link_detach(int link_fd) { const size_t attr_sz = offsetofend(union bpf_attr, link_detach); union bpf_attr attr; int ret; memset(&attr, 0, sizeof(attr)); memset(&attr, 0, attr_sz); attr.link_detach.link_fd = link_fd; ret = sys_bpf(BPF_LINK_DETACH, &attr, size...
#ifdef CONFIG_CGROUP_BPFcase BPF_PROG_ATTACH:err = bpf_prog_attach(&attr);break;case BPF_PROG_DETACH:err = bpf_prog_detach(&attr);break;#endif default:err = -EINVAL;break;} return err;} 1.1、bpf加载 BPF_PROG_LOAD命令负责加载一段BPF程序到内核当中: ...
*/#ifndef__MINIMAL_BPF_SKEL_H__#define__MINIMAL_BPF_SKEL_H__#include<stdlib.h>#include<bpf/libbpf.h>structminimal_bpf{structbpf_object_skeleton*skeleton;structbpf_object*obj;struct{structbpf_map*bss;} maps;struct{structbpf_program*handle_tp;} progs;struct{structbpf_link*handle_tp;} links...
int tcx_link_attach(const union bpf_attr *attr, struct bpf_prog *prog); int tcx_prog_detach(const union bpf_attr *attr, struct bpf_prog *prog); void tcx_uninstall(struct net_device *dev, bool ingress); int tcx_prog_query(const union bpf_attr *attr, union bpf_attr __user *uattr...