伟明部落格

最简单的XDP程序 - Hello World

--发布于 2024-10-30 22:35:44

环境搭建可参阅上一篇博文最简单的eBPF程序 - Hello World

  1. 创建源文件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";
  1. 使用clang将源代码编译BPF字节码
clang -O2 -target bpf -I /usr/include/x86_64-linux-gnu -c xdp_hello.c -o xdp_hello.o
  1. 加载XDP程序。其中dev指令指定了将XDP程序加载到名称为ens33的网络设备上,sec指令指定了要加载section为xdp_hello的程序段。
sudo ip link set dev ens33 xdp obj xdp_hello.o sec xdp_hello
  1. 验证XDP程序是否被正确加载
sudo bpftool prog show

如图,SEC("xdp_hello")指定的函数名xdp_hello_func被成功加载了。

  1. 卸载XDP程序
sudo ip link set dev ens33 xdp off

这样,用bpftool prog show命令就看不到刚才的XDP程序了。

--更新于 2024-10-30 22:37:56