linux/samples/pktgen
Daniel T. Lee 40f843ee5e samples: pktgen: allow to specify destination IP range (CIDR)
Currently, kernel pktgen has the feature to specify destination
address range for sending packet. (e.g. pgset "dst_min/dst_max")

But on samples, each pktgen script doesn't have any option to achieve this.

This commit adds the feature to specify the destination address range with CIDR.

    -d : ($DEST_IP)   destination IP. CIDR (e.g. 198.18.0.0/15) is also allowed

    # ./pktgen_sample01_simple.sh -6 -d fe80::20/126 -p 3000 -n 4
    # tcpdump ip6 and udp
    05:14:18.082285 IP6 fe80::99.71 > fe80::23.3000: UDP, length 16
    05:14:18.082564 IP6 fe80::99.43 > fe80::23.3000: UDP, length 16
    05:14:18.083366 IP6 fe80::99.107 > fe80::22.3000: UDP, length 16
    05:14:18.083585 IP6 fe80::99.97 > fe80::21.3000: UDP, length 16

Signed-off-by: Daniel T. Lee <danieltimlee@gmail.com>
Acked-by: Jesper Dangaard Brouer <brouer@redhat.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
2019-10-07 09:26:32 -04:00
..
functions.sh samples: pktgen: add helper functions for IP(v4/v6) CIDR parsing 2019-10-07 09:26:32 -04:00
parameters.sh samples: pktgen: allow to specify destination IP range (CIDR) 2019-10-07 09:26:32 -04:00
pktgen_bench_xmit_mode_netif_receive.sh samples: pktgen: allow to specify destination IP range (CIDR) 2019-10-07 09:26:32 -04:00
pktgen_bench_xmit_mode_queue_xmit.sh samples: pktgen: allow to specify destination IP range (CIDR) 2019-10-07 09:26:32 -04:00
pktgen_sample01_simple.sh samples: pktgen: allow to specify destination IP range (CIDR) 2019-10-07 09:26:32 -04:00
pktgen_sample02_multiqueue.sh samples: pktgen: allow to specify destination IP range (CIDR) 2019-10-07 09:26:32 -04:00
pktgen_sample03_burst_single_flow.sh samples: pktgen: allow to specify destination IP range (CIDR) 2019-10-07 09:26:32 -04:00
pktgen_sample04_many_flows.sh samples: pktgen: allow to specify destination IP range (CIDR) 2019-10-07 09:26:32 -04:00
pktgen_sample05_flow_per_thread.sh samples: pktgen: allow to specify destination IP range (CIDR) 2019-10-07 09:26:32 -04:00
pktgen_sample06_numa_awared_queue_irq_affinity.sh samples: pktgen: allow to specify destination IP range (CIDR) 2019-10-07 09:26:32 -04:00
README.rst samples: pktgen: allow to specify destination IP range (CIDR) 2019-10-07 09:26:32 -04:00

Sample and benchmark scripts for pktgen (packet generator)
==========================================================
This directory contains some pktgen sample and benchmark scripts, that
can easily be copied and adjusted for your own use-case.

General doc is located in kernel: Documentation/networking/pktgen.txt

Helper include files
====================
This directory contains two helper shell files, that can be "included"
by shell source'ing.  Namely "functions.sh" and "parameters.sh".

Common parameters
-----------------
The parameters.sh file support easy and consistant parameter parsing
across the sample scripts.  Usage example is printed on errors::

 Usage: ./pktgen_sample01_simple.sh [-vx] -i ethX
  -i : ($DEV)       output interface/device (required)
  -s : ($PKT_SIZE)  packet size
  -d : ($DEST_IP)   destination IP. CIDR (e.g. 198.18.0.0/15) is also allowed
  -m : ($DST_MAC)   destination MAC-addr
  -p : ($DST_PORT)  destination PORT range (e.g. 433-444) is also allowed
  -t : ($THREADS)   threads to start
  -f : ($F_THREAD)  index of first thread (zero indexed CPU number)
  -c : ($SKB_CLONE) SKB clones send before alloc new SKB
  -n : ($COUNT)     num messages to send per thread, 0 means indefinitely
  -b : ($BURST)     HW level bursting of SKBs
  -v : ($VERBOSE)   verbose
  -x : ($DEBUG)     debug

The global variable being set is also listed.  E.g. the required
interface/device parameter "-i" sets variable $DEV.

Common functions
----------------
The functions.sh file provides; Three different shell functions for
configuring the different components of pktgen: pg_ctrl(), pg_thread()
and pg_set().

These functions correspond to pktgens different components.
 * pg_ctrl()   control "pgctrl" (/proc/net/pktgen/pgctrl)
 * pg_thread() control the kernel threads and binding to devices
 * pg_set()    control setup of individual devices

See sample scripts for usage examples.