最近在做 82599
网卡的 RSS
测试,需要一款能够发送随机数据包的工具(这里说的随机是指协议字段的取值随机),经过一番研究,发现 dpdk-pktgen
符合要求,下面就其使用方法做个简单的记录。
在 dpdk-pktgen
中有一个叫做 range
的页面,用来展示当前所发数据包的各个协议字段的取值范围。
在 dpdk-pktgen
中可通过 "page range"
命令来显示该页面的内容,即:
Pktgen:/> page range
range
页面的内容如下图所示:
从上面可以看到,协议字段的取值范围由 4
部分组成,简称 “SMMI”
,它们分别是:初始值 (Start
),最小值(Min
),最大值(Max
),增加步长(Inc
)。在对某个协议字段进行取值范围设定时,需要同时指定这 4
个值。若指定增加步长 Inc
为0
,则表示不随机。
从上面还可以看到,部分协议字段的取值范围已经预设好了,比如:dst.ip
, dst.port
, src.port
等等。
从帮助手册里可以找到协议字段取值范围的设置方法,如下所示:
** Pktgen Help Information **
-- Setup the packet range values --
note: SMMI = start|min|max|inc (start, minimum, maximum, increment)
range <portlist> src|dst mac <SMMI> <etheraddr> - Set destination/source MAC address
e.g: range 0 src mac start 00:00:00:00:00:00
range 0 dst mac max 00:12:34:56:78:90
or range 0 src mac 00:00:00:00:00:00 00:00:00:00:00:00 00:12:34:56:78:90 00:00:00:01:01:01
range <portlist> src|dst ip <SMMI> <ipaddr> - Set source IP start address
e.g: range 0 dst ip start 0.0.0.0
range 0 dst ip min 0.0.0.0
range 0 dst ip max 1.2.3.4
range 0 dst ip inc 0.0.1.0
or range 0 dst ip 0.0.0.0 0.0.0.0 1.2.3.4 0.0.1.0
range <portlist> type ipv4|ipv6 - Set the range packet type to IPv4 or IPv6
range <portlist> proto tcp|udp - Set the IP protocol type
range <portlist> src|dst port <SMMI> <value> - Set UDP/TCP source/dest port number
or range <portlist> src|dst port <start> <min> <max> <inc>
range <portlist> vlan <SMMI> <value> - Set vlan id start address
or range <portlist> vlan <start> <min> <max> <inc>
range <portlist> size <SMMI> <value> - Set pkt size start address
or range <portlist> size <start> <min> <max> <inc>
range <portlist> teid <SMMI> <value> - Set TEID value
or range <portlist> teid <start> <min> <max> <inc>
range <portlist> mpls entry <hex-value> - Set MPLS entry value
range <portlist> qinq index <val1> <val2> - Set QinQ index values
range <portlist> gre key <value> - Set GRE key value
range <portlist> cos <SMMI> <value> - Set cos value
range <portlist> tos <SMMI> <value> - Set tos value
range <portlist> ttl <SMMI> <value> - Set TTL
range <portlist> hop_limits <SMMI> <value> - Set Hop Limits
range <portlist> traffic_class <SMMI> <value> - Set Traffic Class value
Return to Continue or ESC::
假设我们要发送带有 vlan
标识的数据包,并且指定 vlan
帧头中的 PRI
字段(即 802.1p
优先级,或称 CoS
字段,标识了服务质量需求)随机,则可以使用如下命令实现:
Pktgen:/> enable 0 range // 设置网口 0 发送随机数据包,必须
Pktgen:/> enable 0 vlan // 设置网口 0 发送 vlan 数据包,必须
Pktgen:/> range 0 cos 0 0 7 1 // 设置 vlan 中 PRI 字段的取值范围,即 SMMI 取值
Pktgen:/> start 0 // 启动网口 0 进行发包