The general packet path model followed by NFVbench requires injecting traffic into an arbitrary number of service chains, where each service chain is identified by 2 edge networks (left and right). In the current multi-chaining model:
In an OpenStack deployment, this corresponds to all chains sharing the same 2 neutron networks. If VLAN encapsulation is used, all traffic sent to a port will have the same VLAN id.
The code to create the UDP packet is located in TRex.create_pkt() (nfvbench/traffic_gen/trex.py).
NFVbench always generates UDP packets (even when doing L2 forwarding). The final size of the frame containing each UDP packet will be based on the requested L2 frame size. When taking into account the minimum payload size requirements from the traffic generator for the latency streams, the minimum L2 frame size is 64 byte (no vlan tagging) or 68 bytes (with vlan tagging).
The source MAC address is always the local port MAC address (for each port). The destination MAC address is based on the configuration and can be:
NFVbench does not currently range on the MAC addresses.
The source IP address is fixed per chain. The destination IP address is variable within a distinct range per chain.
The source and destination ports are fixed for all packets and can be set in the configuratoon file (default is 53).
The length of the user data is based on the requested L2 frame size and takes into account the size of the L2 header - including the VLAN tag if applicable.
In the case of IMIX, each direction is made of 4 streams: - 1 latency stream - 1 stream for each IMIX frame size
The IMIX ratio is encoded into the number of consecutive packets sent by each stream in turn.
A stream identifies one “stream” of packets with same characteristics such as rate and destination address. NFVbench will create 2 streams per service chain per direction:
For example, a benchmark with 1 chain (fixed rate) will result in a total of 4 streams. A benchmark with 20 chains will results in a total of 80 streams (fixed rate, it is more with IMIX).
The overall flows are split equally between the number of chains by using the appropriate destination MAC address.
For example, in the case of 10 chains, 1M flows and fixed rate, there will be a total of 40 streams. Each of the 20 non-latency stream will generate packets corresponding to 50,000 flows (unique src/dest address tuples).