Message ID | 20220524100351.846626-1-kumar.amber@intel.com |
---|---|
State | Superseded |
Headers | show |
Series | [ovs-dev,v4] tests/mfex: Improve pcap script for mfex tests. | expand |
Context | Check | Description |
---|---|---|
ovsrobot/apply-robot | success | apply and check: success |
ovsrobot/github-robot-_Build_and_Test | success | github build: passed |
ovsrobot/intel-ovs-compilation | success | test: success |
On 24 May 2022, at 12:03, Kumar Amber wrote: > The mfex pcap generation script is improved for varied length > traffic and also removes the hard coded mfex_pcap and instead uses > the script itself to generate complex traffic patterns for testing. > > Signed-off-by: Kumar Amber <kumar.amber@intel.com> > Acked-by: Cian Ferriter <cian.ferriter@intel.com> > > --- > v4: > - Fix MAC and L4 ports to a value. > - Generate Ip addresses in fixed range. > v3: > - Fix comments(Eelco). > - Script generates mac/ip/l4_ports in a fixed range. > v2: > - Add huge page test-skip. > - Change core id to 3 to 0 to allow the mfex config test-case > to run on any system. > --- > --- > tests/automake.mk | 1 - > tests/mfex_fuzzy.py | 85 +++++++++++++++++++++++++++----------- > tests/pcap/mfex_test.pcap | Bin 416 -> 0 bytes > tests/system-dpdk.at | 53 +++++++++++++----------- > 4 files changed, 92 insertions(+), 47 deletions(-) > delete mode 100644 tests/pcap/mfex_test.pcap > > diff --git a/tests/automake.mk b/tests/automake.mk > index 34ddda6aa..204e86fac 100644 > --- a/tests/automake.mk > +++ b/tests/automake.mk > @@ -146,7 +146,6 @@ $(srcdir)/tests/fuzz-regression-list.at: tests/automake.mk > > EXTRA_DIST += $(MFEX_AUTOVALIDATOR_TESTS) > MFEX_AUTOVALIDATOR_TESTS = \ > - tests/pcap/mfex_test.pcap \ > tests/mfex_fuzzy.py > > OVSDB_CLUSTER_TESTSUITE_AT = \ > diff --git a/tests/mfex_fuzzy.py b/tests/mfex_fuzzy.py > index 3efe1152d..b4f8796b4 100755 > --- a/tests/mfex_fuzzy.py > +++ b/tests/mfex_fuzzy.py > @@ -3,30 +3,69 @@ > import sys > > from scapy.all import RandMAC, RandIP, PcapWriter, RandIP6, RandShort, fuzz > -from scapy.all import IPv6, Dot1Q, IP, Ether, UDP, TCP > +from scapy.all import IPv6, Dot1Q, IP, Ether, UDP, TCP, random > > +# Relative path for the pcap file location. > path = str(sys.argv[1]) + "/pcap/fuzzy.pcap" > +# The number of packets generated will be size * 8. > +size = int(sys.argv[2]) > +# Traffic option is used to choose between fuzzy or simple packet type. > +if (len(sys.argv) > 3): > + traffic_opt = str(sys.argv[3]) > +else: > + traffic_opt = "" > + > pktdump = PcapWriter(path, append=False, sync=True) > > -for i in range(0, 2000): > - > - # Generate random protocol bases, use a fuzz() over the combined packet > - # for full fuzzing. > - eth = Ether(src=RandMAC(), dst=RandMAC()) > - vlan = Dot1Q() > - ipv4 = IP(src=RandIP(), dst=RandIP()) > - ipv6 = IPv6(src=RandIP6(), dst=RandIP6()) > - udp = UDP(dport=RandShort(), sport=RandShort()) > - tcp = TCP(dport=RandShort(), sport=RandShort()) > - > - # IPv4 packets with fuzzing > - pktdump.write(fuzz(eth / ipv4 / udp)) > - pktdump.write(fuzz(eth / ipv4 / tcp)) > - pktdump.write(fuzz(eth / vlan / ipv4 / udp)) > - pktdump.write(fuzz(eth / vlan / ipv4 / tcp)) > - > - # IPv6 packets with fuzzing > - pktdump.write(fuzz(eth / ipv6 / udp)) > - pktdump.write(fuzz(eth / ipv6 / tcp)) > - pktdump.write(fuzz(eth / vlan / ipv6 / udp)) > - pktdump.write(fuzz(eth / vlan / ipv6 / tcp)) > +pkt = [] > + > +for i in range(0, size): > + if traffic_opt == "fuzzy": > + > + eth = Ether(src=RandMAC(), dst=RandMAC()) > + vlan = Dot1Q() > + udp = UDP(dport=RandShort(), sport=RandShort()) > + ipv4 = IP(src=RandIP(), dst=RandIP(), len=random.randint(0, 100)) > + ipv6 = IPv6(src=RandIP6(), dst=RandIP6(), plen=random.randint(0, 100)) > + tcp = TCP(dport=RandShort(), sport=RandShort(), flags='S', > + dataofs=random.randint(0, 15)) > + > + # IPv4 packets with fuzzing > + pkt.append(fuzz(eth / ipv4 / udp)) > + pkt.append(fuzz(eth / ipv4 / tcp)) > + pkt.append(fuzz(eth / vlan / ipv4 / udp)) > + pkt.append(fuzz(eth / vlan / ipv4 / tcp)) > + > + # IPv6 packets with fuzzing > + pkt.append(fuzz(eth / ipv6 / udp)) > + pkt.append(fuzz(eth / ipv6 / tcp)) > + pkt.append(fuzz(eth / vlan / ipv6 / udp)) > + pkt.append(fuzz(eth / vlan / ipv6 / tcp)) > + > + else: > + mac_addr = "52:54:00:FF:FF:FF" > + src_port = 200 > + dst_port = 1000 So you no longer want the ports and MAC to be a range as I suggested? > + eth = Ether(src=mac_addr, dst=mac_addr) Now you also have the source and destination MAC the same, is this on purpose? > + vlan = Dot1Q(vlan=(i % 10)) > + udp = UDP(dport=src_port, sport=dst_port) > + # IPv4 address range limits to 255 , and IPv6 limit to 65535. > + ipv4_addr = "192.168.150." + str((i % 255)) > + ipv6_addr = "2001:0db8:85a3:0000:0000:8a2e:0370:" + str(i % 0xffff) You missed my previous comment, this need to be a hex value with leading zeros. Guess you could use "2001:0db8:85a3:0000:0000:8a2e:0370:{:04x}”.format(i % 0xffff) here (please verify ;) > + ipv4 = IP(src=ipv4_addr, dst=ipv4_addr) > + ipv6 = IPv6(src=ipv6_addr, dst=ipv6_addr) Here also you use the same source and destination IP, is this on purpose? If so I’m ok, but a different src/dst makes more sense. > + tcp = TCP(dport=src_port, sport=dst_port, flags='S') > + > + # IPv4 packets > + pkt.append(eth / ipv4 / udp) > + pkt.append(eth / ipv4 / tcp) > + pkt.append(eth / vlan / ipv4 / udp) > + pkt.append(eth / vlan / ipv4 / tcp) > + > + # IPv6 packets > + pkt.append(eth / ipv6 / udp) > + pkt.append(eth / ipv6 / tcp) > + pkt.append(eth / vlan / ipv6 / udp) > + pkt.append(eth / vlan / ipv6 / tcp) > + > +pktdump.write(pkt) > diff --git a/tests/pcap/mfex_test.pcap b/tests/pcap/mfex_test.pcap > deleted file mode 100644 > index 1aac67b8d643ecb016c758cba4cc32212a80f52a..0000000000000000000000000000000000000000 > GIT binary patch > literal 0 > HcmV?d00001 > > literal 416 > zcmca|c+)~A1{MYw`2U}Qff2}Q<eHVR>K`M68ITRa|G@yFii5$Gfk6YL%z>@uY&}o| > z2s4N<1VH2&7y^V87$)XGOtD~MV$cFgfG~zBGGJ2#YtF$<F=a4i;9x8Q*<ZrSM6Ufz > xK>KST_NTIwYriok6N4Vm)gX-Q@<yO<!C`>c^{cp<7_5LgK^UuU{2>VS0RZ!RQ+EIW > > diff --git a/tests/system-dpdk.at b/tests/system-dpdk.at > index 7d2715c4a..ac83e5a57 100644 > --- a/tests/system-dpdk.at > +++ b/tests/system-dpdk.at > @@ -226,17 +226,19 @@ dnl -------------------------------------------------------------------------- > dnl Add standard DPDK PHY port > AT_SETUP([OVS-DPDK - MFEX Autovalidator]) > AT_KEYWORDS([dpdk]) > - > +OVS_DPDK_PRE_CHECK() > OVS_DPDK_START() > - > -dnl Add userspace bridge and attach it to OVS > AT_CHECK([ovs-vsctl add-br br0 -- set bridge br0 datapath_type=netdev]) > -AT_CHECK([ovs-vsctl add-port br0 p1 -- set Interface p1 type=dpdk options:dpdk-devargs=net_pcap1,rx_pcap=$srcdir/pcap/mfex_test.pcap,infinite_rx=1], [], [stdout], [stderr]) > -AT_CHECK([ovs-vsctl show], [], [stdout]) > - > AT_SKIP_IF([! ovs-appctl dpif-netdev/miniflow-parser-get | sed 1,4d | grep "True"], [], [dnl > ]) > > +AT_SKIP_IF([! $PYTHON3 -c "import scapy"], [], []) > +AT_CHECK([$PYTHON3 $srcdir/mfex_fuzzy.py $srcdir 2000], [], [stdout]) > + > +dnl Add userspace bridge and attach it to OVS > +AT_CHECK([ovs-vsctl add-port br0 p1 -- set Interface p1 type=dpdk options:dpdk-devargs=net_pcap1,rx_pcap=$srcdir/pcap/fuzzy.pcap,infinite_rx=1], [], [stdout], [stderr]) > +AT_CHECK([ovs-vsctl show], [], [stdout]) > + > AT_CHECK([ovs-appctl dpif-netdev/dpif-impl-set dpif_avx512], [0], [dnl > DPIF implementation set to dpif_avx512. > ]) > @@ -245,11 +247,12 @@ AT_CHECK([ovs-appctl dpif-netdev/miniflow-parser-set autovalidator], [0], [dnl > Miniflow extract implementation set to autovalidator. > ]) > > -OVS_WAIT_UNTIL([test `ovs-vsctl get interface p1 statistics | grep -oP 'rx_packets=\s*\K\d+'` -ge 1000]) > +OVS_WAIT_UNTIL([test `ovs-vsctl get interface p1 statistics | grep -oP 'rx_packets=\s*\K\d+'` -ge 16000]) > > dnl Clean up > AT_CHECK([ovs-vsctl del-port br0 p1], [], [stdout], [stderr]) > -OVS_VSWITCHD_STOP("[SYSTEM_DPDK_ALLOWED_LOGS]") > +OVS_VSWITCHD_STOP("m4_join([], [SYSTEM_DPDK_ALLOWED_LOGS], [ > +])") > AT_CLEANUP > dnl -------------------------------------------------------------------------- > > @@ -257,18 +260,19 @@ dnl -------------------------------------------------------------------------- > dnl Add standard DPDK PHY port > AT_SETUP([OVS-DPDK - MFEX Autovalidator Fuzzy]) > AT_KEYWORDS([dpdk]) > -AT_SKIP_IF([! $PYTHON3 -c "import scapy"], [], []) > -AT_CHECK([$PYTHON3 $srcdir/mfex_fuzzy.py $srcdir], [], [stdout]) > +OVS_DPDK_PRE_CHECK() > OVS_DPDK_START() > +AT_CHECK([ovs-vsctl add-br br0 -- set bridge br0 datapath_type=netdev]) > +AT_SKIP_IF([! ovs-appctl dpif-netdev/miniflow-parser-get | sed 1,4d | grep "True"], [], [dnl > +]) > + > +AT_SKIP_IF([! $PYTHON3 -c "import scapy"], [], []) > +AT_CHECK([$PYTHON3 $srcdir/mfex_fuzzy.py $srcdir 2000 fuzzy], [], [stdout]) > > dnl Add userspace bridge and attach it to OVS > -AT_CHECK([ovs-vsctl add-br br0 -- set bridge br0 datapath_type=netdev]) > AT_CHECK([ovs-vsctl add-port br0 p1 -- set Interface p1 type=dpdk options:dpdk-devargs=net_pcap1,rx_pcap=$srcdir/pcap/fuzzy.pcap,infinite_rx=1], [], [stdout], [stderr]) > AT_CHECK([ovs-vsctl show], [], [stdout]) > > -AT_SKIP_IF([! ovs-appctl dpif-netdev/miniflow-parser-get | sed 1,4d | grep "True"], [], [dnl > -]) > - > AT_CHECK([ovs-appctl dpif-netdev/dpif-impl-set dpif_avx512], [0], [dnl > DPIF implementation set to dpif_avx512. > ]) > @@ -277,7 +281,7 @@ AT_CHECK([ovs-appctl dpif-netdev/miniflow-parser-set autovalidator], [0], [dnl > Miniflow extract implementation set to autovalidator. > ]) > > -OVS_WAIT_UNTIL([test `ovs-vsctl get interface p1 statistics | grep -oP 'rx_packets=\s*\K\d+'` -ge 100000]) > +OVS_WAIT_UNTIL([test `ovs-vsctl get interface p1 statistics | grep -oP 'rx_packets=\s*\K\d+'` -ge 16000]) > > dnl Clean up > AT_CHECK([ovs-vsctl del-port br0 p1], [], [stdout], [stderr]) > @@ -290,11 +294,14 @@ dnl -------------------------------------------------------------------------- > dnl -------------------------------------------------------------------------- > AT_SETUP([OVS-DPDK - MFEX Configuration]) > AT_KEYWORDS([dpdk]) > +OVS_DPDK_PRE_CHECK() > +AT_SKIP_IF([! $PYTHON3 -c "import scapy"], [], []) > +AT_CHECK([$PYTHON3 $srcdir/mfex_fuzzy.py $srcdir 1], [], [stdout]) > OVS_DPDK_START() > -AT_CHECK([ovs-vsctl --no-wait set Open_vSwitch . other_config:pmd-cpu-mask=0xC]) > +AT_CHECK([ovs-vsctl --no-wait set Open_vSwitch . other_config:pmd-cpu-mask=0x1]) > dnl Add userspace bridge and attach it to OVS > AT_CHECK([ovs-vsctl add-br br0 -- set bridge br0 datapath_type=netdev]) > -AT_CHECK([ovs-vsctl add-port br0 p1 -- set Interface p1 type=dpdk options:dpdk-devargs=net_pcap1,rx_pcap=$srcdir/pcap/mfex_test.pcap,infinite_rx=1], [], [stdout], [stderr]) > +AT_CHECK([ovs-vsctl add-port br0 p1 -- set Interface p1 type=dpdk options:dpdk-devargs=net_pcap1,rx_pcap=$srcdir/pcap/fuzzy.pcap,infinite_rx=1], [], [stdout], [stderr]) > AT_CHECK([ovs-vsctl show], [], [stdout]) > > AT_CHECK([ovs-appctl dpif-netdev/miniflow-parser-set scalar 1], [2], > @@ -339,12 +346,12 @@ Error: invalid study_pkt_cnt value: abcd. > ovs-appctl: ovs-vswitchd: server returned an error > ]) > > -AT_CHECK([ovs-appctl dpif-netdev/miniflow-parser-set -pmd 3 study], [0], [dnl > -Miniflow extract implementation set to study, on pmd thread 3, studying 128 packets. > +AT_CHECK([ovs-appctl dpif-netdev/miniflow-parser-set -pmd 0 study], [0], [dnl > +Miniflow extract implementation set to study, on pmd thread 0, studying 128 packets. > ]) > > -AT_CHECK([ovs-appctl dpif-netdev/miniflow-parser-set -pmd 3 study 512], [0], [dnl > -Miniflow extract implementation set to study, on pmd thread 3, studying 512 packets. > +AT_CHECK([ovs-appctl dpif-netdev/miniflow-parser-set -pmd 0 study 512], [0], [dnl > +Miniflow extract implementation set to study, on pmd thread 0, studying 512 packets. > ]) > > AT_CHECK([ovs-appctl dpif-netdev/miniflow-parser-set study 512], [0], [dnl > @@ -355,8 +362,8 @@ AT_CHECK([ovs-appctl dpif-netdev/miniflow-parser-set study], [0], [dnl > Miniflow extract implementation set to study, studying 128 packets. > ]) > > -AT_CHECK([ovs-appctl dpif-netdev/miniflow-parser-set -pmd 3 autovalidator], [0], [dnl > -Miniflow extract implementation set to autovalidator, on pmd thread 3. > +AT_CHECK([ovs-appctl dpif-netdev/miniflow-parser-set -pmd 0 autovalidator], [0], [dnl > +Miniflow extract implementation set to autovalidator, on pmd thread 0. > ]) > > AT_CHECK([ovs-appctl dpif-netdev/miniflow-parser-set -pmd zero study], [2], > -- > 2.25.1
Hi Eelco, > -----Original Message----- > From: Eelco Chaudron <echaudro@redhat.com> > Sent: Tuesday, May 24, 2022 4:22 PM > To: Amber, Kumar <kumar.amber@intel.com> > Cc: ovs-dev@openvswitch.org; Ferriter, Cian <cian.ferriter@intel.com>; > i.maximets@ovn.org; Stokes, Ian <ian.stokes@intel.com>; Van Haaren, Harry > <harry.van.haaren@intel.com> > Subject: Re: [PATCH v4] tests/mfex: Improve pcap script for mfex tests. > > > > On 24 May 2022, at 12:03, Kumar Amber wrote: > > > The mfex pcap generation script is improved for varied length traffic > > and also removes the hard coded mfex_pcap and instead uses the script > > itself to generate complex traffic patterns for testing. > > > > Signed-off-by: Kumar Amber <kumar.amber@intel.com> > > Acked-by: Cian Ferriter <cian.ferriter@intel.com> > > > > --- > > v4: > > - Fix MAC and L4 ports to a value. > > - Generate Ip addresses in fixed range. > > v3: > > - Fix comments(Eelco). > > - Script generates mac/ip/l4_ports in a fixed range. > > v2: > > - Add huge page test-skip. > > - Change core id to 3 to 0 to allow the mfex config test-case > > to run on any system. > > --- > > --- > > tests/automake.mk | 1 - > > tests/mfex_fuzzy.py | 85 +++++++++++++++++++++++++++----------- > > tests/pcap/mfex_test.pcap | Bin 416 -> 0 bytes > > tests/system-dpdk.at | 53 +++++++++++++----------- > > 4 files changed, 92 insertions(+), 47 deletions(-) delete mode > > 100644 tests/pcap/mfex_test.pcap > > > > diff --git a/tests/automake.mk b/tests/automake.mk index > > 34ddda6aa..204e86fac 100644 > > --- a/tests/automake.mk > > +++ b/tests/automake.mk > > @@ -146,7 +146,6 @@ $(srcdir)/tests/fuzz-regression-list.at: > > tests/automake.mk > > > > EXTRA_DIST += $(MFEX_AUTOVALIDATOR_TESTS) > MFEX_AUTOVALIDATOR_TESTS = > > \ > > - tests/pcap/mfex_test.pcap \ > > tests/mfex_fuzzy.py > > > > OVSDB_CLUSTER_TESTSUITE_AT = \ > > diff --git a/tests/mfex_fuzzy.py b/tests/mfex_fuzzy.py index > > 3efe1152d..b4f8796b4 100755 > > --- a/tests/mfex_fuzzy.py > > +++ b/tests/mfex_fuzzy.py > > @@ -3,30 +3,69 @@ > > import sys > > > > from scapy.all import RandMAC, RandIP, PcapWriter, RandIP6, > > RandShort, fuzz -from scapy.all import IPv6, Dot1Q, IP, Ether, UDP, > > TCP > > +from scapy.all import IPv6, Dot1Q, IP, Ether, UDP, TCP, random > > > > +# Relative path for the pcap file location. > > path = str(sys.argv[1]) + "/pcap/fuzzy.pcap" > > +# The number of packets generated will be size * 8. > > +size = int(sys.argv[2]) > > +# Traffic option is used to choose between fuzzy or simple packet type. > > +if (len(sys.argv) > 3): > > + traffic_opt = str(sys.argv[3]) > > +else: > > + traffic_opt = "" > > + > > pktdump = PcapWriter(path, append=False, sync=True) > > > > -for i in range(0, 2000): > > - > > - # Generate random protocol bases, use a fuzz() over the combined > packet > > - # for full fuzzing. > > - eth = Ether(src=RandMAC(), dst=RandMAC()) > > - vlan = Dot1Q() > > - ipv4 = IP(src=RandIP(), dst=RandIP()) > > - ipv6 = IPv6(src=RandIP6(), dst=RandIP6()) > > - udp = UDP(dport=RandShort(), sport=RandShort()) > > - tcp = TCP(dport=RandShort(), sport=RandShort()) > > - > > - # IPv4 packets with fuzzing > > - pktdump.write(fuzz(eth / ipv4 / udp)) > > - pktdump.write(fuzz(eth / ipv4 / tcp)) > > - pktdump.write(fuzz(eth / vlan / ipv4 / udp)) > > - pktdump.write(fuzz(eth / vlan / ipv4 / tcp)) > > - > > - # IPv6 packets with fuzzing > > - pktdump.write(fuzz(eth / ipv6 / udp)) > > - pktdump.write(fuzz(eth / ipv6 / tcp)) > > - pktdump.write(fuzz(eth / vlan / ipv6 / udp)) > > - pktdump.write(fuzz(eth / vlan / ipv6 / tcp)) > > +pkt = [] > > + > > +for i in range(0, size): > > + if traffic_opt == "fuzzy": > > + > > + eth = Ether(src=RandMAC(), dst=RandMAC()) > > + vlan = Dot1Q() > > + udp = UDP(dport=RandShort(), sport=RandShort()) > > + ipv4 = IP(src=RandIP(), dst=RandIP(), len=random.randint(0, 100)) > > + ipv6 = IPv6(src=RandIP6(), dst=RandIP6(), plen=random.randint(0, > 100)) > > + tcp = TCP(dport=RandShort(), sport=RandShort(), flags='S', > > + dataofs=random.randint(0, 15)) > > + > > + # IPv4 packets with fuzzing > > + pkt.append(fuzz(eth / ipv4 / udp)) > > + pkt.append(fuzz(eth / ipv4 / tcp)) > > + pkt.append(fuzz(eth / vlan / ipv4 / udp)) > > + pkt.append(fuzz(eth / vlan / ipv4 / tcp)) > > + > > + # IPv6 packets with fuzzing > > + pkt.append(fuzz(eth / ipv6 / udp)) > > + pkt.append(fuzz(eth / ipv6 / tcp)) > > + pkt.append(fuzz(eth / vlan / ipv6 / udp)) > > + pkt.append(fuzz(eth / vlan / ipv6 / tcp)) > > + > > + else: > > + mac_addr = "52:54:00:FF:FF:FF" > > + src_port = 200 > > + dst_port = 1000 > > So you no longer want the ports and MAC to be a range as I suggested? > > > + eth = Ether(src=mac_addr, dst=mac_addr) > I understood from earlier comments than you wanted a particular fix value 😊 Sorry fixed it in v5 to a range like IP dependent on I value. > Now you also have the source and destination MAC the same, is this on > purpose? > Well doesn’t matter much but since you highlighted it would be nice to put different values. Done in v5. > > + vlan = Dot1Q(vlan=(i % 10)) > > + udp = UDP(dport=src_port, sport=dst_port) > > + # IPv4 address range limits to 255 > > , and IPv6 limit to 65535. > Added in V5. > > + ipv4_addr = "192.168.150." + str((i % 255)) > > + ipv6_addr = "2001:0db8:85a3:0000:0000:8a2e:0370:" + str(i % > > + 0xffff) > > You missed my previous comment, this need to be a hex value with leading > zeros. > Guess you could use "2001:0db8:85a3:0000:0000:8a2e:0370:{:04x}”.format(i > % 0xffff) here (please verify ;) > Yeah, I misunderstood a bit. Verified it works 😉 and added as well in V5. > > + ipv4 = IP(src=ipv4_addr, dst=ipv4_addr) > > + ipv6 = IPv6(src=ipv6_addr, dst=ipv6_addr) > > Here also you use the same source and destination IP, is this on purpose? If > so I’m ok, but a different src/dst makes more sense. > Done . Regards Amber
diff --git a/tests/automake.mk b/tests/automake.mk index 34ddda6aa..204e86fac 100644 --- a/tests/automake.mk +++ b/tests/automake.mk @@ -146,7 +146,6 @@ $(srcdir)/tests/fuzz-regression-list.at: tests/automake.mk EXTRA_DIST += $(MFEX_AUTOVALIDATOR_TESTS) MFEX_AUTOVALIDATOR_TESTS = \ - tests/pcap/mfex_test.pcap \ tests/mfex_fuzzy.py OVSDB_CLUSTER_TESTSUITE_AT = \ diff --git a/tests/mfex_fuzzy.py b/tests/mfex_fuzzy.py index 3efe1152d..b4f8796b4 100755 --- a/tests/mfex_fuzzy.py +++ b/tests/mfex_fuzzy.py @@ -3,30 +3,69 @@ import sys from scapy.all import RandMAC, RandIP, PcapWriter, RandIP6, RandShort, fuzz -from scapy.all import IPv6, Dot1Q, IP, Ether, UDP, TCP +from scapy.all import IPv6, Dot1Q, IP, Ether, UDP, TCP, random +# Relative path for the pcap file location. path = str(sys.argv[1]) + "/pcap/fuzzy.pcap" +# The number of packets generated will be size * 8. +size = int(sys.argv[2]) +# Traffic option is used to choose between fuzzy or simple packet type. +if (len(sys.argv) > 3): + traffic_opt = str(sys.argv[3]) +else: + traffic_opt = "" + pktdump = PcapWriter(path, append=False, sync=True) -for i in range(0, 2000): - - # Generate random protocol bases, use a fuzz() over the combined packet - # for full fuzzing. - eth = Ether(src=RandMAC(), dst=RandMAC()) - vlan = Dot1Q() - ipv4 = IP(src=RandIP(), dst=RandIP()) - ipv6 = IPv6(src=RandIP6(), dst=RandIP6()) - udp = UDP(dport=RandShort(), sport=RandShort()) - tcp = TCP(dport=RandShort(), sport=RandShort()) - - # IPv4 packets with fuzzing - pktdump.write(fuzz(eth / ipv4 / udp)) - pktdump.write(fuzz(eth / ipv4 / tcp)) - pktdump.write(fuzz(eth / vlan / ipv4 / udp)) - pktdump.write(fuzz(eth / vlan / ipv4 / tcp)) - - # IPv6 packets with fuzzing - pktdump.write(fuzz(eth / ipv6 / udp)) - pktdump.write(fuzz(eth / ipv6 / tcp)) - pktdump.write(fuzz(eth / vlan / ipv6 / udp)) - pktdump.write(fuzz(eth / vlan / ipv6 / tcp)) +pkt = [] + +for i in range(0, size): + if traffic_opt == "fuzzy": + + eth = Ether(src=RandMAC(), dst=RandMAC()) + vlan = Dot1Q() + udp = UDP(dport=RandShort(), sport=RandShort()) + ipv4 = IP(src=RandIP(), dst=RandIP(), len=random.randint(0, 100)) + ipv6 = IPv6(src=RandIP6(), dst=RandIP6(), plen=random.randint(0, 100)) + tcp = TCP(dport=RandShort(), sport=RandShort(), flags='S', + dataofs=random.randint(0, 15)) + + # IPv4 packets with fuzzing + pkt.append(fuzz(eth / ipv4 / udp)) + pkt.append(fuzz(eth / ipv4 / tcp)) + pkt.append(fuzz(eth / vlan / ipv4 / udp)) + pkt.append(fuzz(eth / vlan / ipv4 / tcp)) + + # IPv6 packets with fuzzing + pkt.append(fuzz(eth / ipv6 / udp)) + pkt.append(fuzz(eth / ipv6 / tcp)) + pkt.append(fuzz(eth / vlan / ipv6 / udp)) + pkt.append(fuzz(eth / vlan / ipv6 / tcp)) + + else: + mac_addr = "52:54:00:FF:FF:FF" + src_port = 200 + dst_port = 1000 + eth = Ether(src=mac_addr, dst=mac_addr) + vlan = Dot1Q(vlan=(i % 10)) + udp = UDP(dport=src_port, sport=dst_port) + # IPv4 address range limits to 255 + ipv4_addr = "192.168.150." + str((i % 255)) + ipv6_addr = "2001:0db8:85a3:0000:0000:8a2e:0370:" + str(i % 0xffff) + ipv4 = IP(src=ipv4_addr, dst=ipv4_addr) + ipv6 = IPv6(src=ipv6_addr, dst=ipv6_addr) + tcp = TCP(dport=src_port, sport=dst_port, flags='S') + + # IPv4 packets + pkt.append(eth / ipv4 / udp) + pkt.append(eth / ipv4 / tcp) + pkt.append(eth / vlan / ipv4 / udp) + pkt.append(eth / vlan / ipv4 / tcp) + + # IPv6 packets + pkt.append(eth / ipv6 / udp) + pkt.append(eth / ipv6 / tcp) + pkt.append(eth / vlan / ipv6 / udp) + pkt.append(eth / vlan / ipv6 / tcp) + +pktdump.write(pkt) diff --git a/tests/pcap/mfex_test.pcap b/tests/pcap/mfex_test.pcap deleted file mode 100644 index 1aac67b8d643ecb016c758cba4cc32212a80f52a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 416 zcmca|c+)~A1{MYw`2U}Qff2}Q<eHVR>K`M68ITRa|G@yFii5$Gfk6YL%z>@uY&}o| z2s4N<1VH2&7y^V87$)XGOtD~MV$cFgfG~zBGGJ2#YtF$<F=a4i;9x8Q*<ZrSM6Ufz xK>KST_NTIwYriok6N4Vm)gX-Q@<yO<!C`>c^{cp<7_5LgK^UuU{2>VS0RZ!RQ+EIW diff --git a/tests/system-dpdk.at b/tests/system-dpdk.at index 7d2715c4a..ac83e5a57 100644 --- a/tests/system-dpdk.at +++ b/tests/system-dpdk.at @@ -226,17 +226,19 @@ dnl -------------------------------------------------------------------------- dnl Add standard DPDK PHY port AT_SETUP([OVS-DPDK - MFEX Autovalidator]) AT_KEYWORDS([dpdk]) - +OVS_DPDK_PRE_CHECK() OVS_DPDK_START() - -dnl Add userspace bridge and attach it to OVS AT_CHECK([ovs-vsctl add-br br0 -- set bridge br0 datapath_type=netdev]) -AT_CHECK([ovs-vsctl add-port br0 p1 -- set Interface p1 type=dpdk options:dpdk-devargs=net_pcap1,rx_pcap=$srcdir/pcap/mfex_test.pcap,infinite_rx=1], [], [stdout], [stderr]) -AT_CHECK([ovs-vsctl show], [], [stdout]) - AT_SKIP_IF([! ovs-appctl dpif-netdev/miniflow-parser-get | sed 1,4d | grep "True"], [], [dnl ]) +AT_SKIP_IF([! $PYTHON3 -c "import scapy"], [], []) +AT_CHECK([$PYTHON3 $srcdir/mfex_fuzzy.py $srcdir 2000], [], [stdout]) + +dnl Add userspace bridge and attach it to OVS +AT_CHECK([ovs-vsctl add-port br0 p1 -- set Interface p1 type=dpdk options:dpdk-devargs=net_pcap1,rx_pcap=$srcdir/pcap/fuzzy.pcap,infinite_rx=1], [], [stdout], [stderr]) +AT_CHECK([ovs-vsctl show], [], [stdout]) + AT_CHECK([ovs-appctl dpif-netdev/dpif-impl-set dpif_avx512], [0], [dnl DPIF implementation set to dpif_avx512. ]) @@ -245,11 +247,12 @@ AT_CHECK([ovs-appctl dpif-netdev/miniflow-parser-set autovalidator], [0], [dnl Miniflow extract implementation set to autovalidator. ]) -OVS_WAIT_UNTIL([test `ovs-vsctl get interface p1 statistics | grep -oP 'rx_packets=\s*\K\d+'` -ge 1000]) +OVS_WAIT_UNTIL([test `ovs-vsctl get interface p1 statistics | grep -oP 'rx_packets=\s*\K\d+'` -ge 16000]) dnl Clean up AT_CHECK([ovs-vsctl del-port br0 p1], [], [stdout], [stderr]) -OVS_VSWITCHD_STOP("[SYSTEM_DPDK_ALLOWED_LOGS]") +OVS_VSWITCHD_STOP("m4_join([], [SYSTEM_DPDK_ALLOWED_LOGS], [ +])") AT_CLEANUP dnl -------------------------------------------------------------------------- @@ -257,18 +260,19 @@ dnl -------------------------------------------------------------------------- dnl Add standard DPDK PHY port AT_SETUP([OVS-DPDK - MFEX Autovalidator Fuzzy]) AT_KEYWORDS([dpdk]) -AT_SKIP_IF([! $PYTHON3 -c "import scapy"], [], []) -AT_CHECK([$PYTHON3 $srcdir/mfex_fuzzy.py $srcdir], [], [stdout]) +OVS_DPDK_PRE_CHECK() OVS_DPDK_START() +AT_CHECK([ovs-vsctl add-br br0 -- set bridge br0 datapath_type=netdev]) +AT_SKIP_IF([! ovs-appctl dpif-netdev/miniflow-parser-get | sed 1,4d | grep "True"], [], [dnl +]) + +AT_SKIP_IF([! $PYTHON3 -c "import scapy"], [], []) +AT_CHECK([$PYTHON3 $srcdir/mfex_fuzzy.py $srcdir 2000 fuzzy], [], [stdout]) dnl Add userspace bridge and attach it to OVS -AT_CHECK([ovs-vsctl add-br br0 -- set bridge br0 datapath_type=netdev]) AT_CHECK([ovs-vsctl add-port br0 p1 -- set Interface p1 type=dpdk options:dpdk-devargs=net_pcap1,rx_pcap=$srcdir/pcap/fuzzy.pcap,infinite_rx=1], [], [stdout], [stderr]) AT_CHECK([ovs-vsctl show], [], [stdout]) -AT_SKIP_IF([! ovs-appctl dpif-netdev/miniflow-parser-get | sed 1,4d | grep "True"], [], [dnl -]) - AT_CHECK([ovs-appctl dpif-netdev/dpif-impl-set dpif_avx512], [0], [dnl DPIF implementation set to dpif_avx512. ]) @@ -277,7 +281,7 @@ AT_CHECK([ovs-appctl dpif-netdev/miniflow-parser-set autovalidator], [0], [dnl Miniflow extract implementation set to autovalidator. ]) -OVS_WAIT_UNTIL([test `ovs-vsctl get interface p1 statistics | grep -oP 'rx_packets=\s*\K\d+'` -ge 100000]) +OVS_WAIT_UNTIL([test `ovs-vsctl get interface p1 statistics | grep -oP 'rx_packets=\s*\K\d+'` -ge 16000]) dnl Clean up AT_CHECK([ovs-vsctl del-port br0 p1], [], [stdout], [stderr]) @@ -290,11 +294,14 @@ dnl -------------------------------------------------------------------------- dnl -------------------------------------------------------------------------- AT_SETUP([OVS-DPDK - MFEX Configuration]) AT_KEYWORDS([dpdk]) +OVS_DPDK_PRE_CHECK() +AT_SKIP_IF([! $PYTHON3 -c "import scapy"], [], []) +AT_CHECK([$PYTHON3 $srcdir/mfex_fuzzy.py $srcdir 1], [], [stdout]) OVS_DPDK_START() -AT_CHECK([ovs-vsctl --no-wait set Open_vSwitch . other_config:pmd-cpu-mask=0xC]) +AT_CHECK([ovs-vsctl --no-wait set Open_vSwitch . other_config:pmd-cpu-mask=0x1]) dnl Add userspace bridge and attach it to OVS AT_CHECK([ovs-vsctl add-br br0 -- set bridge br0 datapath_type=netdev]) -AT_CHECK([ovs-vsctl add-port br0 p1 -- set Interface p1 type=dpdk options:dpdk-devargs=net_pcap1,rx_pcap=$srcdir/pcap/mfex_test.pcap,infinite_rx=1], [], [stdout], [stderr]) +AT_CHECK([ovs-vsctl add-port br0 p1 -- set Interface p1 type=dpdk options:dpdk-devargs=net_pcap1,rx_pcap=$srcdir/pcap/fuzzy.pcap,infinite_rx=1], [], [stdout], [stderr]) AT_CHECK([ovs-vsctl show], [], [stdout]) AT_CHECK([ovs-appctl dpif-netdev/miniflow-parser-set scalar 1], [2], @@ -339,12 +346,12 @@ Error: invalid study_pkt_cnt value: abcd. ovs-appctl: ovs-vswitchd: server returned an error ]) -AT_CHECK([ovs-appctl dpif-netdev/miniflow-parser-set -pmd 3 study], [0], [dnl -Miniflow extract implementation set to study, on pmd thread 3, studying 128 packets. +AT_CHECK([ovs-appctl dpif-netdev/miniflow-parser-set -pmd 0 study], [0], [dnl +Miniflow extract implementation set to study, on pmd thread 0, studying 128 packets. ]) -AT_CHECK([ovs-appctl dpif-netdev/miniflow-parser-set -pmd 3 study 512], [0], [dnl -Miniflow extract implementation set to study, on pmd thread 3, studying 512 packets. +AT_CHECK([ovs-appctl dpif-netdev/miniflow-parser-set -pmd 0 study 512], [0], [dnl +Miniflow extract implementation set to study, on pmd thread 0, studying 512 packets. ]) AT_CHECK([ovs-appctl dpif-netdev/miniflow-parser-set study 512], [0], [dnl @@ -355,8 +362,8 @@ AT_CHECK([ovs-appctl dpif-netdev/miniflow-parser-set study], [0], [dnl Miniflow extract implementation set to study, studying 128 packets. ]) -AT_CHECK([ovs-appctl dpif-netdev/miniflow-parser-set -pmd 3 autovalidator], [0], [dnl -Miniflow extract implementation set to autovalidator, on pmd thread 3. +AT_CHECK([ovs-appctl dpif-netdev/miniflow-parser-set -pmd 0 autovalidator], [0], [dnl +Miniflow extract implementation set to autovalidator, on pmd thread 0. ]) AT_CHECK([ovs-appctl dpif-netdev/miniflow-parser-set -pmd zero study], [2],