eBPF Talk: 揭秘 XDP 转发网络包【续】

书接 eBPF Talk: 揭秘 XDP 转发网络包 未竟的内容,看看最后 generic_xdp_tx() 函数中的发包详情。 1 2 3 4 5 6 // ${KERNEL}/net/core/dev.c generic_xdp_tx() |-->netdev_start_xmit() |-->__netdev_start_xmit() |-->ops->ndo_start_xmit(skb, dev); 由以上函数调用栈可知,XDP_REDIRECT 和 XDP_TX

eBPF Talk: bpf verifier 报告 ENOSPC

今天遇到个不常见的问题:在往内核装载 bpf 程序时,bpf verifier 报告错误: 1 failed to load bpf with bitmap size 8: failed to load bpf obj and bpf maps: field Acl: program acl: load program: no space left on device: 578: R0=map_value(id=0,off=0,ks=8,vs=64,imm=0) R1_w=map_ptr(id=0,off=0,ks=4,vs=4,imm=0) R2_w=fp-4 R3_w=invP1 R4=invP(id=69 (3524 line(s) omitted) 觉

eBPF Talk: 一个 ARRAY bpf map 的使用细节

创建 bpf map 时,出现了如下错误: 1 failed to load bpf: failed to create map: invalid argument 看下需要创建的 bpf map: 1 2 3 4 5 6 struct { __uint(type, BPF_MAP_TYPE_ARRAY); __type(key, __u8); __type(value, bitmap); __uint(max_entries, PROTO_MAX_ENTRIES); } acl_protocol SEC(".maps"); 想着,需要处理的 protocol 也就 TCP

eBPF Talk: 优化 XDP ACL

书接上回 ,本文讲解对高性能 XDP ACL 的开源项目 xdp_acl 的优化内容: 按需开启 eBPF 中的 debug 日志 动态调整 bitmap 大小 使用 PERCPU ARRAY 优化规则 bpf map 动态增删 ACL 规则的处理 以下代码片段

eBPF Talk: SKB 工作原理【译】

翻译自 How SKBs work。 数据区域的布局 第一张图描述的是 SKB 数据区域的布局,以及几个 struct sk_buff 中的指针。 本文余下内容将讲解 SKB 数据区域的操作:通过修改这些指

eBPF Talk: bpf helpers 的另一面

本文不讲解 bpf helpers 的使用,也不讲解 bpf helpers 的源代码。本文讲解的是,verifier 是怎么处理 bpf helpers 的。 书接上回 eBPF Talk: 揭秘 XDP 转发网络包,本文解答: 为什么 XDP

eBPF Talk: 揭秘 XDP 转发网络包

书接上回 eBPF Talk: 解密 XDP generic 模式,本文从源代码层面剖析 XDP 转发网络包的实现。 demo 按需将网络包从另一张网卡转发走。 1 2 3 4 5 6 7 8 9 static volatile const u32 REDIRECT_IFINDEX = 0xFFFFFFFF; SEC("xdp") int xdp_redirect(struct xdp_md

eBPF Talk: 解密 XDP generic 模式

近期又得搞 XDP 了,就顺手研究了下 XDP generic 模式的源代码。 XDP generic 模式的函数位置 已知,内核协议栈会对每个 skb 都执行一次 XDP generic 模式处理,当然是启用了 XDP generic 模式的情