diff --git a/test_plans/cvl_advanced_iavf_rss_pppol2tpoudp_test_plan.rst b/test_plans/cvl_advanced_iavf_rss_pppol2tpoudp_test_plan.rst
index 151621b6..7de39295 100644
--- a/test_plans/cvl_advanced_iavf_rss_pppol2tpoudp_test_plan.rst
+++ b/test_plans/cvl_advanced_iavf_rss_pppol2tpoudp_test_plan.rst
@@ -2741,3 +2741,1721 @@ Test case: eth_ipv4_udp_l2tpv2_ppp_ipv6_tcp_ipv6_MAC_IPV4_PPPoL2TPV2_IPV6_TCP
    check the packet rss hash value is 0.
 
 7. distroy the rule and and check there is no rule listed.
+
+#l2tpv2 control + data
+Test case 1: l2tpv2_session_id_MAC_IPV4_L2TPV2_CONTROL
+======================================================
+1. validate the rule, and check there is not rule listed.
+
+2. create a rss rule::
+
+    flow create 0 ingress pattern eth / ipv4 / udp / l2tpv2 type control session_id is 0x1111 / end actions rss types l2tpv2 end key_len 0 queues end / end
+
+   check there is a rss rule listed successfully.
+
+3. send a basic hit pattern packet,record the hash value::
+
+    sendp([Ether(src='11:22:33:44:55:77')/IP()/UDP(dport=1701)/L2TP(hdr=0xc80,len=12,session_id=0x1111)], iface="ens260f0")
+
+   check the packet distributed to queue by rss.
+
+4. send hit pattern packets with changed input set in the rule::
+
+    sendp([Ether(src='11:22:33:44:55:77')/IP()/UDP(dport=1701)/L2TP(hdr=0xc80,len=12,session_id=0x2222)], iface="ens260f0")
+
+   check the received packets have different hash value with basic packet.
+   check all the packets are distributed to queues by rss.
+
+5. send hit pattern packets with changed input set not in the rule::
+
+    sendp([Ether(src='00:00:00:00:00:01')/IP()/UDP(dport=1701)/L2TP(hdr=0xc80,len=12,session_id=0x1111)],iface="ens260f0")
+
+   check the received packet have same hash value with the basic packet.
+   check all the packets are distributed to queues by rss.
+   note: if there is not this type packet in the case, omit this step.
+
+6. send not hit pattern packet::
+
+    sendp([Ether(src='11:22:33:44:55:77')/IPv6()/UDP(dport=1701)/L2TP(hdr=0xc80,len=12,session_id=0x1111)],iface="ens260f0")
+
+   check the packet rss hash value is 0.
+
+7. distroy the rule and check there is no rule listed.
+
+Test case 2: eth_l2_src_only_MAC_IPV4_L2TPV2_CONTROL
+====================================================
+1. validate the rule, and check there is not rule listed.
+
+2. create a rss rule::
+
+    flow create 0 ingress pattern eth src is 00:00:00:00:00:01 / ipv4 / udp / l2tpv2 type control session_id is 0x1111 / end actions rss types eth l2-src-only end key_len 0 queues end / end
+
+   check there is a rss rule listed successfully.
+
+3. send a basic hit pattern packet,record the hash value::
+
+    sendp([Ether(src='00:00:00:00:00:01')/IP()/UDP(dport=1701)/L2TP(hdr=0xc80,len=12,session_id=0x1111)], iface="ens260f0")
+
+   check the packet distributed to queue by rss.
+
+4. send hit pattern packets with changed input set in the rule::
+
+    sendp([Ether(src='11:22:33:44:55:77)/IP()/UDP(dport=1701)/L2TP(hdr=0xc80,len=12,session_id=0x1111)], iface="ens260f0")
+
+   check the received packets have different hash value with basic packet.
+   check all the packets are distributed to queues by rss.
+
+5. send hit pattern packets with changed input set not in the rule::
+
+    sendp([Ether(src='00:00:00:00:00:01')/IP()/UDP(dport=1701)/L2TP(hdr=0xc80,len=12,session_id=0x2222)],iface="ens260f0")
+
+   check the received packet have same hash value with the basic packet.
+   check all the packets are distributed to queues by rss.
+   note: if there is not this type packet in the case, omit this step.
+
+6. send not hit pattern packet::
+
+    sendp([Ether(src='00:00:00:00:00:01')/IPv6()/UDP(dport=1701)/L2TP(hdr=0xc80,len=12,session_id=0x1111)],iface="ens260f0")
+
+   check the packet rss hash value is 0.
+
+7. distroy the rule and check there is no rule listed.
+
+Test case 3: l2tpv2_session_id_MAC_IPV6_L2TPV2_CONTROL
+======================================================
+1. validate the rule, and check there is not rule listed.
+
+2. create a rss rule::
+
+    flow create 0 ingress pattern eth / ipv6 / udp / l2tpv2 type control session_id is 0x1111 / end actions rss types l2tpv2 end key_len 0 queues end / end
+
+   check there is a rss rule listed successfully.
+
+3. send a basic hit pattern packet,record the hash value::
+
+    sendp([Ether(src='11:22:33:44:55:77')/IPv6()/UDP(dport=1701)/L2TP(hdr=0xc80,len=12,session_id=0x1111)], iface="ens260f0")
+
+   check the packet distributed to queue by rss.
+
+4. send hit pattern packets with changed input set in the rule::
+
+    sendp([Ether(src='11:22:33:44:55:77')/IPv6()/UDP(dport=1701)/L2TP(hdr=0xc80,len=12,session_id=0x2222)], iface="ens260f0")
+
+   check the received packets have different hash value with basic packet.
+   check all the packets are distributed to queues by rss.
+
+5. send hit pattern packets with changed input set not in the rule::
+
+    sendp([Ether(src='00:00:00:00:00:01')/IPv6()/UDP(dport=1701)/L2TP(hdr=0xc80,len=12,session_id=0x1111)],iface="ens260f0")
+
+   check the received packet have same hash value with the basic packet.
+   check all the packets are distributed to queues by rss.
+   note: if there is not this type packet in the case, omit this step.
+
+6. send not hit pattern packet::
+
+    sendp([Ether(src='11:22:33:44:55:77')/IP()/UDP(dport=1701)/L2TP(hdr=0xc80,len=12,session_id=0x1111)],iface="ens260f0")
+
+   check the packet rss hash value is 0.
+
+7. distroy the rule and check there is no rule listed.
+
+Test case 4: eth_l2_src_only_MAC_IPV6_L2TPV2_CONTROL
+====================================================
+1. validate the rule, and check there is not rule listed.
+
+2. create a rss rule::
+
+    flow create 0 ingress pattern eth src is 00:00:00:00:00:01 / ipv6 / udp / l2tpv2 type control session_id is 0x1111 / end actions rss types eth l2-src-only end key_len 0 queues end / end
+
+   check there is a rss rule listed successfully.
+
+3. send a basic hit pattern packet,record the hash value::
+
+    sendp([Ether(src='00:00:00:00:00:01')/IPv6()/UDP(dport=1701)/L2TP(hdr=0xc80,len=12,session_id=0x1111)], iface="ens260f0")
+
+   check the packet distributed to queue by rss.
+
+4. send hit pattern packets with changed input set in the rule::
+
+    sendp([Ether(src='11:22:33:44:55:77')/IPv6()/UDP(dport=1701)/L2TP(hdr=0xc80,len=12,session_id=0x1111)], iface="ens260f0")
+
+   check the received packets have different hash value with basic packet.
+   check all the packets are distributed to queues by rss.
+
+5. send hit pattern packets with changed input set not in the rule::
+
+    sendp([Ether(src='00:00:00:00:00:01')/IPv6()/UDP(dport=1701)/L2TP(hdr=0xc80,len=12,session_id=0x2222)],iface="ens260f0")
+
+   check the received packet have same hash value with the basic packet.
+   check all the packets are distributed to queues by rss.
+   note: if there is not this type packet in the case, omit this step.
+
+6. send not hit pattern packet::
+
+    sendp([Ether(src='00:00:00:00:00:01')/IP()/UDP(dport=1701)/L2TP(hdr=0xc80,len=12,session_id=0x1111)],iface="ens260f0")
+
+   check the packet rss hash value is 0.
+
+7. distroy the rule and check there is no rule listed.
+
+Test case 5: l2tpv2_session_id_MAC_IPV4_L2TPV2_DATA
+===================================================
+1. validate the rule, and check there is not rule listed.
+
+2. create a rss rule::
+
+    flow create 0 ingress pattern eth / ipv4 / udp / l2tpv2 type data session_id is 0x1111 / end actions rss types l2tpv2 end key_len 0 queues end / end
+
+   check there is a rss rule listed successfully.
+
+3. send a basic hit pattern packet,record the hash value::
+
+    sendp([Ether(src='11:22:33:44:55:77')/IP()/UDP(dport=1701)/L2TP(hdr=0x000,session_id=0x1111)], iface="ens260f0")
+
+   check the packet distributed to queue by rss.
+
+4. send hit pattern packets with changed input set in the rule::
+
+    sendp([Ether(src='11:22:33:44:55:77')/IP()/UDP(dport=1701)/L2TP(hdr=0x000,session_id=0x2222)], iface="ens260f0")
+
+   check the received packets have different hash value with basic packet.
+   check all the packets are distributed to queues by rss.
+
+5. send hit pattern packets with changed input set not in the rule::
+
+    sendp([Ether(src='00:00:00:00:00:01')/IP()/UDP(dport=1701)/L2TP(hdr=0x000,session_id=0x1111)], iface="ens260f0")
+
+   check the received packet have same hash value with the basic packet.
+   check all the packets are distributed to queues by rss.
+   note: if there is not this type packet in the case, omit this step.
+
+6. send not hit pattern packet::
+
+    sendp([Ether(src='11:22:33:44:55:77')/IPv6()/UDP(dport=1701)/L2TP(hdr=0x000,session_id=0x1111)], iface="ens260f0")
+
+   check the packet rss hash value is 0.
+
+7. distroy the rule and check there is no rule listed.
+
+Test case 6: eth_l2_src_only_MAC_IPV4_L2TPV2_DATA
+=================================================
+1. validate the rule, and check there is not rule listed.
+
+2. create a rss rule::
+
+    flow create 0 ingress pattern eth src is 00:00:00:00:00:01 / ipv4 / udp / l2tpv2 type data session_id is 0x1111 / end actions rss types eth l2-src-only end key_len 0 queues end / end
+
+   check there is a rss rule listed successfully.
+
+3. send a basic hit pattern packet,record the hash value::
+
+    sendp([Ether(src='00:00:00:00:00:01')/IP()/UDP(dport=1701)/L2TP(hdr=0x000,session_id=0x1111)], iface="ens260f0")
+
+   check the packet distributed to queue by rss.
+
+4. send hit pattern packets with changed input set in the rule::
+
+    sendp([Ether(src='11:22:33:44:55:77')/IP()/UDP(dport=1701)/L2TP(hdr=0x000,session_id=0x1111)], iface="ens260f0")
+
+   check the received packets have different hash value with basic packet.
+   check all the packets are distributed to queues by rss.
+
+5. send hit pattern packets with changed input set not in the rule::
+
+    sendp([Ether(src='00:00:00:00:00:01')/IP()/UDP(dport=1701)/L2TP(hdr=0x000,session_id=0x2222)], iface="ens260f0")
+
+   check the received packet have same hash value with the basic packet.
+   check all the packets are distributed to queues by rss.
+   note: if there is not this type packet in the case, omit this step.
+
+6. send not hit pattern packet::
+
+    sendp([Ether(src='00:00:00:00:00:01')/IPv6()/UDP(dport=1701)/L2TP(hdr=0x000,session_id=0x1111)], iface="ens260f0")
+
+   check the packet rss hash value is 0.
+
+7. distroy the rule and check there is no rule listed.
+
+Test case 7: l2tpv2_session_id_MAC_IPV4_L2TPV2_DATA_L
+=====================================================
+1. validate the rule, and check there is not rule listed.
+
+2. create a rss rule::
+
+    flow create 0 ingress pattern eth / ipv4 / udp / l2tpv2 type data_l session_id is 0x1111 / end actions rss types l2tpv2 end key_len 0 queues end / end
+
+   check there is a rss rule listed successfully.
+
+3. send a basic hit pattern packet,record the hash value::
+
+    sendp([Ether(src='11:22:33:44:55:77')/IP()/UDP(dport=1701)/L2TP(hdr=0x400,len=8,session_id=0x1111)], iface="ens260f0")
+
+   check the packet distributed to queue by rss.
+
+4. send hit pattern packets with changed input set in the rule::
+
+    sendp([Ether(src='11:22:33:44:55:77')/IP()/UDP(dport=1701)/L2TP(hdr=0x400,len=8,session_id=0x2222)], iface="ens260f0")
+
+   check the received packets have different hash value with basic packet.
+   check all the packets are distributed to queues by rss.
+
+5. send hit pattern packets with changed input set not in the rule::
+
+    sendp([Ether(src='00:00:00:00:00:01')/IP()/UDP(dport=1701)/L2TP(hdr=0x400,len=8,session_id=0x1111)], iface="ens260f0")
+
+   check the received packet have same hash value with the basic packet.
+   check all the packets are distributed to queues by rss.
+   note: if there is not this type packet in the case, omit this step.
+
+6. send not hit pattern packet::
+
+    sendp([Ether(src='11:22:33:44:55:77')/IPv6()/UDP(dport=1701)/L2TP(hdr=0x400,len=8,session_id=0x1111)], iface="ens260f0")
+
+   check the packet rss hash value is 0.
+
+7. distroy the rule and check there is no rule listed.
+
+Test case 8: eth_l2_src_only_MAC_IPV4_L2TPV2_DATA_L
+===================================================
+1. validate the rule, and check there is not rule listed.
+
+2. create a rss rule::
+
+    flow create 0 ingress pattern eth src is 00:00:00:00:00:01 / ipv4 / udp / l2tpv2 type data_l session_id is 0x1111 / end actions rss types eth l2-src-only end key_len 0 queues end / end
+
+   check there is a rss rule listed successfully.
+
+3. send a basic hit pattern packet,record the hash value::
+
+    sendp([Ether(src='00:00:00:00:00:01')/IP()/UDP(dport=1701)/L2TP(hdr=0x400,len=8,session_id=0x1111)], iface="ens260f0")
+
+   check the packet distributed to queue by rss.
+
+4. send hit pattern packets with changed input set in the rule::
+
+    sendp([Ether(src='11:22:33:44:55:77')/IP()/UDP(dport=1701)/L2TP(hdr=0x400,len=8,session_id=0x1111)], iface="ens260f0")
+
+   check the received packets have different hash value with basic packet.
+   check all the packets are distributed to queues by rss.
+
+5. send hit pattern packets with changed input set not in the rule::
+
+    sendp([Ether(src='11:22:33:44:55:77')/IP()/UDP(dport=1701)/L2TP(hdr=0x400,len=8,session_id=0x1111)], iface="ens260f0")
+
+   check the received packet have same hash value with the basic packet.
+   check all the packets are distributed to queues by rss.
+   note: if there is not this type packet in the case, omit this step.
+
+6. send not hit pattern packet::
+
+    sendp([Ether(src='00:00:00:00:00:01')/IPv6()/UDP(dport=1701)/L2TP(hdr=0x400,len=8,session_id=0x1111)], iface="ens260f0")
+
+   check the packet rss hash value is 0.
+
+7. distroy the rule and check there is no rule listed.
+
+Test case 9: l2tpv2_session_id_MAC_IPV4_L2TPV2_DATA_S
+=====================================================
+1. validate the rule, and check there is not rule listed.
+
+2. create a rss rule::
+
+    flow create 0 ingress pattern eth / ipv4 / udp / l2tpv2 type data_s session_id is 0x1111 / end actions rss types l2tpv2 end key_len 0 queues end / end
+
+   check there is a rss rule listed successfully.
+
+3. send a basic hit pattern packet,record the hash value::
+
+    sendp([Ether(src='11:22:33:44:55:77')/IP()/UDP(dport=1701)/L2TP(hdr=0x080,session_id=0x1111)], iface="ens260f0")
+
+   check the packet distributed to queue by rss.
+
+4. send hit pattern packets with changed input set in the rule::
+
+    sendp([Ether(src='11:22:33:44:55:77')/IP()/UDP(dport=1701)/L2TP(hdr=0x080,session_id=0x2222)], iface="ens260f0")
+
+   check the received packets have different hash value with basic packet.
+   check all the packets are distributed to queues by rss.
+
+5. send hit pattern packets with changed input set not in the rule::
+
+    sendp([Ether(src='00:00:00:00:00:01')/IP()/UDP(dport=1701)/L2TP(hdr=0x080,session_id=0x1111)], iface="ens260f0")
+
+   check the received packet have same hash value with the basic packet.
+   check all the packets are distributed to queues by rss.
+   note: if there is not this type packet in the case, omit this step.
+
+6. send not hit pattern packet::
+
+    sendp([Ether(src='11:22:33:44:55:77')/IPv6()/UDP(dport=1701)/L2TP(hdr=0x080,session_id=0x1111)], iface="ens260f0")
+
+   check the packet rss hash value is 0.
+
+7. distroy the rule and check there is no rule listed.
+
+Test case 10: eth_l2_src_only_MAC_IPV4_L2TPV2_DATA_S
+====================================================
+1. validate the rule, and check there is not rule listed.
+
+2. create a rss rule::
+
+    flow create 0 ingress pattern eth src is 00:00:00:00:00:01 / ipv4 / udp / l2tpv2 type data_s session_id is 0x1111 / end actions rss types eth l2-src-only end key_len 0 queues end / end
+
+   check there is a rss rule listed successfully. 
+
+3. send a basic hit pattern packet,record the hash value::
+
+    sendp([Ether(src='00:00:00:00:00:01')/IP()/UDP(dport=1701)/L2TP(hdr=0x080,session_id=0x1111)], iface="ens260f0")
+
+   check the packet distributed to queue by rss.
+
+4. send hit pattern packets with changed input set in the rule::
+
+    sendp([Ether(src='11:22:33:44:55:77')/IP()/UDP(dport=1701)/L2TP(hdr=0x080,session_id=0x1111)], iface="ens260f0")
+
+   check the received packets have different hash value with basic packet.
+   check all the packets are distributed to queues by rss.
+
+5. send hit pattern packets with changed input set not in the rule::
+
+    sendp([Ether(src='00:00:00:00:00:01')/IP()/UDP(dport=1701)/L2TP(hdr=0x080,session_id=0x2222)], iface="ens260f0")
+
+   check the received packet have same hash value with the basic packet.
+   check all the packets are distributed to queues by rss.
+   note: if there is not this type packet in the case, omit this step.
+
+6. send not hit pattern packet::
+
+    sendp([Ether(src='00:00:00:00:00:01')/IPv6()/UDP(dport=1701)/L2TP(hdr=0x080,session_id=0x1111)], iface="ens260f0")
+
+   check the packet rss hash value is 0.
+
+7. distroy the rule and check there is no rule listed.
+
+Test case 11: l2tpv2_session_id_MAC_IPV4_L2TPV2_DATA_O
+======================================================
+1. validate the rule, and check there is not rule listed.
+
+2. create a rss rule::
+
+    flow create 0 ingress pattern eth / ipv4 / udp / l2tpv2 type data_o session_id is 0x1111 offset_size is 6 / end actions rss types l2tpv2 end key_len 0 queues end / end
+
+   check there is a rss rule listed successfully.
+
+3. send a basic hit pattern packet,record the hash value::
+
+    sendp([Ether(src='11:22:33:44:55:77')/IP()/UDP(dport=1701)/L2TP(hdr=0x020,session_id=0x1111,offset=6)], iface="ens260f0")
+
+   check the packet distributed to queue by rss.
+
+4. send hit pattern packets with changed input set in the rule::
+
+    sendp([Ether(src='11:22:33:44:55:77')/IP()/UDP(dport=1701)/L2TP(hdr=0x020,session_id=0x2222,offset=6)], iface="ens260f0")
+
+   check the received packets have different hash value with basic packet.
+   check all the packets are distributed to queues by rss.
+
+5. send hit pattern packets with changed input set not in the rule::
+
+    sendp([Ether(src='00:00:00:00:00:01')/IP()/UDP(dport=1701)/L2TP(hdr=0x020,session_id=0x1111,offset=6)], iface="ens260f0")
+
+   check the received packet have same hash value with the basic packet.
+   check all the packets are distributed to queues by rss.
+   note: if there is not this type packet in the case, omit this step.
+
+6. send not hit pattern packet::
+
+    sendp([Ether(src='11:22:33:44:55:77')/IPv6()/UDP(dport=1701)/L2TP(hdr=0x020,session_id=0x1111,offset=6)], iface="ens260f0")
+
+   check the packet rss hash value is 0.
+
+7. distroy the rule and check there is no rule listed.
+
+Test case 12: eth_l2_src_only_MAC_IPV4_L2TPV2_DATA_O
+====================================================
+1. validate the rule, and check there is not rule listed.
+
+2. create a rss rule::
+
+    flow create 0 ingress pattern eth src is 00:00:00:00:00:01 / ipv4 / udp / l2tpv2 type data_o session_id is 0x1111 offset_size is 6 / end actions rss types eth l2-src-only end key_len 0 queues end / end
+
+   check there is a rss rule listed successfully.
+
+3. send a basic hit pattern packet,record the hash value::
+
+    sendp([Ether(src='00:00:00:00:00:01')/IP()/UDP(dport=1701)/L2TP(hdr=0x020,session_id=0x1111,offset=6)], iface="ens260f0")
+
+   check the packet distributed to queue by rss.
+
+4. send hit pattern packets with changed input set in the rule::
+
+    sendp([Ether(src='11:22:33:44:55:77')/IP()/UDP(dport=1701)/L2TP(hdr=0x020,session_id=0x1111,offset=6)], iface="ens260f0")
+
+   check the received packets have different hash value with basic packet.
+   check all the packets are distributed to queues by rss.
+
+5. send hit pattern packets with changed input set not in the rule::
+
+    sendp([Ether(src='00:00:00:00:00:01')/IP()/UDP(dport=1701)/L2TP(hdr=0x020,session_id=0x2222,offset=6)], iface="ens260f0")
+
+   check the received packet have same hash value with the basic packet.
+   check all the packets are distributed to queues by rss.
+   note: if there is not this type packet in the case, omit this step.
+
+6. send not hit pattern packet::
+
+    sendp([Ether(src='00:00:00:00:00:01')/IPv6()/UDP(dport=1701)/L2TP(hdr=0x020,session_id=0x1111,offset=6)], iface="ens260f0")
+
+   check the packet rss hash value is 0.
+
+7. distroy the rule and check there is no rule listed.
+
+Test case 13: l2tpv2_session_id_MAC_IPV4_L2TPV2_DATA_L_S
+========================================================
+1. validate the rule, and check there is not rule listed.
+
+2. create a rss rule::
+
+    flow create 0 ingress pattern eth / ipv4 / udp / l2tpv2 type data_l_s session_id is 0x1111 / end actions rss types l2tpv2 end key_len 0 queues end / end
+
+   check there is a rss rule listed successfully.
+
+3. send a basic hit pattern packet,record the hash value::
+
+    sendp([Ether(src='11:22:33:44:55:77')/IP()/UDP(dport=1701)/L2TP(hdr=0x480,len=12,session_id=0x1111)], iface="ens260f0")
+
+   check the packet distributed to queue by rss.
+
+4. send hit pattern packets with changed input set in the rule::
+
+    sendp([Ether(src='11:22:33:44:55:77')/IP()/UDP(dport=1701)/L2TP(hdr=0x480,len=12,session_id=0x2222)], iface="ens260f0")
+
+   check the received packets have different hash value with basic packet.
+   check all the packets are distributed to queues by rss.
+
+5. send hit pattern packets with changed input set not in the rule::
+
+    sendp([Ether(src='00:00:00:00:00:01')/IP()/UDP(dport=1701)/L2TP(hdr=0x480,len=12,session_id=0x1111)], iface="ens260f0")
+
+   check the received packet have same hash value with the basic packet.
+   check all the packets are distributed to queues by rss.
+   note: if there is not this type packet in the case, omit this step.
+
+6. send not hit pattern packet::
+
+    sendp([Ether(src='11:22:33:44:55:77')/IPv6()/UDP(dport=1701)/L2TP(hdr=0x480,len=12,session_id=0x1111)], iface="ens260f0")
+
+   check the packet rss hash value is 0.
+
+7. distroy the rule and check there is no rule listed.
+
+Test case 14: eth_l2_src_only_MAC_IPV4_L2TPV2_DATA_L_S
+======================================================
+1. validate the rule, and check there is not rule listed.
+
+2. create a rss rule::
+
+    flow create 0 ingress pattern eth src is 00:00:00:00:00:01 / ipv4 / udp / l2tpv2 type data_l_s session_id is 0x1111 / end actions rss types eth l2-src-only end key_len 0 queues end / end
+
+   check there is a rss rule listed successfully.
+
+3. send a basic hit pattern packet,record the hash value::
+
+    sendp([Ether(src='00:00:00:00:00:01')/IP()/UDP(dport=1701)/L2TP(hdr=0x480,len=12,session_id=0x1111)], iface="ens260f0")
+
+   check the packet distributed to queue by rss.
+
+4. send hit pattern packets with changed input set in the rule::
+
+    sendp([Ether(src='11:22:33:44:55:77')/IP()/UDP(dport=1701)/L2TP(hdr=0x480,len=12,session_id=0x1111)], iface="ens260f0")
+
+   check the received packets have different hash value with basic packet.
+   check all the packets are distributed to queues by rss.
+
+5. send hit pattern packets with changed input set not in the rule::
+
+    sendp([Ether(src='00:00:00:00:00:01')/IP()/UDP(dport=1701)/L2TP(hdr=0x480,len=12,session_id=0x2222)], iface="ens260f0")
+
+   check the received packet have same hash value with the basic packet.
+   check all the packets are distributed to queues by rss.
+   note: if there is not this type packet in the case, omit this step.
+
+6. send not hit pattern packet::
+
+    sendp([Ether(src='00:00:00:00:00:01')/IPv6()/UDP(dport=1701)/L2TP(hdr=0x480,len=12,session_id=0x1111)], iface="ens260f0")
+
+   check the packet rss hash value is 0.
+
+7. distroy the rule and check there is no rule listed.
+
+Test case 15: l2tpv2_session_id_MAC_IPV6_L2TPV2_DATA
+====================================================
+1. validate the rule, and check there is not rule listed.
+
+2. create a rss rule::
+
+    flow create 0 ingress pattern eth / ipv6 / udp / l2tpv2 type data session_id is 0x1111 / end actions rss types l2tpv2 end key_len 0 queues end / end
+
+   check there is a rss rule listed successfully.
+
+3. send a basic hit pattern packet,record the hash value::
+
+    sendp([Ether(src='11:22:33:44:55:77')/IPv6()/UDP(dport=1701)/L2TP(hdr=0x000,session_id=0x1111)], iface="ens260f0")
+
+   check the packet distributed to queue by rss.
+
+4. send hit pattern packets with changed input set in the rule::
+
+    sendp([Ether(src='11:22:33:44:55:77')/IPv6()/UDP(dport=1701)/L2TP(hdr=0x000,session_id=0x2222)], iface="ens260f0")
+
+   check the received packets have different hash value with basic packet.
+   check all the packets are distributed to queues by rss.
+
+5. send hit pattern packets with changed input set not in the rule::
+
+    sendp([Ether(src='00:00:00:00:00:01')/IPv6()/UDP(dport=1701)/L2TP(hdr=0x000,session_id=0x1111)], iface="ens260f0")
+
+   check the received packet have same hash value with the basic packet.
+   check all the packets are distributed to queues by rss.
+   note: if there is not this type packet in the case, omit this step.
+
+6. send not hit pattern packet::
+
+    sendp([Ether(src='11:22:33:44:55:77')/IP()/UDP(dport=1701)/L2TP(hdr=0x000,session_id=0x1111)], iface="ens260f0")
+
+   check the packet rss hash value is 0.
+
+7. distroy the rule and check there is no rule listed.
+
+Test case 16: eth_l2_src_only_MAC_IPV6_L2TPV2_DATA
+==================================================
+1. validate the rule, and check there is not rule listed.
+
+2. create a rss rule::
+
+    flow create 0 ingress pattern eth src is 00:00:00:00:00:01 / ipv6 / udp / l2tpv2 type data session_id is 0x1111 / end actions rss types eth l2-src-only end key_len 0 queues end / end
+
+   check there is a rss rule listed successfully.
+
+3. send a basic hit pattern packet,record the hash value::
+
+    sendp([Ether(src='00:00:00:00:00:01')/IPv6()/UDP(dport=1701)/L2TP(hdr=0x000,session_id=0x1111)], iface="ens260f0")
+
+   check the packet distributed to queue by rss.
+
+4. send hit pattern packets with changed input set in the rule::
+
+    sendp([Ether(src='11:22:33:44:55:77')/IPv6()/UDP(dport=1701)/L2TP(hdr=0x000,session_id=0x1111)], iface="ens260f0")
+
+   check the received packets have different hash value with basic packet.
+   check all the packets are distributed to queues by rss.
+
+5. send hit pattern packets with changed input set not in the rule::
+
+    sendp([Ether(src='00:00:00:00:00:01')/IPv6()/UDP(dport=1701)/L2TP(hdr=0x000,session_id=0x2222)], iface="ens260f0")
+
+   check the received packet have same hash value with the basic packet.
+   check all the packets are distributed to queues by rss.
+   note: if there is not this type packet in the case, omit this step.
+
+6. send not hit pattern packet::
+
+    sendp([Ether(src='00:00:00:00:00:01')/IP()/UDP(dport=1701)/L2TP(hdr=0x000,session_id=0x1111)], iface="ens260f0")
+
+   check the packet rss hash value is 0.
+
+7. distroy the rule and check there is no rule listed.
+
+Test case 17: l2tpv2_session_id_MAC_IPV6_L2TPV2_DATA_L
+======================================================
+1. validate the rule, and check there is not rule listed.
+
+2. create a rss rule::
+
+    flow create 0 ingress pattern eth / ipv6 / udp / l2tpv2 type data_l session_id is 0x1111 / end actions rss types l2tpv2 end key_len 0 queues end / end
+
+   check there is a rss rule listed successfully.
+
+3. send a basic hit pattern packet,record the hash value::
+
+    sendp([Ether(src='11:22:33:44:55:77')/IPv6()/UDP(dport=1701)/L2TP(hdr=0x400,len=8,session_id=0x1111)], iface="ens260f0")
+
+   check the packet distributed to queue by rss.
+
+4. send hit pattern packets with changed input set in the rule::
+
+    sendp([Ether(src='11:22:33:44:55:77')/IPv6()/UDP(dport=1701)/L2TP(hdr=0x400,len=8,session_id=0x2222)], iface="ens260f0")
+
+   check the received packets have different hash value with basic packet.
+   check all the packets are distributed to queues by rss.
+
+5. send hit pattern packets with changed input set not in the rule::
+
+    sendp([Ether(src='00:00:00:00:00:01')/IPv6()/UDP(dport=1701)/L2TP(hdr=0x400,len=8,session_id=0x1111)], iface="ens260f0")
+
+   check the received packet have same hash value with the basic packet.
+   check all the packets are distributed to queues by rss.
+   note: if there is not this type packet in the case, omit this step.
+
+6. send not hit pattern packet::
+
+    sendp([Ether(src='11:22:33:44:55:77')/IP()/UDP(dport=1701)/L2TP(hdr=0x400,len=8,session_id=0x1111)], iface="ens260f0")
+
+   check the packet rss hash value is 0.
+
+7. distroy the rule and check there is no rule listed.
+
+Test case 18: eth_l2_src_only_MAC_IPV6_L2TPV2_DATA_L
+====================================================
+1. validate the rule, and check there is not rule listed.
+
+2. create a rss rule::
+
+    flow create 0 ingress pattern eth src is 00:00:00:00:00:01 / ipv6 / udp / l2tpv2 type data_l session_id is 0x1111 / end actions rss types eth l2-src-only end key_len 0 queues end / end
+
+   check there is a rss rule listed successfully.
+
+3. send a basic hit pattern packet,record the hash value::
+
+    sendp([Ether(src='00:00:00:00:00:01')/IPv6()/UDP(dport=1701)/L2TP(hdr=0x400,len=8,session_id=0x1111)], iface="ens260f0")
+
+   check the packet distributed to queue by rss.
+
+4. send hit pattern packets with changed input set in the rule::
+
+    sendp([Ether(src='11:22:33:44:55:77')/IPv6()/UDP(dport=1701)/L2TP(hdr=0x400,len=8,session_id=0x1111)], iface="ens260f0")
+
+   check the received packets have different hash value with basic packet.
+   check all the packets are distributed to queues by rss.
+
+5. send hit pattern packets with changed input set not in the rule::
+
+    sendp([Ether(src='00:00:00:00:00:01')/IPv6()/UDP(dport=1701)/L2TP(hdr=0x400,len=8,session_id=0x2222)], iface="ens260f0")
+
+   check the received packet have same hash value with the basic packet.
+   check all the packets are distributed to queues by rss.
+   note: if there is not this type packet in the case, omit this step.
+
+6. send not hit pattern packet::
+
+    sendp([Ether(src='00:00:00:00:00:01')/IP()/UDP(dport=1701)/L2TP(hdr=0x400,len=8,session_id=0x1111)], iface="ens260f0")
+
+   check the packet rss hash value is 0.
+
+7. distroy the rule and check there is no rule listed.
+
+Test case 19: l2tpv2_session_id_MAC_IPV6_L2TPV2_DATA_S
+======================================================
+1. validate the rule, and check there is not rule listed.
+
+2. create a rss rule::
+
+    flow create 0 ingress pattern eth / ipv6 / udp / l2tpv2 type data_s session_id is 0x1111 / end actions rss types l2tpv2 end key_len 0 queues end / end
+
+   check there is a rss rule listed successfully.
+
+3. send a basic hit pattern packet,record the hash value::
+
+    sendp([Ether(src='11:22:33:44:55:77')/IPv6()/UDP(dport=1701)/L2TP(hdr=0x080,session_id=0x1111)], iface="ens260f0")
+
+   check the packet distributed to queue by rss.
+
+4. send hit pattern packets with changed input set in the rule::
+
+    sendp([Ether(src='11:22:33:44:55:77')/IPv6()/UDP(dport=1701)/L2TP(hdr=0x080,session_id=0x2222)], iface="ens260f0")
+
+   check the received packets have different hash value with basic packet.
+   check all the packets are distributed to queues by rss.
+
+5. send hit pattern packets with changed input set not in the rule::
+
+    sendp([Ether(src='00:00:00:00:00:01')/IPv6()/UDP(dport=1701)/L2TP(hdr=0x080,session_id=0x1111)], iface="ens260f0")
+
+   check the received packet have same hash value with the basic packet.
+   check all the packets are distributed to queues by rss.
+   note: if there is not this type packet in the case, omit this step.
+
+6. send not hit pattern packet::
+
+    sendp([Ether(src='11:22:33:44:55:77')/IP()/UDP(dport=1701)/L2TP(hdr=0x080,session_id=0x1111)], iface="ens260f0")
+
+   check the packet rss hash value is 0.
+
+7. distroy the rule and check there is no rule listed.
+
+Test case 20: eth_l2_src_only_MAC_IPV6_L2TPV2_DATA_S
+====================================================
+1. validate the rule, and check there is not rule listed.
+
+2. create a rss rule::
+
+    flow create 0 ingress pattern eth src is 00:00:00:00:00:01 / ipv6 / udp / l2tpv2 type data_s session_id is 0x1111 / end actions rss types eth l2-src-only end key_len 0 queues end / end
+
+   check there is a rss rule listed successfully.
+
+3. send a basic hit pattern packet,record the hash value::
+
+    sendp([Ether(src='00:00:00:00:00:01')/IPv6()/UDP(dport=1701)/L2TP(hdr=0x080,session_id=0x1111)], iface="ens260f0")
+
+   check the packet distributed to queue by rss.
+
+4. send hit pattern packets with changed input set in the rule::
+
+    sendp([Ether(src='11:22:33:44:55:77')/IPv6()/UDP(dport=1701)/L2TP(hdr=0x080,session_id=0x1111)], iface="ens260f0")
+
+   check the received packets have different hash value with basic packet.
+   check all the packets are distributed to queues by rss.
+
+5. send hit pattern packets with changed input set not in the rule::
+
+    sendp([Ether(src='00:00:00:00:00:01')/IPv6()/UDP(dport=1701)/L2TP(hdr=0x080,session_id=0x2222)], iface="ens260f0")
+
+   check the received packet have same hash value with the basic packet.
+   check all the packets are distributed to queues by rss.
+   note: if there is not this type packet in the case, omit this step.
+
+6. send not hit pattern packet::
+
+    sendp([Ether(src='00:00:00:00:00:01')/IP()/UDP(dport=1701)/L2TP(hdr=0x080,session_id=0x1111)], iface="ens260f0")
+
+   check the packet rss hash value is 0.
+
+7. distroy the rule and check there is no rule listed.
+
+Test case 21: l2tpv2_session_id_MAC_IPV6_L2TPV2_DATA_O
+======================================================
+1. validate the rule, and check there is not rule listed.
+
+2. create a rss rule::
+
+    flow create 0 ingress pattern eth / ipv6 / udp / l2tpv2 type data_o session_id is 0x1111 offset_size is 6 / end actions rss types l2tpv2 end key_len 0 queues end / end
+
+   check there is a rss rule listed successfully.
+
+3. send a basic hit pattern packet,record the hash value::
+
+    sendp([Ether(src='11:22:33:44:55:77')/IPv6()/UDP(dport=1701)/L2TP(hdr=0x020,session_id=0x1111,offset=6)], iface="ens260f0")
+
+   check the packet distributed to queue by rss.
+
+4. send hit pattern packets with changed input set in the rule::
+
+    sendp([Ether(src='11:22:33:44:55:77')/IPv6()/UDP(dport=1701)/L2TP(hdr=0x020,session_id=0x2222,offset=6)], iface="ens260f0")
+
+   check the received packets have different hash value with basic packet.
+   check all the packets are distributed to queues by rss.
+
+5. send hit pattern packets with changed input set not in the rule::
+
+    sendp([Ether(src='00:00:00:00:00:01')/IPv6()/UDP(dport=1701)/L2TP(hdr=0x020,session_id=0x1111,offset=6)], iface="ens260f0")
+
+   check the received packet have same hash value with the basic packet.
+   check all the packets are distributed to queues by rss.
+   note: if there is not this type packet in the case, omit this step.
+
+6. send not hit pattern packet::
+
+    sendp([Ether(src='11:22:33:44:55:77')/IP()/UDP(dport=1701)/L2TP(hdr=0x020,session_id=0x1111,offset=6)], iface="ens260f0")
+
+   check the packet rss hash value is 0.
+
+7. distroy the rule and check there is no rule listed.
+
+Test case 22: eth_l2_src_only_MAC_IPV6_L2TPV2_DATA_O
+====================================================
+1. validate the rule, and check there is not rule listed.
+
+2. create a rss rule::
+
+    flow create 0 ingress pattern eth src is 00:00:00:00:00:01 / ipv6 / udp / l2tpv2 type data_o session_id is 0x1111 offset_size is 6 / end actions rss types eth l2-src-only end key_len 0 queues end / end
+
+   check there is a rss rule listed successfully.
+
+3. send a basic hit pattern packet,record the hash value::
+
+    sendp([Ether(src='00:00:00:00:00:01')/IPv6()/UDP(dport=1701)/L2TP(hdr=0x020,session_id=0x1111,offset=6)], iface="ens260f0")
+
+   check the packet distributed to queue by rss.
+
+4. send hit pattern packets with changed input set in the rule::
+
+    sendp([Ether(src='11:22:33:44:55:77')/IPv6()/UDP(dport=1701)/L2TP(hdr=0x020,session_id=0x1111,offset=6)], iface="ens260f0")
+
+   check the received packets have different hash value with basic packet.
+   check all the packets are distributed to queues by rss.
+
+5. send hit pattern packets with changed input set not in the rule::
+
+    sendp([Ether(src='00:00:00:00:00:01')/IPv6()/UDP(dport=1701)/L2TP(hdr=0x020,session_id=0x2222,offset=6)], iface="ens260f0")
+
+   check the received packet have same hash value with the basic packet.
+   check all the packets are distributed to queues by rss.
+   note: if there is not this type packet in the case, omit this step.
+
+6. send not hit pattern packet::
+
+    sendp([Ether(src='00:00:00:00:00:01')/IP()/UDP(dport=1701)/L2TP(hdr=0x020,session_id=0x1111,offset=6)], iface="ens260f0")
+
+   check the packet rss hash value is 0.
+
+7. distroy the rule and check there is no rule listed.
+
+Test case 23: l2tpv2_session_id_MAC_IPV6_L2TPV2_DATA_L_S
+========================================================
+1. validate the rule, and check there is not rule listed.
+
+2. create a rss rule::
+
+    flow create 0 ingress pattern eth / ipv6 / udp / l2tpv2 type data_l_s session_id is 0x1111 / end actions rss types l2tpv2 end key_len 0 queues end / end
+
+   check there is a rss rule listed successfully.
+
+3. send a basic hit pattern packet,record the hash value::
+
+    sendp([Ether(src='11:22:33:44:55:77')/IPv6()/UDP(dport=1701)/L2TP(hdr=0x480,len=12,session_id=0x1111)], iface="ens260f0")
+
+   check the packet distributed to queue by rss.
+
+4. send hit pattern packets with changed input set in the rule::
+
+    sendp([Ether(src='11:22:33:44:55:77')/IPv6()/UDP(dport=1701)/L2TP(hdr=0x480,len=12,session_id=0x2222)], iface="ens260f0")
+
+   check the received packets have different hash value with basic packet.
+   check all the packets are distributed to queues by rss.
+
+5. send hit pattern packets with changed input set not in the rule::
+
+    sendp([Ether(src='00:00:00:00:00:01')/IPv6()/UDP(dport=1701)/L2TP(hdr=0x480,len=12,session_id=0x1111)], iface="ens260f0")
+
+   check the received packet have same hash value with the basic packet.
+   check all the packets are distributed to queues by rss.
+   note: if there is not this type packet in the case, omit this step.
+
+6. send not hit pattern packet::
+
+    sendp([Ether(src='11:22:33:44:55:77')/IP()/UDP(dport=1701)/L2TP(hdr=0x480,len=12,session_id=0x1111)], iface="ens260f0")
+
+   check the packet rss hash value is 0.
+
+7. distroy the rule and check there is no rule listed.
+
+Test case 24: eth_l2_src_only_MAC_IPV6_L2TPV2_DATA_L_S
+======================================================
+1. validate the rule, and check there is not rule listed.
+
+2. create a rss rule::
+
+    flow create 0 ingress pattern eth src is 00:00:00:00:00:01 / ipv6 / udp / l2tpv2 type data_l_s session_id is 0x1111 / end actions rss types eth l2-src-only end key_len 0 queues end / end
+
+   check there is a rss rule listed successfully.
+
+3. send a basic hit pattern packet,record the hash value::
+
+    sendp([Ether(src='00:00:00:00:00:01')/IPv6()/UDP(dport=1701)/L2TP(hdr=0x480,len=12,session_id=0x1111)], iface="ens260f0")
+
+   check the packet distributed to queue by rss.
+
+4. send hit pattern packets with changed input set in the rule::
+
+    sendp([Ether(src='11:22:33:44:55:77')/IPv6()/UDP(dport=1701)/L2TP(hdr=0x480,len=12,session_id=0x1111)], iface="ens260f0")
+
+   check the received packets have different hash value with basic packet.
+   check all the packets are distributed to queues by rss.
+
+5. send hit pattern packets with changed input set not in the rule::
+
+    sendp([Ether(src='00:00:00:00:00:01')/IPv6()/UDP(dport=1701)/L2TP(hdr=0x480,len=12,session_id=0x2222)], iface="ens260f0")
+
+   check the received packet have same hash value with the basic packet.
+   check all the packets are distributed to queues by rss.
+   note: if there is not this type packet in the case, omit this step.
+
+6. send not hit pattern packet::
+
+    sendp([Ether(src='00:00:00:00:00:01')/IP()/UDP(dport=1701)/L2TP(hdr=0x480,len=12,session_id=0x1111)], iface="ens260f0")
+
+   check the packet rss hash value is 0.
+
+7. distroy the rule and check there is no rule listed.
+
+Test case 25: l2tpv2_session_id_MAC_IPV4_PPPoL2TPV2_DATA
+========================================================
+1. validate the rule, and check there is not rule listed.
+
+2. create a rss rule::
+
+    flow create 0 ingress pattern eth / ipv4 / udp / l2tpv2 type data session_id is 0x1111 / ppp / end actions rss types l2tpv2 end key_len 0 queues end / end
+
+   check there is a rss rule listed successfully.
+
+3. send a basic hit pattern packet,record the hash value::
+
+    sendp([Ether(src='11:22:33:44:55:77')/IP()/UDP(dport=1701)/L2TP(hdr=0x000,session_id=0x1111)/HDLC()/Raw('\x00\x00')], iface="ens260f0")
+
+   check the packet distributed to queue by rss.
+
+4. send hit pattern packets with changed input set in the rule::
+
+    sendp([Ether(src='11:22:33:44:55:77')/IP()/UDP(dport=1701)/L2TP(hdr=0x000,session_id=0x2222)/HDLC()/Raw('\x00\x00')], iface="ens260f0")
+
+   check the received packets have different hash value with basic packet.
+   check all the packets are distributed to queues by rss.
+
+5. send hit pattern packets with changed input set not in the rule::
+
+    sendp([Ether(src='00:00:00:00:00:01')/IP()/UDP(dport=1701)/L2TP(hdr=0x000,session_id=0x1111)/HDLC()/Raw('\x00\x00')], iface="ens260f0")
+
+   check the received packet have same hash value with the basic packet.
+   check all the packets are distributed to queues by rss.
+   note: if there is not this type packet in the case, omit this step.
+
+6. send not hit pattern packet::
+
+    sendp([Ether(src='11:22:33:44:55:77')/IPv6()/UDP(dport=1701)/L2TP(hdr=0x000,session_id=0x1111)/HDLC()/Raw('\x00\x00')], iface="ens260f0")
+
+   check the packet rss hash value is 0.
+
+7. distroy the rule and check there is no rule listed.
+
+Test case 26: eth_l2_src_only_MAC_IPV4_PPPoL2TPV2_DATA
+======================================================
+1. validate the rule, and check there is not rule listed.
+
+2. create a rss rule::
+
+    flow create 0 ingress pattern eth src is 00:00:00:00:00:01 / ipv4 / udp / l2tpv2 type data session_id is 0x1111 / ppp / end actions rss types eth l2-src-only end key_len 0 queues end / end
+
+   check there is a rss rule listed successfully.
+
+3. send a basic hit pattern packet,record the hash value::
+
+    sendp([Ether(src='00:00:00:00:00:01')/IP()/UDP(dport=1701)/L2TP(hdr=0x000,session_id=0x1111)/HDLC()/Raw('\x00\x00')], iface="ens260f0")
+
+   check the packet distributed to queue by rss.
+
+4. send hit pattern packets with changed input set in the rule::
+
+    sendp([Ether(src='11:22:33:44:55:77')/IP()/UDP(dport=1701)/L2TP(hdr=0x000,session_id=0x1111)/HDLC()/Raw('\x00\x00')], iface="ens260f0")
+
+   check the received packets have different hash value with basic packet.
+   check all the packets are distributed to queues by rss.
+
+5. send hit pattern packets with changed input set not in the rule::
+
+    sendp([Ether(src='00:00:00:00:00:01')/IP()/UDP(dport=1701)/L2TP(hdr=0x000,session_id=0x2222)/HDLC()/Raw('\x00\x00')], iface="ens260f0")
+
+   check the received packet have same hash value with the basic packet.
+   check all the packets are distributed to queues by rss.
+   note: if there is not this type packet in the case, omit this step.
+
+6. send not hit pattern packet::
+
+    sendp([Ether(src='00:00:00:00:00:01')/IPv6()/UDP(dport=1701)/L2TP(hdr=0x000,session_id=0x1111)/HDLC()/Raw('\x00\x00')], iface="ens260f0")
+
+   check the packet rss hash value is 0.
+
+7. distroy the rule and check there is no rule listed.
+
+Test case 27: l2tpv2_session_id_MAC_IPV4_PPPoL2TPV2_DATA_L
+==========================================================
+1. validate the rule, and check there is not rule listed.
+
+2. create a rss rule::
+
+    flow create 0 ingress pattern eth / ipv4 / udp / l2tpv2 type data_l session_id is 0x1111 / ppp / end actions rss types l2tpv2 end key_len 0 queues end / end
+
+   check there is a rss rule listed successfully.
+
+3. send a basic hit pattern packet,record the hash value::
+
+    sendp([Ether(src='11:22:33:44:55:77')/IP()/UDP(dport=1701)/L2TP(hdr=0x400,len=12,session_id=0x1111)/HDLC()/Raw('\x00\x00')], iface="ens260f0")
+
+   check the packet distributed to queue by rss.
+
+4. send hit pattern packets with changed input set in the rule::
+
+    sendp([Ether(src='11:22:33:44:55:77')/IP()/UDP(dport=1701)/L2TP(hdr=0x400,len=12,session_id=0x2222)/HDLC()/Raw('\x00\x00')], iface="ens260f0")
+
+   check the received packets have different hash value with basic packet.
+   check all the packets are distributed to queues by rss.
+
+5. send hit pattern packets with changed input set not in the rule::
+
+    sendp([Ether(src='00:00:00:00:00:01')/IP()/UDP(dport=1701)/L2TP(hdr=0x400,len=12,session_id=0x1111)/HDLC()/Raw('\x00\x00')], iface="ens260f0")
+
+   check the received packet have same hash value with the basic packet.
+   check all the packets are distributed to queues by rss.
+   note: if there is not this type packet in the case, omit this step.
+
+6. send not hit pattern packet::
+
+    sendp([Ether(src='11:22:33:44:55:77')/IPv6()/UDP(dport=1701)/L2TP(hdr=0x400,len=12,session_id=0x1111)/HDLC()/Raw('\x00\x00')], iface="ens260f0")
+
+   check the packet rss hash value is 0.
+
+7. distroy the rule and check there is no rule listed.
+
+Test case 28: eth_l2_src_only_MAC_IPV4_PPPoL2TPV2_DATA_L
+========================================================
+1. validate the rule, and check there is not rule listed.
+
+2. create a rss rule::
+
+    flow create 0 ingress pattern eth src is 00:00:00:00:00:01 / ipv4 / udp / l2tpv2 type data_l session_id is 0x1111 / ppp / end actions rss types eth l2-src-only end key_len 0 queues end / end
+
+   check there is a rss rule listed successfully.
+
+3. send a basic hit pattern packet,record the hash value::
+
+    sendp([Ether(src='00:00:00:00:00:01')/IP()/UDP(dport=1701)/L2TP(hdr=0x400,len=12,session_id=0x1111)/HDLC()/Raw('\x00\x00')], iface="ens260f0")
+
+   check the packet distributed to queue by rss.
+
+4. send hit pattern packets with changed input set in the rule::
+
+    sendp([Ether(src='11:22:33:44:55:77')/IP()/UDP(dport=1701)/L2TP(hdr=0x400,len=12,session_id=0x1111)/HDLC()/Raw('\x00\x00')], iface="ens260f0")
+
+   check the received packets have different hash value with basic packet.
+   check all the packets are distributed to queues by rss.
+
+5. send hit pattern packets with changed input set not in the rule::
+
+    sendp([Ether(src='00:00:00:00:00:01')/IP()/UDP(dport=1701)/L2TP(hdr=0x400,len=12,session_id=0x2222)/HDLC()/Raw('\x00\x00')], iface="ens260f0")
+
+   check the received packet have same hash value with the basic packet.
+   check all the packets are distributed to queues by rss.
+   note: if there is not this type packet in the case, omit this step.
+
+6. send not hit pattern packet::
+
+    sendp([Ether(src='00:00:00:00:00:01')/IPv6()/UDP(dport=1701)/L2TP(hdr=0x400,len=12,session_id=0x1111)/HDLC()/Raw('\x00\x00')], iface="ens260f0")
+
+   check the packet rss hash value is 0.
+
+7. distroy the rule and check there is no rule listed.
+
+Test case 29: l2tpv2_session_id_MAC_IPV4_PPPoL2TPV2_DATA_S
+==========================================================
+1. validate the rule, and check there is not rule listed.
+
+2. create a rss rule::
+
+    flow create 0 ingress pattern eth / ipv4 / udp / l2tpv2 type data_s session_id is 0x1111 / ppp / end actions rss types l2tpv2 end key_len 0 queues end / end
+
+   check there is a rss rule listed successfully.
+
+3. send a basic hit pattern packet,record the hash value::
+
+    sendp([Ether(src='11:22:33:44:55:77')/IP()/UDP(dport=1701)/L2TP(hdr=0x080,session_id=0x1111)/HDLC()/Raw('\x00\x00')], iface="ens260f0")
+
+   check the packet distributed to queue by rss.
+
+4. send hit pattern packets with changed input set in the rule::
+
+    sendp([Ether(src='11:22:33:44:55:77')/IP()/UDP(dport=1701)/L2TP(hdr=0x080,session_id=0x2222)/HDLC()/Raw('\x00\x00')], iface="ens260f0")
+
+   check the received packets have different hash value with basic packet.
+   check all the packets are distributed to queues by rss.
+
+5. send hit pattern packets with changed input set not in the rule::
+
+    sendp([Ether(src='00:00:00:00:00:01')/IP()/UDP(dport=1701)/L2TP(hdr=0x080,session_id=0x1111)/HDLC()/Raw('\x00\x00')], iface="ens260f0")
+
+   check the received packet have same hash value with the basic packet.
+   check all the packets are distributed to queues by rss.
+   note: if there is not this type packet in the case, omit this step.
+
+6. send not hit pattern packet::
+
+    sendp([Ether(src='11:22:33:44:55:77')/IPv6()/UDP(dport=1701)/L2TP(hdr=0x080,session_id=0x1111)/HDLC()/Raw('\x00\x00')], iface="ens260f0")
+
+   check the packet rss hash value is 0.
+
+7. distroy the rule and check there is no rule listed.
+
+Test case 30: eth_l2_src_only_MAC_IPV4_PPPoL2TPV2_DATA_S
+========================================================
+1. validate the rule, and check there is not rule listed.
+
+2. create a rss rule::
+
+    flow create 0 ingress pattern eth src is 00:00:00:00:00:01 / ipv4 / udp / l2tpv2 type data_s session_id is 0x1111 / ppp / end actions rss types eth l2-src-only end key_len 0 queues end / end
+
+   check there is a rss rule listed successfully.
+
+3. send a basic hit pattern packet,record the hash value::
+
+    sendp([Ether(src='00:00:00:00:00:01')/IP()/UDP(dport=1701)/L2TP(hdr=0x080,session_id=0x1111)/HDLC()/Raw('\x00\x00')], iface="ens260f0")
+
+   check the packet distributed to queue by rss.
+
+4. send hit pattern packets with changed input set in the rule::
+
+    sendp([Ether(src='11:22:33:44:55:77')/IP()/UDP(dport=1701)/L2TP(hdr=0x080,session_id=0x1111)/HDLC()/Raw('\x00\x00')], iface="ens260f0")
+
+   check the received packets have different hash value with basic packet.
+   check all the packets are distributed to queues by rss.
+
+5. send hit pattern packets with changed input set not in the rule::
+
+    sendp([Ether(src='00:00:00:00:00:01')/IP()/UDP(dport=1701)/L2TP(hdr=0x080,session_id=0x2222)/HDLC()/Raw('\x00\x00')], iface="ens260f0")
+
+   check the received packet have same hash value with the basic packet.
+   check all the packets are distributed to queues by rss.
+   note: if there is not this type packet in the case, omit this step.
+
+6. send not hit pattern packet::
+
+    sendp([Ether(src='00:00:00:00:00:01')/IPv6()/UDP(dport=1701)/L2TP(hdr=0x080,session_id=0x1111)/HDLC()/Raw('\x00\x00')], iface="ens260f0")
+
+   check the packet rss hash value is 0.
+
+7. distroy the rule and check there is no rule listed.
+
+Test case 31: l2tpv2_session_id_MAC_IPV4_PPPoL2TPV2_DATA_O
+==========================================================
+1. validate the rule, and check there is not rule listed.
+
+2. create a rss rule::
+
+    flow create 0 ingress pattern eth / ipv4 / udp / l2tpv2 type data_o session_id is 0x1111 offset_size is 6 / ppp / end actions rss types l2tpv2 end key_len 0 queues end / end
+
+   check there is a rss rule listed successfully.
+
+3. send a basic hit pattern packet,record the hash value::
+
+    sendp([Ether(src='11:22:33:44:55:77')/IP()/UDP(dport=1701)/L2TP(hdr=0x020,session_id=0x1111,offset=6)/Raw('\x00\x00\x00\x00')/HDLC()/Raw('\x00\x00')], iface="ens260f0")
+
+   check the packet distributed to queue by rss.
+
+4. send hit pattern packets with changed input set in the rule::
+
+    sendp([Ether(src='11:22:33:44:55:77')/IP()/UDP(dport=1701)/L2TP(hdr=0x020,session_id=0x2222,offset=6)/Raw('\x00\x00\x00\x00')/HDLC()/Raw('\x00\x00')], iface="ens260f0")
+
+   check the received packets have different hash value with basic packet.
+   check all the packets are distributed to queues by rss.
+
+5. send hit pattern packets with changed input set not in the rule::
+
+    sendp([Ether(src='00:00:00:00:00:01')/IP()/UDP(dport=1701)/L2TP(hdr=0x020,session_id=0x1111,offset=6)/Raw('\x00\x00\x00\x00')/HDLC()/Raw('\x00\x00')], iface="ens260f0")
+
+   check the received packet have same hash value with the basic packet.
+   check all the packets are distributed to queues by rss.
+   note: if there is not this type packet in the case, omit this step.
+
+6. send not hit pattern packet::
+
+    sendp([Ether(src='11:22:33:44:55:77')/IPv6()/UDP(dport=1701)/L2TP(hdr=0x020,session_id=0x1111,offset=6)/Raw('\x00\x00\x00\x00')/HDLC()/Raw('\x00\x00')], iface="ens260f0")
+
+   check the packet rss hash value is 0.
+
+7. distroy the rule and check there is no rule listed.
+
+Test case 32: eth_l2_src_only_MAC_IPV4_PPPoL2TPV2_DATA_O
+========================================================
+1. validate the rule, and check there is not rule listed.
+
+2. create a rss rule::
+
+    flow create 0 ingress pattern eth src is 00:00:00:00:00:01 / ipv4 / udp / l2tpv2 type data_o session_id is 0x1111 offset_size is 6 / ppp / end actions rss types eth l2-src-only end key_len 0 queues end / end
+
+   check there is a rss rule listed successfully.
+
+3. send a basic hit pattern packet,record the hash value::
+
+    sendp([Ether(src='00:00:00:00:00:01')/IP()/UDP(dport=1701)/L2TP(hdr=0x020,session_id=0x1111,offset=6)/Raw('\x00\x00\x00\x00')/HDLC()/Raw('\x00\x00')], iface="ens260f0")
+
+   check the packet distributed to queue by rss.
+
+4. send hit pattern packets with changed input set in the rule::
+
+    sendp([Ether(src='11:22:33:44:55:77')/IP()/UDP(dport=1701)/L2TP(hdr=0x020,session_id=0x1111,offset=6)/Raw('\x00\x00\x00\x00')/HDLC()/Raw('\x00\x00')], iface="ens260f0")
+
+   check the received packets have different hash value with basic packet.
+   check all the packets are distributed to queues by rss.
+
+5. send hit pattern packets with changed input set not in the rule::
+
+    sendp([Ether(src='00:00:00:00:00:01')/IP()/UDP(dport=1701)/L2TP(hdr=0x020,session_id=0x2222,offset=6)/Raw('\x00\x00\x00\x00')/HDLC()/Raw('\x00\x00')], iface="ens260f0")
+
+   check the received packet have same hash value with the basic packet.
+   check all the packets are distributed to queues by rss.
+   note: if there is not this type packet in the case, omit this step.
+
+6. send not hit pattern packet::
+
+    sendp([Ether(src='00:00:00:00:00:01')/IPv6()/UDP(dport=1701)/L2TP(hdr=0x020,session_id=0x1111,offset=6)/Raw('\x00\x00\x00\x00')/HDLC()/Raw('\x00\x00')], iface="ens260f0")
+
+   check the packet rss hash value is 0.
+
+7. distroy the rule and check there is no rule listed.
+
+Test case 33: l2tpv2_session_id_MAC_IPV4_PPPoL2TPV2_DATA_L_S
+============================================================
+1. validate the rule, and check there is not rule listed.
+
+2. create a rss rule::
+
+    flow create 0 ingress pattern eth / ipv4 / udp / l2tpv2 type data_l_s session_id is 0x1111 / ppp / end actions rss types l2tpv2 end key_len 0 queues end / end
+
+   check there is a rss rule listed successfully.
+
+3. send a basic hit pattern packet,record the hash value::
+
+    sendp([Ether(src='11:22:33:44:55:77')/IP()/UDP(dport=1701)/L2TP(hdr=0x480,len=16,session_id=0x1111)/HDLC()/Raw('\x00\x00')], iface="ens260f0")
+
+   check the packet distributed to queue by rss.
+
+4. send hit pattern packets with changed input set in the rule::
+
+    sendp([Ether(src='11:22:33:44:55:77')/IP()/UDP(dport=1701)/L2TP(hdr=0x480,len=16,session_id=0x2222)/HDLC()/Raw('\x00\x00')], iface="ens260f0")
+
+   check the received packets have different hash value with basic packet.
+   check all the packets are distributed to queues by rss.
+
+5. send hit pattern packets with changed input set not in the rule::
+
+    sendp([Ether(src='00:00:00:00:00:01')/IP()/UDP(dport=1701)/L2TP(hdr=0x480,len=16,session_id=0x1111)/HDLC()/Raw('\x00\x00')], iface="ens260f0")
+
+   check the received packet have same hash value with the basic packet.
+   check all the packets are distributed to queues by rss.
+   note: if there is not this type packet in the case, omit this step.
+
+6. send not hit pattern packet::
+
+    sendp([Ether(src='11:22:33:44:55:77')/IPv6()/UDP(dport=1701)/L2TP(hdr=0x480,len=16,session_id=0x1111)/HDLC()/Raw('\x00\x00')], iface="ens260f0")
+
+   check the packet rss hash value is 0.
+
+7. distroy the rule and check there is no rule listed.
+
+Test case 34: eth_l2_src_only_MAC_IPV4_PPPoL2TPV2_DATA_L_S
+==========================================================
+1. validate the rule, and check there is not rule listed.
+
+2. create a rss rule::
+
+    flow create 0 ingress pattern eth src is 00:00:00:00:00:01 / ipv4 / udp / l2tpv2 type data_l_s session_id is 0x1111 / ppp / end actions rss types eth l2-src-only end key_len 0 queues end / end
+
+   check there is a rss rule listed successfully.
+
+3. send a basic hit pattern packet,record the hash value::
+
+    sendp([Ether(src='00:00:00:00:00:01')/IP()/UDP(dport=1701)/L2TP(hdr=0x480,len=16,session_id=0x1111)/HDLC()/Raw('\x00\x00')], iface="ens260f0")
+
+   check the packet distributed to queue by rss.
+
+4. send hit pattern packets with changed input set in the rule::
+
+    sendp([Ether(src='11:22:33:44:55:77')/IP()/UDP(dport=1701)/L2TP(hdr=0x480,len=16,session_id=0x1111)/HDLC()/Raw('\x00\x00')], iface="ens260f0")
+
+   check the received packets have different hash value with basic packet.
+   check all the packets are distributed to queues by rss.
+
+5. send hit pattern packets with changed input set not in the rule::
+
+    sendp([Ether(src='00:00:00:00:00:01')/IP()/UDP(dport=1701)/L2TP(hdr=0x480,len=16,session_id=0x2222)/HDLC()/Raw('\x00\x00')], iface="ens260f0")
+
+   check the received packet have same hash value with the basic packet.
+   check all the packets are distributed to queues by rss.
+   note: if there is not this type packet in the case, omit this step.
+
+6. send not hit pattern packet::
+
+    sendp([Ether(src='00:00:00:00:00:01')/IPv6()/UDP(dport=1701)/L2TP(hdr=0x480,len=16,session_id=0x1111)/HDLC()/Raw('\x00\x00')], iface="ens260f0")
+
+   check the packet rss hash value is 0.
+
+7. distroy the rule and check there is no rule listed.
+
+Test case 35: l2tpv2_session_id_MAC_IPV6_PPPoL2TPV2_DATA
+========================================================
+1. validate the rule, and check there is not rule listed.
+
+2. create a rss rule::
+
+    flow create 0 ingress pattern eth / ipv6 / udp / l2tpv2 type data session_id is 0x1111 / ppp / end actions rss types l2tpv2 end key_len 0 queues end / end
+
+   check there is a rss rule listed successfully.
+
+3. send a basic hit pattern packet,record the hash value::
+
+    sendp([Ether(src='11:22:33:44:55:77')/IPv6()/UDP(dport=1701)/L2TP(hdr=0x000,session_id=0x1111)/HDLC()/Raw('\x00\x00')], iface="ens260f0")
+
+   check the packet distributed to queue by rss.
+
+4. send hit pattern packets with changed input set in the rule::
+
+    sendp([Ether(src='11:22:33:44:55:77')/IPv6()/UDP(dport=1701)/L2TP(hdr=0x000,session_id=0x2222)/HDLC()/Raw('\x00\x00')], iface="ens260f0")
+
+   check the received packets have different hash value with basic packet.
+   check all the packets are distributed to queues by rss.
+
+5. send hit pattern packets with changed input set not in the rule::
+
+    sendp([Ether(src='00:00:00:00:00:01')/IPv6()/UDP(dport=1701)/L2TP(hdr=0x000,session_id=0x1111)/HDLC()/Raw('\x00\x00')], iface="ens260f0")
+
+   check the received packet have same hash value with the basic packet.
+   check all the packets are distributed to queues by rss.
+   note: if there is not this type packet in the case, omit this step.
+
+6. send not hit pattern packet::
+
+    sendp([Ether(src='11:22:33:44:55:77')/IP()/UDP(dport=1701)/L2TP(hdr=0x000,session_id=0x1111)/HDLC()/Raw('\x00\x00')], iface="ens260f0")
+
+   check the packet rss hash value is 0.
+
+7. distroy the rule and check there is no rule listed.
+
+Test case 36: eth_l2_src_only_MAC_IPV6_PPPoL2TPV2_DATA
+======================================================
+1. validate the rule, and check there is not rule listed.
+
+2. create a rss rule::
+
+    flow create 0 ingress pattern eth src is 00:00:00:00:00:01 / ipv6 / udp / l2tpv2 type data session_id is 0x1111 / ppp / end actions rss types eth l2-src-only end key_len 0 queues end / end
+
+   check there is a rss rule listed successfully.
+
+3. send a basic hit pattern packet,record the hash value::
+
+    sendp([Ether(src='00:00:00:00:00:01')/IPv6()/UDP(dport=1701)/L2TP(hdr=0x000,session_id=0x1111)/HDLC()/Raw('\x00\x00')], iface="ens260f0")
+
+   check the packet distributed to queue by rss.
+
+4. send hit pattern packets with changed input set in the rule::
+
+    sendp([Ether(src='11:22:33:44:55:77')/IPv6()/UDP(dport=1701)/L2TP(hdr=0x000,session_id=0x1111)/HDLC()/Raw('\x00\x00')], iface="ens260f0")
+
+   check the received packets have different hash value with basic packet.
+   check all the packets are distributed to queues by rss.
+
+5. send hit pattern packets with changed input set not in the rule::
+
+    sendp([Ether(src='00:00:00:00:00:01')/IPv6()/UDP(dport=1701)/L2TP(hdr=0x000,session_id=0x2222)/HDLC()/Raw('\x00\x00')], iface="ens260f0")
+
+   check the received packet have same hash value with the basic packet.
+   check all the packets are distributed to queues by rss.
+   note: if there is not this type packet in the case, omit this step.
+
+6. send not hit pattern packet::
+
+    sendp([Ether(src='00:00:00:00:00:01')/IP()/UDP(dport=1701)/L2TP(hdr=0x000,session_id=0x1111)/HDLC()/Raw('\x00\x00')], iface="ens260f0")
+
+   check the packet rss hash value is 0.
+
+7. distroy the rule and check there is no rule listed.
+
+Test case 37: l2tpv2_session_id_MAC_IPV6_PPPoL2TPV2_DATA_L
+==========================================================
+1. validate the rule, and check there is not rule listed.
+
+2. create a rss rule::
+
+    flow create 0 ingress pattern eth / ipv6 / udp / l2tpv2 type data_l session_id is 0x1111 / ppp / end actions rss types l2tpv2 end key_len 0 queues end / end
+
+   check there is a rss rule listed successfully.
+
+3. send a basic hit pattern packet,record the hash value::
+
+    sendp([Ether(src='11:22:33:44:55:77')/IPv6()/UDP(dport=1701)/L2TP(hdr=0x400,len=12,session_id=0x1111)/HDLC()/Raw('\x00\x00')], iface="ens260f0")
+
+   check the packet distributed to queue by rss.
+
+4. send hit pattern packets with changed input set in the rule::
+
+    sendp([Ether(src='11:22:33:44:55:77')/IPv6()/UDP(dport=1701)/L2TP(hdr=0x400,len=12,session_id=0x2222)/HDLC()/Raw('\x00\x00')], iface="ens260f0")
+
+   check the received packets have different hash value with basic packet.
+   check all the packets are distributed to queues by rss.
+
+5. send hit pattern packets with changed input set not in the rule::
+
+    sendp([Ether(src='00:00:00:00:00:01')/IPv6()/UDP(dport=1701)/L2TP(hdr=0x400,len=12,session_id=0x1111)/HDLC()/Raw('\x00\x00')], iface="ens260f0")
+
+   check the received packet have same hash value with the basic packet.
+   check all the packets are distributed to queues by rss.
+   note: if there is not this type packet in the case, omit this step.
+
+6. send not hit pattern packet::
+
+    sendp([Ether(src='11:22:33:44:55:77')/IP()/UDP(dport=1701)/L2TP(hdr=0x400,len=12,session_id=0x1111)/HDLC()/Raw('\x00\x00')], iface="ens260f0")
+
+   check the packet rss hash value is 0.
+
+7. distroy the rule and check there is no rule listed.
+
+Test case 38: eth_l2_src_only_MAC_IPV6_PPPoL2TPV2_DATA_L
+========================================================
+1. validate the rule, and check there is not rule listed.
+
+2. create a rss rule::
+
+    flow create 0 ingress pattern eth src is 00:00:00:00:00:01 / ipv6 / udp / l2tpv2 type data_l session_id is 0x1111 / ppp / end actions rss types eth l2-src-only end key_len 0 queues end / end
+
+   check there is a rss rule listed successfully.
+
+3. send a basic hit pattern packet,record the hash value::
+
+    sendp([Ether(src='00:00:00:00:00:01')/IPv6()/UDP(dport=1701)/L2TP(hdr=0x400,len=12,session_id=0x1111)/HDLC()/Raw('\x00\x00')], iface="ens260f0")
+
+   check the packet distributed to queue by rss.
+
+4. send hit pattern packets with changed input set in the rule::
+
+    sendp([Ether(src='11:22:33:44:55:77')/IPv6()/UDP(dport=1701)/L2TP(hdr=0x400,len=12,session_id=0x1111)/HDLC()/Raw('\x00\x00')], iface="ens260f0")
+
+   check the received packets have different hash value with basic packet.
+   check all the packets are distributed to queues by rss.
+
+5. send hit pattern packets with changed input set not in the rule::
+
+    sendp([Ether(src='00:00:00:00:00:01')/IPv6()/UDP(dport=1701)/L2TP(hdr=0x400,len=12,session_id=0x2222)/HDLC()/Raw('\x00\x00')], iface="ens260f0")
+
+   check the received packet have same hash value with the basic packet.
+   check all the packets are distributed to queues by rss.
+   note: if there is not this type packet in the case, omit this step.
+
+6. send not hit pattern packet::
+
+    sendp([Ether(src='00:00:00:00:00:01')/IP()/UDP(dport=1701)/L2TP(hdr=0x400,len=12,session_id=0x1111)/HDLC()/Raw('\x00\x00')], iface="ens260f0")
+
+   check the packet rss hash value is 0.
+
+7. distroy the rule and check there is no rule listed.
+
+Test case 39: l2tpv2_session_id_MAC_IPV6_PPPoL2TPV2_DATA_S
+==========================================================
+1. validate the rule, and check there is not rule listed.
+
+2. create a rss rule::
+
+    flow create 0 ingress pattern eth / ipv6 / udp / l2tpv2 type data_s session_id is 0x1111 / ppp / end actions rss types l2tpv2 end key_len 0 queues end / end
+
+   check there is a rss rule listed successfully.
+
+3. send a basic hit pattern packet,record the hash value::
+
+    sendp([Ether(src='11:22:33:44:55:77')/IPv6()/UDP(dport=1701)/L2TP(hdr=0x080,session_id=0x1111)/HDLC()/Raw('\x00\x00')], iface="ens260f0")
+
+   check the packet distributed to queue by rss.
+
+4. send hit pattern packets with changed input set in the rule::
+
+    sendp([Ether(src='11:22:33:44:55:77')/IPv6()/UDP(dport=1701)/L2TP(hdr=0x080,session_id=0x2222)/HDLC()/Raw('\x00\x00')], iface="ens260f0")
+
+   check the received packets have different hash value with basic packet.
+   check all the packets are distributed to queues by rss.
+
+5. send hit pattern packets with changed input set not in the rule::
+
+    sendp([Ether(src='00:00:00:00:00:01')/IPv6()/UDP(dport=1701)/L2TP(hdr=0x080,session_id=0x1111)/HDLC()/Raw('\x00\x00')], iface="ens260f0")
+
+   check the received packet have same hash value with the basic packet.
+   check all the packets are distributed to queues by rss.
+   note: if there is not this type packet in the case, omit this step.
+
+6. send not hit pattern packet::
+
+    sendp([Ether(src='11:22:33:44:55:77')/IP()/UDP(dport=1701)/L2TP(hdr=0x080,session_id=0x1111)/HDLC()/Raw('\x00\x00')], iface="ens260f0")
+
+   check the packet rss hash value is 0.
+
+7. distroy the rule and check there is no rule listed.
+
+Test case 40: eth_l2_src_only_MAC_IPV6_PPPoL2TPV2_DATA_S
+========================================================
+1. validate the rule, and check there is not rule listed.
+
+2. create a rss rule::
+
+    flow create 0 ingress pattern eth src is 00:00:00:00:00:01 / ipv6 / udp / l2tpv2 type data_s session_id is 0x1111 / ppp / end actions rss types eth l2-src-only end key_len 0 queues end / end
+
+   check there is a rss rule listed successfully.
+
+3. send a basic hit pattern packet,record the hash value::
+
+    sendp([Ether(src='00:00:00:00:00:01')/IPv6()/UDP(dport=1701)/L2TP(hdr=0x080,session_id=0x1111)/HDLC()/Raw('\x00\x00')], iface="ens260f0")
+
+   check the packet distributed to queue by rss.
+
+4. send hit pattern packets with changed input set in the rule::
+
+    sendp([Ether(src='11:22:33:44:55:77')/IPv6()/UDP(dport=1701)/L2TP(hdr=0x080,session_id=0x1111)/HDLC()/Raw('\x00\x00')], iface="ens260f0")
+
+   check the received packets have different hash value with basic packet.
+   check all the packets are distributed to queues by rss.
+
+5. send hit pattern packets with changed input set not in the rule::
+
+    sendp([Ether(src='00:00:00:00:00:01')/IPv6()/UDP(dport=1701)/L2TP(hdr=0x080,session_id=0x2222)/HDLC()/Raw('\x00\x00')], iface="ens260f0")
+
+   check the received packet have same hash value with the basic packet.
+   check all the packets are distributed to queues by rss.
+   note: if there is not this type packet in the case, omit this step.
+
+6. send not hit pattern packet::
+
+    sendp([Ether(src='00:00:00:00:00:01')/IP()/UDP(dport=1701)/L2TP(hdr=0x080,session_id=0x1111)/HDLC()/Raw('\x00\x00')], iface="ens260f0")
+
+   check the packet rss hash value is 0.
+
+7. distroy the rule and check there is no rule listed.
+
+Test case 41: l2tpv2_session_id_MAC_IPV6_PPPoL2TPV2_DATA_O
+==========================================================
+1. validate the rule, and check there is not rule listed.
+
+2. create a rss rule::
+
+    flow create 0 ingress pattern eth / ipv6 / udp / l2tpv2 type data_o session_id is 0x1111 offset_size is 6 / ppp / end actions rss types l2tpv2 end key_len 0 queues end / end
+
+   check there is a rss rule listed successfully.
+
+3. send a basic hit pattern packet,record the hash value::
+
+    sendp([Ether(src='11:22:33:44:55:77')/IPv6()/UDP(dport=1701)/L2TP(hdr=0x020,session_id=0x1111,offset=6)/Raw('\x00\x00\x00\x00')/HDLC()/Raw('\x00\x00')], iface="ens260f0")
+
+   check the packet distributed to queue by rss.
+
+4. send hit pattern packets with changed input set in the rule::
+
+    sendp([Ether(src='11:22:33:44:55:77')/IPv6()/UDP(dport=1701)/L2TP(hdr=0x020,session_id=0x2222,offset=6)/Raw('\x00\x00\x00\x00')/HDLC()/Raw('\x00\x00')], iface="ens260f0")
+
+   check the received packets have different hash value with basic packet.
+   check all the packets are distributed to queues by rss.
+
+5. send hit pattern packets with changed input set not in the rule::
+
+    sendp([Ether(src='00:00:00:00:00:01')/IPv6()/UDP(dport=1701)/L2TP(hdr=0x020,session_id=0x1111,offset=6)/Raw('\x00\x00\x00\x00')/HDLC()/Raw('\x00\x00')], iface="ens260f0")
+
+   check the received packet have same hash value with the basic packet.
+   check all the packets are distributed to queues by rss.
+   note: if there is not this type packet in the case, omit this step.
+
+6. send not hit pattern packet::
+
+    sendp([Ether(src='11:22:33:44:55:77')/IP()/UDP(dport=1701)/L2TP(hdr=0x020,session_id=0x1111,offset=6)/Raw('\x00\x00\x00\x00')/HDLC()/Raw('\x00\x00')], iface="ens260f0")
+
+   check the packet rss hash value is 0.
+
+7. distroy the rule and check there is no rule listed.
+
+Test case 42: eth_l2_src_only_MAC_IPV6_PPPoL2TPV2_DATA_O
+========================================================
+1. validate the rule, and check there is not rule listed.
+
+2. create a rss rule::
+
+    flow create 0 ingress pattern eth src is 00:00:00:00:00:01 / ipv6 / udp / l2tpv2 type data_o session_id is 0x1111 offset_size is 6 / ppp / end actions rss types eth l2-src-only end key_len 0 queues end / end
+
+   check there is a rss rule listed successfully.
+
+3. send a basic hit pattern packet,record the hash value::
+
+    sendp([Ether(src='00:00:00:00:00:01')/IPv6()/UDP(dport=1701)/L2TP(hdr=0x020,session_id=0x1111,offset=6)/Raw('\x00\x00\x00\x00')/HDLC()/Raw('\x00\x00')], iface="ens260f0")
+
+   check the packet distributed to queue by rss.
+
+4. send hit pattern packets with changed input set in the rule::
+
+    sendp([Ether(src='11:22:33:44:55:77')/IPv6()/UDP(dport=1701)/L2TP(hdr=0x020,session_id=0x1111,offset=6)/Raw('\x00\x00\x00\x00')/HDLC()/Raw('\x00\x00')], iface="ens260f0")
+
+   check the received packets have different hash value with basic packet.
+   check all the packets are distributed to queues by rss.
+
+5. send hit pattern packets with changed input set not in the rule::
+
+    sendp([Ether(src='00:00:00:00:00:01')/IPv6()/UDP(dport=1701)/L2TP(hdr=0x020,session_id=0x2222,offset=6)/Raw('\x00\x00\x00\x00')/HDLC()/Raw('\x00\x00')], iface="ens260f0")
+
+   check the received packet have same hash value with the basic packet.
+   check all the packets are distributed to queues by rss.
+   note: if there is not this type packet in the case, omit this step.
+
+6. send not hit pattern packet::
+
+    sendp([Ether(src='00:00:00:00:00:01')/IP()/UDP(dport=1701)/L2TP(hdr=0x020,session_id=0x1111,offset=6)/Raw('\x00\x00\x00\x00')/HDLC()/Raw('\x00\x00')], iface="ens260f0")
+
+   check the packet rss hash value is 0.
+
+7. distroy the rule and check there is no rule listed.
+
+Test case 43: l2tpv2_session_id_MAC_IPV6_PPPoL2TPV2_DATA_L_S
+============================================================
+1. validate the rule, and check there is not rule listed.
+
+2. create a rss rule::
+
+    flow create 0 ingress pattern eth / ipv6 / udp / l2tpv2 type data_l_s session_id is 0x1111 / ppp / end actions rss types l2tpv2 end key_len 0 queues end / end
+
+   check there is a rss rule listed successfully.
+
+3. send a basic hit pattern packet,record the hash value::
+
+    sendp([Ether(src='11:22:33:44:55:77')/IPv6()/UDP(dport=1701)/L2TP(hdr=0x480,len=16,session_id=0x1111)/HDLC()/Raw('\x00\x00')], iface="ens260f0")
+
+   check the packet distributed to queue by rss.
+
+4. send hit pattern packets with changed input set in the rule::
+
+    sendp([Ether(src='11:22:33:44:55:77')/IPv6()/UDP(dport=1701)/L2TP(hdr=0x480,len=16,session_id=0x2222)/HDLC()/Raw('\x00\x00')], iface="ens260f0")
+
+   check the received packets have different hash value with basic packet.
+   check all the packets are distributed to queues by rss.
+
+5. send hit pattern packets with changed input set not in the rule::
+
+    sendp([Ether(src='00:00:00:00:00:01')/IPv6()/UDP(dport=1701)/L2TP(hdr=0x480,len=16,session_id=0x1111)/HDLC()/Raw('\x00\x00')], iface="ens260f0")
+
+   check the received packet have same hash value with the basic packet.
+   check all the packets are distributed to queues by rss.
+   note: if there is not this type packet in the case, omit this step.
+
+6. send not hit pattern packet::
+
+    sendp([Ether(src='11:22:33:44:55:77')/IP()/UDP(dport=1701)/L2TP(hdr=0x480,len=16,session_id=0x1111)/HDLC()/Raw('\x00\x00')], iface="ens260f0")
+
+   check the packet rss hash value is 0.
+
+7. distroy the rule and check there is no rule listed.
+
+Test case 44: eth_l2_src_only_MAC_IPV6_PPPoL2TPV2_DATA_L_S
+==========================================================
+1. validate the rule, and check there is not rule listed.
+
+2. create a rss rule::
+
+    flow create 0 ingress pattern eth src is 00:00:00:00:00:01 / ipv6 / udp / l2tpv2 type data_l_s session_id is 0x1111 / ppp / end actions rss types eth l2-src-only end key_len 0 queues end / end
+
+   check there is a rss rule listed successfully.
+
+3. send a basic hit pattern packet,record the hash value::
+
+    sendp([Ether(src='00:00:00:00:00:01')/IPv6()/UDP(dport=1701)/L2TP(hdr=0x480,len=16,session_id=0x1111)/HDLC()/Raw('\x00\x00')], iface="ens260f0")
+
+   check the packet distributed to queue by rss.
+
+4. send hit pattern packets with changed input set in the rule::
+
+    sendp([Ether(src='11:22:33:44:55:77')/IPv6()/UDP(dport=1701)/L2TP(hdr=0x480,len=16,session_id=0x1111)/HDLC()/Raw('\x00\x00')], iface="ens260f0")
+
+   check the received packets have different hash value with basic packet.
+   check all the packets are distributed to queues by rss.
+
+5. send hit pattern packets with changed input set not in the rule::
+
+    sendp([Ether(src='00:00:00:00:00:01')/IPv6()/UDP(dport=1701)/L2TP(hdr=0x480,len=16,session_id=0x2222)/HDLC()/Raw('\x00\x00')], iface="ens260f0")
+
+   check the received packet have same hash value with the basic packet.
+   check all the packets are distributed to queues by rss.
+   note: if there is not this type packet in the case, omit this step.
+
+6. send not hit pattern packet::
+
+    sendp([Ether(src='00:00:00:00:00:01')/IP()/UDP(dport=1701)/L2TP(hdr=0x480,len=16,session_id=0x1111)/HDLC()/Raw('\x00\x00')], iface="ens260f0")
+
+   check the packet rss hash value is 0.
+
+7. distroy the rule and check there is no rule listed.
+
