diff mbox series

[ovs-dev,v4] tests/mfex: Improve pcap script for mfex tests.

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

Checks

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

Commit Message

Kumar Amber May 24, 2022, 10:03 a.m. UTC
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

Comments

Eelco Chaudron May 24, 2022, 10:52 a.m. UTC | #1
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
Kumar Amber May 24, 2022, 12:26 p.m. UTC | #2
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 mbox series

Patch

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],