21. IP Pipeline Application Tests

The ip_pipeline application is the main DPDK Packet Framework (PFW) application.

The application allows setting of a pipeline through the PFW. Currently the application set a pipeline using 2 main features, routing and flow control and, in addition, ARP is used.

The application has an interactive session when started to allow in-app configuration.

This application uses 5 CPU cores, reception, flow control, routing and transmission.

The traffic will pass through the pipeline if meets the following conditions:

  • If flow add all is used in the setup then:
    • TCP/IPv4
    • IP destination = A.B.C.D with A = 0 and B,C,D random
    • IP source = 0.0.0.0
    • TCP destination port = 0
    • TCP source port = 0
  • If flow add all is not used then there is no restrictions.

21.1. Prerequisites

Launch the ip_pipeline app with 5 lcores and two ports:

$ examples/ip_pipeline/build/ip_pipeline -c 0x3e -n <memory channels> -- -p
<ports mask>

The expected prompt is:

pipeline>

The selected ports will be called 0 and 1 in the following instructions.

Tcpdump is used in test as a traffic sniffer unless otherwise stated. Tcpdump is set in both ports to check that traffic is sent and forwarded, or not forwarded.

Scapy is used in test as traffic generator unless otherwise stated.

The PCAP driver is used in some tests as a traffic generator and sniffer.

NOTE: ip_pipeline is currently hardcoded to start the reception from ports automatically. Prior to running the test described in this document this behavior has to be modified by commenting out the following lines in examples/ip_pipeline/pipeline_rx.c:

/* Enable input ports */
for (i = 0; i < app.n_ports; i ++) {
        if (rte_pipeline_port_in_enable(p, port_in_id[i])) {
                rte_panic("Unable to enable input port %u\n", port_in_id[i]);
        }
}

21.2. Test Case: test_incremental_ip

Create a PCAP file containing permutations of the following parameters:

  • TCP/IPv4.
  • 64B size.
  • Number of frames sent. 1, 3, 63, 64, 65, 127, 128.
  • Interval between frames. 0s, 0.7s.
  • Incremental destination IP address. 1 by 1 increment on every frame.
  • Maximum IP address 255.128.0.0.

Start the ip_pipeline application as described in prerequisites. Run the default config script:

pipeline> run examples/ip_pipeline/ip_pipeline.sh

Start port reception:

link 0 up link 1 up

Send the generated PCAP file from port 1 to 0, check that all frames are forwarded to port 0. Send the generated PCAP file from port 0 to 1, check that all frames are forwarded to port 0.

Stop port reception:

link 0 down link 1 down

21.3. Test Case: test_frame_sizes

Create a PCAP file containing permutations of the following parameters:

  • TCP/IPv4.
  • Frame size 64, 65, 128.
  • 100 frames.
  • 0.5s interval between frames.
  • Incremental destination IP address. 1 by 1 increment on every frame.
  • Maximum IP address 255.128.0.0.

Start the ip_pipeline application as described in prerequisites. Run the default config script:

pipeline> run examples/ip_pipeline/ip_pipeline.sh

Start port reception:

link 0 up link 1 up

Send the generated PCAP file from port 1 to 0, check that all frames are forwarded to port 0. Send the generated PCAP file from port 0 to 1, check that all frames are forwarded to port 0.

Stop port reception:

link 0 down link 1 down

21.4. Test Case: test_pcap_incremental_ip

Compile the DPDK to use the PCAP driver. Modify the target config file to allow PCAP driver:

sed -i 's/CONFIG_RTE_LIBRTE_PMD_PCAP=n$/CONFIG_RTE_LIBRTE_PMD_PCAP=y/' config/defconfig_<target>

Create a PCAP file containing permutations of the following parameters:

  • TCP/IPv4.
  • 64B size.
  • Number of frames sent. 1, 3, 63, 64, 65, 127, 128.
  • Incremental destination IP address. 1 by 1 increment on every frame.
  • Maximum IP address 255.128.0.0.

Start the ip_pipeline application using pcap devices:

$ ./examples/ip_pipeline/build/ip_pipeline -c <core mask> -n <mem channels> --use-device <pcap devices> -- -p 0x3

<pcap devices>: 'eth_pcap0;rx_pcap=/root/<input pcap file 0>;tx_pcap=/tmp/port0out.pcap,eth_pcap1;rx_pcap=/root/<input pcap file 1>;tx_pcap=/tmp/port1out.pcap'

Run the default config script:

pipeline> run examples/ip_pipeline/ip_pipeline.sh

As the traffic is sent and received by PCAP devices the traffic flow is triggered by enabling the ports:

link 0 up link 1 up

Wait 1s to allow all frames to be sent and stop the ports:

link 0 down link 1 down

Check the results PCAP files tmp/port0out.pcap and tmp/port1out.pcap, the frames must be received in port 0, tmp/port0out.pcap.

21.5. Test Case: test_pcap_frame_sizes

Compile DPDK to use PCAP driver. Modify the target config file to allow PCAP driver:

sed -i 's/CONFIG_RTE_LIBRTE_PMD_PCAP=n$/CONFIG_RTE_LIBRTE_PMD_PCAP=y/'
config/defconfig_<target>

Create a PCAP file containing permutations of the following parameters:

  • TCP/IPv4.
  • Frame sizes 64, 65, 128.
  • Number of frames sent. 1, 3, 63, 64, 65, 127, 128.
  • Incremental destination IP address. 1 by 1 increment on every frame.
  • Maximum IP address 255.128.0.0.

Start the ip_pipeline application using pcap devices:

$ ./examples/ip_pipeline/build/ip_pipeline -c <core mask> -n <mem channels> --use-device <pcap devices> -- -p 0x3

<pcap devices>: 'eth_pcap0;rx_pcap=/root/<input pcap file 0>;tx_pcap=/tmp/port0out.pcap,eth_pcap1;rx_pcap=/root/<input pcap file 1>;tx_pcap=/tmp/port1out.pcap'

Run the default config script:

pipeline> run examples/ip_pipeline/ip_pipeline.sh

As the traffic is sent and received by PCAP devices the traffic flow is triggered by enabling the ports:

link 0 up
link 1 up

Wait 1s to allow all frames to be sent and stop the ports:

link 0 down
link 1 down

Check the results PCAP files tmp/port0out.pcap and tmp/port1out.pcap, the frames must be received in port 0, tmp/port0out.pcap.

21.6. Test Case: test_flow_management

This test checks the flow addition and removal feature in the packet framework.

Create a PCAP file containing the following traffic:

  • TCP/IPv4.
  • Frame size 64.
  • Source IP address 0.0.0.0
  • Destination IP addresses: ‘0.0.0.0’, ‘0.0.0.1’, ‘0.0.0.127’, ‘0.0.0.128’, ‘0.0.0.255’, ‘0.0.1.0’, ‘0.0.127.0’, ‘0.0.128.0’, ‘0.0.129.0’, ‘0.0.255.0’, ‘0.127.0.0’, ‘0.127.1.0’, ‘0.127.127.0’, ‘0.127.255.0’, ‘0.127.255.255’

Start the ip_pipeline application as described in prerequisites and set up the following configuration:

pipeline> arp add 0 0.0.0.1 0a:0b:0c:0d:0e:0f
pipeline> arp add 1 0.128.0.1 1a:1b:1c:1d:1e:1f
pipeline> route add 0.0.0.0 9 0 0.0.0.1
pipeline> route add 0.128.0.0 9 1 0.128.0.1

Start port reception:

link 0 up link 1 up
  1. Send the pcap file and check that the number of frames forwarded matches the number of flows added (starting at 0)

  2. Add a new flow matching one of the IP address:

    pipeline> flow add 0.0.0.0 <dst IP> 0 0 0 <port>
    
  3. Repeat Step 1 until all the frames pass

  4. Remove a flow previously added:

    pipeline> flow del 0.0.0.0 <dst IP> 0 0 0
    
  5. Check if a frames less is forwarded.

  6. Repeat from step 4 until no frames are forwarded.

21.7. Test Case: test_route_management

This test checks the route addition and removal feature in the packet framework.

Create a PCAP file containing the following traffic:

  • TCP/IPv4.
  • Frame size 64.
  • Source IP address 0.0.0.0
  • Destination IP addresses: ‘0.0.0.0’, ‘0.0.0.1’, ‘0.0.0.127’, ‘0.0.0.128’, ‘0.0.0.255’, ‘0.0.1.0’, ‘0.0.127.0’, ‘0.0.128.0’, ‘0.0.129.0’, ‘0.0.255.0’, ‘0.127.0.0’, ‘0.127.1.0’, ‘0.127.127.0’, ‘0.127.255.0’, ‘0.127.255.255’

Start the ip_pipeline application as described in prerequisites and set up the following configuration:

pipeline> arp add 0 0.0.0.1 0a:0b:0c:0d:0e:0f
pipeline> arp add 1 0.128.0.1 1a:1b:1c:1d:1e:1f
pipeline> flow add all

Start port reception:

link 0 up link 1 up
  1. Send the pcap file and check that the number of frames forwarded matches the number of routes added (starting at 0)

  2. Add a new route matching one of the IP address:

    pipeline> route add <src IP> 32 <port> 0.0.0.1
    
  3. Repeat Step 1 until all the frames pass

  4. Remove a route previously added:

    pipeline> route del <dst IP> 32
    
  5. Check if a frames less is forwarded.

  6. Repeat from step 4 until no frames are forwarded.