xref: /OK3568_Linux_fs/kernel/Documentation/networking/pktgen.rst (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun.. SPDX-License-Identifier: GPL-2.0
2*4882a593Smuzhiyun
3*4882a593Smuzhiyun====================================
4*4882a593SmuzhiyunHOWTO for the linux packet generator
5*4882a593Smuzhiyun====================================
6*4882a593Smuzhiyun
7*4882a593SmuzhiyunEnable CONFIG_NET_PKTGEN to compile and build pktgen either in-kernel
8*4882a593Smuzhiyunor as a module.  A module is preferred; modprobe pktgen if needed.  Once
9*4882a593Smuzhiyunrunning, pktgen creates a thread for each CPU with affinity to that CPU.
10*4882a593SmuzhiyunMonitoring and controlling is done via /proc.  It is easiest to select a
11*4882a593Smuzhiyunsuitable sample script and configure that.
12*4882a593Smuzhiyun
13*4882a593SmuzhiyunOn a dual CPU::
14*4882a593Smuzhiyun
15*4882a593Smuzhiyun    ps aux | grep pkt
16*4882a593Smuzhiyun    root       129  0.3  0.0     0    0 ?        SW    2003 523:20 [kpktgend_0]
17*4882a593Smuzhiyun    root       130  0.3  0.0     0    0 ?        SW    2003 509:50 [kpktgend_1]
18*4882a593Smuzhiyun
19*4882a593Smuzhiyun
20*4882a593SmuzhiyunFor monitoring and control pktgen creates::
21*4882a593Smuzhiyun
22*4882a593Smuzhiyun	/proc/net/pktgen/pgctrl
23*4882a593Smuzhiyun	/proc/net/pktgen/kpktgend_X
24*4882a593Smuzhiyun	/proc/net/pktgen/ethX
25*4882a593Smuzhiyun
26*4882a593Smuzhiyun
27*4882a593SmuzhiyunTuning NIC for max performance
28*4882a593Smuzhiyun==============================
29*4882a593Smuzhiyun
30*4882a593SmuzhiyunThe default NIC settings are (likely) not tuned for pktgen's artificial
31*4882a593Smuzhiyunoverload type of benchmarking, as this could hurt the normal use-case.
32*4882a593Smuzhiyun
33*4882a593SmuzhiyunSpecifically increasing the TX ring buffer in the NIC::
34*4882a593Smuzhiyun
35*4882a593Smuzhiyun # ethtool -G ethX tx 1024
36*4882a593Smuzhiyun
37*4882a593SmuzhiyunA larger TX ring can improve pktgen's performance, while it can hurt
38*4882a593Smuzhiyunin the general case, 1) because the TX ring buffer might get larger
39*4882a593Smuzhiyunthan the CPU's L1/L2 cache, 2) because it allows more queueing in the
40*4882a593SmuzhiyunNIC HW layer (which is bad for bufferbloat).
41*4882a593Smuzhiyun
42*4882a593SmuzhiyunOne should hesitate to conclude that packets/descriptors in the HW
43*4882a593SmuzhiyunTX ring cause delay.  Drivers usually delay cleaning up the
44*4882a593Smuzhiyunring-buffers for various performance reasons, and packets stalling
45*4882a593Smuzhiyunthe TX ring might just be waiting for cleanup.
46*4882a593Smuzhiyun
47*4882a593SmuzhiyunThis cleanup issue is specifically the case for the driver ixgbe
48*4882a593Smuzhiyun(Intel 82599 chip).  This driver (ixgbe) combines TX+RX ring cleanups,
49*4882a593Smuzhiyunand the cleanup interval is affected by the ethtool --coalesce setting
50*4882a593Smuzhiyunof parameter "rx-usecs".
51*4882a593Smuzhiyun
52*4882a593SmuzhiyunFor ixgbe use e.g. "30" resulting in approx 33K interrupts/sec (1/30*10^6)::
53*4882a593Smuzhiyun
54*4882a593Smuzhiyun # ethtool -C ethX rx-usecs 30
55*4882a593Smuzhiyun
56*4882a593Smuzhiyun
57*4882a593SmuzhiyunKernel threads
58*4882a593Smuzhiyun==============
59*4882a593SmuzhiyunPktgen creates a thread for each CPU with affinity to that CPU.
60*4882a593SmuzhiyunWhich is controlled through procfile /proc/net/pktgen/kpktgend_X.
61*4882a593Smuzhiyun
62*4882a593SmuzhiyunExample: /proc/net/pktgen/kpktgend_0::
63*4882a593Smuzhiyun
64*4882a593Smuzhiyun Running:
65*4882a593Smuzhiyun Stopped: eth4@0
66*4882a593Smuzhiyun Result: OK: add_device=eth4@0
67*4882a593Smuzhiyun
68*4882a593SmuzhiyunMost important are the devices assigned to the thread.
69*4882a593Smuzhiyun
70*4882a593SmuzhiyunThe two basic thread commands are:
71*4882a593Smuzhiyun
72*4882a593Smuzhiyun * add_device DEVICE@NAME -- adds a single device
73*4882a593Smuzhiyun * rem_device_all         -- remove all associated devices
74*4882a593Smuzhiyun
75*4882a593SmuzhiyunWhen adding a device to a thread, a corresponding procfile is created
76*4882a593Smuzhiyunwhich is used for configuring this device. Thus, device names need to
77*4882a593Smuzhiyunbe unique.
78*4882a593Smuzhiyun
79*4882a593SmuzhiyunTo support adding the same device to multiple threads, which is useful
80*4882a593Smuzhiyunwith multi queue NICs, the device naming scheme is extended with "@":
81*4882a593Smuzhiyundevice@something
82*4882a593Smuzhiyun
83*4882a593SmuzhiyunThe part after "@" can be anything, but it is custom to use the thread
84*4882a593Smuzhiyunnumber.
85*4882a593Smuzhiyun
86*4882a593SmuzhiyunViewing devices
87*4882a593Smuzhiyun===============
88*4882a593Smuzhiyun
89*4882a593SmuzhiyunThe Params section holds configured information.  The Current section
90*4882a593Smuzhiyunholds running statistics.  The Result is printed after a run or after
91*4882a593Smuzhiyuninterruption.  Example::
92*4882a593Smuzhiyun
93*4882a593Smuzhiyun    /proc/net/pktgen/eth4@0
94*4882a593Smuzhiyun
95*4882a593Smuzhiyun    Params: count 100000  min_pkt_size: 60  max_pkt_size: 60
96*4882a593Smuzhiyun	frags: 0  delay: 0  clone_skb: 64  ifname: eth4@0
97*4882a593Smuzhiyun	flows: 0 flowlen: 0
98*4882a593Smuzhiyun	queue_map_min: 0  queue_map_max: 0
99*4882a593Smuzhiyun	dst_min: 192.168.81.2  dst_max:
100*4882a593Smuzhiyun	src_min:   src_max:
101*4882a593Smuzhiyun	src_mac: 90:e2:ba:0a:56:b4 dst_mac: 00:1b:21:3c:9d:f8
102*4882a593Smuzhiyun	udp_src_min: 9  udp_src_max: 109  udp_dst_min: 9  udp_dst_max: 9
103*4882a593Smuzhiyun	src_mac_count: 0  dst_mac_count: 0
104*4882a593Smuzhiyun	Flags: UDPSRC_RND  NO_TIMESTAMP  QUEUE_MAP_CPU
105*4882a593Smuzhiyun    Current:
106*4882a593Smuzhiyun	pkts-sofar: 100000  errors: 0
107*4882a593Smuzhiyun	started: 623913381008us  stopped: 623913396439us idle: 25us
108*4882a593Smuzhiyun	seq_num: 100001  cur_dst_mac_offset: 0  cur_src_mac_offset: 0
109*4882a593Smuzhiyun	cur_saddr: 192.168.8.3  cur_daddr: 192.168.81.2
110*4882a593Smuzhiyun	cur_udp_dst: 9  cur_udp_src: 42
111*4882a593Smuzhiyun	cur_queue_map: 0
112*4882a593Smuzhiyun	flows: 0
113*4882a593Smuzhiyun    Result: OK: 15430(c15405+d25) usec, 100000 (60byte,0frags)
114*4882a593Smuzhiyun    6480562pps 3110Mb/sec (3110669760bps) errors: 0
115*4882a593Smuzhiyun
116*4882a593Smuzhiyun
117*4882a593SmuzhiyunConfiguring devices
118*4882a593Smuzhiyun===================
119*4882a593SmuzhiyunThis is done via the /proc interface, and most easily done via pgset
120*4882a593Smuzhiyunas defined in the sample scripts.
121*4882a593SmuzhiyunYou need to specify PGDEV environment variable to use functions from sample
122*4882a593Smuzhiyunscripts, i.e.::
123*4882a593Smuzhiyun
124*4882a593Smuzhiyun    export PGDEV=/proc/net/pktgen/eth4@0
125*4882a593Smuzhiyun    source samples/pktgen/functions.sh
126*4882a593Smuzhiyun
127*4882a593SmuzhiyunExamples::
128*4882a593Smuzhiyun
129*4882a593Smuzhiyun pg_ctrl start           starts injection.
130*4882a593Smuzhiyun pg_ctrl stop            aborts injection. Also, ^C aborts generator.
131*4882a593Smuzhiyun
132*4882a593Smuzhiyun pgset "clone_skb 1"     sets the number of copies of the same packet
133*4882a593Smuzhiyun pgset "clone_skb 0"     use single SKB for all transmits
134*4882a593Smuzhiyun pgset "burst 8"         uses xmit_more API to queue 8 copies of the same
135*4882a593Smuzhiyun			 packet and update HW tx queue tail pointer once.
136*4882a593Smuzhiyun			 "burst 1" is the default
137*4882a593Smuzhiyun pgset "pkt_size 9014"   sets packet size to 9014
138*4882a593Smuzhiyun pgset "frags 5"         packet will consist of 5 fragments
139*4882a593Smuzhiyun pgset "count 200000"    sets number of packets to send, set to zero
140*4882a593Smuzhiyun			 for continuous sends until explicitly stopped.
141*4882a593Smuzhiyun
142*4882a593Smuzhiyun pgset "delay 5000"      adds delay to hard_start_xmit(). nanoseconds
143*4882a593Smuzhiyun
144*4882a593Smuzhiyun pgset "dst 10.0.0.1"    sets IP destination address
145*4882a593Smuzhiyun			 (BEWARE! This generator is very aggressive!)
146*4882a593Smuzhiyun
147*4882a593Smuzhiyun pgset "dst_min 10.0.0.1"            Same as dst
148*4882a593Smuzhiyun pgset "dst_max 10.0.0.254"          Set the maximum destination IP.
149*4882a593Smuzhiyun pgset "src_min 10.0.0.1"            Set the minimum (or only) source IP.
150*4882a593Smuzhiyun pgset "src_max 10.0.0.254"          Set the maximum source IP.
151*4882a593Smuzhiyun pgset "dst6 fec0::1"     IPV6 destination address
152*4882a593Smuzhiyun pgset "src6 fec0::2"     IPV6 source address
153*4882a593Smuzhiyun pgset "dstmac 00:00:00:00:00:00"    sets MAC destination address
154*4882a593Smuzhiyun pgset "srcmac 00:00:00:00:00:00"    sets MAC source address
155*4882a593Smuzhiyun
156*4882a593Smuzhiyun pgset "queue_map_min 0" Sets the min value of tx queue interval
157*4882a593Smuzhiyun pgset "queue_map_max 7" Sets the max value of tx queue interval, for multiqueue devices
158*4882a593Smuzhiyun			 To select queue 1 of a given device,
159*4882a593Smuzhiyun			 use queue_map_min=1 and queue_map_max=1
160*4882a593Smuzhiyun
161*4882a593Smuzhiyun pgset "src_mac_count 1" Sets the number of MACs we'll range through.
162*4882a593Smuzhiyun			 The 'minimum' MAC is what you set with srcmac.
163*4882a593Smuzhiyun
164*4882a593Smuzhiyun pgset "dst_mac_count 1" Sets the number of MACs we'll range through.
165*4882a593Smuzhiyun			 The 'minimum' MAC is what you set with dstmac.
166*4882a593Smuzhiyun
167*4882a593Smuzhiyun pgset "flag [name]"     Set a flag to determine behaviour.  Current flags
168*4882a593Smuzhiyun			 are: IPSRC_RND # IP source is random (between min/max)
169*4882a593Smuzhiyun			      IPDST_RND # IP destination is random
170*4882a593Smuzhiyun			      UDPSRC_RND, UDPDST_RND,
171*4882a593Smuzhiyun			      MACSRC_RND, MACDST_RND
172*4882a593Smuzhiyun			      TXSIZE_RND, IPV6,
173*4882a593Smuzhiyun			      MPLS_RND, VID_RND, SVID_RND
174*4882a593Smuzhiyun			      FLOW_SEQ,
175*4882a593Smuzhiyun			      QUEUE_MAP_RND # queue map random
176*4882a593Smuzhiyun			      QUEUE_MAP_CPU # queue map mirrors smp_processor_id()
177*4882a593Smuzhiyun			      UDPCSUM,
178*4882a593Smuzhiyun			      IPSEC # IPsec encapsulation (needs CONFIG_XFRM)
179*4882a593Smuzhiyun			      NODE_ALLOC # node specific memory allocation
180*4882a593Smuzhiyun			      NO_TIMESTAMP # disable timestamping
181*4882a593Smuzhiyun pgset 'flag ![name]'    Clear a flag to determine behaviour.
182*4882a593Smuzhiyun			 Note that you might need to use single quote in
183*4882a593Smuzhiyun			 interactive mode, so that your shell wouldn't expand
184*4882a593Smuzhiyun			 the specified flag as a history command.
185*4882a593Smuzhiyun
186*4882a593Smuzhiyun pgset "spi [SPI_VALUE]" Set specific SA used to transform packet.
187*4882a593Smuzhiyun
188*4882a593Smuzhiyun pgset "udp_src_min 9"   set UDP source port min, If < udp_src_max, then
189*4882a593Smuzhiyun			 cycle through the port range.
190*4882a593Smuzhiyun
191*4882a593Smuzhiyun pgset "udp_src_max 9"   set UDP source port max.
192*4882a593Smuzhiyun pgset "udp_dst_min 9"   set UDP destination port min, If < udp_dst_max, then
193*4882a593Smuzhiyun			 cycle through the port range.
194*4882a593Smuzhiyun pgset "udp_dst_max 9"   set UDP destination port max.
195*4882a593Smuzhiyun
196*4882a593Smuzhiyun pgset "mpls 0001000a,0002000a,0000000a" set MPLS labels (in this example
197*4882a593Smuzhiyun					 outer label=16,middle label=32,
198*4882a593Smuzhiyun					 inner label=0 (IPv4 NULL)) Note that
199*4882a593Smuzhiyun					 there must be no spaces between the
200*4882a593Smuzhiyun					 arguments. Leading zeros are required.
201*4882a593Smuzhiyun					 Do not set the bottom of stack bit,
202*4882a593Smuzhiyun					 that's done automatically. If you do
203*4882a593Smuzhiyun					 set the bottom of stack bit, that
204*4882a593Smuzhiyun					 indicates that you want to randomly
205*4882a593Smuzhiyun					 generate that address and the flag
206*4882a593Smuzhiyun					 MPLS_RND will be turned on. You
207*4882a593Smuzhiyun					 can have any mix of random and fixed
208*4882a593Smuzhiyun					 labels in the label stack.
209*4882a593Smuzhiyun
210*4882a593Smuzhiyun pgset "mpls 0"		  turn off mpls (or any invalid argument works too!)
211*4882a593Smuzhiyun
212*4882a593Smuzhiyun pgset "vlan_id 77"       set VLAN ID 0-4095
213*4882a593Smuzhiyun pgset "vlan_p 3"         set priority bit 0-7 (default 0)
214*4882a593Smuzhiyun pgset "vlan_cfi 0"       set canonical format identifier 0-1 (default 0)
215*4882a593Smuzhiyun
216*4882a593Smuzhiyun pgset "svlan_id 22"      set SVLAN ID 0-4095
217*4882a593Smuzhiyun pgset "svlan_p 3"        set priority bit 0-7 (default 0)
218*4882a593Smuzhiyun pgset "svlan_cfi 0"      set canonical format identifier 0-1 (default 0)
219*4882a593Smuzhiyun
220*4882a593Smuzhiyun pgset "vlan_id 9999"     > 4095 remove vlan and svlan tags
221*4882a593Smuzhiyun pgset "svlan 9999"       > 4095 remove svlan tag
222*4882a593Smuzhiyun
223*4882a593Smuzhiyun
224*4882a593Smuzhiyun pgset "tos XX"           set former IPv4 TOS field (e.g. "tos 28" for AF11 no ECN, default 00)
225*4882a593Smuzhiyun pgset "traffic_class XX" set former IPv6 TRAFFIC CLASS (e.g. "traffic_class B8" for EF no ECN, default 00)
226*4882a593Smuzhiyun
227*4882a593Smuzhiyun pgset "rate 300M"        set rate to 300 Mb/s
228*4882a593Smuzhiyun pgset "ratep 1000000"    set rate to 1Mpps
229*4882a593Smuzhiyun
230*4882a593Smuzhiyun pgset "xmit_mode netif_receive"  RX inject into stack netif_receive_skb()
231*4882a593Smuzhiyun				  Works with "burst" but not with "clone_skb".
232*4882a593Smuzhiyun				  Default xmit_mode is "start_xmit".
233*4882a593Smuzhiyun
234*4882a593SmuzhiyunSample scripts
235*4882a593Smuzhiyun==============
236*4882a593Smuzhiyun
237*4882a593SmuzhiyunA collection of tutorial scripts and helpers for pktgen is in the
238*4882a593Smuzhiyunsamples/pktgen directory. The helper parameters.sh file support easy
239*4882a593Smuzhiyunand consistent parameter parsing across the sample scripts.
240*4882a593Smuzhiyun
241*4882a593SmuzhiyunUsage example and help::
242*4882a593Smuzhiyun
243*4882a593Smuzhiyun ./pktgen_sample01_simple.sh -i eth4 -m 00:1B:21:3C:9D:F8 -d 192.168.8.2
244*4882a593Smuzhiyun
245*4882a593SmuzhiyunUsage:::
246*4882a593Smuzhiyun
247*4882a593Smuzhiyun  ./pktgen_sample01_simple.sh [-vx] -i ethX
248*4882a593Smuzhiyun
249*4882a593Smuzhiyun  -i : ($DEV)       output interface/device (required)
250*4882a593Smuzhiyun  -s : ($PKT_SIZE)  packet size
251*4882a593Smuzhiyun  -d : ($DEST_IP)   destination IP
252*4882a593Smuzhiyun  -m : ($DST_MAC)   destination MAC-addr
253*4882a593Smuzhiyun  -t : ($THREADS)   threads to start
254*4882a593Smuzhiyun  -c : ($SKB_CLONE) SKB clones send before alloc new SKB
255*4882a593Smuzhiyun  -b : ($BURST)     HW level bursting of SKBs
256*4882a593Smuzhiyun  -v : ($VERBOSE)   verbose
257*4882a593Smuzhiyun  -x : ($DEBUG)     debug
258*4882a593Smuzhiyun
259*4882a593SmuzhiyunThe global variables being set are also listed.  E.g. the required
260*4882a593Smuzhiyuninterface/device parameter "-i" sets variable $DEV.  Copy the
261*4882a593Smuzhiyunpktgen_sampleXX scripts and modify them to fit your own needs.
262*4882a593Smuzhiyun
263*4882a593SmuzhiyunThe old scripts::
264*4882a593Smuzhiyun
265*4882a593Smuzhiyun    pktgen.conf-1-2                  # 1 CPU 2 dev
266*4882a593Smuzhiyun    pktgen.conf-1-1-rdos             # 1 CPU 1 dev w. route DoS
267*4882a593Smuzhiyun    pktgen.conf-1-1-ip6              # 1 CPU 1 dev ipv6
268*4882a593Smuzhiyun    pktgen.conf-1-1-ip6-rdos         # 1 CPU 1 dev ipv6  w. route DoS
269*4882a593Smuzhiyun    pktgen.conf-1-1-flows            # 1 CPU 1 dev multiple flows.
270*4882a593Smuzhiyun
271*4882a593Smuzhiyun
272*4882a593SmuzhiyunInterrupt affinity
273*4882a593Smuzhiyun===================
274*4882a593SmuzhiyunNote that when adding devices to a specific CPU it is a good idea to
275*4882a593Smuzhiyunalso assign /proc/irq/XX/smp_affinity so that the TX interrupts are bound
276*4882a593Smuzhiyunto the same CPU.  This reduces cache bouncing when freeing skbs.
277*4882a593Smuzhiyun
278*4882a593SmuzhiyunPlus using the device flag QUEUE_MAP_CPU, which maps the SKBs TX queue
279*4882a593Smuzhiyunto the running threads CPU (directly from smp_processor_id()).
280*4882a593Smuzhiyun
281*4882a593SmuzhiyunEnable IPsec
282*4882a593Smuzhiyun============
283*4882a593SmuzhiyunDefault IPsec transformation with ESP encapsulation plus transport mode
284*4882a593Smuzhiyuncan be enabled by simply setting::
285*4882a593Smuzhiyun
286*4882a593Smuzhiyun    pgset "flag IPSEC"
287*4882a593Smuzhiyun    pgset "flows 1"
288*4882a593Smuzhiyun
289*4882a593SmuzhiyunTo avoid breaking existing testbed scripts for using AH type and tunnel mode,
290*4882a593Smuzhiyunyou can use "pgset spi SPI_VALUE" to specify which transformation mode
291*4882a593Smuzhiyunto employ.
292*4882a593Smuzhiyun
293*4882a593Smuzhiyun
294*4882a593SmuzhiyunCurrent commands and configuration options
295*4882a593Smuzhiyun==========================================
296*4882a593Smuzhiyun
297*4882a593Smuzhiyun**Pgcontrol commands**::
298*4882a593Smuzhiyun
299*4882a593Smuzhiyun    start
300*4882a593Smuzhiyun    stop
301*4882a593Smuzhiyun    reset
302*4882a593Smuzhiyun
303*4882a593Smuzhiyun**Thread commands**::
304*4882a593Smuzhiyun
305*4882a593Smuzhiyun    add_device
306*4882a593Smuzhiyun    rem_device_all
307*4882a593Smuzhiyun
308*4882a593Smuzhiyun
309*4882a593Smuzhiyun**Device commands**::
310*4882a593Smuzhiyun
311*4882a593Smuzhiyun    count
312*4882a593Smuzhiyun    clone_skb
313*4882a593Smuzhiyun    burst
314*4882a593Smuzhiyun    debug
315*4882a593Smuzhiyun
316*4882a593Smuzhiyun    frags
317*4882a593Smuzhiyun    delay
318*4882a593Smuzhiyun
319*4882a593Smuzhiyun    src_mac_count
320*4882a593Smuzhiyun    dst_mac_count
321*4882a593Smuzhiyun
322*4882a593Smuzhiyun    pkt_size
323*4882a593Smuzhiyun    min_pkt_size
324*4882a593Smuzhiyun    max_pkt_size
325*4882a593Smuzhiyun
326*4882a593Smuzhiyun    queue_map_min
327*4882a593Smuzhiyun    queue_map_max
328*4882a593Smuzhiyun    skb_priority
329*4882a593Smuzhiyun
330*4882a593Smuzhiyun    tos           (ipv4)
331*4882a593Smuzhiyun    traffic_class (ipv6)
332*4882a593Smuzhiyun
333*4882a593Smuzhiyun    mpls
334*4882a593Smuzhiyun
335*4882a593Smuzhiyun    udp_src_min
336*4882a593Smuzhiyun    udp_src_max
337*4882a593Smuzhiyun
338*4882a593Smuzhiyun    udp_dst_min
339*4882a593Smuzhiyun    udp_dst_max
340*4882a593Smuzhiyun
341*4882a593Smuzhiyun    node
342*4882a593Smuzhiyun
343*4882a593Smuzhiyun    flag
344*4882a593Smuzhiyun    IPSRC_RND
345*4882a593Smuzhiyun    IPDST_RND
346*4882a593Smuzhiyun    UDPSRC_RND
347*4882a593Smuzhiyun    UDPDST_RND
348*4882a593Smuzhiyun    MACSRC_RND
349*4882a593Smuzhiyun    MACDST_RND
350*4882a593Smuzhiyun    TXSIZE_RND
351*4882a593Smuzhiyun    IPV6
352*4882a593Smuzhiyun    MPLS_RND
353*4882a593Smuzhiyun    VID_RND
354*4882a593Smuzhiyun    SVID_RND
355*4882a593Smuzhiyun    FLOW_SEQ
356*4882a593Smuzhiyun    QUEUE_MAP_RND
357*4882a593Smuzhiyun    QUEUE_MAP_CPU
358*4882a593Smuzhiyun    UDPCSUM
359*4882a593Smuzhiyun    IPSEC
360*4882a593Smuzhiyun    NODE_ALLOC
361*4882a593Smuzhiyun    NO_TIMESTAMP
362*4882a593Smuzhiyun
363*4882a593Smuzhiyun    spi (ipsec)
364*4882a593Smuzhiyun
365*4882a593Smuzhiyun    dst_min
366*4882a593Smuzhiyun    dst_max
367*4882a593Smuzhiyun
368*4882a593Smuzhiyun    src_min
369*4882a593Smuzhiyun    src_max
370*4882a593Smuzhiyun
371*4882a593Smuzhiyun    dst_mac
372*4882a593Smuzhiyun    src_mac
373*4882a593Smuzhiyun
374*4882a593Smuzhiyun    clear_counters
375*4882a593Smuzhiyun
376*4882a593Smuzhiyun    src6
377*4882a593Smuzhiyun    dst6
378*4882a593Smuzhiyun    dst6_max
379*4882a593Smuzhiyun    dst6_min
380*4882a593Smuzhiyun
381*4882a593Smuzhiyun    flows
382*4882a593Smuzhiyun    flowlen
383*4882a593Smuzhiyun
384*4882a593Smuzhiyun    rate
385*4882a593Smuzhiyun    ratep
386*4882a593Smuzhiyun
387*4882a593Smuzhiyun    xmit_mode <start_xmit|netif_receive>
388*4882a593Smuzhiyun
389*4882a593Smuzhiyun    vlan_cfi
390*4882a593Smuzhiyun    vlan_id
391*4882a593Smuzhiyun    vlan_p
392*4882a593Smuzhiyun
393*4882a593Smuzhiyun    svlan_cfi
394*4882a593Smuzhiyun    svlan_id
395*4882a593Smuzhiyun    svlan_p
396*4882a593Smuzhiyun
397*4882a593Smuzhiyun
398*4882a593SmuzhiyunReferences:
399*4882a593Smuzhiyun
400*4882a593Smuzhiyun- ftp://robur.slu.se/pub/Linux/net-development/pktgen-testing/
401*4882a593Smuzhiyun- tp://robur.slu.se/pub/Linux/net-development/pktgen-testing/examples/
402*4882a593Smuzhiyun
403*4882a593SmuzhiyunPaper from Linux-Kongress in Erlangen 2004.
404*4882a593Smuzhiyun- ftp://robur.slu.se/pub/Linux/net-development/pktgen-testing/pktgen_paper.pdf
405*4882a593Smuzhiyun
406*4882a593SmuzhiyunThanks to:
407*4882a593Smuzhiyun
408*4882a593SmuzhiyunGrant Grundler for testing on IA-64 and parisc, Harald Welte,  Lennert Buytenhek
409*4882a593SmuzhiyunStephen Hemminger, Andi Kleen, Dave Miller and many others.
410*4882a593Smuzhiyun
411*4882a593Smuzhiyun
412*4882a593SmuzhiyunGood luck with the linux net-development.
413