162306a36Sopenharmony_ci.. SPDX-License-Identifier: GPL-2.0
262306a36Sopenharmony_ci
362306a36Sopenharmony_ci====================================
462306a36Sopenharmony_ciHOWTO for the linux packet generator
562306a36Sopenharmony_ci====================================
662306a36Sopenharmony_ci
762306a36Sopenharmony_ciEnable CONFIG_NET_PKTGEN to compile and build pktgen either in-kernel
862306a36Sopenharmony_cior as a module.  A module is preferred; modprobe pktgen if needed.  Once
962306a36Sopenharmony_cirunning, pktgen creates a thread for each CPU with affinity to that CPU.
1062306a36Sopenharmony_ciMonitoring and controlling is done via /proc.  It is easiest to select a
1162306a36Sopenharmony_cisuitable sample script and configure that.
1262306a36Sopenharmony_ci
1362306a36Sopenharmony_ciOn a dual CPU::
1462306a36Sopenharmony_ci
1562306a36Sopenharmony_ci    ps aux | grep pkt
1662306a36Sopenharmony_ci    root       129  0.3  0.0     0    0 ?        SW    2003 523:20 [kpktgend_0]
1762306a36Sopenharmony_ci    root       130  0.3  0.0     0    0 ?        SW    2003 509:50 [kpktgend_1]
1862306a36Sopenharmony_ci
1962306a36Sopenharmony_ci
2062306a36Sopenharmony_ciFor monitoring and control pktgen creates::
2162306a36Sopenharmony_ci
2262306a36Sopenharmony_ci	/proc/net/pktgen/pgctrl
2362306a36Sopenharmony_ci	/proc/net/pktgen/kpktgend_X
2462306a36Sopenharmony_ci	/proc/net/pktgen/ethX
2562306a36Sopenharmony_ci
2662306a36Sopenharmony_ci
2762306a36Sopenharmony_ciTuning NIC for max performance
2862306a36Sopenharmony_ci==============================
2962306a36Sopenharmony_ci
3062306a36Sopenharmony_ciThe default NIC settings are (likely) not tuned for pktgen's artificial
3162306a36Sopenharmony_cioverload type of benchmarking, as this could hurt the normal use-case.
3262306a36Sopenharmony_ci
3362306a36Sopenharmony_ciSpecifically increasing the TX ring buffer in the NIC::
3462306a36Sopenharmony_ci
3562306a36Sopenharmony_ci # ethtool -G ethX tx 1024
3662306a36Sopenharmony_ci
3762306a36Sopenharmony_ciA larger TX ring can improve pktgen's performance, while it can hurt
3862306a36Sopenharmony_ciin the general case, 1) because the TX ring buffer might get larger
3962306a36Sopenharmony_cithan the CPU's L1/L2 cache, 2) because it allows more queueing in the
4062306a36Sopenharmony_ciNIC HW layer (which is bad for bufferbloat).
4162306a36Sopenharmony_ci
4262306a36Sopenharmony_ciOne should hesitate to conclude that packets/descriptors in the HW
4362306a36Sopenharmony_ciTX ring cause delay.  Drivers usually delay cleaning up the
4462306a36Sopenharmony_ciring-buffers for various performance reasons, and packets stalling
4562306a36Sopenharmony_cithe TX ring might just be waiting for cleanup.
4662306a36Sopenharmony_ci
4762306a36Sopenharmony_ciThis cleanup issue is specifically the case for the driver ixgbe
4862306a36Sopenharmony_ci(Intel 82599 chip).  This driver (ixgbe) combines TX+RX ring cleanups,
4962306a36Sopenharmony_ciand the cleanup interval is affected by the ethtool --coalesce setting
5062306a36Sopenharmony_ciof parameter "rx-usecs".
5162306a36Sopenharmony_ci
5262306a36Sopenharmony_ciFor ixgbe use e.g. "30" resulting in approx 33K interrupts/sec (1/30*10^6)::
5362306a36Sopenharmony_ci
5462306a36Sopenharmony_ci # ethtool -C ethX rx-usecs 30
5562306a36Sopenharmony_ci
5662306a36Sopenharmony_ci
5762306a36Sopenharmony_ciKernel threads
5862306a36Sopenharmony_ci==============
5962306a36Sopenharmony_ciPktgen creates a thread for each CPU with affinity to that CPU.
6062306a36Sopenharmony_ciWhich is controlled through procfile /proc/net/pktgen/kpktgend_X.
6162306a36Sopenharmony_ci
6262306a36Sopenharmony_ciExample: /proc/net/pktgen/kpktgend_0::
6362306a36Sopenharmony_ci
6462306a36Sopenharmony_ci Running:
6562306a36Sopenharmony_ci Stopped: eth4@0
6662306a36Sopenharmony_ci Result: OK: add_device=eth4@0
6762306a36Sopenharmony_ci
6862306a36Sopenharmony_ciMost important are the devices assigned to the thread.
6962306a36Sopenharmony_ci
7062306a36Sopenharmony_ciThe two basic thread commands are:
7162306a36Sopenharmony_ci
7262306a36Sopenharmony_ci * add_device DEVICE@NAME -- adds a single device
7362306a36Sopenharmony_ci * rem_device_all         -- remove all associated devices
7462306a36Sopenharmony_ci
7562306a36Sopenharmony_ciWhen adding a device to a thread, a corresponding procfile is created
7662306a36Sopenharmony_ciwhich is used for configuring this device. Thus, device names need to
7762306a36Sopenharmony_cibe unique.
7862306a36Sopenharmony_ci
7962306a36Sopenharmony_ciTo support adding the same device to multiple threads, which is useful
8062306a36Sopenharmony_ciwith multi queue NICs, the device naming scheme is extended with "@":
8162306a36Sopenharmony_cidevice@something
8262306a36Sopenharmony_ci
8362306a36Sopenharmony_ciThe part after "@" can be anything, but it is custom to use the thread
8462306a36Sopenharmony_cinumber.
8562306a36Sopenharmony_ci
8662306a36Sopenharmony_ciViewing devices
8762306a36Sopenharmony_ci===============
8862306a36Sopenharmony_ci
8962306a36Sopenharmony_ciThe Params section holds configured information.  The Current section
9062306a36Sopenharmony_ciholds running statistics.  The Result is printed after a run or after
9162306a36Sopenharmony_ciinterruption.  Example::
9262306a36Sopenharmony_ci
9362306a36Sopenharmony_ci    /proc/net/pktgen/eth4@0
9462306a36Sopenharmony_ci
9562306a36Sopenharmony_ci    Params: count 100000  min_pkt_size: 60  max_pkt_size: 60
9662306a36Sopenharmony_ci	frags: 0  delay: 0  clone_skb: 64  ifname: eth4@0
9762306a36Sopenharmony_ci	flows: 0 flowlen: 0
9862306a36Sopenharmony_ci	queue_map_min: 0  queue_map_max: 0
9962306a36Sopenharmony_ci	dst_min: 192.168.81.2  dst_max:
10062306a36Sopenharmony_ci	src_min:   src_max:
10162306a36Sopenharmony_ci	src_mac: 90:e2:ba:0a:56:b4 dst_mac: 00:1b:21:3c:9d:f8
10262306a36Sopenharmony_ci	udp_src_min: 9  udp_src_max: 109  udp_dst_min: 9  udp_dst_max: 9
10362306a36Sopenharmony_ci	src_mac_count: 0  dst_mac_count: 0
10462306a36Sopenharmony_ci	Flags: UDPSRC_RND  NO_TIMESTAMP  QUEUE_MAP_CPU
10562306a36Sopenharmony_ci    Current:
10662306a36Sopenharmony_ci	pkts-sofar: 100000  errors: 0
10762306a36Sopenharmony_ci	started: 623913381008us  stopped: 623913396439us idle: 25us
10862306a36Sopenharmony_ci	seq_num: 100001  cur_dst_mac_offset: 0  cur_src_mac_offset: 0
10962306a36Sopenharmony_ci	cur_saddr: 192.168.8.3  cur_daddr: 192.168.81.2
11062306a36Sopenharmony_ci	cur_udp_dst: 9  cur_udp_src: 42
11162306a36Sopenharmony_ci	cur_queue_map: 0
11262306a36Sopenharmony_ci	flows: 0
11362306a36Sopenharmony_ci    Result: OK: 15430(c15405+d25) usec, 100000 (60byte,0frags)
11462306a36Sopenharmony_ci    6480562pps 3110Mb/sec (3110669760bps) errors: 0
11562306a36Sopenharmony_ci
11662306a36Sopenharmony_ci
11762306a36Sopenharmony_ciConfiguring devices
11862306a36Sopenharmony_ci===================
11962306a36Sopenharmony_ciThis is done via the /proc interface, and most easily done via pgset
12062306a36Sopenharmony_cias defined in the sample scripts.
12162306a36Sopenharmony_ciYou need to specify PGDEV environment variable to use functions from sample
12262306a36Sopenharmony_ciscripts, i.e.::
12362306a36Sopenharmony_ci
12462306a36Sopenharmony_ci    export PGDEV=/proc/net/pktgen/eth4@0
12562306a36Sopenharmony_ci    source samples/pktgen/functions.sh
12662306a36Sopenharmony_ci
12762306a36Sopenharmony_ciExamples::
12862306a36Sopenharmony_ci
12962306a36Sopenharmony_ci pg_ctrl start           starts injection.
13062306a36Sopenharmony_ci pg_ctrl stop            aborts injection. Also, ^C aborts generator.
13162306a36Sopenharmony_ci
13262306a36Sopenharmony_ci pgset "clone_skb 1"     sets the number of copies of the same packet
13362306a36Sopenharmony_ci pgset "clone_skb 0"     use single SKB for all transmits
13462306a36Sopenharmony_ci pgset "burst 8"         uses xmit_more API to queue 8 copies of the same
13562306a36Sopenharmony_ci			 packet and update HW tx queue tail pointer once.
13662306a36Sopenharmony_ci			 "burst 1" is the default
13762306a36Sopenharmony_ci pgset "pkt_size 9014"   sets packet size to 9014
13862306a36Sopenharmony_ci pgset "frags 5"         packet will consist of 5 fragments
13962306a36Sopenharmony_ci pgset "count 200000"    sets number of packets to send, set to zero
14062306a36Sopenharmony_ci			 for continuous sends until explicitly stopped.
14162306a36Sopenharmony_ci
14262306a36Sopenharmony_ci pgset "delay 5000"      adds delay to hard_start_xmit(). nanoseconds
14362306a36Sopenharmony_ci
14462306a36Sopenharmony_ci pgset "dst 10.0.0.1"    sets IP destination address
14562306a36Sopenharmony_ci			 (BEWARE! This generator is very aggressive!)
14662306a36Sopenharmony_ci
14762306a36Sopenharmony_ci pgset "dst_min 10.0.0.1"            Same as dst
14862306a36Sopenharmony_ci pgset "dst_max 10.0.0.254"          Set the maximum destination IP.
14962306a36Sopenharmony_ci pgset "src_min 10.0.0.1"            Set the minimum (or only) source IP.
15062306a36Sopenharmony_ci pgset "src_max 10.0.0.254"          Set the maximum source IP.
15162306a36Sopenharmony_ci pgset "dst6 fec0::1"     IPV6 destination address
15262306a36Sopenharmony_ci pgset "src6 fec0::2"     IPV6 source address
15362306a36Sopenharmony_ci pgset "dstmac 00:00:00:00:00:00"    sets MAC destination address
15462306a36Sopenharmony_ci pgset "srcmac 00:00:00:00:00:00"    sets MAC source address
15562306a36Sopenharmony_ci
15662306a36Sopenharmony_ci pgset "queue_map_min 0" Sets the min value of tx queue interval
15762306a36Sopenharmony_ci pgset "queue_map_max 7" Sets the max value of tx queue interval, for multiqueue devices
15862306a36Sopenharmony_ci			 To select queue 1 of a given device,
15962306a36Sopenharmony_ci			 use queue_map_min=1 and queue_map_max=1
16062306a36Sopenharmony_ci
16162306a36Sopenharmony_ci pgset "src_mac_count 1" Sets the number of MACs we'll range through.
16262306a36Sopenharmony_ci			 The 'minimum' MAC is what you set with srcmac.
16362306a36Sopenharmony_ci
16462306a36Sopenharmony_ci pgset "dst_mac_count 1" Sets the number of MACs we'll range through.
16562306a36Sopenharmony_ci			 The 'minimum' MAC is what you set with dstmac.
16662306a36Sopenharmony_ci
16762306a36Sopenharmony_ci pgset "flag [name]"     Set a flag to determine behaviour.  Current flags
16862306a36Sopenharmony_ci			 are: IPSRC_RND # IP source is random (between min/max)
16962306a36Sopenharmony_ci			      IPDST_RND # IP destination is random
17062306a36Sopenharmony_ci			      UDPSRC_RND, UDPDST_RND,
17162306a36Sopenharmony_ci			      MACSRC_RND, MACDST_RND
17262306a36Sopenharmony_ci			      TXSIZE_RND, IPV6,
17362306a36Sopenharmony_ci			      MPLS_RND, VID_RND, SVID_RND
17462306a36Sopenharmony_ci			      FLOW_SEQ,
17562306a36Sopenharmony_ci			      QUEUE_MAP_RND # queue map random
17662306a36Sopenharmony_ci			      QUEUE_MAP_CPU # queue map mirrors smp_processor_id()
17762306a36Sopenharmony_ci			      UDPCSUM,
17862306a36Sopenharmony_ci			      IPSEC # IPsec encapsulation (needs CONFIG_XFRM)
17962306a36Sopenharmony_ci			      NODE_ALLOC # node specific memory allocation
18062306a36Sopenharmony_ci			      NO_TIMESTAMP # disable timestamping
18162306a36Sopenharmony_ci pgset 'flag ![name]'    Clear a flag to determine behaviour.
18262306a36Sopenharmony_ci			 Note that you might need to use single quote in
18362306a36Sopenharmony_ci			 interactive mode, so that your shell wouldn't expand
18462306a36Sopenharmony_ci			 the specified flag as a history command.
18562306a36Sopenharmony_ci
18662306a36Sopenharmony_ci pgset "spi [SPI_VALUE]" Set specific SA used to transform packet.
18762306a36Sopenharmony_ci
18862306a36Sopenharmony_ci pgset "udp_src_min 9"   set UDP source port min, If < udp_src_max, then
18962306a36Sopenharmony_ci			 cycle through the port range.
19062306a36Sopenharmony_ci
19162306a36Sopenharmony_ci pgset "udp_src_max 9"   set UDP source port max.
19262306a36Sopenharmony_ci pgset "udp_dst_min 9"   set UDP destination port min, If < udp_dst_max, then
19362306a36Sopenharmony_ci			 cycle through the port range.
19462306a36Sopenharmony_ci pgset "udp_dst_max 9"   set UDP destination port max.
19562306a36Sopenharmony_ci
19662306a36Sopenharmony_ci pgset "mpls 0001000a,0002000a,0000000a" set MPLS labels (in this example
19762306a36Sopenharmony_ci					 outer label=16,middle label=32,
19862306a36Sopenharmony_ci					 inner label=0 (IPv4 NULL)) Note that
19962306a36Sopenharmony_ci					 there must be no spaces between the
20062306a36Sopenharmony_ci					 arguments. Leading zeros are required.
20162306a36Sopenharmony_ci					 Do not set the bottom of stack bit,
20262306a36Sopenharmony_ci					 that's done automatically. If you do
20362306a36Sopenharmony_ci					 set the bottom of stack bit, that
20462306a36Sopenharmony_ci					 indicates that you want to randomly
20562306a36Sopenharmony_ci					 generate that address and the flag
20662306a36Sopenharmony_ci					 MPLS_RND will be turned on. You
20762306a36Sopenharmony_ci					 can have any mix of random and fixed
20862306a36Sopenharmony_ci					 labels in the label stack.
20962306a36Sopenharmony_ci
21062306a36Sopenharmony_ci pgset "mpls 0"		  turn off mpls (or any invalid argument works too!)
21162306a36Sopenharmony_ci
21262306a36Sopenharmony_ci pgset "vlan_id 77"       set VLAN ID 0-4095
21362306a36Sopenharmony_ci pgset "vlan_p 3"         set priority bit 0-7 (default 0)
21462306a36Sopenharmony_ci pgset "vlan_cfi 0"       set canonical format identifier 0-1 (default 0)
21562306a36Sopenharmony_ci
21662306a36Sopenharmony_ci pgset "svlan_id 22"      set SVLAN ID 0-4095
21762306a36Sopenharmony_ci pgset "svlan_p 3"        set priority bit 0-7 (default 0)
21862306a36Sopenharmony_ci pgset "svlan_cfi 0"      set canonical format identifier 0-1 (default 0)
21962306a36Sopenharmony_ci
22062306a36Sopenharmony_ci pgset "vlan_id 9999"     > 4095 remove vlan and svlan tags
22162306a36Sopenharmony_ci pgset "svlan 9999"       > 4095 remove svlan tag
22262306a36Sopenharmony_ci
22362306a36Sopenharmony_ci
22462306a36Sopenharmony_ci pgset "tos XX"           set former IPv4 TOS field (e.g. "tos 28" for AF11 no ECN, default 00)
22562306a36Sopenharmony_ci pgset "traffic_class XX" set former IPv6 TRAFFIC CLASS (e.g. "traffic_class B8" for EF no ECN, default 00)
22662306a36Sopenharmony_ci
22762306a36Sopenharmony_ci pgset "rate 300M"        set rate to 300 Mb/s
22862306a36Sopenharmony_ci pgset "ratep 1000000"    set rate to 1Mpps
22962306a36Sopenharmony_ci
23062306a36Sopenharmony_ci pgset "xmit_mode netif_receive"  RX inject into stack netif_receive_skb()
23162306a36Sopenharmony_ci				  Works with "burst" but not with "clone_skb".
23262306a36Sopenharmony_ci				  Default xmit_mode is "start_xmit".
23362306a36Sopenharmony_ci
23462306a36Sopenharmony_ciSample scripts
23562306a36Sopenharmony_ci==============
23662306a36Sopenharmony_ci
23762306a36Sopenharmony_ciA collection of tutorial scripts and helpers for pktgen is in the
23862306a36Sopenharmony_cisamples/pktgen directory. The helper parameters.sh file support easy
23962306a36Sopenharmony_ciand consistent parameter parsing across the sample scripts.
24062306a36Sopenharmony_ci
24162306a36Sopenharmony_ciUsage example and help::
24262306a36Sopenharmony_ci
24362306a36Sopenharmony_ci ./pktgen_sample01_simple.sh -i eth4 -m 00:1B:21:3C:9D:F8 -d 192.168.8.2
24462306a36Sopenharmony_ci
24562306a36Sopenharmony_ciUsage:::
24662306a36Sopenharmony_ci
24762306a36Sopenharmony_ci  ./pktgen_sample01_simple.sh [-vx] -i ethX
24862306a36Sopenharmony_ci
24962306a36Sopenharmony_ci  -i : ($DEV)       output interface/device (required)
25062306a36Sopenharmony_ci  -s : ($PKT_SIZE)  packet size
25162306a36Sopenharmony_ci  -d : ($DEST_IP)   destination IP. CIDR (e.g. 198.18.0.0/15) is also allowed
25262306a36Sopenharmony_ci  -m : ($DST_MAC)   destination MAC-addr
25362306a36Sopenharmony_ci  -p : ($DST_PORT)  destination PORT range (e.g. 433-444) is also allowed
25462306a36Sopenharmony_ci  -t : ($THREADS)   threads to start
25562306a36Sopenharmony_ci  -f : ($F_THREAD)  index of first thread (zero indexed CPU number)
25662306a36Sopenharmony_ci  -c : ($SKB_CLONE) SKB clones send before alloc new SKB
25762306a36Sopenharmony_ci  -n : ($COUNT)     num messages to send per thread, 0 means indefinitely
25862306a36Sopenharmony_ci  -b : ($BURST)     HW level bursting of SKBs
25962306a36Sopenharmony_ci  -v : ($VERBOSE)   verbose
26062306a36Sopenharmony_ci  -x : ($DEBUG)     debug
26162306a36Sopenharmony_ci  -6 : ($IP6)       IPv6
26262306a36Sopenharmony_ci  -w : ($DELAY)     Tx Delay value (ns)
26362306a36Sopenharmony_ci  -a : ($APPEND)    Script will not reset generator's state, but will append its config
26462306a36Sopenharmony_ci
26562306a36Sopenharmony_ciThe global variables being set are also listed.  E.g. the required
26662306a36Sopenharmony_ciinterface/device parameter "-i" sets variable $DEV.  Copy the
26762306a36Sopenharmony_cipktgen_sampleXX scripts and modify them to fit your own needs.
26862306a36Sopenharmony_ci
26962306a36Sopenharmony_ci
27062306a36Sopenharmony_ciInterrupt affinity
27162306a36Sopenharmony_ci===================
27262306a36Sopenharmony_ciNote that when adding devices to a specific CPU it is a good idea to
27362306a36Sopenharmony_cialso assign /proc/irq/XX/smp_affinity so that the TX interrupts are bound
27462306a36Sopenharmony_cito the same CPU.  This reduces cache bouncing when freeing skbs.
27562306a36Sopenharmony_ci
27662306a36Sopenharmony_ciPlus using the device flag QUEUE_MAP_CPU, which maps the SKBs TX queue
27762306a36Sopenharmony_cito the running threads CPU (directly from smp_processor_id()).
27862306a36Sopenharmony_ci
27962306a36Sopenharmony_ciEnable IPsec
28062306a36Sopenharmony_ci============
28162306a36Sopenharmony_ciDefault IPsec transformation with ESP encapsulation plus transport mode
28262306a36Sopenharmony_cican be enabled by simply setting::
28362306a36Sopenharmony_ci
28462306a36Sopenharmony_ci    pgset "flag IPSEC"
28562306a36Sopenharmony_ci    pgset "flows 1"
28662306a36Sopenharmony_ci
28762306a36Sopenharmony_ciTo avoid breaking existing testbed scripts for using AH type and tunnel mode,
28862306a36Sopenharmony_ciyou can use "pgset spi SPI_VALUE" to specify which transformation mode
28962306a36Sopenharmony_cito employ.
29062306a36Sopenharmony_ci
29162306a36Sopenharmony_ci
29262306a36Sopenharmony_ciCurrent commands and configuration options
29362306a36Sopenharmony_ci==========================================
29462306a36Sopenharmony_ci
29562306a36Sopenharmony_ci**Pgcontrol commands**::
29662306a36Sopenharmony_ci
29762306a36Sopenharmony_ci    start
29862306a36Sopenharmony_ci    stop
29962306a36Sopenharmony_ci    reset
30062306a36Sopenharmony_ci
30162306a36Sopenharmony_ci**Thread commands**::
30262306a36Sopenharmony_ci
30362306a36Sopenharmony_ci    add_device
30462306a36Sopenharmony_ci    rem_device_all
30562306a36Sopenharmony_ci
30662306a36Sopenharmony_ci
30762306a36Sopenharmony_ci**Device commands**::
30862306a36Sopenharmony_ci
30962306a36Sopenharmony_ci    count
31062306a36Sopenharmony_ci    clone_skb
31162306a36Sopenharmony_ci    burst
31262306a36Sopenharmony_ci    debug
31362306a36Sopenharmony_ci
31462306a36Sopenharmony_ci    frags
31562306a36Sopenharmony_ci    delay
31662306a36Sopenharmony_ci
31762306a36Sopenharmony_ci    src_mac_count
31862306a36Sopenharmony_ci    dst_mac_count
31962306a36Sopenharmony_ci
32062306a36Sopenharmony_ci    pkt_size
32162306a36Sopenharmony_ci    min_pkt_size
32262306a36Sopenharmony_ci    max_pkt_size
32362306a36Sopenharmony_ci
32462306a36Sopenharmony_ci    queue_map_min
32562306a36Sopenharmony_ci    queue_map_max
32662306a36Sopenharmony_ci    skb_priority
32762306a36Sopenharmony_ci
32862306a36Sopenharmony_ci    tos           (ipv4)
32962306a36Sopenharmony_ci    traffic_class (ipv6)
33062306a36Sopenharmony_ci
33162306a36Sopenharmony_ci    mpls
33262306a36Sopenharmony_ci
33362306a36Sopenharmony_ci    udp_src_min
33462306a36Sopenharmony_ci    udp_src_max
33562306a36Sopenharmony_ci
33662306a36Sopenharmony_ci    udp_dst_min
33762306a36Sopenharmony_ci    udp_dst_max
33862306a36Sopenharmony_ci
33962306a36Sopenharmony_ci    node
34062306a36Sopenharmony_ci
34162306a36Sopenharmony_ci    flag
34262306a36Sopenharmony_ci    IPSRC_RND
34362306a36Sopenharmony_ci    IPDST_RND
34462306a36Sopenharmony_ci    UDPSRC_RND
34562306a36Sopenharmony_ci    UDPDST_RND
34662306a36Sopenharmony_ci    MACSRC_RND
34762306a36Sopenharmony_ci    MACDST_RND
34862306a36Sopenharmony_ci    TXSIZE_RND
34962306a36Sopenharmony_ci    IPV6
35062306a36Sopenharmony_ci    MPLS_RND
35162306a36Sopenharmony_ci    VID_RND
35262306a36Sopenharmony_ci    SVID_RND
35362306a36Sopenharmony_ci    FLOW_SEQ
35462306a36Sopenharmony_ci    QUEUE_MAP_RND
35562306a36Sopenharmony_ci    QUEUE_MAP_CPU
35662306a36Sopenharmony_ci    UDPCSUM
35762306a36Sopenharmony_ci    IPSEC
35862306a36Sopenharmony_ci    NODE_ALLOC
35962306a36Sopenharmony_ci    NO_TIMESTAMP
36062306a36Sopenharmony_ci
36162306a36Sopenharmony_ci    spi (ipsec)
36262306a36Sopenharmony_ci
36362306a36Sopenharmony_ci    dst_min
36462306a36Sopenharmony_ci    dst_max
36562306a36Sopenharmony_ci
36662306a36Sopenharmony_ci    src_min
36762306a36Sopenharmony_ci    src_max
36862306a36Sopenharmony_ci
36962306a36Sopenharmony_ci    dst_mac
37062306a36Sopenharmony_ci    src_mac
37162306a36Sopenharmony_ci
37262306a36Sopenharmony_ci    clear_counters
37362306a36Sopenharmony_ci
37462306a36Sopenharmony_ci    src6
37562306a36Sopenharmony_ci    dst6
37662306a36Sopenharmony_ci    dst6_max
37762306a36Sopenharmony_ci    dst6_min
37862306a36Sopenharmony_ci
37962306a36Sopenharmony_ci    flows
38062306a36Sopenharmony_ci    flowlen
38162306a36Sopenharmony_ci
38262306a36Sopenharmony_ci    rate
38362306a36Sopenharmony_ci    ratep
38462306a36Sopenharmony_ci
38562306a36Sopenharmony_ci    xmit_mode <start_xmit|netif_receive>
38662306a36Sopenharmony_ci
38762306a36Sopenharmony_ci    vlan_cfi
38862306a36Sopenharmony_ci    vlan_id
38962306a36Sopenharmony_ci    vlan_p
39062306a36Sopenharmony_ci
39162306a36Sopenharmony_ci    svlan_cfi
39262306a36Sopenharmony_ci    svlan_id
39362306a36Sopenharmony_ci    svlan_p
39462306a36Sopenharmony_ci
39562306a36Sopenharmony_ci
39662306a36Sopenharmony_ciReferences:
39762306a36Sopenharmony_ci
39862306a36Sopenharmony_ci- ftp://robur.slu.se/pub/Linux/net-development/pktgen-testing/
39962306a36Sopenharmony_ci- ftp://robur.slu.se/pub/Linux/net-development/pktgen-testing/examples/
40062306a36Sopenharmony_ci
40162306a36Sopenharmony_ciPaper from Linux-Kongress in Erlangen 2004.
40262306a36Sopenharmony_ci- ftp://robur.slu.se/pub/Linux/net-development/pktgen-testing/pktgen_paper.pdf
40362306a36Sopenharmony_ci
40462306a36Sopenharmony_ciThanks to:
40562306a36Sopenharmony_ci
40662306a36Sopenharmony_ciGrant Grundler for testing on IA-64 and parisc, Harald Welte,  Lennert Buytenhek
40762306a36Sopenharmony_ciStephen Hemminger, Andi Kleen, Dave Miller and many others.
40862306a36Sopenharmony_ci
40962306a36Sopenharmony_ci
41062306a36Sopenharmony_ciGood luck with the linux net-development.
411