XDP 编程指南:从加载到测试与应用
1. 验证加载的 XDP 程序
在加载 XDP 程序后,需要验证其是否按预期工作。可以通过在外部机器上再次执行 nmap 命令来观察端口 8000 是否不再可达:
# nmap -sS 192.168.33.11
也可以尝试通过浏览器访问该程序或进行任何 HTTP 请求,以 192.168.33.11 为目标的任何测试都应该失败。
如果需要将机器恢复到原始状态,可以分离程序并关闭设备的 XDP:
# ip link set dev enp0s8 xdp off
使用 iproute2 作为加载器时,加载 XDP 程序相对容易。不过,这些程序实际上是 BPF 程序,除了 iproute2,还可以使用 BCC 或直接使用 bpf 系统调用加载程序。自定义加载器的优点是可以管理程序的生命周期及其与用户空间的交互。
2. 使用 BCC 加载 XDP 程序
XDP 程序可以使用 BCC 进行编译、加载和运行。以下是一个使用 BCC 自定义用户空间加载器的 XDP 程序示例,该程序在丢弃 TCP 数据包的同时统计遇到的数据包数量。
2.1 内核空间程序 program.c
#define KBUILD_MODNAME "program"
#include <linux/bpf.h>
#includ