菜单

kaoqi
kaoqi
发布于 2026-10-10 / 4 阅读
0
0

testpmd的发包

testpmd的发包存在txonly与flowgen两种模式,其中txonly只能占用端口后只发不收的,所以相应的也就不太好统计;flowgen可以创立字段步进跳变的报文流量,也可以执行对应的端口统计。

值得注意的是,testpmd所操作的对像包含3个前提:

  • vfio-pci用于进行网卡的IO独立,加载这个模块ko后可以实现本地kernel的网卡驱动卸载+用户态网卡驱动映射(dpdk-devbind.py脚本实现)

  • 大页内存创立与挂载,完成mounts文件中路径的描述以及大页内存的申明后,EAL初始化的过程中会在指定路径下调用mmap系统函数创立mmap文件句柄,并提供给testpmd使用

  • 使用dpdk-devbind.py命令进行port端口的绑定、端口的状态查询

在完成端口绑定后,执行testpmd命令:

dpdk-testpmd -l 0-3 -n 4 -- -i --portmask=0x3

然后,可以在testpmd中进行转发设置

# 开启混杂模式,确保 Port 1 能收到所有包(不管 MAC 地址是否匹配)
set promisc all on

# 设置 Port 0 为仅发送模式 (自源性发包)
set fwd txonly port 0

# 设置 Port 1 为仅接收模式 (用于统计接收流量)
set fwd rxonly port 1

# 设置发送包的大小 (例如 64 字节,最小以太网帧)
set txpkts 64

# 设置每次突发发送的包数量 (根据性能需求调整,例如 32 或 64)
set burst 32

# 启动所有端口
port start all

# 开始转发/发送
start

# 查看所有端口的统计信息
show port stats all

或者使用flowgen

# 启用flowgen端口
set fwd flowgen port 0

# 设置流的数量
set nbcore <N>

# 同样设置流的信息
set txpkts 64      # 设置包长为 64 字节
set burst 32       # 设置突发大小为 32

# 设置目的MAC地址
set eth-peer <port_id> <mac_address>

# 启动端口和转发
port start all
start

# 查看所有端口的统计信息
show port stats all


评论