最简单的XDP程序 - Hello World
--发布于 2024-10-30 22:35:44
环境搭建可参阅上一篇博文最简单的eBPF程序 - Hello World
- 创建源文件
xdp_hello.c
#include <linux/bpf.h>
#include <linux/if_ether.h>
#include <linux/if_packet.h>
#include <linux/ip.h>
#include <linux/udp.h>
#include <bpf/bpf_helpers.h>
SEC("xdp_hello")
int xdp_hello_func(struct xdp_md *ctx) {
// Just return XDP_PASS to let the packet pass
return XDP_PASS;
}
char _license[] SEC("license") = "GPL";
- 使用
clang
将源代码编译BPF字节码
clang -O2 -target bpf -I /usr/include/x86_64-linux-gnu -c xdp_hello.c -o xdp_hello.o
- 加载XDP程序。其中
dev
指令指定了将XDP程序加载到名称为ens33
的网络设备上,sec
指令指定了要加载section为xdp_hello
的程序段。
sudo ip link set dev ens33 xdp obj xdp_hello.o sec xdp_hello
- 验证XDP程序是否被正确加载
sudo bpftool prog show
如图,SEC("xdp_hello")
指定的函数名xdp_hello_func
被成功加载了。
- 卸载XDP程序
sudo ip link set dev ens33 xdp off
这样,用bpftool prog show
命令就看不到刚才的XDP程序了。
--更新于 2024-10-30 22:37:56