First off, download the Pktgen source from here. I used the 2.9.18 version (I could not get the later versions to compile). Expand the file to somewhere convenient.
Assuming that DPDK has been compiled successfully, only a couple more dependencies need to be satisfied:
sudo apt-get install libpcap-dev liblua5.3-dev sudo ldconfig
Then, to compile:
export RTE_SDK=<dpdkdir> export RTE_TARGET=x86_64-native-linuxapp-gcc cd <pktgendir> make -j8
As usual, the “-j8” bit should be adjusted to reflect the number of cores to be used for the compilation. At this point, everything is ready to run the program:
cd <pktgendir> sudo -E app/app/x86_64-native-linuxapp-gcc/pktgen -c 0x1f -n 3 -- -P -m "[1:3].0, [2:4].1"
Note that the working directory has to be <pktgendir> as it needs to have the required .lua files. The string following the -m map cores to interface ports. In this case, core 1 handles port 0 receive, core 3 handles port 0 transmit, core 2 handles port 1 receive and core 3 handles port 1 transmit. It’s important to note that these are logical core numbers – hyperthreaded physical cores count as two logical cores. After some experimentation with an i7-5820K, best performance seemed to be obtained when each physical core is only used once. However, I am sure there are a lot of variables that affect this.
It’s a good idea to set the terminal window to 132 x 43 so that the displays work properly. I had l2fwd running at the other end of the cable connected to port 0 so I just started generating packets by entering:
at the Pktgen prompt. The l2fwd display on the other machine displayed the packets being received. It’s pretty easy to modify packet size and other parameters – just enter help at the Pktgen prompt for instructions.
Alternatively, just run Pktgen on both machines and fire packets in both directions.