1.编写一段 BPFPROGTYPESOCKOPS 类型的 BPF 程序,attach 到 cgroup:在 LISTEN, CONNECT, CONNESTD 等事件时会触发 BPF 程序的执行BPF 程序可以获取包的 TCP Header,然后往其中写入路由信息(这里是 serverid),或者从中读取路由信息2.在 L4LB 侧维护一个 server_id 缓存,记录仍然存活的
BPF在网络数据包的处理上,通常会与Linux内核的另外一个重要功能XDP一起来实现。XDP(Express Data Path)是一个安全的、可编程的、高性能的、内核集成的包处理器,它位于Linux网络数据路径中,当网卡驱动程序收到包时,就会执行BPF程序,XDP程序会在尽可能早的时间点对收到的包进行删除、修改或转发到网络堆栈等操作。XDP...
BPF_PROG_TYPE_TRACEPOINT: BPF_FUNC_perf_event_output() BPF_FUNC_get_stackid() BPF_FUNC_get_stack() Tracing functions 4. XDP程序 当网络包到达内核时,xdp程序会在早起被执行, 此时,内核还没有对数据包本身进行太多的处理,所以数据包的信息展示有限,但是具有更高级别的控制。 BPF_PROG_TYPE_XDP: BP...
used)) SEC("prog") int xdp_drop(struct xdp_md *ctx) { return XDP_DROP; } char _...
bpf_xdp_detach 函数检查设置的选项后,检查old_prog_fd参数设置,最后调用 __bpf_set_link_xdp_fd_replace 函数,实现如下: // file: libbpf/src/netlink.c int bpf_xdp_attach(int ifindex, int prog_fd, __u32 flags, const struct bpf_xdp_attach_opts *opts) { // 检查opts属性设置 if (!OPTS_...
标题可直译为《从 XDP 到 Socket 的(全路径)流量路由:XDP 不够,BPF 来凑》,因为 XDP 运行在网卡上,而且在边界和流量入口,再往后的路径(尤其是到了内核协议栈)它就管不到了,所以引入了其他一些 BPF 技术来“接力”这个路由过程。另外,这里的“路由”并非狭义的路由器三层路由,而是泛指 L3-L7 流量转发。翻译...
ret = bpf_prog_test_run(prog_fd, 0, &data_in, 1, &data_out, &size_out, &retval, &duration); if (!ret && retval == XDP_PASS) ret = bpf_prog_test_run_opts(prog_fd, &opts); if (!ret && opts.retval == XDP_PASS) detected = true; close(prog_fd); close(map_fd); 0 ...
当前kernel中的non-generic map有:BPF_MAP_TYPE_PROG_ARRAY, BPF_MAP_TYPE_PERF_EVENT_ARRAY, BPF_MAP_TYPE_CGROUP_ARRAY, BPF_MAP_TYPE_STACK_TRACE, BPF_MAP_TYPE_ARRAY_OF_MAPS, BPF_MAP_TYPE_HASH_OF_MAPS。例如,BPF_MAP_TYPE_PROG_ARRAY是保存其他BPF程序的map数组,BPF_MAP_TYPE_ARRAY_OF_MAPS和BP...
FILTER, BPF_PROG_TYPE_KPROBE, BPF_PROG_TYPE_SCHED_CLS, BPF_PROG_TYPE_SCHED_ACT, BPF_PROG_TYPE_TRACEPOINT, BPF_PROG_TYPE_XDP, BPF_PROG_TYPE_PERF_EVENT, BPF_PROG_TYPE_CGROUP_SKB, BPF_PROG_TYPE_CGROUP_SOCK, BPF_PROG_TYPE_LWT_IN, BPF_PROG_TYPE_LWT_OUT, BPF_PROG_...
BPF\_PROG\_TEST_RUN只支持有限的eBPF程序类型: BPF_PROG_TYPE_SOCKET_FILTER BPF_PROG_TYPE_SCHED_CLS BPF_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_SEG6LOC...