* [dts] [PATCH] L2TPv3 test script
@ 2020-02-20 14:32 Varalakshmi
2020-02-24 5:15 ` Peng, Yuan
2020-02-25 1:22 ` Tu, Lijuan
0 siblings, 2 replies; 3+ messages in thread
From: Varalakshmi @ 2020-02-20 14:32 UTC (permalink / raw)
To: dts; +Cc: Varalakshmi
diff --git a/tests/TestSuite_DdpL2tpv3.py b/tests/TestSuite_DdpL2tpv3.py
new file mode 100644
index 0000000..78d8001
--- /dev/null
+++ b/tests/TestSuite_DdpL2tpv3.py
@@ -0,0 +1,485 @@
+#<COPYRIGHT_TAG>
+import time
+import re
+import sys
+import utils
+from test_case import TestCase
+from pmd_output import PmdOutput
+from settings import get_nic_name
+from scapy.all import *
+import random
+class TestDdpL2tpv3(TestCase):
+
+ def set_up_all(self):
+ self.dut_ports = self.dut.get_ports(self.nic)
+ profile_file = 'dep/l2tpv3oip-l4.pkg'
+ profile_dst = "/tmp/"
+ self.dut.session.copy_file_to(profile_file, profile_dst)
+ out = self.dut.send_expect("cat config/common_base", "]# ", 10)
+ self.PF_Q_strip = 'CONFIG_RTE_LIBRTE_I40E_QUEUE_NUM_PER_PF'
+ pattern = "(%s=)(\d*)" % self.PF_Q_strip
+ self.PF_QUEUE = self.element_strip(out, pattern)
+ self.used_dut_port = self.dut_ports[0]
+ tester_port = self.tester.get_local_port(self.used_dut_port)
+ self.tester_intf = self.tester.get_interface(tester_port)
+ self.dut_testpmd = PmdOutput(self.dut)
+
+ def set_up(self):
+ self.load_profile()
+
+ def element_strip(self, out, pattern):
+ """
+ Strip and get queue number.
+ """
+
+ s = re.compile(pattern)
+ res = s.search(out)
+ if res is None:
+ print 'Queue number not in output.'
+ return None
+ else:
+ result = res.group(2)
+ return int(result)
+
+
+ def load_profile(self):
+ """
+ Load profile to update FVL configuration tables, profile will be
+ stored in binary file.
+ """
+ self.dut_testpmd.start_testpmd(
+ "Default", "--pkt-filter-mode=perfect --port-topology=chained \
+ --txq=%s --rxq=%s --disable-rss"
+ % (self.PF_QUEUE, self.PF_QUEUE))
+ self.dut_testpmd.execute_cmd('port stop 0')
+ time.sleep(1)
+ self.dut_testpmd.execute_cmd(
+ 'ddp add 0 /tmp/l2tpv3oip-l4.pkg,/tmp/l2tpv3oip-l4.bak')
+ out = self.dut_testpmd.execute_cmd('ddp get list 0')
+ self.verify("Profile number is: 1" in out,
+ "Failed to load ddp profile!!!")
+ self.dut_testpmd.execute_cmd('port start 0')
+
+ def l2tpv3pkts(self, keyword):
+ """
+ Generate L2TPv3oIPv4, L2TPv3oIPv6 and UDP packets.
+ """
+ pkt = []
+ if keyword is not 'def':
+ if keyword is "l2tpv3oipv4":
+ pkt.append("Ether()/IP(proto=115)/Raw('\\x00\\x00\\x03\\xe9')")
+ pkt.append("Ether()/IP(proto=115)/Raw('\\x00\\x00\\x03\\fe9')")
+ if keyword is "l2tpv3oipv4_dst":
+ pkt.append("Ether()/IP(dst=\"8.8.8.8\",proto=115)/Raw('\\x00\\x00\\x03\\xe9')")
+ pkt.append("Ether()/IP(dst=\"8.8.8.8\",proto=115)/Raw('\\x00\\x00\\x03\\xb9')")
+ pkt.append("Ether()/IP(dst=\"88.8.8.8\",proto=115)/Raw('\\x00\\x00\\x03\\xe9')")
+ if keyword is "l2tpv3oipv4_src":
+ pkt.append("Ether()/IP(src=\"1.1.1.1\",proto=115)/Raw('\\x00\\x00\\x03\\xe9')")
+ pkt.append("Ether()/IP(src=\"1.1.1.1\",proto=115)/Raw('\\x00\\x00\\x03\\xa9')")
+ pkt.append("Ether()/IP(src=\"11.1.1.1\",proto=115)/Raw('\\x00\\x00\\x03\\xe9')")
+ if keyword is "l2tpv3oipv4_src_dst":
+ pkt.append("Ether()/IP(src=\"5.5.5.5\",dst=\"2.2.2.2\",proto=115)/Raw('\\x00\\x00\\x03\\xe9')")
+ pkt.append("Ether()/IP(src=\"5.5.5.5\",dst=\"2.2.2.2\",proto=115)/Raw('\\x00\\x00\\x03\\xf9')")
+ pkt.append("Ether()/IP(src=\"55.5.5.5\",dst=\"2.2.2.2\",proto=115)/Raw('\\x00\\x00\\x03\\xe9')")
+ pkt.append("Ether()/IP(src=\"5.5.5.5\",dst=\"22.2.2.2\",proto=115)/Raw('\\x00\\x00\\x03\\xe9')")
+ if keyword is "l2tpv3oipv6":
+ pkt.append("Ether()/IPv6(nh=115)/Raw('\\x00\\x00\\x03\\xe9')")
+ pkt.append("Ether()/IPv6(nh=115)/Raw('\\x00\\x00\\x03\\xc9')")
+ if keyword is "l2tpv3oipv6_dst":
+ pkt.append("Ether()/IPv6(dst=\"8:7:6:5:4:3:2:1\",nh=115)/Raw('\\x00\\x00\\x03\\xe9')")
+ pkt.append("Ether()/IPv6(dst=\"8:7:6:5:4:3:2:1\",nh=115)/Raw('\\x00\\x00\\x03\\xd9')")
+ pkt.append("Ether()/IPv6(dst=\"8888:7:6:5:4:3:2:1\",nh=115)/Raw('\\x00\\x00\\x03\\xe9')")
+ if keyword is "l2tpv3oipv6_src":
+ pkt.append("Ether()/IPv6(src=\"1:2:3:4:5:6:7:8\",nh=115)/Raw('\\x00\\x00\\x03\\xe9')")
+ pkt.append("Ether()/IPv6(src=\"1:2:3:4:5:6:7:8\",nh=115)/Raw('\\x00\\x00\\x03\\xf9')")
+ pkt.append("Ether()/IPv6(src=\"1111:2:3:4:5:6:7:8\",nh=115)/Raw('\\x00\\x00\\x03\\xe9')")
+ if keyword is "l2tpv3oipv6_src_dst":
+ pkt.append("Ether()/IPv6(src=\"2:3:4:5:6:7:8:9\",dst=\"6:5:4:3:2:1:8:9\",nh=115)/Raw('\\x00\\x00\\x03\\xe9')")
+ pkt.append("Ether()/IPv6(src=\"2:3:4:5:6:7:8:9\",dst=\"6:5:4:3:2:1:8:9\",nh=115)/Raw('\\x00\\x00\\x03\\xf9')")
+ pkt.append("Ether()/IPv6(src=\"2222:3:4:5:6:7:8:9\",dst=\"6:5:4:3:2:1:8:9\",nh=115)/Raw('\\x00\\x00\\x03\\xe9')")
+ pkt.append("Ether()/IPv6(src=\"2:3:4:5:6:7:8:9\",dst=\"6666:5:4:3:2:1:8:9\",nh=115)/Raw('\\x00\\x00\\x03\\xe9')")
+ if keyword is "l2tpv3_ipv4_ipv6":
+ pkt.append("Ether()/IP(proto=115)/Raw('\\x00\\x00\\x03\\xe9')")
+ pkt.append("Ether()/IP(proto=115)/Raw('\\x00\\x00\\x03\\xf9')")
+ pkt.append("Ether()/IPv6(nh=115)/Raw('\\x00\\x00\\x03\\xe9')")
+ pkt.append("Ether()/IPv6(nh=115)/Raw('\\x00\\x00\\x03\\xf9')")
+ if keyword is "l2tpv3oip_v4src_v6src" :
+ pkt.append("Ether()/IP(src=\"1.3.5.7\",proto=115)/Raw('\\x00\\x00\\x03\\xe9')")
+ pkt.append("Ether()/IP(src=\"1.3.5.7\",proto=115)/Raw('\\x00\\x00\\x03\\xa9')")
+ pkt.append("Ether()/IP(src=\"11.3.5.7\",proto=115)/Raw('\\x00\\x00\\x03\\xe9')")
+ pkt.append("Ether()/IPv6(src=\"1:3:5:7:9:2:4:6\",nh=115)/Raw('\\x00\\x00\\x03\\xe9')")
+ pkt.append("Ether()/IPv6(src=\"1:3:5:7:9:2:4:6\",nh=115)/Raw('\\x00\\x00\\x03\\xf9')")
+ pkt.append("Ether()/IPv6(src=\"1111:3:5:7:9:2:4:6\",nh=115)/Raw('\\x00\\x00\\x03\\xe9')")
+ if keyword is "l2tpv3oip_v4dst_v6dst":
+ pkt.append("Ether()/IP(dst=\"9.7.5.3\",proto=115)/Raw('\\x00\\x00\\x03\\xe9')")
+ pkt.append("Ether()/IP(dst=\"9.7.5.3\",proto=115)/Raw('\\x00\\x00\\x03\\xb9')")
+ pkt.append("Ether()/IP(dst=\"99.7.5.3\",proto=115)/Raw('\\x00\\x00\\x03\\xe9')")
+ pkt.append("Ether()/IPv6(dst=\"2:4:6:8:1:3:5:7\",nh=115)/Raw('\\x00\\x00\\x03\\xe9')")
+ pkt.append("Ether()/IPv6(dst=\"2:4:6:8:1:3:5:7\",nh=115)/Raw('\\x00\\x00\\x03\\xd9')")
+ pkt.append("Ether()/IPv6(dst=\"2222:4:6:8:1:3:5:7\",nh=115)/Raw('\\x00\\x00\\x03\\xe9')")
+ if keyword is "l2tpv3oip_v4srcdst_v6srcdst":
+ pkt.append("Ether()/IP(src=\"9.8.7.6\",dst=\"4.5.6.7\",proto=115)/Raw('\\x00\\x00\\x03\\xe9')")
+ pkt.append("Ether()/IP(src=\"9.8.7.6\",dst=\"4.5.6.7\",proto=115)/Raw('\\x00\\x00\\x03\\xf9')")
+ pkt.append("Ether()/IP(src=\"99.8.7.6\",dst=\"4.5.6.7\",proto=115)/Raw('\\x00\\x00\\x03\\xe9')")
+ pkt.append("Ether()/IP(src=\"9.8.7.6\",dst=\"44.5.6.7\",proto=115)/Raw('\\x00\\x00\\x03\\xe9')")
+ pkt.append("Ether()/IPv6(src=\"1:2:3:4:5:6:7:8\",dst=\"9:8:7:6:5:4:3:2\",nh=115)/Raw('\\x00\\x00\\x03\\xe9')")
+ pkt.append("Ether()/IPv6(src=\"1:2:3:4:5:6:7:8\",dst=\"9:8:7:6:5:4:3:2\",nh=115)/Raw('\\x00\\x00\\x03\\xf9')")
+ pkt.append("Ether()/IPv6(src=\"1111:2:3:4:5:6:7:8\",dst=\"9:8:7:6:5:4:3:2\",nh=115)/Raw('\\x00\\x00\\x03\\xe9')")
+ pkt.append("Ether()/IPv6(src=\"1:2:3:4:5:6:7:8\",dst=\"9999:8:7:6:5:4:3:2\",nh=115)/Raw('\\x00\\x00\\x03\\xe9')")
+ if keyword is "l2tpv3oip_v4_v6_udp":
+ pkt.append("Ether()/IP(dst=\"9.7.5.3\",proto=115)/Raw('\\x00\\x00\\x03\\xe9')")
+ pkt.append("Ether()/IP(dst=\"9.7.5.3\",proto=115)/Raw('\\x00\\x00\\x03\\xb9')")
+ pkt.append("Ether()/IPv6(dst=\"2:4:6:8:1:3:5:7\",nh=115)/Raw('\\x00\\x00\\x03\\xe9')")
+ pkt.append("Ether()/IPv6(dst=\"2:4:6:8:1:3:5:7\",nh=115)/Raw('\\x00\\x00\\x03\\xd9')")
+ pkt.append("Ether()/IP()/UDP()")
+ return pkt
+
+ def send_and_verify(self,keyword='def'):
+ """
+ Send packets and verify result.
+ """
+ pkt = self.l2tpv3pkts(keyword)
+ qnum=[]
+ for i in range(len(pkt)):
+ self.tester.scapy_append('sendp([%s], iface="%s")'%(pkt[i], self.tester_intf))
+ self.tester.scapy_execute()
+ out = self.dut.get_session_output(timeout=2)
+ pattern = "port (\d)/queue (\d{1,2}): received (\d) packets"
+ qnum.append(self.element_strip(out, pattern))
+ return qnum
+
+ def run_fd_test(self, keyword,crlwords_ipv4,crlwords_ipv6):
+ """
+ Configure Flow director rules.
+
+ keywords: keywords have IPv4/IPv6 SIP DIP and UDP
+ """
+ self.dut_testpmd.execute_cmd('port stop 0')
+ self.dut_testpmd.execute_cmd('port config 0 pctype 28 fdir_inset clear all')
+ self.dut_testpmd.execute_cmd('port config 0 pctype 38 fdir_inset clear all')
+ if crlwords_ipv4 is not None:
+ for field in crlwords_ipv4:
+ self.dut_testpmd.execute_cmd('port config 0 pctype 28 fdir_inset set field {}'.format(field))
+ if crlwords_ipv6 is not None:
+ for field in crlwords_ipv6:
+ self.dut_testpmd.execute_cmd('port config 0 pctype 38 fdir_inset set field {}'.format(field))
+ self.dut_testpmd.execute_cmd('port start 0')
+ self.dut_testpmd.execute_cmd('start')
+ self.dut_testpmd.execute_cmd('set verbose 1')
+ qdef=[]
+ qnum = self.send_and_verify(keyword)
+ for i in range(len(qnum)):
+ self.verify(qnum[i] == 0, "Receive packet from wrong queue!!!")
+
+ queue = random.randint(1, self.PF_QUEUE - 1)
+
+ if 'l2tpv3oipv4' is keyword:
+
+ self.dut_testpmd.execute_cmd( 'flow create 0 ingress pattern eth / ipv4 / l2tpv3oip session_id is 1001 / end actions queue index {} / end'.format(queue))
+ qdef.append(queue) #Queue Number as configured in the rule for matched sessionID
+ qdef.append(0) #Default Queue number to check for in case of non matching sessionID
+
+ if 'l2tpv3oipv4_dst' is keyword:
+ self.dut_testpmd.execute_cmd( 'flow create 0 ingress pattern eth / ipv4 dst is 8.8.8.8 / l2tpv3oip session_id is 1001 / end actions queue index {} / end'.format(queue))
+ qdef.append(queue) #Queue Number as configured in the rule for matched sessionID
+ qdef.append(0) #Default Queue number to check for in case of non matching sessionID
+ qdef.append(0) #Default Queue number to check for in case of non matching DIP
+
+
+ if 'l2tpv3oipv4_src' is keyword:
+ self.dut_testpmd.execute_cmd( 'flow create 0 ingress pattern eth / ipv4 src is 1.1.1.1 / l2tpv3oip session_id is 1001 / end actions queue index {} / end'.format(queue))
+ qdef.append(queue) #Queue Number as configured in the rule for matched sessionID
+ qdef.append(0) #Default Queue number to check for in case of non matching sessionID
+ qdef.append(0) #Default Queue number to check for in case of non matching SIP
+
+ if 'l2tpv3oipv4_src_dst' is keyword:
+ self.dut_testpmd.execute_cmd( 'flow create 0 ingress pattern eth / ipv4 src is 5.5.5.5 dst is 2.2.2.2 / l2tpv3oip session_id is 1001 / end actions queue index {} / end'.format(queue))
+ qdef.append(queue) #Queue Number as configured in the rule for matched sessionID
+ qdef.append(0) #Default Queue number to check for in case of non matching sessionID
+ qdef.append(0) #Default Queue number to check for in case of non matching SIP
+ qdef.append(0) #Default Queue number to check for in case of non matching DIP
+
+ if 'l2tpv3oipv6' is keyword:
+ self.dut_testpmd.execute_cmd( 'flow create 0 ingress pattern eth / ipv6 / l2tpv3oip session_id is 1001 / end actions queue index {} / end'.format(queue))
+ qdef.append(queue) #Queue Number as configured in the rule for matched sessionID
+ qdef.append(0) #Default Queue number to check for in case of non matching sessionID
+
+ if 'l2tpv3oipv6_dst' is keyword:
+ self.dut_testpmd.execute_cmd( 'flow create 0 ingress pattern eth / ipv6 dst is 8:7:6:5:4:3:2:1 / l2tpv3oip session_id is 1001 / end actions queue index {} / end'.format(queue))
+ qdef.append(queue) #Queue Number as configured in the rule for matched sessionID
+ qdef.append(0) #Default Queue number to check for in case of non matching sessionID
+ qdef.append(0) #Default Queue number to check for in case of non matching DIP
+
+ if 'l2tpv3oipv6_src' is keyword:
+ self.dut_testpmd.execute_cmd('flow create 0 ingress pattern eth / ipv6 src is 1:2:3:4:5:6:7:8 / l2tpv3oip session_id is 1001 / end actions queue index {} / end'.format(queue))
+ qdef.append(queue) #Queue Number as configured in the rule for matched sessionID
+ qdef.append(0) #Default Queue number to check for in case of non matching sessionID
+ qdef.append(0) #Default Queue number to check for in case of non matching SIP
+
+ if 'l2tpv3oipv6_src_dst' is keyword:
+ self.dut_testpmd.execute_cmd( 'flow create 0 ingress pattern eth / ipv6 src is 2:3:4:5:6:7:8:9 dst is 6:5:4:3:2:1:8:9 / l2tpv3oip session_id is 1001 / end actions queue index {} / end'.format(queue))
+ qdef.append(queue) #Queue Number as configured in the rule for matched sessionID
+ qdef.append(0) #Default Queue number to check for in case of non matching sessionID
+ qdef.append(0) #Default Queue number to check for in case of non matching SIP
+ qdef.append(0) #Default Queue number to check for in case of non matching DIP
+
+ if 'l2tpv3_ipv4_ipv6' is keyword:
+ self.dut_testpmd.execute_cmd( 'flow create 0 ingress pattern eth / ipv4 / l2tpv3oip session_id is 1001 / end actions queue index {} / end'.format(queue))
+ qdef.append(queue) #Queue Number as configured in the rule for matched sessionID
+ qdef.append(0) #Default Queue number to check for in case of non matching sessionID
+ queue = random.randint(1, self.PF_QUEUE - 1)
+ out=self.dut_testpmd.execute_cmd( 'flow create 0 ingress pattern eth / ipv6 / l2tpv3oip session_id is 1001 / end actions queue index {} / end'.format(queue))
+ qdef.append(queue) #Queue Number as configured in the rule for matched sessionID
+ qdef.append(0) #Default Queue number to check for in case of non matching sessionID
+
+ if 'l2tpv3oip_v4src_v6src' is keyword:
+ self.dut_testpmd.execute_cmd( 'flow create 0 ingress pattern eth / ipv4 src is 1.3.5.7 / l2tpv3oip session_id is 1001 / end actions queue index {} / end'.format(queue))
+ qdef.append(queue) #Queue Number as configured in the rule for matched sessionID
+ qdef.append(0) #Default Queue number to check for in case of non matching sessionID
+ qdef.append(0) #Default Queue number to check for in case of non matching IPv4 SIP
+ queue = random.randint(1, self.PF_QUEUE - 1)
+ out=self.dut_testpmd.execute_cmd( 'flow create 0 ingress pattern eth / ipv6 src is 1:3:5:7:9:2:4:6 / l2tpv3oip session_id is 1001 / end actions queue index {} / end'.format(queue))
+ qdef.append(queue) #Queue Number as configured in the rule for matched sessionID
+ qdef.append(0) #Default Queue number to check for in case of non matching sessionID
+ qdef.append(0) #Default Queue number to check for in case of non matching IPv6 SIP
+
+ if 'l2tpv3oip_v4dst_v6dst' is keyword:
+ self.dut_testpmd.execute_cmd( 'flow create 0 ingress pattern eth / ipv4 dst is 9.7.5.3 / l2tpv3oip session_id is 1001 / end actions queue index {} / end'.format(queue))
+ qdef.append(queue) #Queue Number as configured in the rule for matched sessionID
+ qdef.append(0) #Default Queue number to check for in case of non matching sessionID
+ qdef.append(0) #Default Queue number to check for in case of non matching IPv4 DIP
+ queue = random.randint(1, self.PF_QUEUE - 1)
+ self.dut_testpmd.execute_cmd( 'flow create 0 ingress pattern eth / ipv6 dst is 2:4:6:8:1:3:5:7 / l2tpv3oip session_id is 1001 / end actions queue index {} / end'.format(queue))
+ qdef.append(queue) #Queue Number as configured in the rule for matched sessionID
+ qdef.append(0) #Default Queue number to check for in case of non matching sessionID
+ qdef.append(0) #Default Queue number to check for in case of non matching IPv6 DIP
+
+ if 'l2tpv3oip_v4srcdst_v6srcdst' is keyword:
+ self.dut_testpmd.execute_cmd( 'flow create 0 ingress pattern eth / ipv4 src is 9.8.7.6 dst is 4.5.6.7 / l2tpv3oip session_id is 1001 / end actions queue index {} / end'.format(queue))
+ qdef.append(queue) #Queue Number as configured in the rule for matched sessionID
+ qdef.append(0) #Default Queue number to check for in case of non matching sessionID
+ qdef.append(0) #Default Queue number to check for in case of non matching IPv4 SIP
+ qdef.append(0) #Default Queue number to check for in case of non matching IPv4 DIP
+ queue = random.randint(1, self.PF_QUEUE - 1)
+ self.dut_testpmd.execute_cmd( 'flow create 0 ingress pattern eth / ipv6 src is 1:2:3:4:5:6:7:8 dst is 9:8:7:6:5:4:3:2 / l2tpv3oip session_id is 1001 / end actions queue index {} / end'.format(queue))
+ qdef.append(queue) #Queue Number as configured in the rule for matched sessionID
+ qdef.append(0) #Default Queue number to check for in case of non matching sessionID
+ qdef.append(0) #Default Queue number to check for in case of non matching IPv6 SIP
+ qdef.append(0) #Default Queue number to check for in case of non matching IPv6 DIP
+
+ if 'l2tpv3oip_v4_v6_udp' is keyword:
+ self.dut_testpmd.execute_cmd( 'flow create 0 ingress pattern eth / ipv4 / l2tpv3oip session_id is 1001 / end actions queue index {} / end'.format(queue))
+ qdef.append(queue) #Queue Number as configured in the rule for matched sessionID
+ qdef.append(0) #Default Queue number to check for in case of non matching sessionID
+ queue = random.randint(1, self.PF_QUEUE - 1)
+ self.dut_testpmd.execute_cmd( 'flow create 0 ingress pattern eth / ipv6 / l2tpv3oip session_id is 1001 / end actions queue index {} / end'.format(queue))
+ qdef.append(queue) #Queue Number as configured in the rule for matched sessionID
+ qdef.append(0) #Default Queue number to check for in case of non matching sessionID
+ queue = random.randint(1, self.PF_QUEUE - 1)
+ self.dut_testpmd.execute_cmd( 'flow create 0 ingress pattern eth / ipv4 / udp / end actions queue index {} / end'.format(queue))
+ qdef.append(queue) #Queue Number as configured in the rule
+
+ qnum=self.send_and_verify(keyword)
+ for i in range(len(qdef)):
+ self.verify(qdef[i] == qnum[i], "Receive packet from wrong queue!!!")
+ self.dut_testpmd.execute_cmd("flow flush 0") # Delete all the flow director rules
+
+ def test_l2tpv3oipv4(self):
+ """
+ L2TPv3 PAY is supported by NVM with profile updated.
+ Default flow director input set is sessionID
+ flow director works to send matched packets to configured queue,
+ otherwise to queue 0.
+ """
+ keyword = 'l2tpv3oipv4'
+ crlwords_ipv4=range(44,46)
+ crlwords_ipv6=None
+ self.run_fd_test(keyword,crlwords_ipv4,crlwords_ipv6)
+
+ def test_l2tpv3oipv4_src(self):
+ """
+ Flow director input set is sessionID + SIP for pctype 28
+ """
+
+ crlwords_ipv4=list(range(15,17))+list(range(44,46))
+ crlwords_ipv6=None
+ keyword = 'l2tpv3oipv4_src'
+ self.run_fd_test(keyword,crlwords_ipv4,crlwords_ipv6)
+
+ def test_l2tpv3oipv4_dst(self):
+ """
+ Flow director input set is sessionID + DIP for pctype 28
+ """
+ crlwords_ipv4=list(range(27,29))+list(range(44,46))
+ crlwords_ipv6=None
+ keyword = 'l2tpv3oipv4_dst'
+ self.run_fd_test(keyword,crlwords_ipv4,crlwords_ipv6)
+
+ def test_l2tpv3oipv4_src_dst(self):
+ """
+ Flow director input set is sessionID + SIP + DIP for pctype 28
+ """
+ crlwords_ipv4=list(range(15,17))+list(range(27,29))+list(range(44,46))
+ crlwords_ipv6=None
+ keyword = 'l2tpv3oipv4_src_dst'
+ self.run_fd_test(keyword,crlwords_ipv4,crlwords_ipv6)
+
+ def test_l2tpv3oipv6(self):
+
+ """
+ Flow director input set is sessionID for pctyp 38
+ """
+ crlwords_ipv6=range(44,46)
+ crlwords_ipv4=None
+ keyword = 'l2tpv3oipv6'
+ self.run_fd_test(keyword,crlwords_ipv4,crlwords_ipv6)
+
+ def test_l2tpv3oipv6_dst(self):
+ """
+ Flow director input set is sessionID + DIP for pctype 38
+ """
+ crlwords_ipv4=None
+ crlwords_ipv6=list(range(21,29))+list(range(44,46))
+ keyword = 'l2tpv3oipv6_dst'
+ self.run_fd_test(keyword,crlwords_ipv4,crlwords_ipv6)
+
+ def test_l2tpv3oipv6_src(self):
+ """
+ Flow director input set is sessionID + SIP for pctype 38
+ """
+ crlwords_ipv4=None
+ crlwords_ipv6=list(range(13,21))+list(range(44,46))
+ keyword = 'l2tpv3oipv6_src'
+ self.run_fd_test(keyword,crlwords_ipv4,crlwords_ipv6)
+
+ def test_l2tpv3oipv6_src_dst(self):
+ """
+ Flow director input set is sessionID + SIP + DIP for pctype 38
+ """
+ crlwords_ipv4=None
+ crlwords_ipv6=list(range(13,29))+list(range(44,46))
+ keyword = 'l2tpv3oipv6_src_dst'
+ self.run_fd_test(keyword,crlwords_ipv4,crlwords_ipv6)
+
+ def test_l2tpv3_ipv4_ipv6(self):
+ """
+ Flow director input set is sessionID for pctype 28 and 38
+ """
+ crlwords_ipv4=range(44,46)
+ crlwords_ipv6=range(44,46)
+ keyword = 'l2tpv3_ipv4_ipv6'
+ self.run_fd_test(keyword,crlwords_ipv4,crlwords_ipv6)
+
+ def test_l2tpv3oip_v4src_v6src(self):
+ """
+ Flow director input set is sessionID + SIP for pctype 28 and 38
+ """
+ crlwords_ipv4=list(range(15,17))+list(range(44,46))
+ crlwords_ipv6=list(range(13,21))+list(range(44,46))
+ keyword = 'l2tpv3oip_v4src_v6src'
+ self.run_fd_test(keyword,crlwords_ipv4,crlwords_ipv6)
+
+ def test_l2tpv3oip_v4dst_v6dst(self):
+ """
+ Flow director input set is sessionID + DIP for pctype 28 and 38
+ """
+ crlwords_ipv4=list(range(27,29))+list(range(44,46))
+ crlwords_ipv6=list(range(21,29))+list(range(44,46))
+ keyword = 'l2tpv3oip_v4dst_v6dst'
+ self.run_fd_test(keyword,crlwords_ipv4,crlwords_ipv6)
+
+ def test_l2tpv3oip_v4srcdst_v6srcdst(self):
+ """
+ Flow director input set is sessionID + SIP + DIP for pctype 28 and 38
+ """
+ crlwords_ipv4=list(range(15,17))+list(range(27,29))+list(range(44,46))
+ crlwords_ipv6=list(range(13,29))+list(range(44,46))
+ keyword = 'l2tpv3oip_v4srcdst_v6srcdst'
+ self.run_fd_test(keyword,crlwords_ipv4,crlwords_ipv6)
+
+ def test_l2tpv3oip_v4_v6_udp(self):
+ """
+ Flow director input set is sessionID for pctype 28 and 38
+ """
+ crlwords_ipv4=range(44,46)
+ crlwords_ipv6=range(44,46)
+ keyword = 'l2tpv3oip_v4_v6_udp'
+ self.run_fd_test(keyword,crlwords_ipv4,crlwords_ipv6)
+
+ def test_l2tpv3oip_load_profile(self):
+ """
+ Test to load the profile.
+ Step1: Check if it is already loaded, if loaded delete the same
+ Step2: Load the profile
+ """
+ self.dut_testpmd.execute_cmd('port stop 0')
+
+ out=self.dut_testpmd.execute_cmd('ddp get list 0')
+ if "L2TPv3oIP with L4 payload" in out:
+ print "Profile is already loaded!!"
+ out=self.dut_testpmd.execute_cmd('ddp del 0 /tmp/l2tpv3oip-l4.bak')
+ out=self.dut_testpmd.execute_cmd('ddp add 0 /tmp/l2tpv3oip-l4.pkg,/tmp/l2tpv3oip-l4.bak')
+ out=self.dut_testpmd.execute_cmd('ddp get list 0')
+ self.verify("L2TPv3oIP with L4 payload" in out,"Failed to Load DDP profile ")
+
+ def test_l2tpv3oip_delete_profile(self):
+ """
+ Test to delete the profile.
+ Step1: Check if profile is loaded, if loaded, delete the same
+ Step2: Add the profile again
+ """
+ self.dut_testpmd.execute_cmd('port stop 0')
+ out=self.dut_testpmd.execute_cmd('ddp get list 0')
+
+ if "L2TPv3oIP with L4 payload" not in out:
+ out=self.dut_testpmd.execute_cmd('ddp add 0 /tmp/l2tpv3oip-l4.pkg,/tmp/l2tpv3oip-l4.bak')
+ out=self.dut_testpmd.execute_cmd('ddp get list 0')
+ self.verify("L2TPv3oIP with L4 payload" in out,"Error in loading the Profile")
+ out=self.dut_testpmd.execute_cmd('ddp del 0 /tmp/l2tpv3oip-l4.bak')
+ print out
+ out=self.dut_testpmd.execute_cmd('ddp get list 0')
+ print out
+ self.verify("Profile number is: 0" in out,"Error in @@deleting the Profile !!")
+ out=self.dut_testpmd.execute_cmd('ddp add 0 /tmp/l2tpv3oip-l4.pkg,/tmp/l2tpv3oip-l4.bak')
+ out=self.dut_testpmd.execute_cmd('ddp get list 0')
+ self.verify("L2TPv3oIP with L4 payload" in out,"Error in loading the Profile")
+
+ def test_l2tpv3oip_delete_rules(self):
+ """
+ Test to Add, delete and flush flow director rules
+ Step1: Add 3 rules, flow list , all rules are listed
+ Step2: Delete 1 rule, flow list, The first rule should not be listed
+ Step3: Flush all rules , flow list, No rules should be listed.
+ """
+ queue = random.randint(1, self.PF_QUEUE - 1)
+ self.dut_testpmd.execute_cmd( 'flow create 0 ingress pattern eth / ipv4 / l2tpv3oip session_id is 1001 / end actions queue index {} / end'.format(queue))
+ self.dut_testpmd.execute_cmd( 'flow create 0 ingress pattern eth / ipv4 / l2tpv3oip session_id is 1002 / end actions queue index {} / end'.format(queue))
+ self.dut_testpmd.execute_cmd( 'flow create 0 ingress pattern eth / ipv4 / l2tpv3oip session_id is 1003 / end actions queue index {} / end'.format(queue))
+ out=self.dut_testpmd.execute_cmd('flow list 0')
+ verify=out.splitlines()
+ self.verify(len(verify)== 6,"Flow rules not added")
+ self.dut_testpmd.execute_cmd( 'flow destroy 0 rule 0')
+ out=self.dut_testpmd.execute_cmd('flow list 0')
+ verify=out.splitlines()
+ self.verify(len(verify)== 5,"Flow rules not destroyed")
+ self.dut_testpmd.execute_cmd( 'flow flush 0')
+ out=self.dut_testpmd.execute_cmd('flow list 0')
+ verify=out.splitlines()
+ self.verify(len(verify)== 1,"Flow rules not destroyed")
+
+ def tear_down(self):
+ self.dut_testpmd.execute_cmd('stop')
+ out = self.dut_testpmd.execute_cmd('ddp get list 0')
+ if "Profile number is: 0" not in out:
+ self.dut_testpmd.execute_cmd('port stop all')
+ time.sleep(1)
+ self.dut_testpmd.execute_cmd('ddp del 0 /tmp/l2tpv3oip-l4.bak')
+ out = self.dut_testpmd.execute_cmd('ddp get list 0')
+ self.verify("Profile number is: 0" in out,
+ "Failed to delete ddp profile!!!")
+ self.dut_testpmd.execute_cmd('port start all')
+ self.dut_testpmd.quit()
+
+ def tear_down_all(self):
+ pass
+
--
2.17.1
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [dts] [PATCH] L2TPv3 test script
2020-02-20 14:32 [dts] [PATCH] L2TPv3 test script Varalakshmi
@ 2020-02-24 5:15 ` Peng, Yuan
2020-02-25 1:22 ` Tu, Lijuan
1 sibling, 0 replies; 3+ messages in thread
From: Peng, Yuan @ 2020-02-24 5:15 UTC (permalink / raw)
To: S, Varalakshmi, dts; +Cc: S, Varalakshmi, Peng, Yuan
Acked by Peng, Yuan <yuan.peng@intel.com>
-----Original Message-----
From: dts <dts-bounces@dpdk.org> On Behalf Of Varalakshmi
Sent: Thursday, February 20, 2020 10:33 PM
To: dts@dpdk.org
Cc: S, Varalakshmi <varalakshmi.s@intel.com>
Subject: [dts] [PATCH] L2TPv3 test script
diff --git a/tests/TestSuite_DdpL2tpv3.py b/tests/TestSuite_DdpL2tpv3.py new file mode 100644 index 0000000..78d8001
--- /dev/null
+++ b/tests/TestSuite_DdpL2tpv3.py
@@ -0,0 +1,485 @@
+#<COPYRIGHT_TAG>
+import time
+import re
+import sys
+import utils
+from test_case import TestCase
+from pmd_output import PmdOutput
+from settings import get_nic_name
+from scapy.all import *
+import random
+class TestDdpL2tpv3(TestCase):
+
+ def set_up_all(self):
+ self.dut_ports = self.dut.get_ports(self.nic)
+ profile_file = 'dep/l2tpv3oip-l4.pkg'
+ profile_dst = "/tmp/"
+ self.dut.session.copy_file_to(profile_file, profile_dst)
+ out = self.dut.send_expect("cat config/common_base", "]# ", 10)
+ self.PF_Q_strip = 'CONFIG_RTE_LIBRTE_I40E_QUEUE_NUM_PER_PF'
+ pattern = "(%s=)(\d*)" % self.PF_Q_strip
+ self.PF_QUEUE = self.element_strip(out, pattern)
+ self.used_dut_port = self.dut_ports[0]
+ tester_port = self.tester.get_local_port(self.used_dut_port)
+ self.tester_intf = self.tester.get_interface(tester_port)
+ self.dut_testpmd = PmdOutput(self.dut)
+
+ def set_up(self):
+ self.load_profile()
+
+ def element_strip(self, out, pattern):
+ """
+ Strip and get queue number.
+ """
+
+ s = re.compile(pattern)
+ res = s.search(out)
+ if res is None:
+ print 'Queue number not in output.'
+ return None
+ else:
+ result = res.group(2)
+ return int(result)
+
+
+ def load_profile(self):
+ """
+ Load profile to update FVL configuration tables, profile will be
+ stored in binary file.
+ """
+ self.dut_testpmd.start_testpmd(
+ "Default", "--pkt-filter-mode=perfect --port-topology=chained \
+ --txq=%s --rxq=%s --disable-rss"
+ % (self.PF_QUEUE, self.PF_QUEUE))
+ self.dut_testpmd.execute_cmd('port stop 0')
+ time.sleep(1)
+ self.dut_testpmd.execute_cmd(
+ 'ddp add 0 /tmp/l2tpv3oip-l4.pkg,/tmp/l2tpv3oip-l4.bak')
+ out = self.dut_testpmd.execute_cmd('ddp get list 0')
+ self.verify("Profile number is: 1" in out,
+ "Failed to load ddp profile!!!")
+ self.dut_testpmd.execute_cmd('port start 0')
+
+ def l2tpv3pkts(self, keyword):
+ """
+ Generate L2TPv3oIPv4, L2TPv3oIPv6 and UDP packets.
+ """
+ pkt = []
+ if keyword is not 'def':
+ if keyword is "l2tpv3oipv4":
+ pkt.append("Ether()/IP(proto=115)/Raw('\\x00\\x00\\x03\\xe9')")
+ pkt.append("Ether()/IP(proto=115)/Raw('\\x00\\x00\\x03\\fe9')")
+ if keyword is "l2tpv3oipv4_dst":
+ pkt.append("Ether()/IP(dst=\"8.8.8.8\",proto=115)/Raw('\\x00\\x00\\x03\\xe9')")
+ pkt.append("Ether()/IP(dst=\"8.8.8.8\",proto=115)/Raw('\\x00\\x00\\x03\\xb9')")
+ pkt.append("Ether()/IP(dst=\"88.8.8.8\",proto=115)/Raw('\\x00\\x00\\x03\\xe9')")
+ if keyword is "l2tpv3oipv4_src":
+ pkt.append("Ether()/IP(src=\"1.1.1.1\",proto=115)/Raw('\\x00\\x00\\x03\\xe9')")
+ pkt.append("Ether()/IP(src=\"1.1.1.1\",proto=115)/Raw('\\x00\\x00\\x03\\xa9')")
+ pkt.append("Ether()/IP(src=\"11.1.1.1\",proto=115)/Raw('\\x00\\x00\\x03\\xe9')")
+ if keyword is "l2tpv3oipv4_src_dst":
+ pkt.append("Ether()/IP(src=\"5.5.5.5\",dst=\"2.2.2.2\",proto=115)/Raw('\\x00\\x00\\x03\\xe9')")
+ pkt.append("Ether()/IP(src=\"5.5.5.5\",dst=\"2.2.2.2\",proto=115)/Raw('\\x00\\x00\\x03\\xf9')")
+ pkt.append("Ether()/IP(src=\"55.5.5.5\",dst=\"2.2.2.2\",proto=115)/Raw('\\x00\\x00\\x03\\xe9')")
+ pkt.append("Ether()/IP(src=\"5.5.5.5\",dst=\"22.2.2.2\",proto=115)/Raw('\\x00\\x00\\x03\\xe9')")
+ if keyword is "l2tpv3oipv6":
+ pkt.append("Ether()/IPv6(nh=115)/Raw('\\x00\\x00\\x03\\xe9')")
+ pkt.append("Ether()/IPv6(nh=115)/Raw('\\x00\\x00\\x03\\xc9')")
+ if keyword is "l2tpv3oipv6_dst":
+ pkt.append("Ether()/IPv6(dst=\"8:7:6:5:4:3:2:1\",nh=115)/Raw('\\x00\\x00\\x03\\xe9')")
+ pkt.append("Ether()/IPv6(dst=\"8:7:6:5:4:3:2:1\",nh=115)/Raw('\\x00\\x00\\x03\\xd9')")
+ pkt.append("Ether()/IPv6(dst=\"8888:7:6:5:4:3:2:1\",nh=115)/Raw('\\x00\\x00\\x03\\xe9')")
+ if keyword is "l2tpv3oipv6_src":
+ pkt.append("Ether()/IPv6(src=\"1:2:3:4:5:6:7:8\",nh=115)/Raw('\\x00\\x00\\x03\\xe9')")
+ pkt.append("Ether()/IPv6(src=\"1:2:3:4:5:6:7:8\",nh=115)/Raw('\\x00\\x00\\x03\\xf9')")
+ pkt.append("Ether()/IPv6(src=\"1111:2:3:4:5:6:7:8\",nh=115)/Raw('\\x00\\x00\\x03\\xe9')")
+ if keyword is "l2tpv3oipv6_src_dst":
+ pkt.append("Ether()/IPv6(src=\"2:3:4:5:6:7:8:9\",dst=\"6:5:4:3:2:1:8:9\",nh=115)/Raw('\\x00\\x00\\x03\\xe9')")
+ pkt.append("Ether()/IPv6(src=\"2:3:4:5:6:7:8:9\",dst=\"6:5:4:3:2:1:8:9\",nh=115)/Raw('\\x00\\x00\\x03\\xf9')")
+ pkt.append("Ether()/IPv6(src=\"2222:3:4:5:6:7:8:9\",dst=\"6:5:4:3:2:1:8:9\",nh=115)/Raw('\\x00\\x00\\x03\\xe9')")
+ pkt.append("Ether()/IPv6(src=\"2:3:4:5:6:7:8:9\",dst=\"6666:5:4:3:2:1:8:9\",nh=115)/Raw('\\x00\\x00\\x03\\xe9')")
+ if keyword is "l2tpv3_ipv4_ipv6":
+ pkt.append("Ether()/IP(proto=115)/Raw('\\x00\\x00\\x03\\xe9')")
+ pkt.append("Ether()/IP(proto=115)/Raw('\\x00\\x00\\x03\\xf9')")
+ pkt.append("Ether()/IPv6(nh=115)/Raw('\\x00\\x00\\x03\\xe9')")
+ pkt.append("Ether()/IPv6(nh=115)/Raw('\\x00\\x00\\x03\\xf9')")
+ if keyword is "l2tpv3oip_v4src_v6src" :
+ pkt.append("Ether()/IP(src=\"1.3.5.7\",proto=115)/Raw('\\x00\\x00\\x03\\xe9')")
+ pkt.append("Ether()/IP(src=\"1.3.5.7\",proto=115)/Raw('\\x00\\x00\\x03\\xa9')")
+ pkt.append("Ether()/IP(src=\"11.3.5.7\",proto=115)/Raw('\\x00\\x00\\x03\\xe9')")
+ pkt.append("Ether()/IPv6(src=\"1:3:5:7:9:2:4:6\",nh=115)/Raw('\\x00\\x00\\x03\\xe9')")
+ pkt.append("Ether()/IPv6(src=\"1:3:5:7:9:2:4:6\",nh=115)/Raw('\\x00\\x00\\x03\\xf9')")
+ pkt.append("Ether()/IPv6(src=\"1111:3:5:7:9:2:4:6\",nh=115)/Raw('\\x00\\x00\\x03\\xe9')")
+ if keyword is "l2tpv3oip_v4dst_v6dst":
+ pkt.append("Ether()/IP(dst=\"9.7.5.3\",proto=115)/Raw('\\x00\\x00\\x03\\xe9')")
+ pkt.append("Ether()/IP(dst=\"9.7.5.3\",proto=115)/Raw('\\x00\\x00\\x03\\xb9')")
+ pkt.append("Ether()/IP(dst=\"99.7.5.3\",proto=115)/Raw('\\x00\\x00\\x03\\xe9')")
+ pkt.append("Ether()/IPv6(dst=\"2:4:6:8:1:3:5:7\",nh=115)/Raw('\\x00\\x00\\x03\\xe9')")
+ pkt.append("Ether()/IPv6(dst=\"2:4:6:8:1:3:5:7\",nh=115)/Raw('\\x00\\x00\\x03\\xd9')")
+ pkt.append("Ether()/IPv6(dst=\"2222:4:6:8:1:3:5:7\",nh=115)/Raw('\\x00\\x00\\x03\\xe9')")
+ if keyword is "l2tpv3oip_v4srcdst_v6srcdst":
+ pkt.append("Ether()/IP(src=\"9.8.7.6\",dst=\"4.5.6.7\",proto=115)/Raw('\\x00\\x00\\x03\\xe9')")
+ pkt.append("Ether()/IP(src=\"9.8.7.6\",dst=\"4.5.6.7\",proto=115)/Raw('\\x00\\x00\\x03\\xf9')")
+ pkt.append("Ether()/IP(src=\"99.8.7.6\",dst=\"4.5.6.7\",proto=115)/Raw('\\x00\\x00\\x03\\xe9')")
+ pkt.append("Ether()/IP(src=\"9.8.7.6\",dst=\"44.5.6.7\",proto=115)/Raw('\\x00\\x00\\x03\\xe9')")
+ pkt.append("Ether()/IPv6(src=\"1:2:3:4:5:6:7:8\",dst=\"9:8:7:6:5:4:3:2\",nh=115)/Raw('\\x00\\x00\\x03\\xe9')")
+ pkt.append("Ether()/IPv6(src=\"1:2:3:4:5:6:7:8\",dst=\"9:8:7:6:5:4:3:2\",nh=115)/Raw('\\x00\\x00\\x03\\xf9')")
+ pkt.append("Ether()/IPv6(src=\"1111:2:3:4:5:6:7:8\",dst=\"9:8:7:6:5:4:3:2\",nh=115)/Raw('\\x00\\x00\\x03\\xe9')")
+ pkt.append("Ether()/IPv6(src=\"1:2:3:4:5:6:7:8\",dst=\"9999:8:7:6:5:4:3:2\",nh=115)/Raw('\\x00\\x00\\x03\\xe9')")
+ if keyword is "l2tpv3oip_v4_v6_udp":
+ pkt.append("Ether()/IP(dst=\"9.7.5.3\",proto=115)/Raw('\\x00\\x00\\x03\\xe9')")
+ pkt.append("Ether()/IP(dst=\"9.7.5.3\",proto=115)/Raw('\\x00\\x00\\x03\\xb9')")
+ pkt.append("Ether()/IPv6(dst=\"2:4:6:8:1:3:5:7\",nh=115)/Raw('\\x00\\x00\\x03\\xe9')")
+ pkt.append("Ether()/IPv6(dst=\"2:4:6:8:1:3:5:7\",nh=115)/Raw('\\x00\\x00\\x03\\xd9')")
+ pkt.append("Ether()/IP()/UDP()")
+ return pkt
+
+ def send_and_verify(self,keyword='def'):
+ """
+ Send packets and verify result.
+ """
+ pkt = self.l2tpv3pkts(keyword)
+ qnum=[]
+ for i in range(len(pkt)):
+ self.tester.scapy_append('sendp([%s], iface="%s")'%(pkt[i], self.tester_intf))
+ self.tester.scapy_execute()
+ out = self.dut.get_session_output(timeout=2)
+ pattern = "port (\d)/queue (\d{1,2}): received (\d) packets"
+ qnum.append(self.element_strip(out, pattern))
+ return qnum
+
+ def run_fd_test(self, keyword,crlwords_ipv4,crlwords_ipv6):
+ """
+ Configure Flow director rules.
+
+ keywords: keywords have IPv4/IPv6 SIP DIP and UDP
+ """
+ self.dut_testpmd.execute_cmd('port stop 0')
+ self.dut_testpmd.execute_cmd('port config 0 pctype 28 fdir_inset clear all')
+ self.dut_testpmd.execute_cmd('port config 0 pctype 38 fdir_inset clear all')
+ if crlwords_ipv4 is not None:
+ for field in crlwords_ipv4:
+ self.dut_testpmd.execute_cmd('port config 0 pctype 28 fdir_inset set field {}'.format(field))
+ if crlwords_ipv6 is not None:
+ for field in crlwords_ipv6:
+ self.dut_testpmd.execute_cmd('port config 0 pctype 38 fdir_inset set field {}'.format(field))
+ self.dut_testpmd.execute_cmd('port start 0')
+ self.dut_testpmd.execute_cmd('start')
+ self.dut_testpmd.execute_cmd('set verbose 1')
+ qdef=[]
+ qnum = self.send_and_verify(keyword)
+ for i in range(len(qnum)):
+ self.verify(qnum[i] == 0, "Receive packet from wrong
+queue!!!")
+
+ queue = random.randint(1, self.PF_QUEUE - 1)
+
+ if 'l2tpv3oipv4' is keyword:
+
+ self.dut_testpmd.execute_cmd( 'flow create 0 ingress pattern eth / ipv4 / l2tpv3oip session_id is 1001 / end actions queue index {} / end'.format(queue))
+ qdef.append(queue) #Queue Number as configured in the rule for matched sessionID
+ qdef.append(0) #Default Queue number to check for in case of non
+matching sessionID
+
+ if 'l2tpv3oipv4_dst' is keyword:
+ self.dut_testpmd.execute_cmd( 'flow create 0 ingress pattern eth / ipv4 dst is 8.8.8.8 / l2tpv3oip session_id is 1001 / end actions queue index {} / end'.format(queue))
+ qdef.append(queue) #Queue Number as configured in the rule for matched sessionID
+ qdef.append(0) #Default Queue number to check for in case of non matching sessionID
+ qdef.append(0) #Default Queue number to check for in case of non
+matching DIP
+
+
+ if 'l2tpv3oipv4_src' is keyword:
+ self.dut_testpmd.execute_cmd( 'flow create 0 ingress pattern eth / ipv4 src is 1.1.1.1 / l2tpv3oip session_id is 1001 / end actions queue index {} / end'.format(queue))
+ qdef.append(queue) #Queue Number as configured in the rule for matched sessionID
+ qdef.append(0) #Default Queue number to check for in case of non matching sessionID
+ qdef.append(0) #Default Queue number to check for in case of non
+matching SIP
+
+ if 'l2tpv3oipv4_src_dst' is keyword:
+ self.dut_testpmd.execute_cmd( 'flow create 0 ingress pattern eth / ipv4 src is 5.5.5.5 dst is 2.2.2.2 / l2tpv3oip session_id is 1001 / end actions queue index {} / end'.format(queue))
+ qdef.append(queue) #Queue Number as configured in the rule for matched sessionID
+ qdef.append(0) #Default Queue number to check for in case of non matching sessionID
+ qdef.append(0) #Default Queue number to check for in case of non matching SIP
+ qdef.append(0) #Default Queue number to check for in case of non
+matching DIP
+
+ if 'l2tpv3oipv6' is keyword:
+ self.dut_testpmd.execute_cmd( 'flow create 0 ingress pattern eth / ipv6 / l2tpv3oip session_id is 1001 / end actions queue index {} / end'.format(queue))
+ qdef.append(queue) #Queue Number as configured in the rule for matched sessionID
+ qdef.append(0) #Default Queue number to check for in case of non
+matching sessionID
+
+ if 'l2tpv3oipv6_dst' is keyword:
+ self.dut_testpmd.execute_cmd( 'flow create 0 ingress pattern eth / ipv6 dst is 8:7:6:5:4:3:2:1 / l2tpv3oip session_id is 1001 / end actions queue index {} / end'.format(queue))
+ qdef.append(queue) #Queue Number as configured in the rule for matched sessionID
+ qdef.append(0) #Default Queue number to check for in case of non matching sessionID
+ qdef.append(0) #Default Queue number to check for in case of non
+matching DIP
+
+ if 'l2tpv3oipv6_src' is keyword:
+ self.dut_testpmd.execute_cmd('flow create 0 ingress pattern eth / ipv6 src is 1:2:3:4:5:6:7:8 / l2tpv3oip session_id is 1001 / end actions queue index {} / end'.format(queue))
+ qdef.append(queue) #Queue Number as configured in the rule for matched sessionID
+ qdef.append(0) #Default Queue number to check for in case of non matching sessionID
+ qdef.append(0) #Default Queue number to check for in case of non
+matching SIP
+
+ if 'l2tpv3oipv6_src_dst' is keyword:
+ self.dut_testpmd.execute_cmd( 'flow create 0 ingress pattern eth / ipv6 src is 2:3:4:5:6:7:8:9 dst is 6:5:4:3:2:1:8:9 / l2tpv3oip session_id is 1001 / end actions queue index {} / end'.format(queue))
+ qdef.append(queue) #Queue Number as configured in the rule for matched sessionID
+ qdef.append(0) #Default Queue number to check for in case of non matching sessionID
+ qdef.append(0) #Default Queue number to check for in case of non matching SIP
+ qdef.append(0) #Default Queue number to check for in case of non
+matching DIP
+
+ if 'l2tpv3_ipv4_ipv6' is keyword:
+ self.dut_testpmd.execute_cmd( 'flow create 0 ingress pattern eth / ipv4 / l2tpv3oip session_id is 1001 / end actions queue index {} / end'.format(queue))
+ qdef.append(queue) #Queue Number as configured in the rule for matched sessionID
+ qdef.append(0) #Default Queue number to check for in case of non matching sessionID
+ queue = random.randint(1, self.PF_QUEUE - 1)
+ out=self.dut_testpmd.execute_cmd( 'flow create 0 ingress pattern eth / ipv6 / l2tpv3oip session_id is 1001 / end actions queue index {} / end'.format(queue))
+ qdef.append(queue) #Queue Number as configured in the rule for matched sessionID
+ qdef.append(0) #Default Queue number to check for in case of non
+matching sessionID
+
+ if 'l2tpv3oip_v4src_v6src' is keyword:
+ self.dut_testpmd.execute_cmd( 'flow create 0 ingress pattern eth / ipv4 src is 1.3.5.7 / l2tpv3oip session_id is 1001 / end actions queue index {} / end'.format(queue))
+ qdef.append(queue) #Queue Number as configured in the rule for matched sessionID
+ qdef.append(0) #Default Queue number to check for in case of non matching sessionID
+ qdef.append(0) #Default Queue number to check for in case of non matching IPv4 SIP
+ queue = random.randint(1, self.PF_QUEUE - 1)
+ out=self.dut_testpmd.execute_cmd( 'flow create 0 ingress pattern eth / ipv6 src is 1:3:5:7:9:2:4:6 / l2tpv3oip session_id is 1001 / end actions queue index {} / end'.format(queue))
+ qdef.append(queue) #Queue Number as configured in the rule for matched sessionID
+ qdef.append(0) #Default Queue number to check for in case of non matching sessionID
+ qdef.append(0) #Default Queue number to check for in case
+ of non matching IPv6 SIP
+
+ if 'l2tpv3oip_v4dst_v6dst' is keyword:
+ self.dut_testpmd.execute_cmd( 'flow create 0 ingress pattern eth / ipv4 dst is 9.7.5.3 / l2tpv3oip session_id is 1001 / end actions queue index {} / end'.format(queue))
+ qdef.append(queue) #Queue Number as configured in the rule for matched sessionID
+ qdef.append(0) #Default Queue number to check for in case of non matching sessionID
+ qdef.append(0) #Default Queue number to check for in case of non matching IPv4 DIP
+ queue = random.randint(1, self.PF_QUEUE - 1)
+ self.dut_testpmd.execute_cmd( 'flow create 0 ingress pattern eth / ipv6 dst is 2:4:6:8:1:3:5:7 / l2tpv3oip session_id is 1001 / end actions queue index {} / end'.format(queue))
+ qdef.append(queue) #Queue Number as configured in the rule for matched sessionID
+ qdef.append(0) #Default Queue number to check for in case of non matching sessionID
+ qdef.append(0) #Default Queue number to check for in case
+ of non matching IPv6 DIP
+
+ if 'l2tpv3oip_v4srcdst_v6srcdst' is keyword:
+ self.dut_testpmd.execute_cmd( 'flow create 0 ingress pattern eth / ipv4 src is 9.8.7.6 dst is 4.5.6.7 / l2tpv3oip session_id is 1001 / end actions queue index {} / end'.format(queue))
+ qdef.append(queue) #Queue Number as configured in the rule for matched sessionID
+ qdef.append(0) #Default Queue number to check for in case of non matching sessionID
+ qdef.append(0) #Default Queue number to check for in case of non matching IPv4 SIP
+ qdef.append(0) #Default Queue number to check for in case of non matching IPv4 DIP
+ queue = random.randint(1, self.PF_QUEUE - 1)
+ self.dut_testpmd.execute_cmd( 'flow create 0 ingress pattern eth / ipv6 src is 1:2:3:4:5:6:7:8 dst is 9:8:7:6:5:4:3:2 / l2tpv3oip session_id is 1001 / end actions queue index {} / end'.format(queue))
+ qdef.append(queue) #Queue Number as configured in the rule for matched sessionID
+ qdef.append(0) #Default Queue number to check for in case of non matching sessionID
+ qdef.append(0) #Default Queue number to check for in case of non matching IPv6 SIP
+ qdef.append(0) #Default Queue number to check for in case
+ of non matching IPv6 DIP
+
+ if 'l2tpv3oip_v4_v6_udp' is keyword:
+ self.dut_testpmd.execute_cmd( 'flow create 0 ingress pattern eth / ipv4 / l2tpv3oip session_id is 1001 / end actions queue index {} / end'.format(queue))
+ qdef.append(queue) #Queue Number as configured in the rule for matched sessionID
+ qdef.append(0) #Default Queue number to check for in case of non matching sessionID
+ queue = random.randint(1, self.PF_QUEUE - 1)
+ self.dut_testpmd.execute_cmd( 'flow create 0 ingress pattern eth / ipv6 / l2tpv3oip session_id is 1001 / end actions queue index {} / end'.format(queue))
+ qdef.append(queue) #Queue Number as configured in the rule for matched sessionID
+ qdef.append(0) #Default Queue number to check for in case of non matching sessionID
+ queue = random.randint(1, self.PF_QUEUE - 1)
+ self.dut_testpmd.execute_cmd( 'flow create 0 ingress pattern eth / ipv4 / udp / end actions queue index {} / end'.format(queue))
+ qdef.append(queue) #Queue Number as configured in the rule
+
+ qnum=self.send_and_verify(keyword)
+ for i in range(len(qdef)):
+ self.verify(qdef[i] == qnum[i], "Receive packet from wrong queue!!!")
+ self.dut_testpmd.execute_cmd("flow flush 0") # Delete all the
+flow director rules
+
+ def test_l2tpv3oipv4(self):
+ """
+ L2TPv3 PAY is supported by NVM with profile updated.
+ Default flow director input set is sessionID
+ flow director works to send matched packets to configured queue,
+ otherwise to queue 0.
+ """
+ keyword = 'l2tpv3oipv4'
+ crlwords_ipv4=range(44,46)
+ crlwords_ipv6=None
+ self.run_fd_test(keyword,crlwords_ipv4,crlwords_ipv6)
+
+ def test_l2tpv3oipv4_src(self):
+ """
+ Flow director input set is sessionID + SIP for pctype 28
+ """
+
+ crlwords_ipv4=list(range(15,17))+list(range(44,46))
+ crlwords_ipv6=None
+ keyword = 'l2tpv3oipv4_src'
+ self.run_fd_test(keyword,crlwords_ipv4,crlwords_ipv6)
+
+ def test_l2tpv3oipv4_dst(self):
+ """
+ Flow director input set is sessionID + DIP for pctype 28
+ """
+ crlwords_ipv4=list(range(27,29))+list(range(44,46))
+ crlwords_ipv6=None
+ keyword = 'l2tpv3oipv4_dst'
+ self.run_fd_test(keyword,crlwords_ipv4,crlwords_ipv6)
+
+ def test_l2tpv3oipv4_src_dst(self):
+ """
+ Flow director input set is sessionID + SIP + DIP for pctype 28
+ """
+ crlwords_ipv4=list(range(15,17))+list(range(27,29))+list(range(44,46))
+ crlwords_ipv6=None
+ keyword = 'l2tpv3oipv4_src_dst'
+ self.run_fd_test(keyword,crlwords_ipv4,crlwords_ipv6)
+
+ def test_l2tpv3oipv6(self):
+
+ """
+ Flow director input set is sessionID for pctyp 38
+ """
+ crlwords_ipv6=range(44,46)
+ crlwords_ipv4=None
+ keyword = 'l2tpv3oipv6'
+ self.run_fd_test(keyword,crlwords_ipv4,crlwords_ipv6)
+
+ def test_l2tpv3oipv6_dst(self):
+ """
+ Flow director input set is sessionID + DIP for pctype 38
+ """
+ crlwords_ipv4=None
+ crlwords_ipv6=list(range(21,29))+list(range(44,46))
+ keyword = 'l2tpv3oipv6_dst'
+ self.run_fd_test(keyword,crlwords_ipv4,crlwords_ipv6)
+
+ def test_l2tpv3oipv6_src(self):
+ """
+ Flow director input set is sessionID + SIP for pctype 38
+ """
+ crlwords_ipv4=None
+ crlwords_ipv6=list(range(13,21))+list(range(44,46))
+ keyword = 'l2tpv3oipv6_src'
+ self.run_fd_test(keyword,crlwords_ipv4,crlwords_ipv6)
+
+ def test_l2tpv3oipv6_src_dst(self):
+ """
+ Flow director input set is sessionID + SIP + DIP for pctype 38
+ """
+ crlwords_ipv4=None
+ crlwords_ipv6=list(range(13,29))+list(range(44,46))
+ keyword = 'l2tpv3oipv6_src_dst'
+ self.run_fd_test(keyword,crlwords_ipv4,crlwords_ipv6)
+
+ def test_l2tpv3_ipv4_ipv6(self):
+ """
+ Flow director input set is sessionID for pctype 28 and 38
+ """
+ crlwords_ipv4=range(44,46)
+ crlwords_ipv6=range(44,46)
+ keyword = 'l2tpv3_ipv4_ipv6'
+ self.run_fd_test(keyword,crlwords_ipv4,crlwords_ipv6)
+
+ def test_l2tpv3oip_v4src_v6src(self):
+ """
+ Flow director input set is sessionID + SIP for pctype 28 and 38
+ """
+ crlwords_ipv4=list(range(15,17))+list(range(44,46))
+ crlwords_ipv6=list(range(13,21))+list(range(44,46))
+ keyword = 'l2tpv3oip_v4src_v6src'
+ self.run_fd_test(keyword,crlwords_ipv4,crlwords_ipv6)
+
+ def test_l2tpv3oip_v4dst_v6dst(self):
+ """
+ Flow director input set is sessionID + DIP for pctype 28 and 38
+ """
+ crlwords_ipv4=list(range(27,29))+list(range(44,46))
+ crlwords_ipv6=list(range(21,29))+list(range(44,46))
+ keyword = 'l2tpv3oip_v4dst_v6dst'
+ self.run_fd_test(keyword,crlwords_ipv4,crlwords_ipv6)
+
+ def test_l2tpv3oip_v4srcdst_v6srcdst(self):
+ """
+ Flow director input set is sessionID + SIP + DIP for pctype 28 and 38
+ """
+ crlwords_ipv4=list(range(15,17))+list(range(27,29))+list(range(44,46))
+ crlwords_ipv6=list(range(13,29))+list(range(44,46))
+ keyword = 'l2tpv3oip_v4srcdst_v6srcdst'
+ self.run_fd_test(keyword,crlwords_ipv4,crlwords_ipv6)
+
+ def test_l2tpv3oip_v4_v6_udp(self):
+ """
+ Flow director input set is sessionID for pctype 28 and 38
+ """
+ crlwords_ipv4=range(44,46)
+ crlwords_ipv6=range(44,46)
+ keyword = 'l2tpv3oip_v4_v6_udp'
+ self.run_fd_test(keyword,crlwords_ipv4,crlwords_ipv6)
+
+ def test_l2tpv3oip_load_profile(self):
+ """
+ Test to load the profile.
+ Step1: Check if it is already loaded, if loaded delete the same
+ Step2: Load the profile
+ """
+ self.dut_testpmd.execute_cmd('port stop 0')
+
+ out=self.dut_testpmd.execute_cmd('ddp get list 0')
+ if "L2TPv3oIP with L4 payload" in out:
+ print "Profile is already loaded!!"
+ out=self.dut_testpmd.execute_cmd('ddp del 0 /tmp/l2tpv3oip-l4.bak')
+ out=self.dut_testpmd.execute_cmd('ddp add 0 /tmp/l2tpv3oip-l4.pkg,/tmp/l2tpv3oip-l4.bak')
+ out=self.dut_testpmd.execute_cmd('ddp get list 0')
+ self.verify("L2TPv3oIP with L4 payload" in out,"Failed to Load
+ DDP profile ")
+
+ def test_l2tpv3oip_delete_profile(self):
+ """
+ Test to delete the profile.
+ Step1: Check if profile is loaded, if loaded, delete the same
+ Step2: Add the profile again
+ """
+ self.dut_testpmd.execute_cmd('port stop 0')
+ out=self.dut_testpmd.execute_cmd('ddp get list 0')
+
+ if "L2TPv3oIP with L4 payload" not in out:
+ out=self.dut_testpmd.execute_cmd('ddp add 0 /tmp/l2tpv3oip-l4.pkg,/tmp/l2tpv3oip-l4.bak')
+ out=self.dut_testpmd.execute_cmd('ddp get list 0')
+ self.verify("L2TPv3oIP with L4 payload" in out,"Error in loading the Profile")
+ out=self.dut_testpmd.execute_cmd('ddp del 0 /tmp/l2tpv3oip-l4.bak')
+ print out
+ out=self.dut_testpmd.execute_cmd('ddp get list 0')
+ print out
+ self.verify("Profile number is: 0" in out,"Error in @@deleting the Profile !!")
+ out=self.dut_testpmd.execute_cmd('ddp add 0 /tmp/l2tpv3oip-l4.pkg,/tmp/l2tpv3oip-l4.bak')
+ out=self.dut_testpmd.execute_cmd('ddp get list 0')
+ self.verify("L2TPv3oIP with L4 payload" in out,"Error in
+loading the Profile")
+
+ def test_l2tpv3oip_delete_rules(self):
+ """
+ Test to Add, delete and flush flow director rules
+ Step1: Add 3 rules, flow list , all rules are listed
+ Step2: Delete 1 rule, flow list, The first rule should not be listed
+ Step3: Flush all rules , flow list, No rules should be listed.
+ """
+ queue = random.randint(1, self.PF_QUEUE - 1)
+ self.dut_testpmd.execute_cmd( 'flow create 0 ingress pattern eth / ipv4 / l2tpv3oip session_id is 1001 / end actions queue index {} / end'.format(queue))
+ self.dut_testpmd.execute_cmd( 'flow create 0 ingress pattern eth / ipv4 / l2tpv3oip session_id is 1002 / end actions queue index {} / end'.format(queue))
+ self.dut_testpmd.execute_cmd( 'flow create 0 ingress pattern eth / ipv4 / l2tpv3oip session_id is 1003 / end actions queue index {} / end'.format(queue))
+ out=self.dut_testpmd.execute_cmd('flow list 0')
+ verify=out.splitlines()
+ self.verify(len(verify)== 6,"Flow rules not added")
+ self.dut_testpmd.execute_cmd( 'flow destroy 0 rule 0')
+ out=self.dut_testpmd.execute_cmd('flow list 0')
+ verify=out.splitlines()
+ self.verify(len(verify)== 5,"Flow rules not destroyed")
+ self.dut_testpmd.execute_cmd( 'flow flush 0')
+ out=self.dut_testpmd.execute_cmd('flow list 0')
+ verify=out.splitlines()
+ self.verify(len(verify)== 1,"Flow rules not destroyed")
+
+ def tear_down(self):
+ self.dut_testpmd.execute_cmd('stop')
+ out = self.dut_testpmd.execute_cmd('ddp get list 0')
+ if "Profile number is: 0" not in out:
+ self.dut_testpmd.execute_cmd('port stop all')
+ time.sleep(1)
+ self.dut_testpmd.execute_cmd('ddp del 0 /tmp/l2tpv3oip-l4.bak')
+ out = self.dut_testpmd.execute_cmd('ddp get list 0')
+ self.verify("Profile number is: 0" in out,
+ "Failed to delete ddp profile!!!")
+ self.dut_testpmd.execute_cmd('port start all')
+ self.dut_testpmd.quit()
+
+ def tear_down_all(self):
+ pass
+
--
2.17.1
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [dts] [PATCH] L2TPv3 test script
2020-02-20 14:32 [dts] [PATCH] L2TPv3 test script Varalakshmi
2020-02-24 5:15 ` Peng, Yuan
@ 2020-02-25 1:22 ` Tu, Lijuan
1 sibling, 0 replies; 3+ messages in thread
From: Tu, Lijuan @ 2020-02-25 1:22 UTC (permalink / raw)
To: S, Varalakshmi, dts; +Cc: S, Varalakshmi
Applied, thanks, could you please and sign-off next time?
> -----Original Message-----
> From: dts [mailto:dts-bounces@dpdk.org] On Behalf Of Varalakshmi
> Sent: Thursday, February 20, 2020 10:33 PM
> To: dts@dpdk.org
> Cc: S, Varalakshmi <varalakshmi.s@intel.com>
> Subject: [dts] [PATCH] L2TPv3 test script
>
> diff --git a/tests/TestSuite_DdpL2tpv3.py b/tests/TestSuite_DdpL2tpv3.py
> new file mode 100644 index 0000000..78d8001
> --- /dev/null
> +++ b/tests/TestSuite_DdpL2tpv3.py
> @@ -0,0 +1,485 @@
> +#<COPYRIGHT_TAG>
> +import time
> +import re
> +import sys
> +import utils
> +from test_case import TestCase
> +from pmd_output import PmdOutput
> +from settings import get_nic_name
> +from scapy.all import *
> +import random
> +class TestDdpL2tpv3(TestCase):
> +
> + def set_up_all(self):
> + self.dut_ports = self.dut.get_ports(self.nic)
> + profile_file = 'dep/l2tpv3oip-l4.pkg'
> + profile_dst = "/tmp/"
> + self.dut.session.copy_file_to(profile_file, profile_dst)
> + out = self.dut.send_expect("cat config/common_base", "]# ", 10)
> + self.PF_Q_strip = 'CONFIG_RTE_LIBRTE_I40E_QUEUE_NUM_PER_PF'
> + pattern = "(%s=)(\d*)" % self.PF_Q_strip
> + self.PF_QUEUE = self.element_strip(out, pattern)
> + self.used_dut_port = self.dut_ports[0]
> + tester_port = self.tester.get_local_port(self.used_dut_port)
> + self.tester_intf = self.tester.get_interface(tester_port)
> + self.dut_testpmd = PmdOutput(self.dut)
> +
> + def set_up(self):
> + self.load_profile()
> +
> + def element_strip(self, out, pattern):
> + """
> + Strip and get queue number.
> + """
> +
> + s = re.compile(pattern)
> + res = s.search(out)
> + if res is None:
> + print 'Queue number not in output.'
> + return None
> + else:
> + result = res.group(2)
> + return int(result)
> +
> +
> + def load_profile(self):
> + """
> + Load profile to update FVL configuration tables, profile will be
> + stored in binary file.
> + """
> + self.dut_testpmd.start_testpmd(
> + "Default", "--pkt-filter-mode=perfect --port-topology=chained \
> + --txq=%s --rxq=%s --disable-rss"
> + % (self.PF_QUEUE, self.PF_QUEUE))
> + self.dut_testpmd.execute_cmd('port stop 0')
> + time.sleep(1)
> + self.dut_testpmd.execute_cmd(
> + 'ddp add 0 /tmp/l2tpv3oip-l4.pkg,/tmp/l2tpv3oip-l4.bak')
> + out = self.dut_testpmd.execute_cmd('ddp get list 0')
> + self.verify("Profile number is: 1" in out,
> + "Failed to load ddp profile!!!")
> + self.dut_testpmd.execute_cmd('port start 0')
> +
> + def l2tpv3pkts(self, keyword):
> + """
> + Generate L2TPv3oIPv4, L2TPv3oIPv6 and UDP packets.
> + """
> + pkt = []
> + if keyword is not 'def':
> + if keyword is "l2tpv3oipv4":
> +
> pkt.append("Ether()/IP(proto=115)/Raw('\\x00\\x00\\x03\\xe9')")
> + pkt.append("Ether()/IP(proto=115)/Raw('\\x00\\x00\\x03\\fe9')")
> + if keyword is "l2tpv3oipv4_dst":
> +
> pkt.append("Ether()/IP(dst=\"8.8.8.8\",proto=115)/Raw('\\x00\\x00\\x03\\x
> e9')")
> +
> pkt.append("Ether()/IP(dst=\"8.8.8.8\",proto=115)/Raw('\\x00\\x00\\x03\\x
> b9')")
> +
> pkt.append("Ether()/IP(dst=\"88.8.8.8\",proto=115)/Raw('\\x00\\x00\\x03\\
> xe9')")
> + if keyword is "l2tpv3oipv4_src":
> +
> pkt.append("Ether()/IP(src=\"1.1.1.1\",proto=115)/Raw('\\x00\\x00\\x03\\x
> e9')")
> +
> pkt.append("Ether()/IP(src=\"1.1.1.1\",proto=115)/Raw('\\x00\\x00\\x03\\x
> a9')")
> +
> pkt.append("Ether()/IP(src=\"11.1.1.1\",proto=115)/Raw('\\x00\\x00\\x03\\
> xe9')")
> + if keyword is "l2tpv3oipv4_src_dst":
> +
> pkt.append("Ether()/IP(src=\"5.5.5.5\",dst=\"2.2.2.2\",proto=115)/Raw('\\x0
> 0\\x00\\x03\\xe9')")
> +
> pkt.append("Ether()/IP(src=\"5.5.5.5\",dst=\"2.2.2.2\",proto=115)/Raw('\\x0
> 0\\x00\\x03\\xf9')")
> +
> pkt.append("Ether()/IP(src=\"55.5.5.5\",dst=\"2.2.2.2\",proto=115)/Raw('\\x
> 00\\x00\\x03\\xe9')")
> +
> pkt.append("Ether()/IP(src=\"5.5.5.5\",dst=\"22.2.2.2\",proto=115)/Raw('\\x
> 00\\x00\\x03\\xe9')")
> + if keyword is "l2tpv3oipv6":
> + pkt.append("Ether()/IPv6(nh=115)/Raw('\\x00\\x00\\x03\\xe9')")
> + pkt.append("Ether()/IPv6(nh=115)/Raw('\\x00\\x00\\x03\\xc9')")
> + if keyword is "l2tpv3oipv6_dst":
> +
> pkt.append("Ether()/IPv6(dst=\"8:7:6:5:4:3:2:1\",nh=115)/Raw('\\x00\\x00\\
> x03\\xe9')")
> +
> pkt.append("Ether()/IPv6(dst=\"8:7:6:5:4:3:2:1\",nh=115)/Raw('\\x00\\x00\\
> x03\\xd9')")
> +
> pkt.append("Ether()/IPv6(dst=\"8888:7:6:5:4:3:2:1\",nh=115)/Raw('\\x00\\x
> 00\\x03\\xe9')")
> + if keyword is "l2tpv3oipv6_src":
> +
> pkt.append("Ether()/IPv6(src=\"1:2:3:4:5:6:7:8\",nh=115)/Raw('\\x00\\x00\\
> x03\\xe9')")
> +
> pkt.append("Ether()/IPv6(src=\"1:2:3:4:5:6:7:8\",nh=115)/Raw('\\x00\\x00\\
> x03\\xf9')")
> +
> pkt.append("Ether()/IPv6(src=\"1111:2:3:4:5:6:7:8\",nh=115)/Raw('\\x00\\x0
> 0\\x03\\xe9')")
> + if keyword is "l2tpv3oipv6_src_dst":
> +
> pkt.append("Ether()/IPv6(src=\"2:3:4:5:6:7:8:9\",dst=\"6:5:4:3:2:1:8:9\",nh=1
> 15)/Raw('\\x00\\x00\\x03\\xe9')")
> +
> pkt.append("Ether()/IPv6(src=\"2:3:4:5:6:7:8:9\",dst=\"6:5:4:3:2:1:8:9\",nh=1
> 15)/Raw('\\x00\\x00\\x03\\xf9')")
> +
> pkt.append("Ether()/IPv6(src=\"2222:3:4:5:6:7:8:9\",dst=\"6:5:4:3:2:1:8:9\",n
> h=115)/Raw('\\x00\\x00\\x03\\xe9')")
> +
> pkt.append("Ether()/IPv6(src=\"2:3:4:5:6:7:8:9\",dst=\"6666:5:4:3:2:1:8:9\",n
> h=115)/Raw('\\x00\\x00\\x03\\xe9')")
> + if keyword is "l2tpv3_ipv4_ipv6":
> + pkt.append("Ether()/IP(proto=115)/Raw('\\x00\\x00\\x03\\xe9')")
> + pkt.append("Ether()/IP(proto=115)/Raw('\\x00\\x00\\x03\\xf9')")
> + pkt.append("Ether()/IPv6(nh=115)/Raw('\\x00\\x00\\x03\\xe9')")
> + pkt.append("Ether()/IPv6(nh=115)/Raw('\\x00\\x00\\x03\\xf9')")
> + if keyword is "l2tpv3oip_v4src_v6src" :
> +
> pkt.append("Ether()/IP(src=\"1.3.5.7\",proto=115)/Raw('\\x00\\x00\\x03\\x
> e9')")
> +
> pkt.append("Ether()/IP(src=\"1.3.5.7\",proto=115)/Raw('\\x00\\x00\\x03\\x
> a9')")
> +
> pkt.append("Ether()/IP(src=\"11.3.5.7\",proto=115)/Raw('\\x00\\x00\\x03\\
> xe9')")
> +
> pkt.append("Ether()/IPv6(src=\"1:3:5:7:9:2:4:6\",nh=115)/Raw('\\x00\\x00\\
> x03\\xe9')")
> +
> pkt.append("Ether()/IPv6(src=\"1:3:5:7:9:2:4:6\",nh=115)/Raw('\\x00\\x00\\
> x03\\xf9')")
> +
> pkt.append("Ether()/IPv6(src=\"1111:3:5:7:9:2:4:6\",nh=115)/Raw('\\x00\\x0
> 0\\x03\\xe9')")
> + if keyword is "l2tpv3oip_v4dst_v6dst":
> +
> pkt.append("Ether()/IP(dst=\"9.7.5.3\",proto=115)/Raw('\\x00\\x00\\x03\\x
> e9')")
> +
> pkt.append("Ether()/IP(dst=\"9.7.5.3\",proto=115)/Raw('\\x00\\x00\\x03\\x
> b9')")
> +
> pkt.append("Ether()/IP(dst=\"99.7.5.3\",proto=115)/Raw('\\x00\\x00\\x03\\
> xe9')")
> +
> pkt.append("Ether()/IPv6(dst=\"2:4:6:8:1:3:5:7\",nh=115)/Raw('\\x00\\x00\\
> x03\\xe9')")
> +
> pkt.append("Ether()/IPv6(dst=\"2:4:6:8:1:3:5:7\",nh=115)/Raw('\\x00\\x00\\
> x03\\xd9')")
> +
> pkt.append("Ether()/IPv6(dst=\"2222:4:6:8:1:3:5:7\",nh=115)/Raw('\\x00\\x
> 00\\x03\\xe9')")
> + if keyword is "l2tpv3oip_v4srcdst_v6srcdst":
> +
> pkt.append("Ether()/IP(src=\"9.8.7.6\",dst=\"4.5.6.7\",proto=115)/Raw('\\x0
> 0\\x00\\x03\\xe9')")
> +
> pkt.append("Ether()/IP(src=\"9.8.7.6\",dst=\"4.5.6.7\",proto=115)/Raw('\\x0
> 0\\x00\\x03\\xf9')")
> +
> pkt.append("Ether()/IP(src=\"99.8.7.6\",dst=\"4.5.6.7\",proto=115)/Raw('\\x
> 00\\x00\\x03\\xe9')")
> +
> pkt.append("Ether()/IP(src=\"9.8.7.6\",dst=\"44.5.6.7\",proto=115)/Raw('\\x
> 00\\x00\\x03\\xe9')")
> +
> pkt.append("Ether()/IPv6(src=\"1:2:3:4:5:6:7:8\",dst=\"9:8:7:6:5:4:3:2\",nh=1
> 15)/Raw('\\x00\\x00\\x03\\xe9')")
> +
> pkt.append("Ether()/IPv6(src=\"1:2:3:4:5:6:7:8\",dst=\"9:8:7:6:5:4:3:2\",nh=1
> 15)/Raw('\\x00\\x00\\x03\\xf9')")
> +
> pkt.append("Ether()/IPv6(src=\"1111:2:3:4:5:6:7:8\",dst=\"9:8:7:6:5:4:3:2\",n
> h=115)/Raw('\\x00\\x00\\x03\\xe9')")
> +
> pkt.append("Ether()/IPv6(src=\"1:2:3:4:5:6:7:8\",dst=\"9999:8:7:6:5:4:3:2\",n
> h=115)/Raw('\\x00\\x00\\x03\\xe9')")
> + if keyword is "l2tpv3oip_v4_v6_udp":
> +
> pkt.append("Ether()/IP(dst=\"9.7.5.3\",proto=115)/Raw('\\x00\\x00\\x03\\x
> e9')")
> +
> pkt.append("Ether()/IP(dst=\"9.7.5.3\",proto=115)/Raw('\\x00\\x00\\x03\\x
> b9')")
> +
> pkt.append("Ether()/IPv6(dst=\"2:4:6:8:1:3:5:7\",nh=115)/Raw('\\x00\\x00\\
> x03\\xe9')")
> +
> pkt.append("Ether()/IPv6(dst=\"2:4:6:8:1:3:5:7\",nh=115)/Raw('\\x00\\x00\\
> x03\\xd9')")
> + pkt.append("Ether()/IP()/UDP()")
> + return pkt
> +
> + def send_and_verify(self,keyword='def'):
> + """
> + Send packets and verify result.
> + """
> + pkt = self.l2tpv3pkts(keyword)
> + qnum=[]
> + for i in range(len(pkt)):
> + self.tester.scapy_append('sendp([%s], iface="%s")'%(pkt[i],
> self.tester_intf))
> + self.tester.scapy_execute()
> + out = self.dut.get_session_output(timeout=2)
> + pattern = "port (\d)/queue (\d{1,2}): received (\d) packets"
> + qnum.append(self.element_strip(out, pattern))
> + return qnum
> +
> + def run_fd_test(self, keyword,crlwords_ipv4,crlwords_ipv6):
> + """
> + Configure Flow director rules.
> +
> + keywords: keywords have IPv4/IPv6 SIP DIP and UDP
> + """
> + self.dut_testpmd.execute_cmd('port stop 0')
> + self.dut_testpmd.execute_cmd('port config 0 pctype 28 fdir_inset clear
> all')
> + self.dut_testpmd.execute_cmd('port config 0 pctype 38 fdir_inset clear
> all')
> + if crlwords_ipv4 is not None:
> + for field in crlwords_ipv4:
> + self.dut_testpmd.execute_cmd('port config 0 pctype 28 fdir_inset
> set field {}'.format(field))
> + if crlwords_ipv6 is not None:
> + for field in crlwords_ipv6:
> + self.dut_testpmd.execute_cmd('port config 0 pctype 38 fdir_inset
> set field {}'.format(field))
> + self.dut_testpmd.execute_cmd('port start 0')
> + self.dut_testpmd.execute_cmd('start')
> + self.dut_testpmd.execute_cmd('set verbose 1')
> + qdef=[]
> + qnum = self.send_and_verify(keyword)
> + for i in range(len(qnum)):
> + self.verify(qnum[i] == 0, "Receive packet from wrong
> +queue!!!")
> +
> + queue = random.randint(1, self.PF_QUEUE - 1)
> +
> + if 'l2tpv3oipv4' is keyword:
> +
> + self.dut_testpmd.execute_cmd( 'flow create 0 ingress pattern eth /
> ipv4 / l2tpv3oip session_id is 1001 / end actions queue index {} /
> end'.format(queue))
> + qdef.append(queue) #Queue Number as configured in the rule for
> matched sessionID
> + qdef.append(0) #Default Queue number to check for in case of
> non
> +matching sessionID
> +
> + if 'l2tpv3oipv4_dst' is keyword:
> + self.dut_testpmd.execute_cmd( 'flow create 0 ingress pattern eth /
> ipv4 dst is 8.8.8.8 / l2tpv3oip session_id is 1001 / end actions queue index {}
> / end'.format(queue))
> + qdef.append(queue) #Queue Number as configured in the rule for
> matched sessionID
> + qdef.append(0) #Default Queue number to check for in case of
> non matching sessionID
> + qdef.append(0) #Default Queue number to check for in case of
> non
> +matching DIP
> +
> +
> + if 'l2tpv3oipv4_src' is keyword:
> + self.dut_testpmd.execute_cmd( 'flow create 0 ingress pattern eth /
> ipv4 src is 1.1.1.1 / l2tpv3oip session_id is 1001 / end actions queue index {} /
> end'.format(queue))
> + qdef.append(queue) #Queue Number as configured in the rule for
> matched sessionID
> + qdef.append(0) #Default Queue number to check for in case of
> non matching sessionID
> + qdef.append(0) #Default Queue number to check for in case of
> non
> +matching SIP
> +
> + if 'l2tpv3oipv4_src_dst' is keyword:
> + self.dut_testpmd.execute_cmd( 'flow create 0 ingress pattern eth /
> ipv4 src is 5.5.5.5 dst is 2.2.2.2 / l2tpv3oip session_id is 1001 / end actions
> queue index {} / end'.format(queue))
> + qdef.append(queue) #Queue Number as configured in the rule for
> matched sessionID
> + qdef.append(0) #Default Queue number to check for in case of
> non matching sessionID
> + qdef.append(0) #Default Queue number to check for in case of
> non matching SIP
> + qdef.append(0) #Default Queue number to check for in case of
> non
> +matching DIP
> +
> + if 'l2tpv3oipv6' is keyword:
> + self.dut_testpmd.execute_cmd( 'flow create 0 ingress pattern eth /
> ipv6 / l2tpv3oip session_id is 1001 / end actions queue index {} /
> end'.format(queue))
> + qdef.append(queue) #Queue Number as configured in the rule for
> matched sessionID
> + qdef.append(0) #Default Queue number to check for in case of
> non
> +matching sessionID
> +
> + if 'l2tpv3oipv6_dst' is keyword:
> + self.dut_testpmd.execute_cmd( 'flow create 0 ingress pattern eth /
> ipv6 dst is 8:7:6:5:4:3:2:1 / l2tpv3oip session_id is 1001 / end actions queue
> index {} / end'.format(queue))
> + qdef.append(queue) #Queue Number as configured in the rule for
> matched sessionID
> + qdef.append(0) #Default Queue number to check for in case of
> non matching sessionID
> + qdef.append(0) #Default Queue number to check for in case of
> non
> +matching DIP
> +
> + if 'l2tpv3oipv6_src' is keyword:
> + self.dut_testpmd.execute_cmd('flow create 0 ingress pattern eth /
> ipv6 src is 1:2:3:4:5:6:7:8 / l2tpv3oip session_id is 1001 / end actions queue
> index {} / end'.format(queue))
> + qdef.append(queue) #Queue Number as configured in the rule for
> matched sessionID
> + qdef.append(0) #Default Queue number to check for in case of
> non matching sessionID
> + qdef.append(0) #Default Queue number to check for in case of
> non
> +matching SIP
> +
> + if 'l2tpv3oipv6_src_dst' is keyword:
> + self.dut_testpmd.execute_cmd( 'flow create 0 ingress pattern eth /
> ipv6 src is 2:3:4:5:6:7:8:9 dst is 6:5:4:3:2:1:8:9 / l2tpv3oip session_id is 1001 /
> end actions queue index {} / end'.format(queue))
> + qdef.append(queue) #Queue Number as configured in the rule for
> matched sessionID
> + qdef.append(0) #Default Queue number to check for in case of
> non matching sessionID
> + qdef.append(0) #Default Queue number to check for in case of
> non matching SIP
> + qdef.append(0) #Default Queue number to check for in case of
> non
> +matching DIP
> +
> + if 'l2tpv3_ipv4_ipv6' is keyword:
> + self.dut_testpmd.execute_cmd( 'flow create 0 ingress pattern eth /
> ipv4 / l2tpv3oip session_id is 1001 / end actions queue index {} /
> end'.format(queue))
> + qdef.append(queue) #Queue Number as configured in the rule for
> matched sessionID
> + qdef.append(0) #Default Queue number to check for in case of
> non matching sessionID
> + queue = random.randint(1, self.PF_QUEUE - 1)
> + out=self.dut_testpmd.execute_cmd( 'flow create 0 ingress pattern
> eth / ipv6 / l2tpv3oip session_id is 1001 / end actions queue index {} /
> end'.format(queue))
> + qdef.append(queue) #Queue Number as configured in the rule for
> matched sessionID
> + qdef.append(0) #Default Queue number to check for in case of
> non
> +matching sessionID
> +
> + if 'l2tpv3oip_v4src_v6src' is keyword:
> + self.dut_testpmd.execute_cmd( 'flow create 0 ingress pattern eth /
> ipv4 src is 1.3.5.7 / l2tpv3oip session_id is 1001 / end actions queue index {} /
> end'.format(queue))
> + qdef.append(queue) #Queue Number as configured in the rule for
> matched sessionID
> + qdef.append(0) #Default Queue number to check for in case of non
> matching sessionID
> + qdef.append(0) #Default Queue number to check for in case of non
> matching IPv4 SIP
> + queue = random.randint(1, self.PF_QUEUE - 1)
> + out=self.dut_testpmd.execute_cmd( 'flow create 0 ingress pattern
> eth / ipv6 src is 1:3:5:7:9:2:4:6 / l2tpv3oip session_id is 1001 / end actions
> queue index {} / end'.format(queue))
> + qdef.append(queue) #Queue Number as configured in the rule for
> matched sessionID
> + qdef.append(0) #Default Queue number to check for in case of non
> matching sessionID
> + qdef.append(0) #Default Queue number to check for in case
> + of non matching IPv6 SIP
> +
> + if 'l2tpv3oip_v4dst_v6dst' is keyword:
> + self.dut_testpmd.execute_cmd( 'flow create 0 ingress pattern eth /
> ipv4 dst is 9.7.5.3 / l2tpv3oip session_id is 1001 / end actions queue index {} /
> end'.format(queue))
> + qdef.append(queue) #Queue Number as configured in the rule for
> matched sessionID
> + qdef.append(0) #Default Queue number to check for in case of non
> matching sessionID
> + qdef.append(0) #Default Queue number to check for in case of non
> matching IPv4 DIP
> + queue = random.randint(1, self.PF_QUEUE - 1)
> + self.dut_testpmd.execute_cmd( 'flow create 0 ingress pattern eth /
> ipv6 dst is 2:4:6:8:1:3:5:7 / l2tpv3oip session_id is 1001 / end actions queue
> index {} / end'.format(queue))
> + qdef.append(queue) #Queue Number as configured in the rule for
> matched sessionID
> + qdef.append(0) #Default Queue number to check for in case of non
> matching sessionID
> + qdef.append(0) #Default Queue number to check for in case
> + of non matching IPv6 DIP
> +
> + if 'l2tpv3oip_v4srcdst_v6srcdst' is keyword:
> + self.dut_testpmd.execute_cmd( 'flow create 0 ingress pattern eth /
> ipv4 src is 9.8.7.6 dst is 4.5.6.7 / l2tpv3oip session_id is 1001 / end actions
> queue index {} / end'.format(queue))
> + qdef.append(queue) #Queue Number as configured in the rule for
> matched sessionID
> + qdef.append(0) #Default Queue number to check for in case of non
> matching sessionID
> + qdef.append(0) #Default Queue number to check for in case of non
> matching IPv4 SIP
> + qdef.append(0) #Default Queue number to check for in case of non
> matching IPv4 DIP
> + queue = random.randint(1, self.PF_QUEUE - 1)
> + self.dut_testpmd.execute_cmd( 'flow create 0 ingress pattern eth /
> ipv6 src is 1:2:3:4:5:6:7:8 dst is 9:8:7:6:5:4:3:2 / l2tpv3oip session_id is 1001 /
> end actions queue index {} / end'.format(queue))
> + qdef.append(queue) #Queue Number as configured in the rule for
> matched sessionID
> + qdef.append(0) #Default Queue number to check for in case of non
> matching sessionID
> + qdef.append(0) #Default Queue number to check for in case of non
> matching IPv6 SIP
> + qdef.append(0) #Default Queue number to check for in case
> + of non matching IPv6 DIP
> +
> + if 'l2tpv3oip_v4_v6_udp' is keyword:
> + self.dut_testpmd.execute_cmd( 'flow create 0 ingress pattern eth /
> ipv4 / l2tpv3oip session_id is 1001 / end actions queue index {} /
> end'.format(queue))
> + qdef.append(queue) #Queue Number as configured in the rule for
> matched sessionID
> + qdef.append(0) #Default Queue number to check for in case of non
> matching sessionID
> + queue = random.randint(1, self.PF_QUEUE - 1)
> + self.dut_testpmd.execute_cmd( 'flow create 0 ingress pattern eth /
> ipv6 / l2tpv3oip session_id is 1001 / end actions queue index {} /
> end'.format(queue))
> + qdef.append(queue) #Queue Number as configured in the rule for
> matched sessionID
> + qdef.append(0) #Default Queue number to check for in case of non
> matching sessionID
> + queue = random.randint(1, self.PF_QUEUE - 1)
> + self.dut_testpmd.execute_cmd( 'flow create 0 ingress pattern eth /
> ipv4 / udp / end actions queue index {} / end'.format(queue))
> + qdef.append(queue) #Queue Number as configured in the rule
> +
> + qnum=self.send_and_verify(keyword)
> + for i in range(len(qdef)):
> + self.verify(qdef[i] == qnum[i], "Receive packet from wrong
> queue!!!")
> + self.dut_testpmd.execute_cmd("flow flush 0") # Delete all the
> +flow director rules
> +
> + def test_l2tpv3oipv4(self):
> + """
> + L2TPv3 PAY is supported by NVM with profile updated.
> + Default flow director input set is sessionID
> + flow director works to send matched packets to configured queue,
> + otherwise to queue 0.
> + """
> + keyword = 'l2tpv3oipv4'
> + crlwords_ipv4=range(44,46)
> + crlwords_ipv6=None
> + self.run_fd_test(keyword,crlwords_ipv4,crlwords_ipv6)
> +
> + def test_l2tpv3oipv4_src(self):
> + """
> + Flow director input set is sessionID + SIP for pctype 28
> + """
> +
> + crlwords_ipv4=list(range(15,17))+list(range(44,46))
> + crlwords_ipv6=None
> + keyword = 'l2tpv3oipv4_src'
> + self.run_fd_test(keyword,crlwords_ipv4,crlwords_ipv6)
> +
> + def test_l2tpv3oipv4_dst(self):
> + """
> + Flow director input set is sessionID + DIP for pctype 28
> + """
> + crlwords_ipv4=list(range(27,29))+list(range(44,46))
> + crlwords_ipv6=None
> + keyword = 'l2tpv3oipv4_dst'
> + self.run_fd_test(keyword,crlwords_ipv4,crlwords_ipv6)
> +
> + def test_l2tpv3oipv4_src_dst(self):
> + """
> + Flow director input set is sessionID + SIP + DIP for pctype 28
> + """
> + crlwords_ipv4=list(range(15,17))+list(range(27,29))+list(range(44,46))
> + crlwords_ipv6=None
> + keyword = 'l2tpv3oipv4_src_dst'
> + self.run_fd_test(keyword,crlwords_ipv4,crlwords_ipv6)
> +
> + def test_l2tpv3oipv6(self):
> +
> + """
> + Flow director input set is sessionID for pctyp 38
> + """
> + crlwords_ipv6=range(44,46)
> + crlwords_ipv4=None
> + keyword = 'l2tpv3oipv6'
> + self.run_fd_test(keyword,crlwords_ipv4,crlwords_ipv6)
> +
> + def test_l2tpv3oipv6_dst(self):
> + """
> + Flow director input set is sessionID + DIP for pctype 38
> + """
> + crlwords_ipv4=None
> + crlwords_ipv6=list(range(21,29))+list(range(44,46))
> + keyword = 'l2tpv3oipv6_dst'
> + self.run_fd_test(keyword,crlwords_ipv4,crlwords_ipv6)
> +
> + def test_l2tpv3oipv6_src(self):
> + """
> + Flow director input set is sessionID + SIP for pctype 38
> + """
> + crlwords_ipv4=None
> + crlwords_ipv6=list(range(13,21))+list(range(44,46))
> + keyword = 'l2tpv3oipv6_src'
> + self.run_fd_test(keyword,crlwords_ipv4,crlwords_ipv6)
> +
> + def test_l2tpv3oipv6_src_dst(self):
> + """
> + Flow director input set is sessionID + SIP + DIP for pctype 38
> + """
> + crlwords_ipv4=None
> + crlwords_ipv6=list(range(13,29))+list(range(44,46))
> + keyword = 'l2tpv3oipv6_src_dst'
> + self.run_fd_test(keyword,crlwords_ipv4,crlwords_ipv6)
> +
> + def test_l2tpv3_ipv4_ipv6(self):
> + """
> + Flow director input set is sessionID for pctype 28 and 38
> + """
> + crlwords_ipv4=range(44,46)
> + crlwords_ipv6=range(44,46)
> + keyword = 'l2tpv3_ipv4_ipv6'
> + self.run_fd_test(keyword,crlwords_ipv4,crlwords_ipv6)
> +
> + def test_l2tpv3oip_v4src_v6src(self):
> + """
> + Flow director input set is sessionID + SIP for pctype 28 and 38
> + """
> + crlwords_ipv4=list(range(15,17))+list(range(44,46))
> + crlwords_ipv6=list(range(13,21))+list(range(44,46))
> + keyword = 'l2tpv3oip_v4src_v6src'
> + self.run_fd_test(keyword,crlwords_ipv4,crlwords_ipv6)
> +
> + def test_l2tpv3oip_v4dst_v6dst(self):
> + """
> + Flow director input set is sessionID + DIP for pctype 28 and 38
> + """
> + crlwords_ipv4=list(range(27,29))+list(range(44,46))
> + crlwords_ipv6=list(range(21,29))+list(range(44,46))
> + keyword = 'l2tpv3oip_v4dst_v6dst'
> + self.run_fd_test(keyword,crlwords_ipv4,crlwords_ipv6)
> +
> + def test_l2tpv3oip_v4srcdst_v6srcdst(self):
> + """
> + Flow director input set is sessionID + SIP + DIP for pctype 28 and 38
> + """
> + crlwords_ipv4=list(range(15,17))+list(range(27,29))+list(range(44,46))
> + crlwords_ipv6=list(range(13,29))+list(range(44,46))
> + keyword = 'l2tpv3oip_v4srcdst_v6srcdst'
> + self.run_fd_test(keyword,crlwords_ipv4,crlwords_ipv6)
> +
> + def test_l2tpv3oip_v4_v6_udp(self):
> + """
> + Flow director input set is sessionID for pctype 28 and 38
> + """
> + crlwords_ipv4=range(44,46)
> + crlwords_ipv6=range(44,46)
> + keyword = 'l2tpv3oip_v4_v6_udp'
> + self.run_fd_test(keyword,crlwords_ipv4,crlwords_ipv6)
> +
> + def test_l2tpv3oip_load_profile(self):
> + """
> + Test to load the profile.
> + Step1: Check if it is already loaded, if loaded delete the same
> + Step2: Load the profile
> + """
> + self.dut_testpmd.execute_cmd('port stop 0')
> +
> + out=self.dut_testpmd.execute_cmd('ddp get list 0')
> + if "L2TPv3oIP with L4 payload" in out:
> + print "Profile is already loaded!!"
> + out=self.dut_testpmd.execute_cmd('ddp del 0 /tmp/l2tpv3oip-l4.bak')
> + out=self.dut_testpmd.execute_cmd('ddp add 0 /tmp/l2tpv3oip-
> l4.pkg,/tmp/l2tpv3oip-l4.bak')
> + out=self.dut_testpmd.execute_cmd('ddp get list 0')
> + self.verify("L2TPv3oIP with L4 payload" in out,"Failed to Load
> + DDP profile ")
> +
> + def test_l2tpv3oip_delete_profile(self):
> + """
> + Test to delete the profile.
> + Step1: Check if profile is loaded, if loaded, delete the same
> + Step2: Add the profile again
> + """
> + self.dut_testpmd.execute_cmd('port stop 0')
> + out=self.dut_testpmd.execute_cmd('ddp get list 0')
> +
> + if "L2TPv3oIP with L4 payload" not in out:
> + out=self.dut_testpmd.execute_cmd('ddp add 0 /tmp/l2tpv3oip-
> l4.pkg,/tmp/l2tpv3oip-l4.bak')
> + out=self.dut_testpmd.execute_cmd('ddp get list 0')
> + self.verify("L2TPv3oIP with L4 payload" in out,"Error in loading the
> Profile")
> + out=self.dut_testpmd.execute_cmd('ddp del 0 /tmp/l2tpv3oip-
> l4.bak')
> + print out
> + out=self.dut_testpmd.execute_cmd('ddp get list 0')
> + print out
> + self.verify("Profile number is: 0" in out,"Error in @@deleting the
> Profile !!")
> + out=self.dut_testpmd.execute_cmd('ddp add 0 /tmp/l2tpv3oip-
> l4.pkg,/tmp/l2tpv3oip-l4.bak')
> + out=self.dut_testpmd.execute_cmd('ddp get list 0')
> + self.verify("L2TPv3oIP with L4 payload" in out,"Error in
> +loading the Profile")
> +
> + def test_l2tpv3oip_delete_rules(self):
> + """
> + Test to Add, delete and flush flow director rules
> + Step1: Add 3 rules, flow list , all rules are listed
> + Step2: Delete 1 rule, flow list, The first rule should not be listed
> + Step3: Flush all rules , flow list, No rules should be listed.
> + """
> + queue = random.randint(1, self.PF_QUEUE - 1)
> + self.dut_testpmd.execute_cmd( 'flow create 0 ingress pattern eth / ipv4
> / l2tpv3oip session_id is 1001 / end actions queue index {} /
> end'.format(queue))
> + self.dut_testpmd.execute_cmd( 'flow create 0 ingress pattern eth / ipv4
> / l2tpv3oip session_id is 1002 / end actions queue index {} /
> end'.format(queue))
> + self.dut_testpmd.execute_cmd( 'flow create 0 ingress pattern eth / ipv4
> / l2tpv3oip session_id is 1003 / end actions queue index {} /
> end'.format(queue))
> + out=self.dut_testpmd.execute_cmd('flow list 0')
> + verify=out.splitlines()
> + self.verify(len(verify)== 6,"Flow rules not added")
> + self.dut_testpmd.execute_cmd( 'flow destroy 0 rule 0')
> + out=self.dut_testpmd.execute_cmd('flow list 0')
> + verify=out.splitlines()
> + self.verify(len(verify)== 5,"Flow rules not destroyed")
> + self.dut_testpmd.execute_cmd( 'flow flush 0')
> + out=self.dut_testpmd.execute_cmd('flow list 0')
> + verify=out.splitlines()
> + self.verify(len(verify)== 1,"Flow rules not destroyed")
> +
> + def tear_down(self):
> + self.dut_testpmd.execute_cmd('stop')
> + out = self.dut_testpmd.execute_cmd('ddp get list 0')
> + if "Profile number is: 0" not in out:
> + self.dut_testpmd.execute_cmd('port stop all')
> + time.sleep(1)
> + self.dut_testpmd.execute_cmd('ddp del 0 /tmp/l2tpv3oip-l4.bak')
> + out = self.dut_testpmd.execute_cmd('ddp get list 0')
> + self.verify("Profile number is: 0" in out,
> + "Failed to delete ddp profile!!!")
> + self.dut_testpmd.execute_cmd('port start all')
> + self.dut_testpmd.quit()
> +
> + def tear_down_all(self):
> + pass
> +
> --
> 2.17.1
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2020-02-25 1:22 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-02-20 14:32 [dts] [PATCH] L2TPv3 test script Varalakshmi
2020-02-24 5:15 ` Peng, Yuan
2020-02-25 1:22 ` Tu, Lijuan
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).