.. SPDX-License-Identifier: BSD-3-Clause Copyright(c) 2022 Intel Corporation ================================= ICE IAVF: FDIR For PPPoL2TPv2oUDP ================================= Description =========== Support IAVF PPPoL2TPv2oUDP FDIR. Required to distribute packets based on MAC src, L2TP session ID, inner IP src+dest address and TCP/UDP src+dest port. Prerequisites ============= Topology -------- 1node/1nic/2port/fwd 2node/1nic/1port/loopback Hardware -------- Supportted NICs: IntelĀ® Ethernet Network Adapter E810-XXVDA4/IntelĀ® Ethernet Network Adapter E810-CQDA2 Software -------- dpdk: http://dpdk.org/git/dpdk scapy: http://www.secdev.org/projects/scapy/ General set up -------------- 1. Copy specific ice package to /lib/firmware/updates/intel/ice/ddp/ice.pkg, then load driver:: # cp /lib/firmware/updates/intel/ice/ddp/ice.pkg # rmmod ice # insmod /ice.ko 2. Compile DPDK:: # CC=gcc meson --werror -Denable_kmods=True -Dlibdir=lib --default-library=static # ninja -C -j 110 3. Get the pci device id and interface of DUT and tester. For example, 0000:3b:00.0 and 0000:af:00.0 is pci device id, ens785f0 and ens260f0 is interface:: # ./usertools/dpdk-devbind.py -s 0000:3b:00.0 'Ethernet Controller E810-C for SFP 1593' if=ens785f0 drv=ice unused=vfio-pci 0000:af:00.0 'Ethernet Controller XXV710 for 25GbE SFP28 158b' if=ens260f0 drv=i40e unused=vfio-pci 4. Generate 1 VF on PF0, set mac address for this VF:: # echo 1 > /sys/bus/pci/devices/0000:3b:00.0/sriov_numvfs # ip link set ens785f0 vf 0 mac 00:11:22:33:44:55 5. Bind the DUT port to dpdk:: # ./usertools/dpdk-devbind.py -b vfio-pci 6. Launch the userland ``testpmd`` application on DUT as follows and :: /app/dpdk-testpmd -- -i --rxq= --txq= testpmd> set fwd rxonly testpmd> set verbose 1 testpmd> show port info all testpmd> start ..note:: For , you can use "-l 1,2,3,4 -n 4", you can also refer to testpmd doc for other setings. Test Case ========= Common Steps ------------ 1. validate rules. 2. create rules and list rules. 3. send matched packets, check the action hiting the rule. 4. send mismatched packets, check the packets will not hit any rules. 5. destroy rule, list rules. 6. send matched packets, check the packets will not hit any rules. All the packets in this test plan use below settings: src mac: 11:22:33:44:55:77 src mac change inputset: 00:00:00:00:00:01 session_id: 0x1111 session_id change inputset: 0x2222 ipv4 src: 10.0.0.11 ipv4 dst: 10.0.0.22 ipv4 src change inputset: 10.0.0.10 ipv4 dst change inputset: 10.0.0.20 ipv6 src: ABAB:910B:6666:3457:8295:3333:1800:2929 ipv6 dst: CDCD:910A:2222:5498:8475:1111:3900:2020 ipv6 src change inputset: ABAB:910B:6666:3457:8295:3333:1800:2920 ipv6 dst change inputset: CDCD:910A:2222:5498:8475:1111:3900:2022 dport: 1701 offset: 6 sport: 11 sport change inputset: 10 dport: 22 dport change inputset: 20 Test case 1: MAC_IPV4_L2TPV2_CONTROL ------------------------------------ This case is designed to check distribute MAC IPv4 L2TPV2 control packets based on MAC src and L2TP session ID as input set. Subcase 1: l2tpv2_session_id_MAC_IPV4_L2TPV2_CONTROL ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ rules:: testpmd> flow create 0 ingress pattern eth / ipv4 / udp / l2tpv2 type control session_id is / end actions queue index 3 / end matched packets:: >>> sendp([Ether(src="")/IP()/UDP(dport=)/L2TP(hdr=0xc80,len=12,session_id=)], iface="") >>> sendp([Ether(src="")/IP()/UDP(dport=)/L2TP(hdr=0xc80,len=12,session_id=)], iface="") mismatched packets:: >>> sendp([Ether(src="")/IP()/UDP(dport=)/L2TP(hdr=0xc80,len=12,session_id=)], iface="") >>> sendp([Ether(src="")/IPv6()/UDP(dport=)/L2TP(hdr=0xc80,len=12,session_id=)], iface="") Subcase 2: eth_l2_src_only_MAC_IPV4_L2TPV2_CONTROL ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ rules:: testpmd> flow create 0 ingress pattern eth src is / ipv4 / udp / l2tpv2 type control / end actions drop / end matched packets:: >>> sendp([Ether(src="")/IP()/UDP(dport=)/L2TP(hdr=0xc80,len=12,session_id=)], iface="") >>> sendp([Ether(src="")/IP()/UDP(dport=)/L2TP(hdr=0xc80,len=12,session_id=)], iface="") mismatched packets:: >>> sendp([Ether(src="")/IP()/UDP(dport=)/L2TP(hdr=0xc80,len=12,session_id=)], iface="") >>> sendp([Ether(src="")/IPv6()/UDP(dport=)/L2TP(hdr=0xc80,len=12,session_id=)], iface="") Test case 2: MAC_IPV6_L2TPV2_CONTROL ------------------------------------ This case is designed to check distribute MAC IPv6 L2TPV2 control packets based on MAC src and L2TP session ID as input set. Subcase 1: l2tpv2_session_id_MAC_IPV6_L2TPV2_CONTROL ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ rules:: testpmd> flow create 0 ingress pattern eth / ipv6 / udp / l2tpv2 type control session_id is 0x1111 / end actions queue index 3 / end matched packets:: >>> sendp([Ether(src="")/IPv6()/UDP(dport=)/L2TP(hdr=0xc80,len=12,session_id=)], iface="") >>> sendp([Ether(src="")/IPv6()/UDP(dport=)/L2TP(hdr=0xc80,len=12,session_id=)], iface="") mismatched packets:: >>> sendp([Ether(src="")/IPv6()/UDP(dport=)/L2TP(hdr=0xc80,len=12,session_id=)], iface="") >>> sendp([Ether(src="")/IP()/UDP(dport=)/L2TP(hdr=0xc80,len=12,session_id=)], iface="") Subcase 2: eth_l2_src_only_MAC_IPV6_L2TPV2_CONTROL ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ rules:: testpmd> flow create 0 ingress pattern eth src is / ipv6 / udp / l2tpv2 type control / end actions drop / end matched packets:: >>> sendp([Ether(src="")/IPv6()/UDP(dport=)/L2TP(hdr=0xc80,len=12,session_id=)], iface="") >>> sendp([Ether(src="")/IPv6()/UDP(dport=)/L2TP(hdr=0xc80,len=12,session_id=)], iface="") mismatched packets:: >>> sendp([Ether(src="")/IPv6()/UDP(dport=)/L2TP(hdr=0xc80,len=12,session_id=)], iface="") >>> sendp([Ether(src="")/IP()/UDP(dport=)/L2TP(hdr=0xc80,len=12,session_id=)], iface="") Test case 3: MAC_IPV4_L2TPV2 ---------------------------- This case is designed to check distribute MAC IPv4 L2TPV2 data packets based on MAC src and L2TP session ID as input set. Subcase 1: l2tpv2_session_id_MAC_IPV4_L2TPV2_DATA ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ rules:: testpmd> flow create 0 ingress pattern eth / ipv4 / udp / l2tpv2 type data session_id is / end actions queue index 3 / end matched packets:: >>> sendp([Ether(src="")/IP()/UDP(dport=)/L2TP(hdr=0x000,session_id=)], iface="") >>> sendp([Ether(src="")/IP()/UDP(dport=)/L2TP(hdr=0x000,session_id=)], iface="") mismatched packets:: >>> sendp([Ether(src="")/IP()/UDP(dport=)/L2TP(hdr=0x000,session_id=)], iface="") >>> sendp([Ether(src="")/IPv6()/UDP(dport=)/L2TP(hdr=0x000,session_id=)], iface="") Subcase 2: eth_l2_src_only_MAC_IPV4_L2TPV2_DATA ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ rules:: testpmd> flow create 0 ingress pattern eth src is / ipv4 / udp / l2tpv2 type data / end actions queue index 5 / end matched packets:: >>> sendp([Ether(src="")/IP()/UDP(dport=)/L2TP(hdr=0x000,session_id=)], iface="") >>> sendp([Ether(src="")/IP()/UDP(dport=)/L2TP(hdr=0x000,session_id=)], iface="") mismatched packets:: >>> sendp([Ether(src="")/IP()/UDP(dport=)/L2TP(hdr=0x000,session_id=)], iface="") >>> sendp([Ether(src="")/IPv6()/UDP(dport=)/L2TP(hdr=0x000,session_id=)], iface="") Subcase 3: l2tpv2_session_id_MAC_IPV4_L2TPV2_DATA_L ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ rules:: testpmd> flow create 0 ingress pattern eth / ipv4 / udp / l2tpv2 type data_l session_id is / end actions rss queues 2 3 end / end matched packets:: >>> sendp([Ether(src="")/IP()/UDP(dport=)/L2TP(hdr=0x400,len=8,session_id=)], iface="") >>> sendp([Ether(src="")/IP()/UDP(dport=)/L2TP(hdr=0x400,len=8,session_id=)], iface="") mismatched packets:: >>> sendp([Ether(src="")/IP()/UDP(dport=)/L2TP(hdr=0x400,len=8,session_id=)], iface="") >>> sendp([Ether(src="")/IPv6()/UDP(dport=)/L2TP(hdr=0x400,len=8,session_id=)], iface="") Subcase 4: eth_l2_src_only_MAC_IPV4_L2TPV2_DATA_L ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ rules:: testpmd> flow create 0 ingress pattern eth src is / ipv4 / udp / l2tpv2 type data_l / end actions queue index 3/ end matched packets:: >>> sendp([Ether(src="")/IP()/UDP(dport=)/L2TP(hdr=0x400,len=8,session_id=)], iface="") >>> sendp([Ether(src="")/IP()/UDP(dport=)/L2TP(hdr=0x400,len=8,session_id=)], iface="") mismatched packets:: >>> sendp([Ether(src="")/IP()/UDP(dport=)/L2TP(hdr=0x400,len=8,session_id=)], iface="") >>> sendp([Ether(src="")/IPv6()/UDP(dport=)/L2TP(hdr=0x400,len=8,session_id=)], iface="") Subcase 5: l2tpv2_session_id_MAC_IPV4_L2TPV2_DATA_S ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ rules:: testpmd> flow create 0 ingress pattern eth / ipv4 / udp / l2tpv2 type data_s session_id is 0x1111 / end actions passthru / end matched packets:: >>> sendp([Ether(src="")/IP()/UDP(dport=)/L2TP(hdr=0x080,session_id=)], iface="") >>> sendp([Ether(src="")/IP()/UDP(dport=)/L2TP(hdr=0x080,session_id=)], iface="") mismatched packets:: >>> sendp([Ether(src="")/IP()/UDP(dport=)/L2TP(hdr=0x080,session_id=)], iface="") >>> sendp([Ether(src="")/IPv6()/UDP(dport=)/L2TP(hdr=0x080,session_id=)], iface="") Subcase 6: eth_l2_src_only_MAC_IPV4_L2TPV2_DATA_S ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ rules:: testpmd> flow create 0 ingress pattern eth src is / ipv4 / udp / l2tpv2 type data_s / end actions queue index 6 / end matched packets:: >>> sendp([Ether(src="")/IP()/UDP(dport=)/L2TP(hdr=0x080,session_id=)], iface="") >>> sendp([Ether(src="")/IP()/UDP(dport=)/L2TP(hdr=0x080,session_id=)], iface="") mismatched packets:: >>> sendp([Ether(src="")/IP()/UDP(dport=)/L2TP(hdr=0x080,session_id=)], iface="") >>> sendp([Ether(src="")/IPv6()/UDP(dport=)/L2TP(hdr=0x080,session_id=)], iface="") Subcase 7: l2tpv2_session_id_MAC_IPV4_L2TPV2_DATA_O ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ rules:: testpmd> flow create 0 ingress pattern eth / ipv4 / udp / l2tpv2 type data_o session_id is offset_size is / end actions drop / end matched packets:: >>> sendp([Ether(src="")/IP()/UDP(dport=)/L2TP(hdr=0x020,session_id=,offset=)], iface="") >>> sendp([Ether(src="")/IP()/UDP(dport=)/L2TP(hdr=0x020,session_id=,offset=)], iface="") mismatched packets:: >>> sendp([Ether(src="")/IP()/UDP(dport=)/L2TP(hdr=0x020,session_id=,offset=)], iface="") >>> sendp([Ether(src="")/IPv6()/UDP(dport=)/L2TP(hdr=0x020,session_id=,offset=)], iface="") Subcase 8: eth_l2_src_only_MAC_IPV4_L2TPV2_DATA_O ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ rules:: testpmd> flow create 0 ingress pattern eth src is / ipv4 / udp / l2tpv2 type data_o offset_size is / end actions queue index 5 / end matched packets:: >>> sendp([Ether(src="")/IP()/UDP(dport=)/L2TP(hdr=0x020,session_id=,offset=)], iface="") >>> sendp([Ether(src="")/IP()/UDP(dport=)/L2TP(hdr=0x020,session_id=,offset=)], iface="") mismatched packets:: >>> sendp([Ether(src="")/IP()/UDP(dport=)/L2TP(hdr=0x020,session_id=,offset=)], iface="") >>> sendp([Ether(src="")/IPv6()/UDP(dport=)/L2TP(hdr=0x020,session_id=,offset=)], iface="") Subcase 9: l2tpv2_session_id_MAC_IPV4_L2TPV2_DATA_L_S ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ rules:: testpmd> flow create 0 ingress pattern eth / ipv4 / udp / l2tpv2 type data_l_s session_id is 0x1111 / end actions queue index 2 / end matched packets:: >>> sendp([Ether(src="")/IP()/UDP(dport=)/L2TP(hdr=0x480,len=12,session_id=)], iface="") >>> sendp([Ether(src="")/IP()/UDP(dport=)/L2TP(hdr=0x480,len=12,session_id=)], iface="") mismatched packets:: >>> sendp([Ether(src="")/IP()/UDP(dport=)/L2TP(hdr=0x480,len=12,session_id=)], iface="") >>> sendp([Ether(src="")/IPv6()/UDP(dport=)/L2TP(hdr=0x480,len=12,session_id=)], iface="") Subcase 10: eth_l2_src_only_MAC_IPV4_L2TPV2_DATA_L_S ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ rules:: testpmd> flow create 0 ingress pattern eth src is / ipv4 / udp / l2tpv2 type data_l_s / end actions queue index 3 / end matched packets:: >>> sendp([Ether(src="")/IP()/UDP(dport=)/L2TP(hdr=0x480,len=12,session_id=)], iface="") >>> sendp([Ether(src="")/IP()/UDP(dport=)/L2TP(hdr=0x480,len=12,session_id=)], iface="") mismatched packets:: >>> sendp([Ether(src="")/IP()/UDP(dport=)/L2TP(hdr=0x480,len=12,session_id=)], iface="") >>> sendp([Ether(src="")/IPv6()/UDP(dport=)/L2TP(hdr=0x480,len=12,session_id=)], iface="") Test case 4: MAC_IPV6_L2TPV2 ---------------------------- This case is designed to check distribute MAC IPv6 L2TPV2 data packets based on MAC src and L2TP session ID as input set. Subcase 1: l2tpv2_session_id_MAC_IPV6_L2TPV2_DATA ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ rules:: testpmd> flow create 0 ingress pattern eth / ipv6 / udp / l2tpv2 type data session_id is 0x1111 / end actions queue index 3 / end matched packets:: >>> sendp([Ether(src="")/IPv6()/UDP(dport=)/L2TP(hdr=0x000,session_id=)], iface="") >>> sendp([Ether(src="")/IPv6()/UDP(dport=)/L2TP(hdr=0x000,session_id=)], iface="") mismatched packets:: >>> sendp([Ether(src="")/IPv6()/UDP(dport=)/L2TP(hdr=0x000,session_id=)], iface="") >>> sendp([Ether(src="")/IP()/UDP(dport=)/L2TP(hdr=0x000,session_id=)], iface="") Subcase 2: eth_l2_src_only_MAC_IPV6_L2TPV2_DATA ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ rules:: testpmd> flow create 0 ingress pattern eth src is / ipv6 / udp / l2tpv2 type data / end actions queue index 5 / end matched packets:: >>> sendp([Ether(src="")/IPv6()/UDP(dport=)/L2TP(hdr=0x000,session_id=)], iface="") >>> sendp([Ether(src="")/IPv6()/UDP(dport=)/L2TP(hdr=0x000,session_id=)], iface="") mismatched packets:: >>> sendp([Ether(src="")/IPv6()/UDP(dport=)/L2TP(hdr=0x000,session_id=)], iface="") >>> sendp([Ether(src="")/IP()/UDP(dport=)/L2TP(hdr=0x000,session_id=)], iface="") Subcase 3: l2tpv2_session_id_MAC_IPV6_L2TPV2_DATA_L ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ rules:: testpmd> flow create 0 ingress pattern eth / ipv6 / udp / l2tpv2 type data_l session_id is / end actions rss queues 2 3 end / end matched packets:: >>> sendp([Ether(src="")/IPv6()/UDP(dport=)/L2TP(hdr=0x400,len=8,session_id=)], iface="") >>> sendp([Ether(src="")/IPv6()/UDP(dport=)/L2TP(hdr=0x400,len=8,session_id=)], iface="") mismatched packets:: >>> sendp([Ether(src="")/IPv6()/UDP(dport=)/L2TP(hdr=0x400,len=8,session_id=)], iface="") >>> sendp([Ether(src="")/IP()/UDP(dport=)/L2TP(hdr=0x400,len=8,session_id=)], iface="") Subcase 4: eth_l2_src_only_MAC_IPV6_L2TPV2_DATA_L ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ rules:: testpmd> flow create 0 ingress pattern eth src is / ipv6 / udp / l2tpv2 type data_l / end actions queue index 3 / end matched packets:: >>> sendp([Ether(src="")/IPv6()/UDP(dport=)/L2TP(hdr=0x400,len=8,session_id=)], iface="") >>> sendp([Ether(src="")/IPv6()/UDP(dport=)/L2TP(hdr=0x400,len=8,session_id=)], iface="") mismatched packets:: >>> sendp([Ether(src="")/IPv6()/UDP(dport=)/L2TP(hdr=0x400,len=8,session_id=], iface="") >>> sendp([Ether(src="")/IP()/UDP(dport=)/L2TP(hdr=0x400,len=8,session_id=)], iface="") Subcase 5: l2tpv2_session_id_MAC_IPV6_L2TPV2_DATA_S ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ rules:: testpmd> flow create 0 ingress pattern eth / ipv6 / udp / l2tpv2 type data_s session_id is / end actions mark id 1 / end matched packets:: >>> sendp([Ether(src="")/IPv6()/UDP(dport=)/L2TP(hdr=0x080,session_id=)], iface="") >>> sendp([Ether(src="")/IPv6()/UDP(dport=)/L2TP(hdr=0x080,session_id=)], iface="") mismatched packets:: >>> sendp([Ether(src="")/IPv6()/UDP(dport=)/L2TP(hdr=0x080,session_id=)], iface="") >>> sendp([Ether(src="")/IP()/UDP(dport=)/L2TP(hdr=0x080,session_id=)], iface="") Subcase 6: eth_l2_src_only_MAC_IPV6_L2TPV2_DATA_S ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ rules:: testpmd> flow create 0 ingress pattern eth src is / ipv6 / udp / l2tpv2 type data_s / end actions queue index 6 / end matched packets:: >>> sendp([Ether(src="")/IPv6()/UDP(dport=)/L2TP(hdr=0x080,session_id=)], iface="") >>> sendp([Ether(src="")/IPv6()/UDP(dport=)/L2TP(hdr=0x080,session_id=)], iface="") mismatched packets:: >>> sendp([Ether(src="")/IPv6()/UDP(dport=)/L2TP(hdr=0x080,session_id=)], iface="") >>> sendp([Ether(src="")/IP()/UDP(dport=)/L2TP(hdr=0x080,session_id=)], iface="") Subcase 7: l2tpv2_session_id_MAC_IPV6_L2TPV2_DATA_O ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ rules:: testpmd> flow create 0 ingress pattern eth / ipv6 / udp / l2tpv2 type data_o session_id is offset_size is / end actions drop / end matched packets:: >>> sendp([Ether(src="")/IPv6()/UDP(dport=)/L2TP(hdr=0x020,session_id=,offset=)], iface="") >>> sendp([Ether(src="")/IPv6()/UDP(dport=)/L2TP(hdr=0x020,session_id=,offset=)], iface="") mismatched packets:: >>> sendp([Ether(src="")/IPv6()/UDP(dport=)/L2TP(hdr=0x020,session_id=,offset=)], iface="") >>> sendp([Ether(src="")/IP()/UDP(dport=)/L2TP(hdr=0x020,session_id=,offset=)], iface="") Subcase 8: eth_l2_src_only_MAC_IPV6_L2TPV2_DATA_O ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ rules:: testpmd> flow create 0 ingress pattern eth src is / ipv6 / udp / l2tpv2 type data_o offset_size is / end actions queue index 5 / end matched packets:: >>> sendp([Ether(src="")/IPv6()/UDP(dport=)/L2TP(hdr=0x020,session_id=,offset=)], iface="") >>> sendp([Ether(src="")/IPv6()/UDP(dport=)/L2TP(hdr=0x020,session_id=,offset=)], iface="") mismatched packets:: >>> sendp([Ether(src="")/IPv6()/UDP(dport=)/L2TP(hdr=0x020,session_id=,offset=)], iface="") >>> sendp([Ether(src="")/IP()/UDP(dport=)/L2TP(hdr=0x020,session_id=,offset=)], iface="") Subcase 9: l2tpv2_session_id_MAC_IPV6_L2TPV2_DATA_L_S ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ rules:: testpmd> flow create 0 ingress pattern eth / ipv6 / udp / l2tpv2 type data_l_s session_id is / end actions queue index 2 / end matched packets:: >>> sendp([Ether(src="")/IPv6()/UDP(dport=)/L2TP(hdr=0x480,len=12,session_id=)], iface="") >>> sendp([Ether(src="")/IPv6()/UDP(dport=)/L2TP(hdr=0x480,len=12,session_id=)], iface="") mismatched packets:: >>> sendp([Ether(src="")/IPv6()/UDP(dport=)/L2TP(hdr=0x480,len=12,session_id=)], iface="") >>> sendp([Ether(src="")/IP()/UDP(dport=)/L2TP(hdr=0x480,len=12,session_id=)], iface="") Subcase 10: eth_l2_src_only_MAC_IPV6_L2TPV2_DATA_L_S ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ rules:: testpmd> flow create 0 ingress pattern eth src is / ipv6 / udp / l2tpv2 type data_l_s / end actions queue index 3 / end matched packets:: >>> sendp([Ether(src="")/IPv6()/UDP(dport=)/L2TP(hdr=0x480,len=12,session_id=)], iface="") >>> sendp([Ether(src="")/IPv6()/UDP(dport=)/L2TP(hdr=0x480,len=12,session_id=)], iface="") mismatched packets:: >>> sendp([Ether(src="")/IPv6()/UDP(dport=)/L2TP(hdr=0x480,len=12,session_id=)], iface="") >>> sendp([Ether(src="")/IP()/UDP(dport=)/L2TP(hdr=0x480,len=12,session_id=)], iface="") Test case 5: MAC_IPV4_PPPoL2TPV2 -------------------------------- This case is designed to check distribute MAC IPv4 PPPoL2TPV2 data packets based on MAC src and L2TP session ID as input set. Subcase 1: l2tpv2_session_id_MAC_IPV4_PPPoL2TPV2_DATA ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ rules:: testpmd> flow create 0 ingress pattern eth / ipv4 / udp / l2tpv2 type data session_id is / ppp / end actions queue index 3 / end matched packets:: >>> sendp([Ether(src="")/IP()/UDP(dport=)/L2TP(hdr=0x000,session_id=)/HDLC()/Raw(b"\\x00\\x00")], iface="") >>> sendp([Ether(src="")/IP()/UDP(dport=)/L2TP(hdr=0x000,session_id=)/HDLC()/Raw(b"\\x00\\x00")], iface="") mismatched packets:: >>> sendp([Ether(src="")/IP()/UDP(dport=)/L2TP(hdr=0x000,session_id=)/HDLC()/Raw(b"\\x00\\x00")], iface="") >>> sendp([Ether(src="")/IPv6()/UDP(dport=)/L2TP(hdr=0x000,session_id=)/HDLC()/Raw(b"\\x00\\x00")], iface="") Subcase 2: eth_l2_src_only_MAC_IPV4_PPPoL2TPV2_DATA ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ rules:: testpmd> flow create 0 ingress pattern eth src is / ipv4 / udp / l2tpv2 type data / ppp / end actions queue index 5 / end matched packets:: >>> sendp([Ether(src="")/IP()/UDP(dport=)/L2TP(hdr=0x000,session_id=)/HDLC()/Raw(b"\\x00\\x00")], iface="") >>> sendp([Ether(src="")/IP()/UDP(dport=)/L2TP(hdr=0x000,session_id=)/HDLC()/Raw(b"\\x00\\x00")], iface="") mismatched packets:: >>> sendp([Ether(src="")/IP()/UDP(dport=)/L2TP(hdr=0x000,session_id=)/HDLC()/Raw(b"\\x00\\x00")], iface="") >>> sendp([Ether(src="")/IPv6()/UDP(dport=)/L2TP(hdr=0x000,session_id=)/HDLC()/Raw(b"\\x00\\x00")], iface="") Subcase 3: l2tpv2_session_id_MAC_IPV4_PPPoL2TPV2_DATA_L ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ rules:: testpmd> flow create 0 ingress pattern eth / ipv4 / udp / l2tpv2 type data_l session_id is / ppp / end actions rss queues 2 3 end / end matched packets:: >>> sendp([Ether(src="")/IP()/UDP(dport=)/L2TP(hdr=0x400,len=12,session_id=)/HDLC()/Raw(b"\\x00\\x00")], iface="") >>> sendp([Ether(src="")/IP()/UDP(dport=)/L2TP(hdr=0x400,len=12,session_id=)/HDLC()/Raw(b"\\x00\\x00")], iface="") mismatched packets:: >>> sendp([Ether(src="")/IP()/UDP(dport=)/L2TP(hdr=0x400,len=12,session_id=)/HDLC()/Raw(b"\\x00\\x00")], iface="") >>> sendp([Ether(src="")/IPv6()/UDP(dport=)/L2TP(hdr=0x400,len=12,session_id=)/HDLC()/Raw(b"\\x00\\x00")], iface="") Subcase 4: eth_l2_src_only_MAC_IPV4_PPPoL2TPV2_DATA_L ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ rules:: testpmd> flow create 0 ingress pattern eth src is / ipv4 / udp / l2tpv2 type data_l / ppp / end actions queue index 3 / end matched packets:: >>> sendp([Ether(src="")/IP()/UDP(dport=)/L2TP(hdr=0x400,len=12,session_id=)/HDLC()/Raw(b"\\x00\\x00")], iface="") >>> sendp([Ether(src="")/IP()/UDP(dport=)/L2TP(hdr=0x400,len=12,session_id=)/HDLC()/Raw(b"\\x00\\x00")], iface="") mismatched packets:: >>> sendp([Ether(src="")/IP()/UDP(dport=)/L2TP(hdr=0x400,len=12,session_id=)/HDLC()/Raw(b"\\x00\\x00")], iface="") >>> sendp([Ether(src="")/IPv6()/UDP(dport=)/L2TP(hdr=0x400,len=12,session_id=)/HDLC()/Raw(b"\\x00\\x00")], iface="") Subcase 5: l2tpv2_session_id_MAC_IPV4_PPPoL2TPV2_DATA_S ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ rules:: testpmd> flow create 0 ingress pattern eth / ipv4 / udp / l2tpv2 type data_s session_id is / ppp / end actions passthru / end matched packets:: >>> sendp([Ether(src="")/IP()/UDP(dport=)/L2TP(hdr=0x080,session_id=)/HDLC()/Raw(b"\\x00\\x00")], iface="") >>> sendp([Ether(src="")/IP()/UDP(dport=)/L2TP(hdr=0x080,session_id=)/HDLC()/Raw(b"\\x00\\x00")], iface="") mismatched packets:: >>> sendp([Ether(src="")/IP()/UDP(dport=)/L2TP(hdr=0x080,session_id=)/HDLC()/Raw(b"\\x00\\x00")], iface="") >>> sendp([Ether(src="")/IPv6()/UDP(dport=)/L2TP(hdr=0x080,session_id=)/HDLC()/Raw(b"\\x00\\x00")], iface="") Subcase 6: eth_l2_src_only_MAC_IPV4_PPPoL2TPV2_DATA_S ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ rules:: testpmd> flow create 0 ingress pattern eth src is / ipv4 / udp / l2tpv2 type data_s / ppp / end actions queue index 6/ end matched packets:: >>> sendp([Ether(src="")/IP()/UDP(dport=)/L2TP(hdr=0x080,session_id=)/HDLC()/Raw(b"\\x00\\x00")], iface="") >>> sendp([Ether(src="")/IP()/UDP(dport=)/L2TP(hdr=0x080,session_id=)/HDLC()/Raw(b"\\x00\\x00")], iface="") mismatched packets:: >>> sendp([Ether(src="")/IP()/UDP(dport=)/L2TP(hdr=0x080,session_id=)/HDLC()/Raw(b"\\x00\\x00")], iface="") >>> sendp([Ether(src="")/IPv6()/UDP(dport=)/L2TP(hdr=0x080,session_id=)/HDLC()/Raw(b"\\x00\\x00")], iface="") Subcase 7: l2tpv2_session_id_MAC_IPV4_PPPoL2TPV2_DATA_O ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ rules:: testpmd> flow create 0 ingress pattern eth / ipv4 / udp / l2tpv2 type data_o session_id is offset_size is / ppp / end actions drop / end matched packets:: >>> sendp([Ether(src="")/IP()/UDP(dport=)/L2TP(hdr=0x020,session_id=,offset=)/Raw(b"\\x00\\x00\\x00\\x00")/HDLC()/Raw(b"\\x00\\x00")], iface="") >>> sendp([Ether(src="")/IP()/UDP(dport=)/L2TP(hdr=0x020,session_id=,offset=)/Raw(b"\\x00\\x00\\x00\\x00")/HDLC()/Raw(b"\\x00\\x00")], iface="") mismatched packets:: >>> sendp([Ether(src="")/IP()/UDP(dport=)/L2TP(hdr=0x020,session_id=,offset=)/Raw(b"\\x00\\x00\\x00\\x00")/HDLC()/Raw(b"\\x00\\x00")], iface="") >>> sendp([Ether(src="")/IPv6()/UDP(dport=)/L2TP(hdr=0x020,session_id=,offset=)/Raw(b"\\x00\\x00\\x00\\x00")/HDLC()/Raw(b"\\x00\\x00")], iface="") Subcase 8: eth_l2_src_only_MAC_IPV4_PPPoL2TPV2_DATA_O ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ rules:: testpmd> flow create 0 ingress pattern eth src is / ipv4 / udp / l2tpv2 type data_o offset_size is / ppp / end actions queue index 5 / end matched packets:: >>> sendp([Ether(src="")/IP()/UDP(dport=)/L2TP(hdr=0x020,session_id=,offset=)/Raw(b"\\x00\\x00\\x00\\x00")/HDLC()/Raw(b"\\x00\\x00")], iface="") >>> sendp([Ether(src="")/IP()/UDP(dport=)/L2TP(hdr=0x020,session_id=,offset=)/Raw(b"\\x00\\x00\\x00\\x00")/HDLC()/Raw(b"\\x00\\x00")], iface="") mismatched packets:: >>> sendp([Ether(src="")/IP()/UDP(dport=)/L2TP(hdr=0x020,session_id=,offset=)/Raw(b"\\x00\\x00\\x00\\x00")/HDLC()/Raw(b"\\x00\\x00")], iface="") >>> sendp([Ether(src="")/IPv6()/UDP(dport=)/L2TP(hdr=0x020,session_id=,offset=)/Raw(b"\\x00\\x00\\x00\\x00")/HDLC()/Raw(b"\\x00\\x00")], iface="") Subcase 9: l2tpv2_session_id_MAC_IPV4_PPPoL2TPV2_DATA_L_S ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ rules:: testpmd> flow create 0 ingress pattern eth / ipv4 / udp / l2tpv2 type data_l_s session_id is / ppp / end actions queue index 2 / end matched packets:: >>> sendp([Ether(src="")/IP()/UDP(dport=)/L2TP(hdr=0x480,len=16,session_id=)/HDLC()/Raw(b"\\x00\\x00")], iface="") >>> sendp([Ether(src="")/IP()/UDP(dport=)/L2TP(hdr=0x480,len=16,session_id=)/HDLC()/Raw(b"\\x00\\x00")], iface="") mismatched packets:: >>> sendp([Ether(src="")/IP()/UDP(dport=)/L2TP(hdr=0x480,len=16,session_id=)/HDLC()/Raw(b"\\x00\\x00")], iface="") >>> sendp([Ether(src="")/IPv6()/UDP(dport=)/L2TP(hdr=0x480,len=16,session_id=)/HDLC()/Raw(b"\\x00\\x00")], iface="") Subcase 10: eth_l2_src_only_MAC_IPV4_PPPoL2TPV2_DATA_L_S ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ rules:: testpmd> flow create 0 ingress pattern eth src is / ipv4 / udp / l2tpv2 type data_l_s / ppp / end actions queue index 3 / end matched packets:: >>> sendp([Ether(src="")/IP()/UDP(dport=)/L2TP(hdr=0x480,len=16,session_id=)/HDLC()/Raw(b"\\x00\\x00")], iface="") >>> sendp([Ether(src="")/IP()/UDP(dport=)/L2TP(hdr=0x480,len=16,session_id=)/HDLC()/Raw(b"\\x00\\x00")], iface="") mismatched packets:: >>> sendp([Ether(src="")/IP()/UDP(dport=)/L2TP(hdr=0x480,len=16,session_id=)/HDLC()/Raw(b"\\x00\\x00")], iface="") >>> sendp([Ether(src="")/IPv6()/UDP(dport=)/L2TP(hdr=0x480,len=16,session_id=)/HDLC()/Raw(b"\\x00\\x00")], iface="") Test case 6: MAC_IPV6_PPPoL2TPV2 -------------------------------- This case is designed to check distribute MAC IPv6 PPPoL2TPV2 data packets based on MAC src and L2TP session ID as input set. Subcase 1: l2tpv2_session_id_MAC_IPV6_PPPoL2TPV2_DATA ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ rules:: testpmd> flow create 0 ingress pattern eth / ipv6 / udp / l2tpv2 type data session_id is / ppp / end actions queue index 3 / end matched packets:: >>> sendp([Ether(src="")/IPv6()/UDP(dport=)/L2TP(hdr=0x000,session_id=)/HDLC()/Raw(b"\\x00\\x00")], iface="") >>> sendp([Ether(src="")/IPv6()/UDP(dport=)/L2TP(hdr=0x000,session_id=)/HDLC()/Raw(b"\\x00\\x00")], iface="") mismatched packets:: >>> sendp([Ether(src="")/IPv6()/UDP(dport=)/L2TP(hdr=0x000,session_id=)/HDLC()/Raw(b"\\x00\\x00")], iface="") >>> sendp([Ether(src="")/IP()/UDP(dport=)/L2TP(hdr=0x000,session_id=)/HDLC()/Raw(b"\\x00\\x00")], iface="") Subcase 2: eth_l2_src_only_MAC_IPV6_PPPoL2TPV2_DATA ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ rules:: testpmd> flow create 0 ingress pattern eth src is / ipv6 / udp / l2tpv2 type data / ppp / end actions queue index 5 / end matched packets:: >>> sendp([Ether(src="")/IPv6()/UDP(dport=)/L2TP(hdr=0x000,session_id=)/HDLC()/Raw(b"\\x00\\x00")], iface="") >>> sendp([Ether(src="")/IPv6()/UDP(dport=)/L2TP(hdr=0x000,session_id=)/HDLC()/Raw(b"\\x00\\x00")], iface="") mismatched packets:: >>> sendp([Ether(src="")/IPv6()/UDP(dport=)/L2TP(hdr=0x000,session_id=)/HDLC()/Raw(b"\\x00\\x00")], iface="") >>> sendp([Ether(src="")/IP()/UDP(dport=)/L2TP(hdr=0x000,session_id=)/HDLC()/Raw(b"\\x00\\x00")], iface="") Subcase 3: l2tpv2_session_id_MAC_IPV6_PPPoL2TPV2_DATA_L ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ rules:: testpmd> flow create 0 ingress pattern eth / ipv6 / udp / l2tpv2 type data_l session_id is / ppp / end actions rss queues 2 3 end / end matched packets:: >>> sendp([Ether(src="")/IPv6()/UDP(dport=)/L2TP(hdr=0x400,len=12,session_id=)/HDLC()/Raw(b"\\x00\\x00")], iface="") >>> sendp([Ether(src="")/IPv6()/UDP(dport=)/L2TP(hdr=0x400,len=12,session_id=)/HDLC()/Raw(b"\\x00\\x00")], iface="") mismatched packets:: >>> sendp([Ether(src="")/IPv6()/UDP(dport=)/L2TP(hdr=0x400,len=12,session_id=)/HDLC()/Raw(b"\\x00\\x00")], iface="") >>> sendp([Ether(src="")/IP()/UDP(dport=)/L2TP(hdr=0x400,len=12,session_id=)/HDLC()/Raw(b"\\x00\\x00")], iface="") Subcase 4: eth_l2_src_only_MAC_IPV6_PPPoL2TPV2_DATA_L ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ rules:: testpmd> flow create 0 ingress pattern eth src is / ipv6 / udp / l2tpv2 type data_l / ppp / end actions queue index 3 / end matched packets:: >>> sendp([Ether(src="")/IPv6()/UDP(dport=)/L2TP(hdr=0x400,len=12,session_id=)/HDLC()/Raw(b"\\x00\\x00")], iface="") >>> sendp([Ether(src="")/IPv6()/UDP(dport=)/L2TP(hdr=0x400,len=12,session_id=)/HDLC()/Raw(b"\\x00\\x00")], iface="") mismatched packets:: >>> sendp([Ether(src="")/IPv6()/UDP(dport=)/L2TP(hdr=0x400,len=12,session_id=)/HDLC()/Raw(b"\\x00\\x00")], iface="") >>> sendp([Ether(src="")/IP()/UDP(dport=)/L2TP(hdr=0x400,len=12,session_id=)/HDLC()/Raw(b"\\x00\\x00")], iface="") Subcase 5: l2tpv2_session_id_MAC_IPV6_PPPoL2TPV2_DATA_S ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ rules:: testpmd> flow create 0 ingress pattern eth / ipv6 / udp / l2tpv2 type data_s session_id is / ppp / end actions mark id 1 / end matched packets:: >>> sendp([Ether(src="")/IPv6()/UDP(dport=)/L2TP(hdr=0x080,session_id=)/HDLC()/Raw(b"\\x00\\x00")], iface="") >>> sendp([Ether(src="")/IPv6()/UDP(dport=)/L2TP(hdr=0x080,session_id=)/HDLC()/Raw(b"\\x00\\x00")], iface="") mismatched packets:: >>> sendp([Ether(src="")/IPv6()/UDP(dport=)/L2TP(hdr=0x080,session_id=)/HDLC()/Raw(b"\\x00\\x00")], iface="") >>> sendp([Ether(src="")/IP()/UDP(dport=)/L2TP(hdr=0x080,session_id=)/HDLC()/Raw(b"\\x00\\x00")], iface="") Subcase 6: eth_l2_src_only_MAC_IPV6_PPPoL2TPV2_DATA_S ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ rules:: testpmd> flow create 0 ingress pattern eth src is / ipv6 / udp / l2tpv2 type data_s / ppp / end actions queue index 6 / end matched packets:: >>> sendp([Ether(src="")/IPv6()/UDP(dport=)/L2TP(hdr=0x080,session_id=)/HDLC()/Raw(b"\\x00\\x00")], iface="") >>> sendp([Ether(src="")/IPv6()/UDP(dport=)/L2TP(hdr=0x080,session_id=)/HDLC()/Raw(b"\\x00\\x00")], iface="") mismatched packets:: >>> sendp([Ether(src="")/IPv6()/UDP(dport=)/L2TP(hdr=0x080,session_id=)/HDLC()/Raw(b"\\x00\\x00")], iface="") >>> sendp([Ether(src="")/IP()/UDP(dport=)/L2TP(hdr=0x080,session_id=)/HDLC()/Raw(b"\\x00\\x00")], iface="") Subcase 7: l2tpv2_session_id_MAC_IPV6_PPPoL2TPV2_DATA_O ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ rules:: testpmd> flow create 0 ingress pattern eth / ipv6 / udp / l2tpv2 type data_o session_id is offset_size is / ppp / end actions drop / end matched packets:: >>> sendp([Ether(src="")/IPv6()/UDP(dport=)/L2TP(hdr=0x020,session_id=,offset=)/Raw(b"\\x00\\x00\\x00\\x00")/HDLC()/Raw(b"\\x00\\x00")], iface="") >>> sendp([Ether(src="")/IPv6()/UDP(dport=)/L2TP(hdr=0x020,session_id=,offset=)/Raw(b"\\x00\\x00\\x00\\x00")/HDLC()/Raw(b"\\x00\\x00")], iface="") mismatched packets:: >>> sendp([Ether(src="")/IPv6()/UDP(dport=)/L2TP(hdr=0x020,session_id=,offset=)/Raw(b"\\x00\\x00\\x00\\x00")/HDLC()/Raw(b"\\x00\\x00")], iface="") >>> sendp([Ether(src="")/IP()/UDP(dport=)/L2TP(hdr=0x020,session_id=,offset=)/Raw(b"\\x00\\x00\\x00\\x00")/HDLC()/Raw(b"\\x00\\x00")], iface="") Subcase 8: eth_l2_src_only_MAC_IPV6_PPPoL2TPV2_DATA_O ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ rules:: testpmd> flow create 0 ingress pattern eth src is / ipv6 / udp / l2tpv2 type data_o offset_size is / ppp / end actions queue index 5 / end matched packets:: >>> sendp([Ether(src="")/IPv6()/UDP(dport=)/L2TP(hdr=0x020,session_id=,offset=)/Raw(b"\\x00\\x00\\x00\\x00")/HDLC()/Raw(b"\\x00\\x00")], iface="") >>> sendp([Ether(src="")/IPv6()/UDP(dport=)/L2TP(hdr=0x020,session_id=,offset=)/Raw(b"\\x00\\x00\\x00\\x00")/HDLC()/Raw(b"\\x00\\x00")], iface="") mismatched packets:: >>> sendp([Ether(src="")/IPv6()/UDP(dport=)/L2TP(hdr=0x020,session_id=,offset=)/Raw(b"\\x00\\x00\\x00\\x00")/HDLC()/Raw(b"\\x00\\x00")], iface="") >>> sendp([Ether(src="")/IP()/UDP(dport=)/L2TP(hdr=0x020,session_id=,offset=)/Raw(b"\\x00\\x00\\x00\\x00")/HDLC()/Raw(b"\\x00\\x00")], iface="") Subcase 9: l2tpv2_session_id_MAC_IPV6_PPPoL2TPV2_DATA_L_S ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ rules:: testpmd> flow create 0 ingress pattern eth / ipv6 / udp / l2tpv2 type data_l_s session_id is / ppp / end actions queue index 2 / end matched packets:: >>> sendp([Ether(src="")/IPv6()/UDP(dport=)/L2TP(hdr=0x480,len=16,session_id=)/HDLC()/Raw(b"\\x00\\x00")], iface="") >>> sendp([Ether(src="")/IPv6()/UDP(dport=)/L2TP(hdr=0x480,len=16,session_id=)/HDLC()/Raw(b"\\x00\\x00")], iface="") mismatched packets:: >>> sendp([Ether(src="")/IPv6()/UDP(dport=)/L2TP(hdr=0x480,len=16,session_id=)/HDLC()/Raw(b"\\x00\\x00")], iface="") >>> sendp([Ether(src="")/IP()/UDP(dport=)/L2TP(hdr=0x480,len=16,session_id=)/HDLC()/Raw(b"\\x00\\x00")], iface="") Subcase 10: eth_l2_src_only_MAC_IPV6_PPPoL2TPV2_DATA_L_S ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ rules:: testpmd> flow create 0 ingress pattern eth src is / ipv6 / udp / l2tpv2 type data_l_s / ppp / end actions queue index 3 / end matched packets:: >>> sendp([Ether(src="")/IPv6()/UDP(dport=)/L2TP(hdr=0x480,len=16,session_id=)/HDLC()/Raw(b"\\x00\\x00")], iface="") >>> sendp([Ether(src="")/IPv6()/UDP(dport=)/L2TP(hdr=0x480,len=16,session_id=)/HDLC()/Raw(b"\\x00\\x00")], iface="") mismatched packets:: >>> sendp([Ether(src="")/IPv6()/UDP(dport=)/L2TP(hdr=0x480,len=16,session_id=)/HDLC()/Raw(b"\\x00\\x00")], iface="") >>> sendp([Ether(src="")/IP()/UDP(dport=)/L2TP(hdr=0x480,len=16,session_id=)/HDLC()/Raw(b"\\x00\\x00")], iface="") Test case 7: MAC_IPV4_PPPoL2TPV2_IPV4_PAY ----------------------------------------- This case is designed to check distribute MAC IPv4 PPPoL2TPV2 IPv4 data packets based on inner IP src+dest address as input set. Subcase 1: ipv4_MAC_IPV4_PPPoL2TPV2_IPV4_PAY_DATA ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ rules:: testpmd> flow create 0 ingress pattern eth / ipv4 / udp / l2tpv2 type data / ppp / ipv4 src is dst is / end actions queue index 3 / end matched packets:: >>> sendp([Ether(src="")/IP()/UDP(dport=)/L2TP(hdr=0x000)/HDLC()/Raw(b"\\x00\\x21")/IP(src="",dst="")], iface="") >>> sendp([Ether(src="")/IP()/UDP(dport=)/L2TP(hdr=0x000)/HDLC()/Raw(b"\\x00\\x21")/IP(src="",dst="")], iface="") mismatched packets:: >>> sendp([Ether(src="")/IP()/UDP(dport=)/L2TP(hdr=0x000)/HDLC()/Raw(b"\\x00\\x21")/IP(src="",dst="")], iface="") >>> sendp([Ether(src="")/IP()/UDP(dport=)/L2TP(hdr=0x000)/HDLC()/Raw(b"\\x00\\x21")/IP(src="",dst="")], iface="") >>> sendp([Ether(src="")/IPv6()/UDP(dport=)/L2TP(hdr=0x000)/HDLC()/Raw(b"\\x00\\x21")/IP(src="",dst="")], iface="") Subcase 2: ipv4_MAC_IPV4_PPPoL2TPV2_IPV4_PAY_DATA_L ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ rules:: testpmd> flow create 0 ingress pattern eth / ipv4 / udp / l2tpv2 type data_l / ppp / ipv4 src is dst is / end actions queue index 5 / end matched packets:: >>> sendp([Ether(src="")/IP()/UDP(dport=)/L2TP(hdr=0x400,len=32)/HDLC()/Raw(b"\\x00\\x21")/IP(src="",dst="")], iface="") >>> sendp([Ether(src="")/IP()/UDP(dport=)/L2TP(hdr=0x400,len=32)/HDLC()/Raw(b"\\x00\\x21")/IP(src="",dst="")], iface="") mismatched packets:: >>> sendp([Ether(src="")/IP()/UDP(dport=)/L2TP(hdr=0x400,len=32)/HDLC()/Raw(b"\\x00\\x21")/IP(src="",dst="")], iface="") >>> sendp([Ether(src="")/IP()/UDP(dport=)/L2TP(hdr=0x400,len=32)/HDLC()/Raw(b"\\x00\\x21")/IP(src="",dst="")], iface="") >>> sendp([Ether(src="")/IPv6()/UDP(dport=)/L2TP(hdr=0x400,len=32)/HDLC()/Raw(b"\\x00\\x21")/IP(src="",dst="")], iface="") Subcase 3: ipv4_MAC_IPV4_PPPoL2TPV2_IPV4_PAY_DATA_S ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ rules:: testpmd> flow create 0 ingress pattern eth / ipv4 / udp / l2tpv2 type data_s / ppp / ipv4 src is dst is / end actions rss queues 2 3 end / end matched packets:: >>> sendp([Ether(src="")/IP()/UDP(dport=)/L2TP(hdr=0x080)/HDLC()/Raw(b"\\x00\\x21")/IP(src="",dst="")], iface="") >>> sendp([Ether(src="")/IP()/UDP(dport=)/L2TP(hdr=0x080)/HDLC()/Raw(b"\\x00\\x21")/IP(src="",dst="")], iface="") mismatched packets:: >>> sendp([Ether(src="")/IP()/UDP(dport=)/L2TP(hdr=0x080)/HDLC()/Raw(b"\\x00\\x21")/IP(src="",dst="")], iface="") >>> sendp([Ether(src="")/IP()/UDP(dport=)/L2TP(hdr=0x080)/HDLC()/Raw(b"\\x00\\x21")/iIP(src="",dst="")], iface="") >>> sendp([Ether(src="")/IPv6()/UDP(dport=)/L2TP(hdr=0x080)/HDLC()/Raw(b"\\x00\\x21")/IP(src="",dst="")], iface="") Subcase 4: ipv4_MAC_IPV4_PPPoL2TPV2_IPV4_PAY_DATA_O ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ rules:: testpmd> flow create 0 ingress pattern eth / ipv4 / udp / l2tpv2 type data_o offset_size is / ppp / ipv4 src is dst is / end actions queue index 2 / end matched packets:: >>> sendp([Ether(src="")/IP()/UDP(dport=)/L2TP(hdr=0x020,offset=)/Raw(b"\\x00\\x00\\x00\\x00")/HDLC()/Raw(b"\\x00\\x21")/IP(src="",dst="")], iface="") >>> sendp([Ether(src="")/IP()/UDP(dport=)/L2TP(hdr=0x020,offset=)/Raw(b"\\x00\\x00\\x00\\x00")/HDLC()/Raw(b"\\x00\\x21")/IP(src="",dst="")], iface="") mismatched packets:: >>> sendp([Ether(src="")/IP()/UDP(dport=)/L2TP(hdr=0x020,offset=)/Raw(b"\\x00\\x00\\x00\\x00")/HDLC()/Raw(b"\\x00\\x21")/IP(src="",dst="")], iface="") >>> sendp([Ether(src="")/IP()/UDP(dport=)/L2TP(hdr=0x020,offset=)/Raw(b"\\x00\\x00\\x00\\x00")/HDLC()/Raw(b"\\x00\\x21")/IP(src="",dst="")], iface="") >>> sendp([Ether(src="")/IPv6()/UDP(dport=)/L2TP(hdr=0x020,offset=)/Raw(b"\\x00\\x00\\x00\\x00")/HDLC()/Raw(b"\\x00\\x21")/IP(src="",dst="")], iface="") Subcase 5: ipv4_MAC_IPV4_PPPoL2TPV2_IPV4_PAY_DATA_L_S ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ rules:: testpmd> flow create 0 ingress pattern eth / ipv4 / udp / l2tpv2 type data_l_s / ppp / ipv4 src is dst is / end actions drop / end matched packets:: >>> sendp([Ether(src="")/IP()/UDP(dport=)/L2TP(hdr=0x480,len=36)/HDLC()/Raw(b"\\x00\\x21")/IP(src="",dst="")], iface="") >>> sendp([Ether(src="")/IP()/UDP(dport=)/L2TP(hdr=0x480,len=36)/HDLC()/Raw(b"\\x00\\x21")/IP(src="",dst="")], iface="") mismatched packets:: >>> sendp([Ether(src="")/IP()/UDP(dport=)/L2TP(hdr=0x480,len=36)/HDLC()/Raw(b"\\x00\\x21")/IP(src="",dst="")], iface="") >>> sendp([Ether(src="")/IP()/UDP(dport=)/L2TP(hdr=0x480,len=36)/HDLC()/Raw(b"\\x00\\x21")/IP(src="",dst="")], iface="") >>> sendp([Ether(src="")/IPv6()/UDP(dport=)/L2TP(hdr=0x480,len=36)/HDLC()/Raw(b"\\x00\\x21")/IP(src="",dst="")], iface="") Test case 8: MAC_IPV4_PPPoL2TPV2_IPV4_UDP_PAY --------------------------------------------- This case is designed to check distribute MAC IPv4 PPPoL2TPV2 IPv4 UDP data packets based on IP src+dest address and inner UDP src+dest port as input set. Subcase 1: ipv4_udp_MAC_IPV4_PPPoL2TPV2_IPV4_UDP_PAY_DATA ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ rules:: testpmd> flow create 0 ingress pattern eth / ipv4 / udp / l2tpv2 type data / ppp / ipv4 src is / udp src is / end actions queue index 3 / end matched packets:: >>> sendp([Ether(src="")/IP()/UDP(dport=)/L2TP(hdr=0x000)/HDLC()/Raw(b"\\x00\\x21")/IP(src="")/UDP(sport=)], iface="") >>> sendp([Ether(src="")/IP()/UDP(dport=)/L2TP(hdr=0x000)/HDLC()/Raw(b"\\x00\\x21")/IP(src="")/UDP(sport=)], iface="") mismatched packets:: >>> sendp([Ether(src="")/IP()/UDP(dport=)/L2TP(hdr=0x000)/HDLC()/Raw(b"\\x00\\x21")/IP(src="")/UDP(sport=)], iface="") >>> sendp([Ether(src="")/IP()/UDP(dport=)/L2TP(hdr=0x000)/HDLC()/Raw(b"\\x00\\x21")/IP(src="")/UDP(sport=)], iface="") >>> sendp([Ether(src="")/IPv6()/UDP(dport=)/L2TP(hdr=0x000)/HDLC()/Raw(b"\\x00\\x21")/IP(src="")/UDP(sport=)], iface="") Subcase 2: ipv4_udp_MAC_IPV4_PPPoL2TPV2_IPV4_UDP_PAY_DATA_L ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ rules:: testpmd> flow create 0 ingress pattern eth / ipv4 / udp / l2tpv2 type data_l / ppp / ipv4 src is / udp dst is / end actions queue index 5 / end matched packets:: >>> sendp([Ether(src="")/IP()/UDP(dport=)/L2TP(hdr=0x400,len=40)/HDLC()/Raw(b"\\x00\\x21")/IP(src="")/UDP(dport=)], iface="") >>> sendp([Ether(src="")/IP()/UDP(dport=)/L2TP(hdr=0x400,len=40)/HDLC()/Raw(b"\\x00\\x21")/IP(src="")/UDP(dport=)], iface="") mismatched packets:: >>> sendp([Ether(src="")/IP()/UDP(dport=)/L2TP(hdr=0x400,len=40)/HDLC()/Raw(b"\\x00\\x21")/IP(src="")/UDP(dport=)], iface="") >>> sendp([Ether(src="")/IP()/UDP(dport=)/L2TP(hdr=0x400,len=40)/HDLC()/Raw(b"\\x00\\x21")/IP(src="")/UDP(dport=)], iface="") >>> sendp([Ether(src="")/IPv6()/UDP(dport=)/L2TP(hdr=0x400,len=40)/HDLC()/Raw(b"\\x00\\x21")/IP(src="")/UDP(dport=)], iface="") Subcase 3: ipv4_udp_MAC_IPV4_PPPoL2TPV2_IPV4_UDP_PAY_DATA_S ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ rules:: testpmd> flow create 0 ingress pattern eth / ipv4 / udp / l2tpv2 type data_s / ppp / ipv4 dst is / udp src is / end actions rss queues 2 3 end / end matched packets:: >>> sendp([Ether(src="")/IP()/UDP(dport=)/L2TP(hdr=0x080)/HDLC()/Raw(b"\\x00\\x21")/IP(dst="")/UDP(sport=)], iface="") >>> sendp([Ether(src="")/IP()/UDP(dport=)/L2TP(hdr=0x080)/HDLC()/Raw(b"\\x00\\x21")/IP(dst="")/UDP(sport=)], iface="") mismatched packets:: >>> sendp([Ether(src="")/IP()/UDP(dport=)/L2TP(hdr=0x080)/HDLC()/Raw(b"\\x00\\x21")/IP(dst="")/UDP(sport=)], iface="") >>> sendp([Ether(src="")/IP()/UDP(dport=)/L2TP(hdr=0x080)/HDLC()/Raw(b"\\x00\\x21")/IP(dst="")/UDP(sport=)], iface="") >>> sendp([Ether(src="")/IPv6()/UDP(dport=)/L2TP(hdr=0x080)/HDLC()/Raw(b"\\x00\\x21")/IP(dst="")/UDP(sport=)], iface="") Subcase 4: ipv4_udp_MAC_IPV4_PPPoL2TPV2_IPV4_UDP_PAY_DATA_O ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ rules:: testpmd> flow create 0 ingress pattern eth / ipv4 / udp / l2tpv2 type data_o offset_size is / ppp / ipv4 dst is / udp dst is / end actions queue index 2 / end matched packets:: >>> sendp([Ether(src="")/IP()/UDP(dport=)/L2TP(hdr=0x020,offset=)/Raw(b"\\x00\\x00\\x00\\x00")/HDLC()/Raw(b"\\x00\\x21")/IP(dst="")/UDP(dport=)], iface="") >>> sendp([Ether(src="")/IP()/UDP(dport=)/L2TP(hdr=0x020,offset=)/Raw(b"\\x00\\x00\\x00\\x00")/HDLC()/Raw(b"\\x00\\x21")/IP(dst="")/UDP(dport=)], iface="") mismatched packets:: >>> sendp([Ether(src="")/IP()/UDP(dport=)/L2TP(hdr=0x020,offset=)/Raw(b"\\x00\\x00\\x00\\x00")/HDLC()/Raw(b"\\x00\\x21")/IP(dst="")/UDP(dport=)], iface="") >>> sendp([Ether(src="")/IP()/UDP(dport=)/L2TP(hdr=0x020,offset=)/Raw(b"\\x00\\x00\\x00\\x00")/HDLC()/Raw(b"\\x00\\x21")/IP(dst="")/UDP(dport=)], iface="") >>> sendp([Ether(src="")/IPv6()/UDP(dport=)/L2TP(hdr=0x020,offset=)/Raw(b"\\x00\\x00\\x00\\x00")/HDLC()/Raw(b"\\x00\\x21")/IP(dst="")/UDP(dport=)], iface="") Subcase 5: ipv4_udp_MAC_IPV4_PPPoL2TPV2_IPV4_UDP_PAY_DATA_L_S ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ rules:: testpmd> flow create 0 ingress pattern eth / ipv4 / udp / l2tpv2 type data_l_s / ppp / ipv4 src is / udp dst is / end actions drop / end matched packets:: >>> sendp([Ether(src="")/IP()/UDP(dport=)/L2TP(hdr=0x480,len=44)/HDLC()/Raw(b"\\x00\\x21")/IP(src="")/UDP(dport=)], iface="") >>> sendp([Ether(src="")/IP()/UDP(dport=)/L2TP(hdr=0x480,len=44)/HDLC()/Raw(b"\\x00\\x21")/IP(src="")/UDP(dport=)], iface="") mismatched packets:: >>> sendp([Ether(src="")/IP()/UDP(dport=)/L2TP(hdr=0x480,len=44)/HDLC()/Raw(b"\\x00\\x21")/IP(src="")/UDP(dport=)], iface="") >>> sendp([Ether(src="")/IP()/UDP(dport=)/L2TP(hdr=0x480,len=44)/HDLC()/Raw(b"\\x00\\x21")/IP(src="")/UDP(dport=)], iface="") >>> sendp([Ether(src="")/IPv6()/UDP(dport=)/L2TP(hdr=0x480,len=44)/HDLC()/Raw(b"\\x00\\x21")/IP(src="")/UDP(dport=)], iface="") Test case 9: MAC_IPV4_PPPoL2TPV2_IPV4_TCP ----------------------------------------- This case is designed to check distribute MAC IPv4 PPPoL2TPV2 IPv4 TCP data packets based on IP src+dest address and inner TCP src+dest port as input set. Subcase 1: ipv4_tcp_MAC_IPV4_PPPoL2TPV2_IPV4_TCP_DATA ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ rules:: testpmd> flow create 0 ingress pattern eth / ipv4 / udp / l2tpv2 type data / ppp / ipv4 src is / tcp src is / end actions queue index 3 / end matched packets:: >>> sendp([Ether(src="")/IP()/UDP(dport=)/L2TP(hdr=0x000)/HDLC()/Raw(b"\\x00\\x21")/IP(src="")/TCP(sport=)], iface="") >>> sendp([Ether(src="")/IP()/UDP(dport=)/L2TP(hdr=0x000)/HDLC()/Raw(b"\\x00\\x21")/IP(src="")/TCP(sport=)], iface="") mismatched packets:: >>> sendp([Ether(src="")/IP()/UDP(dport=)/L2TP(hdr=0x000)/HDLC()/Raw(b"\\x00\\x21")/IP(src="")/TCP(sport=)], iface="") >>> sendp([Ether(src="")/IP()/UDP(dport=)/L2TP(hdr=0x000)/HDLC()/Raw(b"\\x00\\x21")/IP(src="")/TCP(sport=)], iface="") >>> sendp([Ether(src="")/IPv6()/UDP(dport=)/L2TP(hdr=0x000)/HDLC()/Raw(b"\\x00\\x21")/IP(src="")/TCP(sport=)], iface="") Subcase 2: ipv4_tcp_MAC_IPV4_PPPoL2TPV2_IPV4_TCP_DATA_L ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ rules:: testpmd> flow create 0 ingress pattern eth / ipv4 / udp / l2tpv2 type data_l / ppp / ipv4 src is / tcp dst is / end actions queue index 5 / end matched packets:: >>> sendp([Ether(src="")/IP()/UDP(dport=)/L2TP(hdr=0x400,len=52)/HDLC()/Raw(b"\\x00\\x21")/IP(src="")/TCP(dport=)], iface="") >>> sendp([Ether(src="")/IP()/UDP(dport=)/L2TP(hdr=0x400,len=52)/HDLC()/Raw(b"\\x00\\x21")/IP(src="")/TCP(dport=)], iface="") mismatched packets:: >>> sendp([Ether(src="")/IP()/UDP(dport=)/L2TP(hdr=0x400,len=52)/HDLC()/Raw(b"\\x00\\x21")/IP(src="")/TCP(dport=)], iface="") >>> sendp([Ether(src="")/IP()/UDP(dport=)/L2TP(hdr=0x400,len=52)/HDLC()/Raw(b"\\x00\\x21")/IP(src="")/TCP(dport=)], iface="") >>> sendp([Ether(src="")/IPv6()/UDP(dport=)/L2TP(hdr=0x400,len=52)/HDLC()/Raw(b"\\x00\\x21")/IP(src="")/TCP(dport=)], iface="") Subcase 3: ipv4_tcp_MAC_IPV4_PPPoL2TPV2_IPV4_TCP_DATA_S ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ rules:: testpmd> flow create 0 ingress pattern eth / ipv4 / udp / l2tpv2 type data_s / ppp / ipv4 dst is / tcp src is / end actions rss queues 2 3 end / end matched packets:: >>> sendp([Ether(src="")/IP()/UDP(dport=)/L2TP(hdr=0x080)/HDLC()/Raw(b"\\x00\\x21")/IP(dst="")/TCP(sport=)], iface="") >>> sendp([Ether(src="")/IP()/UDP(dport=)/L2TP(hdr=0x080)/HDLC()/Raw(b"\\x00\\x21")/IP(dst="")/TCP(sport=)], iface="") mismatched packets:: >>> sendp([Ether(src="")/IP()/UDP(dport=)/L2TP(hdr=0x080)/HDLC()/Raw(b"\\x00\\x21")/IP(dst="")/TCP(sport=)], iface="") >>> sendp([Ether(src="")/IP()/UDP(dport=)/L2TP(hdr=0x080)/HDLC()/Raw(b"\\x00\\x21")/IP(dst="")/TCP(sport=)], iface="") >>> sendp([Ether(src="")/IPv6()/UDP(dport=)/L2TP(hdr=0x080)/HDLC()/Raw(b"\\x00\\x21")/IP(dst="")/TCP(sport=)], iface="") Subcase 4: ipv4_tcp_MAC_IPV4_PPPoL2TPV2_IPV4_TCP_DATA_O ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ rules:: testpmd> flow create 0 ingress pattern eth / ipv4 / udp / l2tpv2 type data_o offset_size is / ppp / ipv4 dst is / tcp dst is / end actions queue index 2 / end matched packets:: >>> sendp([Ether(src="")/IP()/UDP(dport=)/L2TP(hdr=0x020,offset=)/Raw(b"\\x00\\x00\\x00\\x00")/HDLC()/Raw(b"\\x00\\x21")/IP(dst="")/TCP(dport=)], iface="") >>> sendp([Ether(src="")/IP()/UDP(dport=)/L2TP(hdr=0x020,offset=)/Raw(b"\\x00\\x00\\x00\\x00")/HDLC()/Raw(b"\\x00\\x21")/IP(dst="")/TCP(dport=)], iface="") mismatched packets:: >>> sendp([Ether(src="")/IP()/UDP(dport=)/L2TP(hdr=0x020,offset=)/Raw(b"\\x00\\x00\\x00\\x00")/HDLC()/Raw(b"\\x00\\x21")/IP(dst="")/TCP(dport=)], iface="") >>> sendp([Ether(src="")/IP()/UDP(dport=)/L2TP(hdr=0x020,offset=)/Raw(b"\\x00\\x00\\x00\\x00")/HDLC()/Raw(b"\\x00\\x21")/IP(dst="")/TCP(dport=)], iface="") >>> sendp([Ether(src="")/IPv6()/UDP(dport=)/L2TP(hdr=0x020,offset=)/Raw(b"\\x00\\x00\\x00\\x00")/HDLC()/Raw(b"\\x00\\x21")/IP(dst="")/TCP(dport=)], iface="") Subcase 5: ipv4_tcp_MAC_IPV4_PPPoL2TPV2_IPV4_TCP_DATA_L_S ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ rules:: testpmd> flow create 0 ingress pattern eth / ipv4 / udp / l2tpv2 type data_l_s / ppp / ipv4 src is / tcp dst is / end actions drop / end matched packets:: >>> sendp([Ether(src="")/IP()/UDP(dport=)/L2TP(hdr=0x480,len=56)/HDLC()/Raw(b"\\x00\\x21")/IP(src="")/TCP(dport=)], iface="") >>> sendp([Ether(src="")/IP()/UDP(dport=)/L2TP(hdr=0x480,len=56)/HDLC()/Raw(b"\\x00\\x21")/IP(src="")/TCP(dport=)], iface="") mismatched packets:: >>> sendp([Ether(src="")/IP()/UDP(dport=)/L2TP(hdr=0x480,len=56)/HDLC()/Raw(b"\\x00\\x21")/IP(src="")/TCP(dport=)], iface="") >>> sendp([Ether(src="")/IP()/UDP(dport=)/L2TP(hdr=0x480,len=56)/HDLC()/Raw(b"\\x00\\x21")/IP(src="")/TCP(dport=)], iface="") >>> sendp([Ether(src="")/IPv6()/UDP(dport=)/L2TP(hdr=0x480,len=56)/HDLC()/Raw(b"\\x00\\x21")/IP(src="")/TCP(dport=)], iface="") Test case 10: MAC_IPV4_PPPoL2TPV2_IPV6_PAY ------------------------------------------ This case is designed to check distribute MAC IPv4 PPPoL2TPV2 IPv6 data packets based on IP src+dest address as input set. Subcase 1: ipv6_MAC_IPV4_PPPoL2TPV2_IPV6_PAY_DATA ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ rules:: testpmd> flow create 0 ingress pattern eth / ipv4 / udp / l2tpv2 type data / ppp / ipv6 src is dst is / end actions queue index 3 / end matched packets:: >>> sendp([Ether(src="")/IP()/UDP(dport=)/L2TP(hdr=0x000)/HDLC()/Raw(b"\\x00\\x57")/IPv6(src="",dst="")], iface="") >>> sendp([Ether(src="")/IP()/UDP(dport=)/L2TP(hdr=0x000)/HDLC()/Raw(b"\\x00\\x57")/IPv6(src="",dst="")], iface="") mismatched packets:: >>> sendp([Ether(src="")/IP()/UDP(dport=)/L2TP(hdr=0x000)/HDLC()/Raw(b"\\x00\\x57")/IPv6(src="",dst="")], iface="") >>> sendp([Ether(src="")/IP()/UDP(dport=)/L2TP(hdr=0x000)/HDLC()/Raw(b"\\x00\\x57")/IPv6(src="",dst="")], iface="") >>> sendp([Ether(src="")/IPv6()/UDP(dport=)/L2TP(hdr=0x000)/HDLC()/Raw(b"\\x00\\x57")/IPv6(src="",dst="")], iface="") Subcase 2: ipv6_MAC_IPV4_PPPoL2TPV2_IPV6_PAY_DATA_L ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ rules:: testpmd> flow create 0 ingress pattern eth / ipv4 / udp / l2tpv2 type data_l / ppp / ipv6 src is dst is / end actions queue index 5 / end matched packets:: >>> sendp([Ether(src="")/IP()/UDP(dport=1701)/L2TP(hdr=0x400,len=52)/HDLC()/Raw(b"\\x00\\x57")/IPv6(src="",dst="")], iface="") >>> sendp([Ether(src="")/IP()/UDP(dport=1701)/L2TP(hdr=0x400,len=52)/HDLC()/Raw(b"\\x00\\x57")/IPv6(src="",dst="")], iface="") mismatched packets:: >>> sendp([Ether(src="")/IP()/UDP(dport=)/L2TP(hdr=0x400,len=52)/HDLC()/Raw(b"\\x00\\x57")/IPv6(src="",dst="")], iface="") >>> sendp([Ether(src="")/IP()/UDP(dport=)/L2TP(hdr=0x400,len=52)/HDLC()/Raw(b"\\x00\\x57")/IPv6(src="",dst="")], iface="") >>> sendp([Ether(src="")/IPv6()/UDP(dport=)/L2TP(hdr=0x400,len=52)/HDLC()/Raw(b"\\x00\\x57")/IPv6(src="",dst="")], iface="") Subcase 3: ipv6_MAC_IPV4_PPPoL2TPV2_IPV6_PAY_DATA_S ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ rules:: testpmd> flow create 0 ingress pattern eth / ipv4 / udp / l2tpv2 type data_s / ppp / ipv6 src is dst is / end actions rss queues 2 3 end / end matched packets:: >>> sendp([Ether(src="")/IP()/UDP(dport=)/L2TP(hdr=0x080)/HDLC()/Raw(b"\\x00\\x57")/IPv6(src="",dst="")], iface="") >>> sendp([Ether(src="")/IP()/UDP(dport=)/L2TP(hdr=0x080)/HDLC()/Raw(b"\\x00\\x57")/IPv6(src="",dst="")], iface="") mismatched packets:: >>> sendp([Ether(src="")/IP()/UDP(dport=)/L2TP(hdr=0x080)/HDLC()/Raw(b"\\x00\\x57")/IPv6(src="",dst="")], iface="") >>> sendp([Ether(src="")/IP()/UDP(dport=)/L2TP(hdr=0x080)/HDLC()/Raw(b"\\x00\\x57")/IPv6(src="",dst="")], iface="") >>> sendp([Ether(src="")/IPv6()/UDP(dport=)/L2TP(hdr=0x080)/HDLC()/Raw(b"\\x00\\x57")/IPv6(src="",dst="")], iface="") Subcase 4: ipv6_MAC_IPV4_PPPoL2TPV2_IPV6_PAY_DATA_O ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ rules:: testpmd> flow create 0 ingress pattern eth / ipv4 / udp / l2tpv2 type data_o offset_size is / ppp / ipv6 src is 9 dst is / end actions queue index 2 / end matched packets:: >>> sendp([Ether(src="")/IP()/UDP(dport=)/L2TP(hdr=0x020,offset=)/Raw(b"\\x00\\x00\\x00\\x00")/HDLC()/Raw(b"\\x00\\x57")/IPv6(src="",dst="")], iface="") >>> sendp([Ether(src="")/IP()/UDP(dport=)/L2TP(hdr=0x020,offset=)/Raw(b"\\x00\\x00\\x00\\x00")/HDLC()/Raw(b"\\x00\\x57")/IPv6(src="",dst="")], iface="") mismatched packets:: >>> sendp([Ether(src="")/IP()/UDP(dport=)/L2TP(hdr=0x020,offset=)/Raw(b"\\x00\\x00\\x00\\x00")/HDLC()/Raw(b"\\x00\\x57")/IPv6(src="",dst="")], iface="") >>> sendp([Ether(src="")/IP()/UDP(dport=)/L2TP(hdr=0x020,offset=)/Raw(b"\\x00\\x00\\x00\\x00")/HDLC()/Raw(b"\\x00\\x57")/IPv6(src="",dst="")], iface="") >>> sendp([Ether(src="")/IPv6()/UDP(dport=)/L2TP(hdr=0x020,offset=)/Raw(b"\\x00\\x00\\x00\\x00")/HDLC()/Raw(b"\\x00\\x57")/IPv6(src="",dst="")], iface="") Subcase 5: ipv6_MAC_IPV4_PPPoL2TPV2_IPV6_PAY_DATA_L_S ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ rules:: testpmd> flow create 0 ingress pattern eth / ipv4 / udp / l2tpv2 type data_l_s / ppp / ipv6 src is dst is / end actions drop / end matched packets:: >>> sendp([Ether(src="")/IP()/UDP(dport=)/L2TP(hdr=0x480,len=56)/HDLC()/Raw(b"\\x00\\x57")/IPv6(src="",dst="")], iface="") >>> sendp([Ether(src="")/IP()/UDP(dport=)/L2TP(hdr=0x480,len=56)/HDLC()/Raw(b"\\x00\\x57")/IPv6(src="",dst="")], iface="") mismatched packets:: >>> sendp([Ether(src="")/IP()/UDP(dport=)/L2TP(hdr=0x480,len=56)/HDLC()/Raw(b"\\x00\\x57")/IPv6(src="",dst="")], iface="") >>> sendp([Ether(src="")/IP()/UDP(dport=)/L2TP(hdr=0x480,len=56)/HDLC()/Raw(b"\\x00\\x57")/IPv6(src="",dst="")], iface="") >>> sendp([Ether(src="")/IPv6()/UDP(dport=)/L2TP(hdr=0x480,len=56)/HDLC()/Raw(b"\\x00\\x57")/IPv6(src="",dst="")], iface="") Test case 11: MAC_IPV4_PPPoL2TPV2_IPV6_UDP_PAY ---------------------------------------------- This case is designed to check distribute MAC IPv4 PPPoL2TPV2 IPv6 data packets based on IP src+dest address and inner UDP src+dest port as input set. Subcase 1: ipv6_udp_MAC_IPV4_PPPoL2TPV2_IPV6_UDP_PAY_DATA ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ rules:: testpmd> flow create 0 ingress pattern eth / ipv4 / udp / l2tpv2 type data / ppp / ipv6 dst is / udp src is / end actions queue index 3 / end matched packets:: >>> sendp([Ether(src="")/IP()/UDP(dport=)/L2TP(hdr=0x000)/HDLC()/Raw(b"\\x00\\x57")/IPv6(dst="")/UDP(sport=)], iface="") >>> sendp([Ether(src="")/IP()/UDP(dport=)/L2TP(hdr=0x000)/HDLC()/Raw(b"\\x00\\x57")/IPv6(dst="")/UDP(sport=)], iface="") mismatched packets:: >>> sendp([Ether(src="")/IP()/UDP(dport=)/L2TP(hdr=0x000)/HDLC()/Raw(b"\\x00\\x57")/IPv6(dst="")/UDP(sport=)], iface="") >>> sendp([Ether(src="")/IP()/UDP(dport=)/L2TP(hdr=0x000)/HDLC()/Raw(b"\\x00\\x57")/IPv6(dst="")/UDP(sport=)], iface="") >>> sendp([Ether(src="")/IPv6()/UDP(dport=)/L2TP(hdr=0x000)/HDLC()/Raw(b"\\x00\\x57")/IPv6(dst="")/UDP(sport=)], iface="") Subcase 2: ipv6_udp_MAC_IPV4_PPPoL2TPV2_IPV6_UDP_PAY_DATA_L ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ rules:: testpmd> flow create 0 ingress pattern eth / ipv4 / udp / l2tpv2 type data_l / ppp / ipv6 src is / udp dst is / end actions queue index 5 / end matched packets:: >>> sendp([Ether(src="")/IP()/UDP(dport=)/L2TP(hdr=0x400,len=60)/HDLC()/Raw(b"\\x00\\x57")/IPv6(src="")/UDP(dport=)], iface="") >>> sendp([Ether(src="")/IP()/UDP(dport=)/L2TP(hdr=0x400,len=60)/HDLC()/Raw(b"\\x00\\x57")/IPv6(src="")/UDP(dport=)], iface="") mismatched packets:: >>> sendp([Ether(src="")/IP()/UDP(dport=)/L2TP(hdr=0x400,len=60)/HDLC()/Raw(b"\\x00\\x57")/IPv6(src="")/UDP(dport=)], iface="") >>> sendp([Ether(src="")/IP()/UDP(dport=)/L2TP(hdr=0x400,len=60)/HDLC()/Raw(b"\\x00\\x57")/IPv6(src="")/UDP(dport=)], iface="") >>> sendp([Ether(src="")/IPv6()/UDP(dport=)/L2TP(hdr=0x400,len=60)/HDLC()/Raw(b"\\x00\\x57")/IPv6(src="")/UDP(dport=)], iface="") Subcase 3: ipv6_udp_MAC_IPV4_PPPoL2TPV2_IPV6_UDP_PAY_DATA_S ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ rules:: testpmd> flow create 0 ingress pattern eth / ipv4 / udp / l2tpv2 type data_s / ppp / ipv6 dst is / udp src is / end actions rss queues 2 3 end / end matched packets:: >>> sendp([Ether(src="")/IP()/UDP(dport=)/L2TP(hdr=0x080)/HDLC()/Raw(b"\\x00\\x57")/IPv6(dst="")/UDP(sport=)], iface="") >>> sendp([Ether(src="")/IP()/UDP(dport=)/L2TP(hdr=0x080)/HDLC()/Raw(b"\\x00\\x57")/IPv6(dst="")/UDP(sport=)], iface="") mismatched packets:: >>> sendp([Ether(src="")/IP()/UDP(dport=)/L2TP(hdr=0x080)/HDLC()/Raw(b"\\x00\\x57")/IPv6(dst="")/UDP(sport=)], iface="") >>> sendp([Ether(src="")/IP()/UDP(dport=)/L2TP(hdr=0x080)/HDLC()/Raw(b"\\x00\\x57")/IPv6(dst="")/UDP(sport=)], iface="") >>> sendp([Ether(src="")/IPv6()/UDP(dport=)/L2TP(hdr=0x080)/HDLC()/Raw(b"\\x00\\x57")/IPv6(dst="")/UDP(sport=)], iface="") Subcase 4: ipv6_udp_MAC_IPV4_PPPoL2TPV2_IPV6_UDP_PAY_DATA_O ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ rules:: testpmd> flow create 0 ingress pattern eth / ipv4 / udp / l2tpv2 type data_o offset_size is / ppp / ipv6 src is / udp dst is / end actions queue index 2 / end matched packets:: >>> sendp([Ether(src="")/IP()/UDP(dport=)/L2TP(hdr=0x020,offset=)/Raw(b"\\x00\\x00\\x00\\x00")/HDLC()/Raw(b"\\x00\\x57")/IPv6(src="")/UDP(dport=)], iface="") >>> sendp([Ether(src="")/IP()/UDP(dport=)/L2TP(hdr=0x020,offset=)/Raw(b"\\x00\\x00\\x00\\x00")/HDLC()/Raw(b"\\x00\\x57")/IPv6(src="")/UDP(dport=)], iface="") mismatched packets:: >>> sendp([Ether(src="")/IP()/UDP(dport=)/L2TP(hdr=0x020,offset=)/Raw(b"\\x00\\x00\\x00\\x00")/HDLC()/Raw(b"\\x00\\x57")/IPv6(src="")/UDP(dport=)], iface="") >>> sendp([Ether(src="")/IP()/UDP(dport=)/L2TP(hdr=0x020,offset=)/Raw(b"\\x00\\x00\\x00\\x00")/HDLC()/Raw(b"\\x00\\x57")/IPv6(src="")/UDP(dport=)], iface="") >>> sendp([Ether(src="")/IPv6()/UDP(dport=)/L2TP(hdr=0x020,offset=)/Raw(b"\\x00\\x00\\x00\\x00")/HDLC()/Raw(b"\\x00\\x57")/IPv6(src="")/UDP(dport=)], iface="") Subcase 5: ipv6_udp_MAC_IPV4_PPPoL2TPV2_IPV6_UDP_PAY_DATA_L_S ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ rules:: testpmd> flow create 0 ingress pattern eth / ipv4 / udp / l2tpv2 type data_l_s / ppp / ipv6 dst is / udp dst is / end actions drop / end matched packets:: >>> sendp([Ether(src="")/IP()/UDP(dport=)/L2TP(hdr=0x480,len=64)/HDLC()/Raw(b"\\x00\\x57")/IPv6(dst="")/UDP(dport=)], iface="") >>> sendp([Ether(src="")/IP()/UDP(dport=)/L2TP(hdr=0x480,len=64)/HDLC()/Raw(b"\\x00\\x57")/IPv6(dst="")/UDP(dport=)], iface="") mismatched packets:: >>> sendp([Ether(src="")/IP()/UDP(dport=)/L2TP(hdr=0x480,len=64)/HDLC()/Raw(b"\\x00\\x57")/IPv6(dst="")/UDP(dport=)], iface="") >>> sendp([Ether(src="")/IP()/UDP(dport=)/L2TP(hdr=0x480,len=64)/HDLC()/Raw(b"\\x00\\x57")/IPv6(dst="")/UDP(dport=)], iface="") >>> sendp([Ether(src="")/IPv6()/UDP(dport=)/L2TP(hdr=0x480,len=64)/HDLC()/Raw(b"\\x00\\x57")/IPv6(dst="")/UDP(dport=)], iface="") Test case 12: MAC_IPV4_PPPoL2TPV2_IPV6_TCP ------------------------------------------ This case is designed to check distribute MAC IPv4 PPPoL2TPV2 IPv6 data packets based on IP src+dest address and inner TCP src+dest port as input set. Subcase 1: ipv6_tcp_MAC_IPV4_PPPoL2TPV2_IPV6_TCP_DATA ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ rules:: testpmd> flow create 0 ingress pattern eth / ipv4 / udp / l2tpv2 type data / ppp / ipv6 dst is / tcp src is / end actions queue index 3 / end matched packets:: >>> sendp([Ether(src="")/IP()/UDP(dport=)/L2TP(hdr=0x000)/HDLC()/Raw(b"\\x00\\x57")/IPv6(dst="")/TCP(sport=)], iface="") >>> sendp([Ether(src="")/IP()/UDP(dport=)/L2TP(hdr=0x000)/HDLC()/Raw(b"\\x00\\x57")/IPv6(dst="")/TCP(sport=)], iface="") mismatched packets:: >>> sendp([Ether(src="")/IP()/UDP(dport=)/L2TP(hdr=0x000)/HDLC()/Raw(b"\\x00\\x57")/IPv6(dst="")/TCP(sport=)], iface="") >>> sendp([Ether(src="")/IP()/UDP(dport=)/L2TP(hdr=0x000)/HDLC()/Raw(b"\\x00\\x57")/IPv6(dst="")/TCP(sport=)], iface="") >>> sendp([Ether(src="")/IPv6()/UDP(dport=)/L2TP(hdr=0x000)/HDLC()/Raw(b"\\x00\\x57")/IPv6(dst="")/TCP(sport=)], iface="") Subcase 2: ipv6_tcp_MAC_IPV4_PPPoL2TPV2_IPV6_TCP_DATA_L ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ rules:: testpmd> flow create 0 ingress pattern eth / ipv4 / udp / l2tpv2 type data_l / ppp / ipv6 src is / tcp dst is / end actions queue index 5 / end matched packets:: >>> sendp([Ether(src="")/IP()/UDP(dport=)/L2TP(hdr=0x400,len=72)/HDLC()/Raw(b"\\x00\\x57")/IPv6(src="")/TCP(dport=)], iface="") >>> sendp([Ether(src="")/IP()/UDP(dport=)/L2TP(hdr=0x400,len=72)/HDLC()/Raw(b"\\x00\\x57")/IPv6(src="")/TCP(dport=)], iface="") mismatched packets:: >>> sendp([Ether(src="")/IP()/UDP(dport=)/L2TP(hdr=0x400,len=72)/HDLC()/Raw(b"\\x00\\x57")/IPv6(src="")/TCP(dport=)], iface="") >>> sendp([Ether(src="")/IP()/UDP(dport=)/L2TP(hdr=0x400,len=72)/HDLC()/Raw(b"\\x00\\x57")/IPv6(src="")/TCP(dport=)], iface="") >>> sendp([Ether(src="")/IPv6()/UDP(dport=)/L2TP(hdr=0x400,len=72)/HDLC()/Raw(b"\\x00\\x57")/IPv6(src="")/TCP(dport=)], iface="") Subcase 3: ipv6_tcp_MAC_IPV4_PPPoL2TPV2_IPV6_TCP_DATA_S ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ rules:: testpmd> flow create 0 ingress pattern eth / ipv4 / udp / l2tpv2 type data_s / ppp / ipv6 dst is / tcp src is / end actions rss queues 2 3 end / end matched packets:: >>> sendp([Ether(src="")/IP()/UDP(dport=)/L2TP(hdr=0x080)/HDLC()/Raw(b"\\x00\\x57")/IPv6(dst="")/TCP(sport=)], iface="") >>> sendp([Ether(src="")/IP()/UDP(dport=)/L2TP(hdr=0x080)/HDLC()/Raw(b"\\x00\\x57")/IPv6(dst="")/TCP(sport=)], iface="") mismatched packets:: >>> sendp([Ether(src="")/IP()/UDP(dport=)/L2TP(hdr=0x080)/HDLC()/Raw(b"\\x00\\x57")/IPv6(dst="")/TCP(sport=)], iface="") >>> sendp([Ether(src="")/IP()/UDP(dport=)/L2TP(hdr=0x080)/HDLC()/Raw(b"\\x00\\x57")/IPv6(dst="")/TCP(sport=)], iface="") >>> sendp([Ether(src="")/IPv6()/UDP(dport=)/L2TP(hdr=0x080)/HDLC()/Raw(b"\\x00\\x57")/IPv6(dst="")/TCP(sport=)], iface="") Subcase 4: ipv6_tcp_MAC_IPV4_PPPoL2TPV2_IPV6_TCP_DATA_O ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ rules:: testpmd> flow create 0 ingress pattern eth / ipv4 / udp / l2tpv2 type data_o offset_size is / ppp / ipv6 src is / tcp dst is / end actions queue index 2 / end matched packets:: >>> sendp([Ether(src="")/IP()/UDP(dport=)/L2TP(hdr=0x020,offset=)/Raw(b"\\x00\\x00\\x00\\x00")/HDLC()/Raw(b"\\x00\\x57")/IPv6(src="")/TCP(dport=)], iface="") >>> sendp([Ether(src="")/IP()/UDP(dport=)/L2TP(hdr=0x020,offset=)/Raw(b"\\x00\\x00\\x00\\x00")/HDLC()/Raw(b"\\x00\\x57")/IPv6(src="")/TCP(dport=)], iface="") mismatched packets:: >>> sendp([Ether(src="")/IP()/UDP(dport=)/L2TP(hdr=0x020,offset=)/Raw(b"\\x00\\x00\\x00\\x00")/HDLC()/Raw(b"\\x00\\x57")/IPv6(src="")/TCP(dport=)], iface="") >>> sendp([Ether(src="")/IP()/UDP(dport=)/L2TP(hdr=0x020,offset=)/Raw(b"\\x00\\x00\\x00\\x00")/HDLC()/Raw(b"\\x00\\x57")/IPv6(src="")/TCP(dport=)], iface="") >>> sendp([Ether(src="")/IPv6()/UDP(dport=)/L2TP(hdr=0x020,offset=)/Raw(b"\\x00\\x00\\x00\\x00")/HDLC()/Raw(b"\\x00\\x57")/IPv6(src="")/TCP(dport=)], iface="") Subcase 5: ipv6_tcp_MAC_IPV4_PPPoL2TPV2_IPV6_TCP_DATA_L_S ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ rules:: testpmd> flow create 0 ingress pattern eth / ipv4 / udp / l2tpv2 type data_l_s / ppp / ipv6 src is / tcp src is / end actions drop / end matched packets:: >>> sendp([Ether(src="")/IP()/UDP(dport=)/L2TP(hdr=0x480,len=76)/HDLC()/Raw(b"\\x00\\x57")/IPv6(src="")/TCP(sport=)], iface="") >>> sendp([Ether(src="")/IP()/UDP(dport=)/L2TP(hdr=0x480,len=76)/HDLC()/Raw(b"\\x00\\x57")/IPv6(src="")/TCP(sport=)], iface="") mismatched packets:: >>> sendp([Ether(src="")/IP()/UDP(dport=)/L2TP(hdr=0x480,len=76)/HDLC()/Raw(b"\\x00\\x57")/IPv6(src="")/TCP(sport=)], iface="") >>> sendp([Ether(src="")/IP()/UDP(dport=)/L2TP(hdr=0x480,len=76)/HDLC()/Raw(b"\\x00\\x57")/IPv6(src="")/TCP(sport=)], iface="") >>> sendp([Ether(src="")/IPv6()/UDP(dport=)/L2TP(hdr=0x480,len=76)/HDLC()/Raw(b"\\x00\\x57")/IPv6(src="")/TCP(sport=)], iface="") Test case 13: MAC_IPV6_PPPoL2TPV2_IPV4_PAY ------------------------------------------ This case is designed to check distribute MAC IPv6 PPPoL2TPV2 IPv4 data packets based on IP src+dest address as input set. Subcase 1: ipv4_MAC_IPV6_PPPoL2TPV2_IPV4_PAY_DATA ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ rules:: testpmd> flow create 0 ingress pattern eth / ipv6 / udp / l2tpv2 type data / ppp / ipv4 src is dst is / end actions queue index 3 / end matched packets:: >>> sendp([Ether(src="")/IPv6()/UDP(dport=)/L2TP(hdr=0x000)/HDLC()/Raw(b"\\x00\\x21")/IP(src="",dst="")], iface="") >>> sendp([Ether(src="")/IPv6()/UDP(dport=)/L2TP(hdr=0x000)/HDLC()/Raw(b"\\x00\\x21")/IP(src="",dst="")], iface="") mismatched packets:: >>> sendp([Ether(src="")/IPv6()/UDP(dport=)/L2TP(hdr=0x000)/HDLC()/Raw(b"\\x00\\x21")/IP(src="",dst="")], iface="") >>> sendp([Ether(src="")/IPv6()/UDP(dport=)/L2TP(hdr=0x000)/HDLC()/Raw(b"\\x00\\x21")/IP(src="",dst="")], iface="") >>> sendp([Ether(src="")/IP()/UDP(dport=)/L2TP(hdr=0x000)/HDLC()/Raw(b"\\x00\\x21")/IP(src="",dst="")], iface="") Subcase 2: ipv4_MAC_IPV6_PPPoL2TPV2_IPV4_PAY_DATA_L ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ rules:: testpmd> flow create 0 ingress pattern eth / ipv6 / udp / l2tpv2 type data_l / ppp / ipv4 src is dst is / end actions queue index 5 / end matched packets:: >>> sendp([Ether(src="")/IPv6()/UDP(dport=)/L2TP(hdr=0x400,len=32)/HDLC()/Raw(b"\\x00\\x21")/IP(src="",dst="")], iface="") >>> sendp([Ether(src="")/IPv6()/UDP(dport=)/L2TP(hdr=0x400,len=32)/HDLC()/Raw(b"\\x00\\x21")/IP(src="",dst="")], iface="") mismatched packets:: >>> sendp([Ether(src="")/IPv6()/UDP(dport=)/L2TP(hdr=0x400,len=32)/HDLC()/Raw(b"\\x00\\x21")/IP(src="",dst="")], iface="") >>> sendp([Ether(src="")/IPv6()/UDP(dport=)/L2TP(hdr=0x400,len=32)/HDLC()/Raw(b"\\x00\\x21")/IP(src="",dst="")], iface="") >>> sendp([Ether(src="")/IP()/UDP(dport=)/L2TP(hdr=0x400,len=32)/HDLC()/Raw(b"\\x00\\x21")/IP(src="",dst="")], iface="") Subcase 3: ipv4_MAC_IPV6_PPPoL2TPV2_IPV4_PAY_DATA_S ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ rules:: testpmd> flow create 0 ingress pattern eth / ipv6 / udp / l2tpv2 type data_s / ppp / ipv4 src is dst is / end actions rss queues 2 3 end / end matched packets:: >>> sendp([Ether(src="")/IPv6()/UDP(dport=)/L2TP(hdr=0x080)/HDLC()/Raw(b"\\x00\\x21")/IP(src="",dst="")], iface="") >>> sendp([Ether(src="")/IPv6()/UDP(dport=)/L2TP(hdr=0x080)/HDLC()/Raw(b"\\x00\\x21")/IP(src="",dst="")], iface="") mismatched packets:: >>> sendp([Ether(src="")/IPv6()/UDP(dport=)/L2TP(hdr=0x080)/HDLC()/Raw(b"\\x00\\x21")/IP(src="",dst="")], iface="") >>> sendp([Ether(src="")/IPv6()/UDP(dport=)/L2TP(hdr=0x080)/HDLC()/Raw(b"\\x00\\x21")/IP(src="",dst="")], iface="") >>> sendp([Ether(src="")/IP()/UDP(dport=)/L2TP(hdr=0x080)/HDLC()/Raw(b"\\x00\\x21")/IP(src="",dst="")], iface="") Subcase 4: ipv4_MAC_IPV6_PPPoL2TPV2_IPV4_PAY_DATA_O ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ rules:: testpmd> flow create 0 ingress pattern eth / ipv6 / udp / l2tpv2 type data_o offset_size is / ppp / ipv4 src is dst is / end actions queue index 2 / end matched packets:: >>> sendp([Ether(src="")/IPv6()/UDP(dport=)/L2TP(hdr=0x020,offset=)/Raw(b"\\x00\\x00\\x00\\x00")/HDLC()/Raw(b"\\x00\\x21")/IP(src="",dst="")], iface="") >>> sendp([Ether(src="")/IPv6()/UDP(dport=)/L2TP(hdr=0x020,offset=)/Raw(b"\\x00\\x00\\x00\\x00")/HDLC()/Raw(b"\\x00\\x21")/IP(src="",dst="")], iface="") mismatched packets:: >>> sendp([Ether(src="")/IPv6()/UDP(dport=)/L2TP(hdr=0x020,offset=)/Raw(b"\\x00\\x00\\x00\\x00")/HDLC()/Raw(b"\\x00\\x21")/IP(src="",dst="")], iface="") >>> sendp([Ether(src="")/IPv6()/UDP(dport=)/L2TP(hdr=0x020,offset=)/Raw(b"\\x00\\x00\\x00\\x00")/HDLC()/Raw(b"\\x00\\x21")/IP(src="",dst="")], iface="") >>> sendp([Ether(src="")/IP()/UDP(dport=)/L2TP(hdr=0x020,offset=)/Raw(b"\\x00\\x00\\x00\\x00")/HDLC()/Raw(b"\\x00\\x21")/IP(src="",dst="")], iface="") Subcase 5: ipv4_MAC_IPV6_PPPoL2TPV2_IPV4_PAY_DATA_L_S ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ rules:: testpmd> flow create 0 ingress pattern eth / ipv6 / udp / l2tpv2 type data_l_s / ppp / ipv4 src is dst is / end actions drop / end matched packets:: >>> sendp([Ether(src="")/IPv6()/UDP(dport=)/L2TP(hdr=0x480,len=36)/HDLC()/Raw(b"\\x00\\x21")/IP(src="",dst="")], iface="") >>> sendp([Ether(src="")/IPv6()/UDP(dport=)/L2TP(hdr=0x480,len=36)/HDLC()/Raw(b"\\x00\\x21")/IP(src="",dst="")], iface="") mismatched packets:: >>> sendp([Ether(src="")/IPv6()/UDP(dport=)/L2TP(hdr=0x480,len=36)/HDLC()/Raw(b"\\x00\\x21")/IP(src="",dst="")], iface="") >>> sendp([Ether(src="")/IPv6()/UDP(dport=)/L2TP(hdr=0x480,len=36)/HDLC()/Raw(b"\\x00\\x21")/IP(src="",dst="")], iface="") >>> sendp([Ether(src="")/IP()/UDP(dport=)/L2TP(hdr=0x480,len=36)/HDLC()/Raw(b"\\x00\\x21")/IP(src="",dst="")], iface="") Test case 14: MAC_IPV6_PPPoL2TPV2_IPV4_UDP_PAY ---------------------------------------------- This case is designed to check distribute MAC IPv6 PPPoL2TPV2 IPv4 UDP data packets based on IP src+dest address and inner UDP src+dest port as input set. Subcase 1: ipv4_udp_MAC_IPV6_PPPoL2TPV2_IPV4_UDP_PAY_DATA ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ rules:: testpmd> flow create 0 ingress pattern eth / ipv6 / udp / l2tpv2 type data / ppp / ipv4 src is / udp dst is / end actions queue index 3 / end matched packets:: >>> sendp([Ether(src="")/IPv6()/UDP(dport=)/L2TP(hdr=0x000)/HDLC()/Raw(b"\\x00\\x21")/IP(src="")/UDP(dport=)], iface="") >>> sendp([Ether(src="")/IPv6()/UDP(dport=)/L2TP(hdr=0x000)/HDLC()/Raw(b"\\x00\\x21")/IP(src="")/UDP(dport=)], iface="") mismatched packets:: >>> sendp([Ether(src="")/IPv6()/UDP(dport=)/L2TP(hdr=0x000)/HDLC()/Raw(b"\\x00\\x21")/IP(src="")/UDP(dport=)], iface="") >>> sendp([Ether(src="")/IPv6()/UDP(dport=)/L2TP(hdr=0x000)/HDLC()/Raw(b"\\x00\\x21")/IP(src="")/UDP(dport=)], iface="") >>> sendp([Ether(src="")/IP()/UDP(dport=)/L2TP(hdr=0x000)/HDLC()/Raw(b"\\x00\\x21")/IP(src="")/UDP(dport=)], iface="") Subcase 2: ipv4_udp_MAC_IPV6_PPPoL2TPV2_IPV4_UDP_PAY_DATA_L ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ rules:: testpmd> flow create 0 ingress pattern eth / ipv6 / udp / l2tpv2 type data_l / ppp / ipv4 dst is / udp src is / end actions queue index 5 / end matched packets:: >>> sendp([Ether(src="")/IPv6()/UDP(dport=)/L2TP(hdr=0x400,len=40)/HDLC()/Raw(b"\\x00\\x21")/IP(dst="")/UDP(sport=)], iface="") >>> sendp([Ether(src="")/IPv6()/UDP(dport=)/L2TP(hdr=0x400,len=40)/HDLC()/Raw(b"\\x00\\x21")/IP(dst="")/UDP(sport=)], iface="") mismatched packets:: >>> sendp([Ether(src="")/IPv6()/UDP(dport=)/L2TP(hdr=0x400,len=40)/HDLC()/Raw(b"\\x00\\x21")/IP(dst="")/UDP(sport=)], iface="") >>> sendp([Ether(src="")/IPv6()/UDP(dport=)/L2TP(hdr=0x400,len=40)/HDLC()/Raw(b"\\x00\\x21")/IP(dst="")/UDP(sport=)], iface="") >>> sendp([Ether(src="")/IP()/UDP(dport=)/L2TP(hdr=0x400,len=40)/HDLC()/Raw(b"\\x00\\x21")/IP(dst="")/UDP(sport=)], iface="") Subcase 3: ipv4_udp_MAC_IPV6_PPPoL2TPV2_IPV4_UDP_PAY_DATA_S ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ rules:: testpmd> flow create 0 ingress pattern eth / ipv6 / udp / l2tpv2 type data_s / ppp / ipv4 src is / udp dst is / end actions rss queues 2 3 end / end matched packets:: >>> sendp([Ether(src="")/IPv6()/UDP(dport=)/L2TP(hdr=0x080)/HDLC()/Raw(b"\\x00\\x21")/IP(src="")/UDP(dport=)], iface="") >>> sendp([Ether(src="")/IPv6()/UDP(dport=)/L2TP(hdr=0x080)/HDLC()/Raw(b"\\x00\\x21")/IP(src="")/UDP(dport=)], iface="") mismatched packets:: >>> sendp([Ether(src="")/IPv6()/UDP(dport=)/L2TP(hdr=0x080)/HDLC()/Raw(b"\\x00\\x21")/IP(src="")/UDP(dport=)], iface="") >>> sendp([Ether(src="")/IPv6()/UDP(dport=)/L2TP(hdr=0x080)/HDLC()/Raw(b"\\x00\\x21")/IP(src="")/UDP(dport=)], iface="") >>> sendp([Ether(src="")/IP()/UDP(dport=)/L2TP(hdr=0x080)/HDLC()/Raw(b"\\x00\\x21")/IP(src="")/UDP(dport=)], iface="") Subcase 4: ipv4_udp_MAC_IPV6_PPPoL2TPV2_IPV4_UDP_PAY_DATA_O ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ rules:: testpmd> flow create 0 ingress pattern eth / ipv6 / udp / l2tpv2 type data_o offset_size is / ppp / ipv4 dst is / udp src is / end actions queue index 2 / end matched packets:: >>> sendp([Ether(src="")/IPv6()/UDP(dport=)/L2TP(hdr=0x020,offset=)/Raw(b"\\x00\\x00\\x00\\x00")/HDLC()/Raw(b"\\x00\\x21")/IP(dst="")/UDP(sport=)], iface="") >>> sendp([Ether(src="")/IPv6()/UDP(dport=)/L2TP(hdr=0x020,offset=)/Raw(b"\\x00\\x00\\x00\\x00")/HDLC()/Raw(b"\\x00\\x21")/IP(dst="")/UDP(sport=)], iface="") mismatched packets:: >>> sendp([Ether(src="")/IPv6()/UDP(dport=)/L2TP(hdr=0x020,offset=)/Raw(b"\\x00\\x00\\x00\\x00")/HDLC()/Raw(b"\\x00\\x21")/IP(dst="")/UDP(sport=)], iface="") >>> sendp([Ether(src="")/IPv6()/UDP(dport=)/L2TP(hdr=0x020,offset=)/Raw(b"\\x00\\x00\\x00\\x00")/HDLC()/Raw(b"\\x00\\x21")/IP(dst="")/UDP(sport=)], iface="") >>> sendp([Ether(src="")/IP()/UDP(dport=)/L2TP(hdr=0x020,offset=)/Raw(b"\\x00\\x00\\x00\\x00")/HDLC()/Raw(b"\\x00\\x21")/IP(dst="")/UDP(sport=)], iface="") Subcase 5: ipv4_udp_MAC_IPV6_PPPoL2TPV2_IPV4_UDP_PAY_DATA_L_S ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ rules:: testpmd> flow create 0 ingress pattern eth / ipv6 / udp / l2tpv2 type data_l_s / ppp / ipv4 dst is / udp dst is / end actions drop / end matched packets:: >>> sendp([Ether(src="")/IPv6()/UDP(dport=)/L2TP(hdr=0x480,len=44)/HDLC()/Raw(b"\\x00\\x21")/IP(dst="")/UDP(dport=)], iface="") >>> sendp([Ether(src="")/IPv6()/UDP(dport=)/L2TP(hdr=0x480,len=44)/HDLC()/Raw(b"\\x00\\x21")/IP(dst="")/UDP(dport=)], iface="") mismatched packets:: >>> sendp([Ether(src="")/IPv6()/UDP(dport=)/L2TP(hdr=0x480,len=44)/HDLC()/Raw(b"\\x00\\x21")/IP(dst="")/UDP(dport=)], iface="") >>> sendp([Ether(src="")/IPv6()/UDP(dport=)/L2TP(hdr=0x480,len=44)/HDLC()/Raw(b"\\x00\\x21")/IP(dst="")/UDP(dport=)], iface="") >>> sendp([Ether(src="")/IP()/UDP(dport=)/L2TP(hdr=0x480,len=44)/HDLC()/Raw(b"\\x00\\x21")/IP(dst="")/UDP(dport=)], iface="") Test case 15: MAC_IPV6_PPPoL2TPV2_IPV4_TCP ------------------------------------------ This case is designed to check distribute MAC IPv6 PPPoL2TPV2 IPv4 TCP data packets based on IP src+dest address and inner TCP src+dest port as input set. Subcase 1: ipv4_tcp_MAC_IPV6_PPPoL2TPV2_IPV4_TCP_DATA ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ rules:: testpmd> flow create 0 ingress pattern eth / ipv6 / udp / l2tpv2 type data / ppp / ipv4 src is / tcp dst is / end actions queue index 3 / end matched packets:: >>> sendp([Ether(src="")/IPv6()/UDP(dport=)/L2TP(hdr=0x000)/HDLC()/Raw(b"\\x00\\x21")/IP(src="")/TCP(dport=)], iface="") >>> sendp([Ether(src="")/IPv6()/UDP(dport=)/L2TP(hdr=0x000)/HDLC()/Raw(b"\\x00\\x21")/IP(src="")/TCP(dport=)], iface="") mismatched packets:: >>> sendp([Ether(src="")/IPv6()/UDP(dport=)/L2TP(hdr=0x000)/HDLC()/Raw(b"\\x00\\x21")/IP(src="")/TCP(dport=)], iface="") >>> sendp([Ether(src="")/IPv6()/UDP(dport=)/L2TP(hdr=0x000)/HDLC()/Raw(b"\\x00\\x21")/IP(src="")/TCP(dport=)], iface="") >>> sendp([Ether(src="")/IP()/UDP(dport=)/L2TP(hdr=0x000)/HDLC()/Raw(b"\\x00\\x21")/IP(src="")/TCP(dport=)], iface="") Subcase 2: ipv4_tcp_MAC_IPV6_PPPoL2TPV2_IPV4_TCP_DATA_L ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ rules:: testpmd> flow create 0 ingress pattern eth / ipv6 / udp / l2tpv2 type data_l / ppp / ipv4 dst is / tcp src is / end actions queue index 5 / end matched packets:: >>> sendp([Ether(src="")/IPv6()/UDP(dport=)/L2TP(hdr=0x400,len=52)/HDLC()/Raw(b"\\x00\\x21")/IP(dst="")/TCP(sport=)], iface="") >>> sendp([Ether(src="")/IPv6()/UDP(dport=)/L2TP(hdr=0x400,len=52)/HDLC()/Raw(b"\\x00\\x21")/IP(dst="")/TCP(sport=)], iface="") mismatched packets:: >>> sendp([Ether(src="")/IPv6()/UDP(dport=)/L2TP(hdr=0x400,len=52)/HDLC()/Raw(b"\\x00\\x21")/IP(dst="")/TCP(sport=)], iface="") >>> sendp([Ether(src="")/IPv6()/UDP(dport=)/L2TP(hdr=0x400,len=52)/HDLC()/Raw(b"\\x00\\x21")/IP(dst="")/TCP(sport=)], iface="") >>> sendp([Ether(src="")/IP()/UDP(dport=)/L2TP(hdr=0x400,len=52)/HDLC()/Raw(b"\\x00\\x21")/IP(dst="")/TCP(sport=)], iface="") Subcase 3: ipv4_tcp_MAC_IPV6_PPPoL2TPV2_IPV4_TCP_DATA_S ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ rules:: testpmd> flow create 0 ingress pattern eth / ipv6 / udp / l2tpv2 type data_s / ppp / ipv4 src is / tcp dst is / end actions rss queues 2 3 end / end matched packets:: >>> sendp([Ether(src="")/IPv6()/UDP(dport=)/L2TP(hdr=0x080)/HDLC()/Raw(b"\\x00\\x21")/IP(src="")/TCP(dport=)], iface="") >>> sendp([Ether(src="")/IPv6()/UDP(dport=)/L2TP(hdr=0x080)/HDLC()/Raw(b"\\x00\\x21")/IP(src="")/TCP(dport=)], iface="") mismatched packets:: >>> sendp([Ether(src="")/IPv6()/UDP(dport=)/L2TP(hdr=0x080)/HDLC()/Raw(b"\\x00\\x21")/IP(src="")/TCP(dport=)], iface="") >>> sendp([Ether(src="")/IPv6()/UDP(dport=)/L2TP(hdr=0x080)/HDLC()/Raw(b"\\x00\\x21")/IP(src="")/TCP(dport=)], iface="") >>> sendp([Ether(src="")/IP()/UDP(dport=)/L2TP(hdr=0x080)/HDLC()/Raw(b"\\x00\\x21")/IP(src="")/TCP(dport=)], iface="") Subcase 4: ipv4_tcp_MAC_IPV6_PPPoL2TPV2_IPV4_TCP_DATA_O ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ rules:: testpmd> flow create 0 ingress pattern eth / ipv6 / udp / l2tpv2 type data_o offset_size is / ppp / ipv4 dst is / tcp src is / end actions queue index 2 / end matched packets:: >>> sendp([Ether(src="")/IPv6()/UDP(dport=)/L2TP(hdr=0x020,offset=)/Raw(b"\\x00\\x00\\x00\\x00")/HDLC()/Raw(b"\\x00\\x21")/IP(dst="")/TCP(sport=)], iface="") >>> sendp([Ether(src="")/IPv6()/UDP(dport=)/L2TP(hdr=0x020,offset=)/Raw(b"\\x00\\x00\\x00\\x00")/HDLC()/Raw(b"\\x00\\x21")/IP(dst="")/TCP(sport=)], iface="") mismatched packets:: >>> sendp([Ether(src="")/IPv6()/UDP(dport=)/L2TP(hdr=0x020,offset=)/Raw(b"\\x00\\x00\\x00\\x00")/HDLC()/Raw(b"\\x00\\x21")/IP(dst="")/TCP(sport=)], iface="") >>> sendp([Ether(src="")/IPv6()/UDP(dport=)/L2TP(hdr=0x020,offset=)/Raw(b"\\x00\\x00\\x00\\x00")/HDLC()/Raw(b"\\x00\\x21")/IP(dst="")/TCP(sport=)], iface="") >>> sendp([Ether(src="")/IP()/UDP(dport=)/L2TP(hdr=0x020,offset=)/Raw(b"\\x00\\x00\\x00\\x00")/HDLC()/Raw(b"\\x00\\x21")/IP(dst="")/TCP(sport=)], iface="") Subcase 5: ipv4_tcp_MAC_IPV6_PPPoL2TPV2_IPV4_TCP_DATA_L_S ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ rules:: testpmd> flow create 0 ingress pattern eth / ipv6 / udp / l2tpv2 type data_l_s / ppp / ipv4 dst is / tcp dst is / end actions drop / end matched packets:: >>> sendp([Ether(src="")/IPv6()/UDP(dport=)/L2TP(hdr=0x480,len=56)/HDLC()/Raw(b"\\x00\\x21")/IP(dst="")/TCP(dport=)], iface="") >>> sendp([Ether(src="")/IPv6()/UDP(dport=)/L2TP(hdr=0x480,len=56)/HDLC()/Raw(b"\\x00\\x21")/IP(dst="")/TCP(dport=)], iface="") mismatched packets:: >>> sendp([Ether(src="")/IPv6()/UDP(dport=)/L2TP(hdr=0x480,len=56)/HDLC()/Raw(b"\\x00\\x21")/IP(dst="")/TCP(dport=)], iface="") >>> sendp([Ether(src="")/IPv6()/UDP(dport=)/L2TP(hdr=0x480,len=56)/HDLC()/Raw(b"\\x00\\x21")/IP(dst="")/TCP(dport=)], iface="") >>> sendp([Ether(src="")/IP()/UDP(dport=)/L2TP(hdr=0x480,len=56)/HDLC()/Raw(b"\\x00\\x21")/IP(dst="")/TCP(dport=)], iface="") Test case 16: MAC_IPV6_PPPoL2TPV2_IPV6_PAY ------------------------------------------ This case is designed to check distribute MAC IPv6 PPPoL2TPV2 IPv6 data packets based on IP src+dest address as input set. Subcase 1: ipv6_MAC_IPV6_PPPoL2TPV2_IPV6_PAY_DATA ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ rules:: testpmd> flow create 0 ingress pattern eth / ipv6 / udp / l2tpv2 type data / ppp / ipv6 src is dst is / end actions queue index 3 / end matched packets:: >>> sendp([Ether(src="")/IPv6()/UDP(dport=)/L2TP(hdr=0x000)/HDLC()/Raw(b"\\x00\\x57")/IPv6(src="",dst="")], iface="") >>> sendp([Ether(src="")/IPv6()/UDP(dport=)/L2TP(hdr=0x000)/HDLC()/Raw(b"\\x00\\x57")/IPv6(src="",dst="")], iface="") mismatched packets:: >>> sendp([Ether(src="")/IPv6()/UDP(dport=)/L2TP(hdr=0x000)/HDLC()/Raw(b"\\x00\\x57")/IPv6(src="",dst="")], iface="") >>> sendp([Ether(src="")/IPv6()/UDP(dport=)/L2TP(hdr=0x000)/HDLC()/Raw(b"\\x00\\x57")/IPv6(src="",dst="")], iface="") >>> sendp([Ether(src="7")/IP()/UDP(dport=)/L2TP(hdr=0x000)/HDLC()/Raw(b"\\x00\\x57")/IPv6(src="",dst="")], iface="") Subcase 2: ipv6_MAC_IPV6_PPPoL2TPV2_IPV6_PAY_DATA_L ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ rules:: testpmd> flow create 0 ingress pattern eth / ipv6 / udp / l2tpv2 type data_l / ppp / ipv6 src is dst is / end actions queue index 5 / end matched packets:: >>> sendp([Ether(src="")/IPv6()/UDP(dport=)/L2TP(hdr=0x400,len=52)/HDLC()/Raw(b"\\x00\\x57")/IPv6(src="",dst="")], iface="") >>> sendp([Ether(src="")/IPv6()/UDP(dport=)/L2TP(hdr=0x400,len=52)/HDLC()/Raw(b"\\x00\\x57")/IPv6(src="",dst="")], iface="") mismatched packets:: >>> sendp([Ether(src="")/IPv6()/UDP(dport=)/L2TP(hdr=0x400,len=52)/HDLC()/Raw(b"\\x00\\x57")/IPv6(src="",dst="")], iface="") >>> sendp([Ether(src="")/IPv6()/UDP(dport=)/L2TP(hdr=0x400,len=52)/HDLC()/Raw(b"\\x00\\x57")/IPv6(src="",dst="")], iface="") >>> sendp([Ether(src="")/IP()/UDP(dport=)/L2TP(hdr=0x400,len=52)/HDLC()/Raw(b"\\x00\\x57")/IPv6(src="",dst="")], iface="") Subcase 3: ipv6_MAC_IPV6_PPPoL2TPV2_IPV6_PAY_DATA_S ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ rules:: testpmd> flow create 0 ingress pattern eth / ipv6 / udp / l2tpv2 type data_s / ppp / ipv6 src is dst is / end actions rss queues 2 3 end / end matched packets:: >>> sendp([Ether(src="")/IPv6()/UDP(dport=)/L2TP(hdr=0x080)/HDLC()/Raw(b"\\x00\\x57")/IPv6(src="",dst="")], iface="") >>> sendp([Ether(src="")/IPv6()/UDP(dport=)/L2TP(hdr=0x080)/HDLC()/Raw(b"\\x00\\x57")/IPv6(src="",dst="")], iface="") mismatched packets:: >>> sendp([Ether(src="")/IPv6()/UDP(dport=)/L2TP(hdr=0x080)/HDLC()/Raw(b"\\x00\\x57")/IPv6(src="",dst="")], iface="") >>> sendp([Ether(src="")/IPv6()/UDP(dport=)/L2TP(hdr=0x080)/HDLC()/Raw(b"\\x00\\x57")/IPv6(src="",dst="")], iface="") >>> sendp([Ether(src="")/IP()/UDP(dport=)/L2TP(hdr=0x080)/HDLC()/Raw(b"\\x00\\x57")/IPv6(src="",dst="")], iface="") Subcase 4: ipv6_MAC_IPV6_PPPoL2TPV2_IPV6_PAY_DATA_O ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ rules:: testpmd> flow create 0 ingress pattern eth / ipv6 / udp / l2tpv2 type data_o offset_size is / ppp / ipv6 src dst is / end actions queue index 2 / end matched packets:: >>> sendp([Ether(src="")/IPv6()/UDP(dport=)/L2TP(hdr=0x020,offset=)/Raw(b"\\x00\\x00\\x00\\x00")/HDLC()/Raw(b"\\x00\\x57")/IPv6(src="",dst="")], iface="") >>> sendp([Ether(src="")/IPv6()/UDP(dport=)/L2TP(hdr=0x020,offset=)/Raw(b"\\x00\\x00\\x00\\x00")/HDLC()/Raw(b"\\x00\\x57")/IPv6(src="",dst="")], iface="") mismatched packets:: >>> sendp([Ether(src="")/IPv6()/UDP(dport=)/L2TP(hdr=0x020,offset=)/Raw(b"\\x00\\x00\\x00\\x00")/HDLC()/Raw(b"\\x00\\x57")/IPv6(src="",dst="")], iface="") >>> sendp([Ether(src="")/IPv6()/UDP(dport=)/L2TP(hdr=0x020,offset=)/Raw(b"\\x00\\x00\\x00\\x00")/HDLC()/Raw(b"\\x00\\x57")/IPv6(src="",dst="")], iface="") >>> sendp([Ether(src="")/IP()/UDP(dport=)/L2TP(hdr=0x020,offset=)/Raw(b"\\x00\\x00\\x00\\x00")/HDLC()/Raw(b"\\x00\\x57")/IPv6(src="",dst="")], iface="") Subcase 5: ipv6_MAC_IPV6_PPPoL2TPV2_IPV6_PAY_DATA_L_S ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ rules:: testpmd> flow create 0 ingress pattern eth / ipv6 / udp / l2tpv2 type data_l_s / ppp / ipv6 src is dst is / end actions drop / end matched packets:: >>> sendp([Ether(src="")/IPv6()/UDP(dport=)/L2TP(hdr=0x480,len=56)/HDLC()/Raw(b"\\x00\\x57")/IPv6(src="",dst="")], iface="") >>> sendp([Ether(src="")/IPv6()/UDP(dport=)/L2TP(hdr=0x480,len=56)/HDLC()/Raw(b"\\x00\\x57")/IPv6(src="",dst="")], iface="") mismatched packets:: >>> sendp([Ether(src="")/IPv6()/UDP(dport=)/L2TP(hdr=0x480,len=56)/HDLC()/Raw(b"\\x00\\x57")/IPv6(src="",dst="")], iface="") >>> sendp([Ether(src="")/IPv6()/UDP(dport=)/L2TP(hdr=0x480,len=56)/HDLC()/Raw(b"\\x00\\x57")/IPv6(src="",dst="")], iface="") >>> sendp([Ether(src="")/IP()/UDP(dport=)/L2TP(hdr=0x480,len=56)/HDLC()/Raw(b"\\x00\\x57")/IPv6(src="",dst="")], iface="") Test case 17: MAC_IPV6_PPPoL2TPV2_IPV6_UDP_PAY ---------------------------------------------- This case is designed to check distribute MAC IPv6 PPPoL2TPV2 IPv6 UDP data packets based on IP src+dest address and inner UDP src+dest port as input set. Subcase 1: ipv6_udp_MAC_IPV6_PPPoL2TPV2_IPV6_UDP_PAY_DATA ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ rules:: testpmd> flow create 0 ingress pattern eth / ipv6 / udp / l2tpv2 type data / ppp / ipv6 dst is / udp src is / end actions queue index 3 / end matched packets:: >>> sendp([Ether(src="")/IPv6()/UDP(dport=)/L2TP(hdr=0x000)/HDLC()/Raw(b"\\x00\\x57")/IPv6(dst="")/UDP(sport=)], iface="") >>> sendp([Ether(src="")/IPv6()/UDP(dport=)/L2TP(hdr=0x000)/HDLC()/Raw(b"\\x00\\x57")/IPv6(dst="")/UDP(sport=)], iface="") mismatched packets:: >>> sendp([Ether(src="")/IPv6()/UDP(dport=)/L2TP(hdr=0x000)/HDLC()/Raw(b"\\x00\\x57")/IPv6(dst="")/UDP(sport=)], iface="") >>> sendp([Ether(src="")/IPv6()/UDP(dport=)/L2TP(hdr=0x000)/HDLC()/Raw(b"\\x00\\x57")/IPv6(dst="")/UDP(sport=)], iface="") >>> sendp([Ether(src="")/IP()/UDP(dport=)/L2TP(hdr=0x000)/HDLC()/Raw(b"\\x00\\x57")/IPv6(dst="")/UDP(sport=)], iface="") Subcase 2: ipv6_udp_MAC_IPV6_PPPoL2TPV2_IPV6_UDP_PAY_DATA_L ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ rules:: testpmd> flow create 0 ingress pattern eth / ipv6 / udp / l2tpv2 type data_l / ppp / ipv6 src is / udp dst is / end actions queue index 5 / end matched packets:: >>> sendp([Ether(src="")/IPv6()/UDP(dport=)/L2TP(hdr=0x400,len=60)/HDLC()/Raw(b"\\x00\\x57")/IPv6(src="")/UDP(dport=)], iface="") >>> sendp([Ether(src="")/IPv6()/UDP(dport=)/L2TP(hdr=0x400,len=60)/HDLC()/Raw(b"\\x00\\x57")/IPv6(src="")/UDP(dport=)], iface="") mismatched packets:: >>> sendp([Ether(src="")/IPv6()/UDP(dport=)/L2TP(hdr=0x400,len=60)/HDLC()/Raw(b"\\x00\\x57")/IPv6(src="")/UDP(dport=)], iface="") >>> sendp([Ether(src="")/IPv6()/UDP(dport=)/L2TP(hdr=0x400,len=60)/HDLC()/Raw(b"\\x00\\x57")/IPv6(src="")/UDP(dport=)], iface="") >>> sendp([Ether(src="")/IP()/UDP(dport=)/L2TP(hdr=0x400,len=60)/HDLC()/Raw(b"\\x00\\x57")/IPv6(src="")/UDP(dport=)], iface="") Subcase 3: ipv6_udp_MAC_IPV6_PPPoL2TPV2_IPV6_UDP_PAY_DATA_S ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ rules:: testpmd> flow create 0 ingress pattern eth / ipv6 / udp / l2tpv2 type data_s / ppp / ipv6 dst is / udp src is / end actions rss queues 2 3 end / end matched packets:: >>> sendp([Ether(src="")/IPv6()/UDP(dport=)/L2TP(hdr=0x080)/HDLC()/Raw(b"\\x00\\x57")/IPv6(dst="")/UDP(sport=)], iface="") >>> sendp([Ether(src="")/IPv6()/UDP(dport=)/L2TP(hdr=0x080)/HDLC()/Raw(b"\\x00\\x57")/IPv6(dst="")/UDP(sport=)], iface="") mismatched packets:: >>> sendp([Ether(src="")/IPv6()/UDP(dport=)/L2TP(hdr=0x080)/HDLC()/Raw(b"\\x00\\x57")/IPv6(dst="")/UDP(sport=)], iface="") >>> sendp([Ether(src="")/IPv6()/UDP(dport=)/L2TP(hdr=0x080)/HDLC()/Raw(b"\\x00\\x57")/IPv6(dst="")/UDP(sport=)], iface="") >>> sendp([Ether(src="")/IP()/UDP(dport=)/L2TP(hdr=0x080)/HDLC()/Raw(b"\\x00\\x57")/IPv6(dst="")/UDP(sport=)], iface="") Subcase 4: ipv6_udp_MAC_IPV6_PPPoL2TPV2_IPV6_UDP_PAY_DATA_O ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ rules:: testpmd> flow create 0 ingress pattern eth / ipv6 / udp / l2tpv2 type data_o offset_size is / ppp / ipv6 src is / udp dst is / end actions queue index 2 / end matched packets:: >>> sendp([Ether(src="")/IPv6()/UDP(dport=)/L2TP(hdr=0x020,offset=)/Raw(b"\\x00\\x00\\x00\\x00")/HDLC()/Raw(b"\\x00\\x57")/IPv6(src="")/UDP(dport=)], iface="") >>> sendp([Ether(src="")/IPv6()/UDP(dport=)/L2TP(hdr=0x020,offset=)/Raw(b"\\x00\\x00\\x00\\x00")/HDLC()/Raw(b"\\x00\\x57")/IPv6(src="")/UDP(dport=)], iface="") mismatched packets:: >>> sendp([Ether(src="")/IPv6()/UDP(dport=)/L2TP(hdr=0x020,offset=)/Raw(b"\\x00\\x00\\x00\\x00")/HDLC()/Raw(b"\\x00\\x57")/IPv6(src="")/UDP(dport=)], iface="") >>> sendp([Ether(src="")/IPv6()/UDP(dport=)/L2TP(hdr=0x020,offset=)/Raw(b"\\x00\\x00\\x00\\x00")/HDLC()/Raw(b"\\x00\\x57")/IPv6(src="")/UDP(dport=)], iface="") >>> sendp([Ether(src="")/IP()/UDP(dport=)/L2TP(hdr=0x020,offset=)/Raw(b"\\x00\\x00\\x00\\x00")/HDLC()/Raw(b"\\x00\\x57")/IPv6(src="")/UDP(dport=)], iface="") Subcase 5: ipv6_udp_MAC_IPV6_PPPoL2TPV2_IPV6_UDP_PAY_DATA_L_S ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ rules:: testpmd> flow create 0 ingress pattern eth / ipv6 / udp / l2tpv2 type data_l_s / ppp / ipv6 dst is / udp dst is / end actions drop / end matched packets:: >>> sendp([Ether(src="")/IPv6()/UDP(dport=)/L2TP(hdr=0x480,len=64)/HDLC()/Raw(b"\\x00\\x57")/IPv6(dst="")/UDP(dport=)], iface="") >>> sendp([Ether(src="")/IPv6()/UDP(dport=)/L2TP(hdr=0x480,len=64)/HDLC()/Raw(b"\\x00\\x57")/IPv6(dst="")/UDP(dport=)], iface="") mismatched packets:: >>> sendp([Ether(src="")/IPv6()/UDP(dport=)/L2TP(hdr=0x480,len=64)/HDLC()/Raw(b"\\x00\\x57")/IPv6(dst="")/UDP(dport=)], iface="") >>> sendp([Ether(src="")/IPv6()/UDP(dport=)/L2TP(hdr=0x480,len=64)/HDLC()/Raw(b"\\x00\\x57")/IPv6(dst="")/UDP(dport=)], iface="") >>> sendp([Ether(src="")/IP()/UDP(dport=)/L2TP(hdr=0x480,len=64)/HDLC()/Raw(b"\\x00\\x57")/IPv6(dst="")/UDP(dport=)], iface="") Test case 18: MAC_IPV6_PPPoL2TPV2_IPV6_TCP ------------------------------------------ This case is designed to check distribute MAC IPv6 PPPoL2TPV2 IPv6 TCP data packets based on IP src+dest address and inner TCP src+dest port as input set. Subcase 1: ipv6_tcp_MAC_IPV6_PPPoL2TPV2_IPV6_TCP_DATA ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ rules:: testpmd> flow create 0 ingress pattern eth / ipv6 / udp / l2tpv2 type data / ppp / ipv6 dst is / tcp src is / end actions queue index 3 / end matched packets:: >>> sendp([Ether(src="")/IPv6()/UDP(dport=)/L2TP(hdr=0x000)/HDLC()/Raw(b"\\x00\\x57")/IPv6(dst="")/TCP(sport=)], iface="") >>> sendp([Ether(src="")/IPv6()/UDP(dport=)/L2TP(hdr=0x000)/HDLC()/Raw(b"\\x00\\x57")/IPv6(dst="")/TCP(sport=)], iface="") mismatched packets:: >>> sendp([Ether(src="")/IPv6()/UDP(dport=)/L2TP(hdr=0x000)/HDLC()/Raw(b"\\x00\\x57")/IPv6(dst="")/TCP(sport=)], iface="") >>> sendp([Ether(src="")/IPv6()/UDP(dport=)/L2TP(hdr=0x000)/HDLC()/Raw(b"\\x00\\x57")/IPv6(dst="")/TCP(sport=)], iface="") >>> sendp([Ether(src="")/IP()/UDP(dport=)/L2TP(hdr=0x000)/HDLC()/Raw(b"\\x00\\x57")/IPv6(dst="")/TCP(sport=)], iface="") Subcase 2: ipv6_tcp_MAC_IPV6_PPPoL2TPV2_IPV6_TCP_DATA_L ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ rules:: testpmd> flow create 0 ingress pattern eth / ipv6 / udp / l2tpv2 type data_l / ppp / ipv6 src is / tcp dst is / end actions queue index 5 / end matched packets:: >>> sendp([Ether(src="")/IPv6()/UDP(dport=)/L2TP(hdr=0x400,len=72)/HDLC()/Raw(b"\\x00\\x57")/IPv6(src="")/TCP(dport=)], iface="") >>> sendp([Ether(src="")/IPv6()/UDP(dport=)/L2TP(hdr=0x400,len=72)/HDLC()/Raw(b"\\x00\\x57")/IPv6(src="")/TCP(dport=)], iface="") mismatched packets:: >>> sendp([Ether(src="")/IPv6()/UDP(dport=)/L2TP(hdr=0x400,len=72)/HDLC()/Raw(b"\\x00\\x57")/IPv6(src="")/TCP(dport=)], iface="") >>> sendp([Ether(src="")/IPv6()/UDP(dport=)/L2TP(hdr=0x400,len=72)/HDLC()/Raw(b"\\x00\\x57")/IPv6(src="")/TCP(dport=)], iface="") >>> sendp([Ether(src="")/IP()/UDP(dport=)/L2TP(hdr=0x400,len=72)/HDLC()/Raw(b"\\x00\\x57")/IPv6(src="")/TCP(dport=)], iface="") Subcase 3: ipv6_tcp_MAC_IPV6_PPPoL2TPV2_IPV6_TCP_DATA_S ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ rules:: testpmd> flow create 0 ingress pattern eth / ipv6 / udp / l2tpv2 type data_s / ppp / ipv6 dst is / tcp src is / end actions rss queues 2 3 end / end matched packets:: >>> sendp([Ether(src="")/IPv6()/UDP(dport=)/L2TP(hdr=0x080)/HDLC()/Raw(b"\\x00\\x57")/IPv6(dst="")/TCP(sport=)], iface="") >>> sendp([Ether(src="")/IPv6()/UDP(dport=)/L2TP(hdr=0x080)/HDLC()/Raw(b"\\x00\\x57")/IPv6(dst="")/TCP(sport=)], iface="") mismatched packets:: >>> sendp([Ether(src="")/IPv6()/UDP(dport=)/L2TP(hdr=0x080)/HDLC()/Raw(b"\\x00\\x57")/IPv6(dst="")/TCP(sport=)], iface="") >>> sendp([Ether(src="")/IPv6()/UDP(dport=)/L2TP(hdr=0x080)/HDLC()/Raw(b"\\x00\\x57")/IPv6(dst="")/TCP(sport=)], iface="") >>> sendp([Ether(src="")/IP()/UDP(dport=)/L2TP(hdr=0x080)/HDLC()/Raw(b"\\x00\\x57")/IPv6(dst="")/TCP(sport=)], iface="") Subcase 4: ipv6_tcp_MAC_IPV6_PPPoL2TPV2_IPV6_TCP_DATA_O ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ rules:: testpmd> flow create 0 ingress pattern eth / ipv6 / udp / l2tpv2 type data_o offset_size is / ppp / ipv6 src is / tcp dst is / end actions queue index 2 / end matched packets:: >>> sendp([Ether(src="")/IPv6()/UDP(dport=)/L2TP(hdr=0x020,offset=)/Raw(b"\\x00\\x00\\x00\\x00")/HDLC()/Raw(b"\\x00\\x57")/IPv6(src="")/TCP(dport=)], iface="") >>> sendp([Ether(src="")/IPv6()/UDP(dport=)/L2TP(hdr=0x020,offset=)/Raw(b"\\x00\\x00\\x00\\x00")/HDLC()/Raw(b"\\x00\\x57")/IPv6(src="")/TCP(sport=)], iface="") mismatched packets:: >>> sendp([Ether(src="")/IPv6()/UDP(dport=)/L2TP(hdr=0x020,offset=)/Raw(b"\\x00\\x00\\x00\\x00")/HDLC()/Raw(b"\\x00\\x57")/IPv6(src="")/TCP(sport=)], iface="") >>> sendp([Ether(src="")/IPv6()/UDP(dport=)/L2TP(hdr=0x020,offset=)/Raw(b"\\x00\\x00\\x00\\x00")/HDLC()/Raw(b"\\x00\\x57")/IPv6(src="")/TCP(sport=)], iface="") >>> sendp([Ether(src="")/IP()/UDP(dport=)/L2TP(hdr=0x020,offset=)/Raw(b"\\x00\\x00\\x00\\x00")/HDLC()/Raw(b"\\x00\\x57")/IPv6(src="")/TCP(sport=)], iface="") Subcase 5: ipv6_tcp_MAC_IPV6_PPPoL2TPV2_IPV6_TCP_DATA_L_S ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ rules:: testpmd> flow create 0 ingress pattern eth / ipv6 / udp / l2tpv2 type data_l_s / ppp / ipv6 src is / tcp src is / end actions drop / end matched packets:: >>> sendp([Ether(src="")/IPv6()/UDP(dport=)/L2TP(hdr=0x480,len=76)/HDLC()/Raw(b"\\x00\\x57")/IPv6(src="")/TCP(sport=)], iface="") >>> sendp([Ether(src="")/IPv6()/UDP(dport=)/L2TP(hdr=0x480,len=76)/HDLC()/Raw(b"\\x00\\x57")/IPv6(src="")/TCP(sport=)], iface="") mismatched packets:: >>> sendp([Ether(src="")/IPv6()/UDP(dport=)/L2TP(hdr=0x480,len=76)/HDLC()/Raw(b"\\x00\\x57")/IPv6(src="")/TCP(sport=)], iface="") >>> sendp([Ether(src="")/IPv6()/UDP(dport=)/L2TP(hdr=0x480,len=76)/HDLC()/Raw(b"\\x00\\x57")/IPv6(src="")/TCP(sport=)], iface="") >>> sendp([Ether(src="")/IP()/UDP(dport=)/L2TP(hdr=0x480,len=76)/HDLC()/Raw(b"\\x00\\x57")/IPv6(src="")/TCP(sport=)], iface="")