[v1] test_plans/flexible_rxd:add MPLS test cases
Commit Message
add MPLS test cases.
Signed-off-by: Hailin Xu <hailinx.xu@intel.com>
---
test_plans/flexible_rxd_test_plan.rst | 363 +++++++++++++++++++++++++-
1 file changed, 360 insertions(+), 3 deletions(-)
Comments
Hi Hailin,
Why case 12 only support OS package? Pls double confirm it.
Best regards,
Xueqin
> -----Original Message-----
> From: Xu, HailinX <hailinx.xu@intel.com>
> Sent: Wednesday, February 24, 2021 3:21 PM
> To: dts@dpdk.org
> Cc: Lin, Xueqin <xueqin.lin@intel.com>; Xu, HailinX <hailinx.xu@intel.com>
> Subject: [dts][PATCH v1] test_plans/flexible_rxd:add MPLS test cases
>
> add MPLS test cases.
>
> Signed-off-by: Hailin Xu <hailinx.xu@intel.com>
> ---
> test_plans/flexible_rxd_test_plan.rst | 363 +++++++++++++++++++++++++-
> 1 file changed, 360 insertions(+), 3 deletions(-)
>
> diff --git a/test_plans/flexible_rxd_test_plan.rst
> b/test_plans/flexible_rxd_test_plan.rst
> index 1520d5f6..47b8fbff 100644
> --- a/test_plans/flexible_rxd_test_plan.rst
> +++ b/test_plans/flexible_rxd_test_plan.rst
> @@ -46,9 +46,9 @@ Prerequisites
> =============
>
> Copy correct ``ice.pkg`` into ``/usr/lib/firmware/intel/ice/ddp/``, \ -For the
> test cases, comms package is expected.
> +For the test cases, os/comms/wireless package is expected, except that "test
> case 12" only support os package.
[xueqin] why? Commos and wireless could cover all protocols supported by OS.
>
> -Prepare test toplogoy, in the test case, it requires
> +Prepare test toplogy, in the test case, it requires
>
> - 1 Intel E810 interface
> - 1 network interface for sending test packet, @@ -57,6 +57,22 @@ Prepare
> test toplogoy, in the test case, it requires
>
> Patch testpmd for dumping flexible fields from RXD::
>
> + diff --git a/app/test-pmd/meson.build b/app/test-pmd/meson.build
> + index 7e9c7bdd6..b75b90a9c 100644
> + --- a/app/test-pmd/meson.build
> + +++ b/app/test-pmd/meson.build
> + @@ -49,6 +49,9 @@ endif
> + if dpdk_conf.has('RTE_NET_I40E')
> + deps += 'net_i40e'
> + endif
> + +if dpdk_conf.has('RTE_NET_ICE')
> + + deps += ['net_ice', 'net_iavf']
> + +endif
> + if dpdk_conf.has('RTE_NET_IXGBE')
> + deps += 'net_ixgbe'
> + endif
> +
> +
> diff --git a/app/test-pmd/util.c b/app/test-pmd/util.c
> index a1164b7..b90344d 100644
> --- a/app/test-pmd/util.c
> @@ -116,7 +132,7 @@ Send a packet with VLAN tag from test network
> interface::
> Please notice
>
> - Change ethernet source address with your test network interface's address
> -- Make sure the ethernet destination addres is NOT your real E810 interface's
> address
> +- Make sure the ethernet destination address is NOT your real E810
> +interface's address
>
> Check the output in testpmd, **ctag=1:0:23** is expected, which is
> consistent with VLAN tag set in test packet::
>
> @@ -345,6 +361,7 @@ Expected output in testpmd::
>
> Test Case 12: Check effect of replacing pkg from RXID #22 to RXID #16
> =================================================================
> ====
> +the case only support os pkg
>
> Put the ice.pkg with RXID #16(ice-1.3.7.0.pkg and more) to
> /lib/firmware/updates/intel/ice/ddp/ice.pkg, then reload ice driver::
>
> @@ -372,3 +389,343 @@ Replace correct ice.pkg to
> /lib/firmware/updates/intel/ice/ddp/ice.pkg,then relo
>
> rmmod ice
> modprobe ice.ko
> +
> +Test Case 13: Check testpmd use different parameters start
> +==========================================================
> +Test steps are same to ``Test Case 01``, use different "proto_xtr" parameters
> the launch command of testpmd, check RXDID value.
> +
> +use error parameter Launch testpmd::
> +
> + ./x86_64-native-linuxapp-gcc/app/dpdk-testpmd -l 6-9 -n 4 -w
> + af:01.0,proto_xtr=vxlan -- -i --rxq=4 --txq=4 --portmask=0x1
> + --nb-cores=2
> +
> +testpmd can't started, check "iavf_lookup_flex_desc_type(): wrong flex_desc
> type, it should be: vlan|ipv4|ipv6|ipv6_flow|tcp|ovs|ip_offset" in testpmd
> output.
> +
> +don't use parameter launch testpmd::
> +
> + ./x86_64-native-linuxapp-gcc/app/dpdk-testpmd -l 6-9 -n 4 -w af:01.0
> + -- -i --rxq=4 --txq=4 --portmask=0x1 --nb-cores=2
> +
> +testpmd started, check "iavf_configure_queues(): request RXDID[16] in
> +Queue[0]" in testpmd output
> +
> +MPLS TEST
> +===================
> +
> +Test steps are same to ``Test Case 01``, just change the launch command
> +of testpmd, test packet and expected output
> +
> +all MPLS cases use same parameter Launch testpmd::
> +
> + ./x86_64-native-linuxapp-gcc/app/dpdk-testpmd -l 6-9 -n 4 -w
> + af:01.0,proto_xtr=ip_offset -- -i --portmask=0x1 --nb-cores=2
> +
> +check RXDID value correct::
> +
> + expected: RXDID[25]
> +
> +scapy prepare:
> +===================
> +about scapy:
> +from scapy.contrib.mpls import MPLS
> +
> +Test Case 14: Check ip offset of ip
> +===================================
> +
> +Test packet::
> +
> + p = Ether(dst="00:11:22:33:44:55",type=0x8847)/MPLS(s=1)/IP()
> +
> +Expected output in testpmd::
> +
> + Protocol Offset:ip_offset=18
> +
> +Test packet::
> +
> + p = Ether(dst="00:11:22:33:44:55",type=0x8847)/MPLS(s=1)/IP()
> +
> +Expected output in testpmd::
> +
> + Protocol Offset:ip_offset=18
> +
> +Test Case 15: check ip offset with vlan
> +=======================================
> +
> +Test packet::
> +
> + p =
> + Ether(dst="00:11:22:33:44:55",type=0x8100)/Dot1Q(type=0x8847)/MPLS(s=1
> + )/IP()
> +
> +Expected output in testpmd::
> +
> + Protocol Offset:ip_offset=22
> +
> +Test packet::
> +
> + p =
> + Ether(dst="00:11:22:33:44:55",type=0x8100)/Dot1Q(type=0x8847)/MPLS(s=1
> + )/IPv6()
> +
> +Expected output in testpmd::
> +
> + Protocol Offset:ip_offset=22
> +
> +Test Case 16: check offset with 2 vlan tag
> +==========================================
> +
> +Test packet::
> +
> + p =
> + Ether(dst="00:11:22:33:44:55",type=0x88A8)/Dot1Q(type=0x8100)/Dot1Q(ty
> + pe=0x8847)/MPLS(s=1)/IP()
> +
> +Expected output in testpmd::
> +
> + Protocol Offset:ip_offset=26
> +
> +Test packet::
> +
> + p =
> + Ether(dst="00:11:22:33:44:55",type=0x88A8)/Dot1Q(type=0x8100)/Dot1Q(ty
> + pe=0x8847)/MPLS(s=1)/IPv6()
> +
> +Expected output in testpmd::
> +
> + Protocol Offset:ip_offset=26
> +
> +Test Case 17: check ip offset with multi MPLS
> +=============================================
> +
> +Test packet::
> +
> + p = Ether(dst="00:11:22:33:44:55",type=0x8847)/MPLS(s=1)/IP()
> +
> +Expected output in testpmd::
> +
> + Protocol Offset:ip_offset=18
> +
> +Test packet::
> +
> + p =
> + Ether(dst="00:11:22:33:44:55",type=0x8847)/MPLS(s=0)/MPLS(s=1)/IP()
> +
> +Expected output in testpmd::
> +
> + Protocol Offset:ip_offset=22
> +
> +Test packet::
> +
> + p =
> + Ether(dst="00:11:22:33:44:55",type=0x8847)/MPLS(s=0)/MPLS(s=0)/MPLS(s=
> + 1)/IP()
> +
> +Expected output in testpmd::
> +
> + Protocol Offset:ip_offset=26
> +
> +Test packet::
> +
> + p =
> + Ether(dst="00:11:22:33:44:55",type=0x8847)/MPLS(s=0)/MPLS(s=0)/MPLS(s=
> + 0)/MPLS(s=1)/IP()
> +
> +Expected output in testpmd::
> +
> + Protocol Offset:ip_offset=30
> +
> +Test packet::
> +
> + p =
> + Ether(dst="00:11:22:33:44:55",type=0x8847)/MPLS(s=0)/MPLS(s=0)/MPLS(s=
> + 0)/MPLS(s=0)/MPLS(s=1)/IP()
> +
> +Expected output in testpmd::
> +
> + Protocol Offset:ip_offset=34
> +
> +Test packet::
> +
> + p = Ether(dst="00:11:22:33:44:55",type=0x8847)/MPLS(s=1)/IPv6()
> +
> +Expected output in testpmd::
> +
> + Protocol Offset:ip_offset=18
> +
> +Test packet::
> +
> + p =
> + Ether(dst="00:11:22:33:44:55",type=0x8847)/MPLS(s=0)/MPLS(s=1)/IPv6()
> +
> +Expected output in testpmd::
> +
> + Protocol Offset:ip_offset=22
> +
> +Test packet::
> +
> + p =
> + Ether(dst="00:11:22:33:44:55",type=0x8847)/MPLS(s=0)/MPLS(s=0)/MPLS(s=
> + 1)/IPv6()
> +
> +Expected output in testpmd::
> +
> + Protocol Offset:ip_offset=26
> +
> +Test packet::
> +
> + p =
> + Ether(dst="00:11:22:33:44:55",type=0x8847)/MPLS(s=0)/MPLS(s=0)/MPLS(s=
> + 0)/MPLS(s=1)/IPv6()
> +
> +Expected output in testpmd::
> +
> + Protocol Offset:ip_offset=30
> +
> +Test packet::
> +
> + p =
> + Ether(dst="00:11:22:33:44:55",type=0x8847)/MPLS(s=0)/MPLS(s=0)/MPLS(s=
> + 0)/MPLS(s=0)/MPLS(s=1)/IPv6()
> +
> +Expected output in testpmd::
> +
> + Protocol Offset:ip_offset=34
> +
> +Test Case 18: check ip offset with multi MPLS with vlan tag
> +===========================================================
> +
> +Test packet::
> +
> + p =
> + Ether(dst="00:11:22:33:44:55",type=0x8100)/Dot1Q(type=0x8847)/MPLS(s=1
> + )/IP()
> +
> +Expected output in testpmd::
> +
> + Protocol Offset:ip_offset=22
> +
> +Test packet::
> +
> + p =
> + Ether(dst="00:11:22:33:44:55",type=0x8100)/Dot1Q(type=0x8847)/MPLS(s=0
> + )/MPLS(s=1)/IP()
> +
> +Expected output in testpmd::
> +
> + Protocol Offset:ip_offset=26
> +
> +Test packet::
> +
> + p =
> + Ether(dst="00:11:22:33:44:55",type=0x8100)/Dot1Q(type=0x8847)/MPLS(s=0
> + )/MPLS(s=0)/MPLS(s=1)/IP()
> +
> +Expected output in testpmd::
> +
> + Protocol Offset:ip_offset=30
> +
> +Test packet::
> +
> + p =
> + Ether(dst="00:11:22:33:44:55",type=0x8100)/Dot1Q(type=0x8847)/MPLS(s=0
> + )/MPLS(s=0)/MPLS(s=0)/MPLS(s=1)/IP()
> +
> +Expected output in testpmd::
> +
> + Protocol Offset:ip_offset=34
> +
> +Test packet::
> +
> + p =
> + Ether(dst="00:11:22:33:44:55",type=0x8100)/Dot1Q(type=0x8847)/MPLS(s=0
> + )/MPLS(s=0)/MPLS(s=0)/MPLS(s=0)/MPLS(s=1)/IP()
> +
> +Expected output in testpmd::
> +
> + Protocol Offset:ip_offset=38
> +
> +Test packet::
> +
> + p =
> + Ether(dst="00:11:22:33:44:55",type=0x8100)/Dot1Q(type=0x8847)/MPLS(s=1
> + )/IPv6()
> +
> +Expected output in testpmd::
> +
> + Protocol Offset:ip_offset=22
> +
> +Test packet::
> +
> + p =
> + Ether(dst="00:11:22:33:44:55",type=0x8100)/Dot1Q(type=0x8847)/MPLS(s=0
> + )/MPLS(s=1)/IPv6()
> +
> +Expected output in testpmd::
> +
> + Protocol Offset:ip_offset=26
> +
> +Test packet::
> +
> + p =
> + Ether(dst="00:11:22:33:44:55",type=0x8100)/Dot1Q(type=0x8847)/MPLS(s=0
> + )/MPLS(s=0)/MPLS(s=1)/IPv6()
> +
> +Expected output in testpmd::
> +
> + Protocol Offset:ip_offset=30
> +
> +Test packet::
> +
> + p =
> + Ether(dst="00:11:22:33:44:55",type=0x8100)/Dot1Q(type=0x8847)/MPLS(s=0
> + )/MPLS(s=0)/MPLS(s=0)/MPLS(s=1)/IPv6()
> +
> +Expected output in testpmd::
> +
> + Protocol Offset:ip_offset=34
> +
> +Test packet::
> +
> + p =
> + Ether(dst="00:11:22:33:44:55",type=0x8100)/Dot1Q(type=0x8847)/MPLS(s=0
> + )/MPLS(s=0)/MPLS(s=0)/MPLS(s=0)/MPLS(s=1)/IPv6()
> +
> +Expected output in testpmd::
> +
> + Protocol Offset:ip_offset=38
> +
> +Test Case 19: check ip offset with multi MPLS with 2 vlan tag
> +=============================================================
> +
> +Test packet::
> +
> + p =
> + Ether(dst="00:11:22:33:44:55",type=0x88A8)/Dot1Q(type=0x8100)/Dot1Q(ty
> + pe=0x8847)/MPLS(s=1)/IP()
> +
> +Expected output in testpmd::
> +
> + Protocol Offset:ip_offset=26
> +
> +Test packet::
> +
> + p =
> + Ether(dst="00:11:22:33:44:55",type=0x88A8)/Dot1Q(type=0x8100)/Dot1Q(ty
> + pe=0x8847)/MPLS(s=0)/MPLS(s=1)/IP()
> +
> +Expected output in testpmd::
> +
> + Protocol Offset:ip_offset=30
> +
> +Test packet::
> +
> + p =
> + Ether(dst="00:11:22:33:44:55",type=0x88A8)/Dot1Q(type=0x8100)/Dot1Q(ty
> + pe=0x8847)/MPLS(s=0)/MPLS(s=0)/MPLS(s=1)/IP()
> +
> +Expected output in testpmd::
> +
> + Protocol Offset:ip_offset=34
> +
> +Test packet::
> +
> + p =
> + Ether(dst="00:11:22:33:44:55",type=0x88A8)/Dot1Q(type=0x8100)/Dot1Q(ty
> + pe=0x8847)/MPLS(s=0)/MPLS(s=0)/MPLS(s=0)/MPLS(s=1)/IP()
> +
> +Expected output in testpmd::
> +
> + Protocol Offset:ip_offset=38
> +
> +Test packet::
> +
> + p =
> + Ether(dst="00:11:22:33:44:55",type=0x88A8)/Dot1Q(type=0x8100)/Dot1Q(ty
> + pe=0x8847)/MPLS(s=0)/MPLS(s=0)/MPLS(s=0)/MPLS(s=0)/MPLS(s=1)/IP()
> +
> +Expected output in testpmd::
> +
> + Protocol Offset:ip_offset=42
> +
> +Test packet::
> +
> + p =
> + Ether(dst="00:11:22:33:44:55",type=0x88A8)/Dot1Q(type=0x8100)/Dot1Q(ty
> + pe=0x8847)/MPLS(s=1)/IPv6()
> +
> +Expected output in testpmd::
> +
> + Protocol Offset:ip_offset=26
> +
> +Test packet::
> +
> + p =
> + Ether(dst="00:11:22:33:44:55",type=0x88A8)/Dot1Q(type=0x8100)/Dot1Q(ty
> + pe=0x8847)/MPLS(s=0)/MPLS(s=1)/IPv6()
> +
> +Expected output in testpmd::
> +
> + Protocol Offset:ip_offset=30
> +
> +Test packet::
> +
> + p =
> + Ether(dst="00:11:22:33:44:55",type=0x88A8)/Dot1Q(type=0x8100)/Dot1Q(ty
> + pe=0x8847)/MPLS(s=0)/MPLS(s=0)/MPLS(s=1)/IPv6()
> +
> +Expected output in testpmd::
> +
> + Protocol Offset:ip_offset=34
> +
> +Test packet::
> +
> + p =
> + Ether(dst="00:11:22:33:44:55",type=0x88A8)/Dot1Q(type=0x8100)/Dot1Q(ty
> + pe=0x8847)/MPLS(s=0)/MPLS(s=0)/MPLS(s=0)/MPLS(s=1)/IPv6()
> +
> +Expected output in testpmd::
> +
> + Protocol Offset:ip_offset=38
> +
> +Test packet::
> +
> + p =
> + Ether(dst="00:11:22:33:44:55",type=0x88A8)/Dot1Q(type=0x8100)/Dot1Q(ty
> + pe=0x8847)/MPLS(s=0)/MPLS(s=0)/MPLS(s=0)/MPLS(s=0)/MPLS(s=1)/IPv6()
> +
> +Expected output in testpmd::
> +
> + Protocol Offset:ip_offset=42
> --
> 2.17.1
@@ -46,9 +46,9 @@ Prerequisites
=============
Copy correct ``ice.pkg`` into ``/usr/lib/firmware/intel/ice/ddp/``, \
-For the test cases, comms package is expected.
+For the test cases, os/comms/wireless package is expected, except that "test case 12" only support os package.
-Prepare test toplogoy, in the test case, it requires
+Prepare test toplogy, in the test case, it requires
- 1 Intel E810 interface
- 1 network interface for sending test packet,
@@ -57,6 +57,22 @@ Prepare test toplogoy, in the test case, it requires
Patch testpmd for dumping flexible fields from RXD::
+ diff --git a/app/test-pmd/meson.build b/app/test-pmd/meson.build
+ index 7e9c7bdd6..b75b90a9c 100644
+ --- a/app/test-pmd/meson.build
+ +++ b/app/test-pmd/meson.build
+ @@ -49,6 +49,9 @@ endif
+ if dpdk_conf.has('RTE_NET_I40E')
+ deps += 'net_i40e'
+ endif
+ +if dpdk_conf.has('RTE_NET_ICE')
+ + deps += ['net_ice', 'net_iavf']
+ +endif
+ if dpdk_conf.has('RTE_NET_IXGBE')
+ deps += 'net_ixgbe'
+ endif
+
+
diff --git a/app/test-pmd/util.c b/app/test-pmd/util.c
index a1164b7..b90344d 100644
--- a/app/test-pmd/util.c
@@ -116,7 +132,7 @@ Send a packet with VLAN tag from test network interface::
Please notice
- Change ethernet source address with your test network interface's address
-- Make sure the ethernet destination addres is NOT your real E810 interface's address
+- Make sure the ethernet destination address is NOT your real E810 interface's address
Check the output in testpmd, **ctag=1:0:23** is expected, which is consistent with VLAN tag set in test packet::
@@ -345,6 +361,7 @@ Expected output in testpmd::
Test Case 12: Check effect of replacing pkg from RXID #22 to RXID #16
=====================================================================
+the case only support os pkg
Put the ice.pkg with RXID #16(ice-1.3.7.0.pkg and more) to /lib/firmware/updates/intel/ice/ddp/ice.pkg, then reload ice driver::
@@ -372,3 +389,343 @@ Replace correct ice.pkg to /lib/firmware/updates/intel/ice/ddp/ice.pkg,then relo
rmmod ice
modprobe ice.ko
+
+Test Case 13: Check testpmd use different parameters start
+==========================================================
+Test steps are same to ``Test Case 01``, use different "proto_xtr" parameters the launch command of testpmd, check RXDID value.
+
+use error parameter Launch testpmd::
+
+ ./x86_64-native-linuxapp-gcc/app/dpdk-testpmd -l 6-9 -n 4 -w af:01.0,proto_xtr=vxlan -- -i --rxq=4 --txq=4 --portmask=0x1 --nb-cores=2
+
+testpmd can't started, check "iavf_lookup_flex_desc_type(): wrong flex_desc type, it should be: vlan|ipv4|ipv6|ipv6_flow|tcp|ovs|ip_offset" in testpmd output.
+
+don't use parameter launch testpmd::
+
+ ./x86_64-native-linuxapp-gcc/app/dpdk-testpmd -l 6-9 -n 4 -w af:01.0 -- -i --rxq=4 --txq=4 --portmask=0x1 --nb-cores=2
+
+testpmd started, check "iavf_configure_queues(): request RXDID[16] in Queue[0]" in testpmd output
+
+MPLS TEST
+===================
+
+Test steps are same to ``Test Case 01``, just change the launch command of testpmd, test packet and expected output
+
+all MPLS cases use same parameter Launch testpmd::
+
+ ./x86_64-native-linuxapp-gcc/app/dpdk-testpmd -l 6-9 -n 4 -w af:01.0,proto_xtr=ip_offset -- -i --portmask=0x1 --nb-cores=2
+
+check RXDID value correct::
+
+ expected: RXDID[25]
+
+scapy prepare:
+===================
+about scapy:
+from scapy.contrib.mpls import MPLS
+
+Test Case 14: Check ip offset of ip
+===================================
+
+Test packet::
+
+ p = Ether(dst="00:11:22:33:44:55",type=0x8847)/MPLS(s=1)/IP()
+
+Expected output in testpmd::
+
+ Protocol Offset:ip_offset=18
+
+Test packet::
+
+ p = Ether(dst="00:11:22:33:44:55",type=0x8847)/MPLS(s=1)/IP()
+
+Expected output in testpmd::
+
+ Protocol Offset:ip_offset=18
+
+Test Case 15: check ip offset with vlan
+=======================================
+
+Test packet::
+
+ p = Ether(dst="00:11:22:33:44:55",type=0x8100)/Dot1Q(type=0x8847)/MPLS(s=1)/IP()
+
+Expected output in testpmd::
+
+ Protocol Offset:ip_offset=22
+
+Test packet::
+
+ p = Ether(dst="00:11:22:33:44:55",type=0x8100)/Dot1Q(type=0x8847)/MPLS(s=1)/IPv6()
+
+Expected output in testpmd::
+
+ Protocol Offset:ip_offset=22
+
+Test Case 16: check offset with 2 vlan tag
+==========================================
+
+Test packet::
+
+ p = Ether(dst="00:11:22:33:44:55",type=0x88A8)/Dot1Q(type=0x8100)/Dot1Q(type=0x8847)/MPLS(s=1)/IP()
+
+Expected output in testpmd::
+
+ Protocol Offset:ip_offset=26
+
+Test packet::
+
+ p = Ether(dst="00:11:22:33:44:55",type=0x88A8)/Dot1Q(type=0x8100)/Dot1Q(type=0x8847)/MPLS(s=1)/IPv6()
+
+Expected output in testpmd::
+
+ Protocol Offset:ip_offset=26
+
+Test Case 17: check ip offset with multi MPLS
+=============================================
+
+Test packet::
+
+ p = Ether(dst="00:11:22:33:44:55",type=0x8847)/MPLS(s=1)/IP()
+
+Expected output in testpmd::
+
+ Protocol Offset:ip_offset=18
+
+Test packet::
+
+ p = Ether(dst="00:11:22:33:44:55",type=0x8847)/MPLS(s=0)/MPLS(s=1)/IP()
+
+Expected output in testpmd::
+
+ Protocol Offset:ip_offset=22
+
+Test packet::
+
+ p = Ether(dst="00:11:22:33:44:55",type=0x8847)/MPLS(s=0)/MPLS(s=0)/MPLS(s=1)/IP()
+
+Expected output in testpmd::
+
+ Protocol Offset:ip_offset=26
+
+Test packet::
+
+ p = Ether(dst="00:11:22:33:44:55",type=0x8847)/MPLS(s=0)/MPLS(s=0)/MPLS(s=0)/MPLS(s=1)/IP()
+
+Expected output in testpmd::
+
+ Protocol Offset:ip_offset=30
+
+Test packet::
+
+ p = Ether(dst="00:11:22:33:44:55",type=0x8847)/MPLS(s=0)/MPLS(s=0)/MPLS(s=0)/MPLS(s=0)/MPLS(s=1)/IP()
+
+Expected output in testpmd::
+
+ Protocol Offset:ip_offset=34
+
+Test packet::
+
+ p = Ether(dst="00:11:22:33:44:55",type=0x8847)/MPLS(s=1)/IPv6()
+
+Expected output in testpmd::
+
+ Protocol Offset:ip_offset=18
+
+Test packet::
+
+ p = Ether(dst="00:11:22:33:44:55",type=0x8847)/MPLS(s=0)/MPLS(s=1)/IPv6()
+
+Expected output in testpmd::
+
+ Protocol Offset:ip_offset=22
+
+Test packet::
+
+ p = Ether(dst="00:11:22:33:44:55",type=0x8847)/MPLS(s=0)/MPLS(s=0)/MPLS(s=1)/IPv6()
+
+Expected output in testpmd::
+
+ Protocol Offset:ip_offset=26
+
+Test packet::
+
+ p = Ether(dst="00:11:22:33:44:55",type=0x8847)/MPLS(s=0)/MPLS(s=0)/MPLS(s=0)/MPLS(s=1)/IPv6()
+
+Expected output in testpmd::
+
+ Protocol Offset:ip_offset=30
+
+Test packet::
+
+ p = Ether(dst="00:11:22:33:44:55",type=0x8847)/MPLS(s=0)/MPLS(s=0)/MPLS(s=0)/MPLS(s=0)/MPLS(s=1)/IPv6()
+
+Expected output in testpmd::
+
+ Protocol Offset:ip_offset=34
+
+Test Case 18: check ip offset with multi MPLS with vlan tag
+===========================================================
+
+Test packet::
+
+ p = Ether(dst="00:11:22:33:44:55",type=0x8100)/Dot1Q(type=0x8847)/MPLS(s=1)/IP()
+
+Expected output in testpmd::
+
+ Protocol Offset:ip_offset=22
+
+Test packet::
+
+ p = Ether(dst="00:11:22:33:44:55",type=0x8100)/Dot1Q(type=0x8847)/MPLS(s=0)/MPLS(s=1)/IP()
+
+Expected output in testpmd::
+
+ Protocol Offset:ip_offset=26
+
+Test packet::
+
+ p = Ether(dst="00:11:22:33:44:55",type=0x8100)/Dot1Q(type=0x8847)/MPLS(s=0)/MPLS(s=0)/MPLS(s=1)/IP()
+
+Expected output in testpmd::
+
+ Protocol Offset:ip_offset=30
+
+Test packet::
+
+ p = Ether(dst="00:11:22:33:44:55",type=0x8100)/Dot1Q(type=0x8847)/MPLS(s=0)/MPLS(s=0)/MPLS(s=0)/MPLS(s=1)/IP()
+
+Expected output in testpmd::
+
+ Protocol Offset:ip_offset=34
+
+Test packet::
+
+ p = Ether(dst="00:11:22:33:44:55",type=0x8100)/Dot1Q(type=0x8847)/MPLS(s=0)/MPLS(s=0)/MPLS(s=0)/MPLS(s=0)/MPLS(s=1)/IP()
+
+Expected output in testpmd::
+
+ Protocol Offset:ip_offset=38
+
+Test packet::
+
+ p = Ether(dst="00:11:22:33:44:55",type=0x8100)/Dot1Q(type=0x8847)/MPLS(s=1)/IPv6()
+
+Expected output in testpmd::
+
+ Protocol Offset:ip_offset=22
+
+Test packet::
+
+ p = Ether(dst="00:11:22:33:44:55",type=0x8100)/Dot1Q(type=0x8847)/MPLS(s=0)/MPLS(s=1)/IPv6()
+
+Expected output in testpmd::
+
+ Protocol Offset:ip_offset=26
+
+Test packet::
+
+ p = Ether(dst="00:11:22:33:44:55",type=0x8100)/Dot1Q(type=0x8847)/MPLS(s=0)/MPLS(s=0)/MPLS(s=1)/IPv6()
+
+Expected output in testpmd::
+
+ Protocol Offset:ip_offset=30
+
+Test packet::
+
+ p = Ether(dst="00:11:22:33:44:55",type=0x8100)/Dot1Q(type=0x8847)/MPLS(s=0)/MPLS(s=0)/MPLS(s=0)/MPLS(s=1)/IPv6()
+
+Expected output in testpmd::
+
+ Protocol Offset:ip_offset=34
+
+Test packet::
+
+ p = Ether(dst="00:11:22:33:44:55",type=0x8100)/Dot1Q(type=0x8847)/MPLS(s=0)/MPLS(s=0)/MPLS(s=0)/MPLS(s=0)/MPLS(s=1)/IPv6()
+
+Expected output in testpmd::
+
+ Protocol Offset:ip_offset=38
+
+Test Case 19: check ip offset with multi MPLS with 2 vlan tag
+=============================================================
+
+Test packet::
+
+ p = Ether(dst="00:11:22:33:44:55",type=0x88A8)/Dot1Q(type=0x8100)/Dot1Q(type=0x8847)/MPLS(s=1)/IP()
+
+Expected output in testpmd::
+
+ Protocol Offset:ip_offset=26
+
+Test packet::
+
+ p = Ether(dst="00:11:22:33:44:55",type=0x88A8)/Dot1Q(type=0x8100)/Dot1Q(type=0x8847)/MPLS(s=0)/MPLS(s=1)/IP()
+
+Expected output in testpmd::
+
+ Protocol Offset:ip_offset=30
+
+Test packet::
+
+ p = Ether(dst="00:11:22:33:44:55",type=0x88A8)/Dot1Q(type=0x8100)/Dot1Q(type=0x8847)/MPLS(s=0)/MPLS(s=0)/MPLS(s=1)/IP()
+
+Expected output in testpmd::
+
+ Protocol Offset:ip_offset=34
+
+Test packet::
+
+ p = Ether(dst="00:11:22:33:44:55",type=0x88A8)/Dot1Q(type=0x8100)/Dot1Q(type=0x8847)/MPLS(s=0)/MPLS(s=0)/MPLS(s=0)/MPLS(s=1)/IP()
+
+Expected output in testpmd::
+
+ Protocol Offset:ip_offset=38
+
+Test packet::
+
+ p = Ether(dst="00:11:22:33:44:55",type=0x88A8)/Dot1Q(type=0x8100)/Dot1Q(type=0x8847)/MPLS(s=0)/MPLS(s=0)/MPLS(s=0)/MPLS(s=0)/MPLS(s=1)/IP()
+
+Expected output in testpmd::
+
+ Protocol Offset:ip_offset=42
+
+Test packet::
+
+ p = Ether(dst="00:11:22:33:44:55",type=0x88A8)/Dot1Q(type=0x8100)/Dot1Q(type=0x8847)/MPLS(s=1)/IPv6()
+
+Expected output in testpmd::
+
+ Protocol Offset:ip_offset=26
+
+Test packet::
+
+ p = Ether(dst="00:11:22:33:44:55",type=0x88A8)/Dot1Q(type=0x8100)/Dot1Q(type=0x8847)/MPLS(s=0)/MPLS(s=1)/IPv6()
+
+Expected output in testpmd::
+
+ Protocol Offset:ip_offset=30
+
+Test packet::
+
+ p = Ether(dst="00:11:22:33:44:55",type=0x88A8)/Dot1Q(type=0x8100)/Dot1Q(type=0x8847)/MPLS(s=0)/MPLS(s=0)/MPLS(s=1)/IPv6()
+
+Expected output in testpmd::
+
+ Protocol Offset:ip_offset=34
+
+Test packet::
+
+ p = Ether(dst="00:11:22:33:44:55",type=0x88A8)/Dot1Q(type=0x8100)/Dot1Q(type=0x8847)/MPLS(s=0)/MPLS(s=0)/MPLS(s=0)/MPLS(s=1)/IPv6()
+
+Expected output in testpmd::
+
+ Protocol Offset:ip_offset=38
+
+Test packet::
+
+ p = Ether(dst="00:11:22:33:44:55",type=0x88A8)/Dot1Q(type=0x8100)/Dot1Q(type=0x8847)/MPLS(s=0)/MPLS(s=0)/MPLS(s=0)/MPLS(s=0)/MPLS(s=1)/IPv6()
+
+Expected output in testpmd::
+
+ Protocol Offset:ip_offset=42