diff mbox series

[ovs-dev,v3] tests: Add OVS-DPDK MTU unit tests.

Message ID 20220711134907.59897-1-michael.phelan@intel.com
State Superseded
Headers show
Series [ovs-dev,v3] tests: Add OVS-DPDK MTU unit 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

Phelan, Michael July 11, 2022, 1:49 p.m. UTC
This adds 8 new unit tests to the 'check-dpdk' subsystem that will
test Maximum Transmission Unit (MTU) functionality.

Signed-off-by: Michael Phelan <michael.phelan@intel.com>
Signed-off-by: Sunil Pai G <sunil.pai.g@intel.com>
Co-authored-by: Sunil Pai G <sunil.pai.g@intel.com>

---
v3:
  - Capitalize first letter in comments.
  - Add [] in AT_CHECK commands.
  - Remove unnecessary "," in grep commands.
  - Establish connection with vhost front end (virtio-user) using testpmd first in all vport tests.

v2:
  - Removed DB checks when confirming MTU value in all tests.
  - Added checks to catch errors in MTU setup or if device does not support MTU configuration.
  - Fixed typo in comments.
---
---
 tests/system-dpdk.at | 376 +++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 376 insertions(+)

Comments

Pai G, Sunil July 11, 2022, 3:12 p.m. UTC | #1
Hi Mike,

Thanks for reworking the tests. 
One minor nit inline, otherwise patch LGTM, 

> -----Original Message-----
> From: Phelan, Michael <michael.phelan@intel.com>
> Sent: Monday, July 11, 2022 7:19 PM
> To: dev@openvswitch.org
> Cc: Stokes, Ian <ian.stokes@intel.com>; aconole@redhat.com;
> i.maximets@ovn.org; maxime.coquelin@redhat.com; Phelan, Michael
> <michael.phelan@intel.com>; Pai G, Sunil <sunil.pai.g@intel.com>
> Subject: [PATCH v3] tests: Add OVS-DPDK MTU unit tests.

The title should be "system-dpdk:" instead of "tests:", didn't catch this earlier,
but I guess this can be changed when applying, might not require another revision.

> 
> This adds 8 new unit tests to the 'check-dpdk' subsystem that will test
> Maximum Transmission Unit (MTU) functionality.
> 
> Signed-off-by: Michael Phelan <michael.phelan@intel.com>
> Signed-off-by: Sunil Pai G <sunil.pai.g@intel.com>
> Co-authored-by: Sunil Pai G <sunil.pai.g@intel.com>
> 
> ---
> v3:
>   - Capitalize first letter in comments.
>   - Add [] in AT_CHECK commands.
>   - Remove unnecessary "," in grep commands.
>   - Establish connection with vhost front end (virtio-user) using testpmd
> first in all vport tests.
> 

Acked-by: Sunil Pai G <sunil.pai.g@intel.com>
Kumar Amber July 12, 2022, 2:04 p.m. UTC | #2
Hi Michael,

The patch uses MTU sizes > 9000 values to check and fail but 9000 may not be good value for older NICs
As they might fail the test ?  

Can we kind of confirm is MTU > 9000 is safe if not we can just use a lower value like 1500 etc etc to be safe
So that we don't fail un-necessary on the older NICs.

Regards
Amber 

> > -----Original Message-----
> > From: Phelan, Michael <michael.phelan@intel.com>
> > Sent: Monday 11 July 2022 14:49
> > To: dev@openvswitch.org
> > Cc: Stokes, Ian <ian.stokes@intel.com>; aconole@redhat.com;
> > i.maximets@ovn.org; maxime.coquelin@redhat.com; Phelan, Michael
> > <michael.phelan@intel.com>; Pai G, Sunil <sunil.pai.g@intel.com>
> > Subject: [PATCH v3] tests: Add OVS-DPDK MTU unit tests.
> >
> > This adds 8 new unit tests to the 'check-dpdk' subsystem that will
> > test Maximum Transmission Unit (MTU) functionality.
> >
> > Signed-off-by: Michael Phelan <michael.phelan@intel.com>
> > Signed-off-by: Sunil Pai G <sunil.pai.g@intel.com>
> > Co-authored-by: Sunil Pai G <sunil.pai.g@intel.com>
> >
> > ---
> > v3:
> >   - Capitalize first letter in comments.
> >   - Add [] in AT_CHECK commands.
> >   - Remove unnecessary "," in grep commands.
> >   - Establish connection with vhost front end (virtio-user) using
> > testpmd first in all vport tests.
> >
> > v2:
> >   - Removed DB checks when confirming MTU value in all tests.
> >   - Added checks to catch errors in MTU setup or if device does not
> > support MTU configuration.
> >   - Fixed typo in comments.
> > ---
> > ---
> >  tests/system-dpdk.at | 376
> > +++++++++++++++++++++++++++++++++++++++++++
> >  1 file changed, 376 insertions(+)
> >
> > diff --git a/tests/system-dpdk.at b/tests/system-dpdk.at index
> > ea2f3509b..c04588e89 100644
> > --- a/tests/system-dpdk.at
> > +++ b/tests/system-dpdk.at
> > @@ -384,6 +384,382 @@ dnl
> > -------------------------------------------------------------
> > -------------
> >
> >
> >
> > +dnl
> > +---------------------------------------------------------------------
> > +--
> > +---
> > +dnl MTU increase phy port
> > +AT_SETUP([OVS-DPDK - MTU increase phy port])
> > +AT_KEYWORDS([dpdk])
> > +
> > +OVS_DPDK_PRE_PHY_SKIP()
> > +OVS_DPDK_START()
> > +
> > +dnl First set MTU to its default value and confirm that value, then
> > +increase the MTU value and confirm the new value
> > +
> > +dnl Add userspace bridge and attach it to OVS with default MTU value
> > +AT_CHECK([ovs-vsctl add-br br10 -- set bridge br10
> > +datapath_type=netdev]) AT_CHECK([ovs-vsctl add-port br10 phy0 -- set
> > +Interface phy0 type=dpdk options:dpdk-devargs=$(cat PCI_ADDR)], [],
> > +[stdout], [stderr]) AT_CHECK([ovs-vsctl show], [], [stdout]) sleep 2
> > +
> > +dnl Check default MTU value in the datapath AT_CHECK([ovs-appctl
> > +dpctl/show], [], [stdout]) AT_CHECK([egrep 'mtu=1500' stdout], [],
> > +[stdout])
> > +
> > +dnl Increase MTU value and check in the datapath AT_CHECK([ovs-vsctl
> > +set Interface phy0 mtu_request=9000])
> > +
> > +dnl Fail if MTU is not supported
> > +AT_FAIL_IF([grep "Interface phy0 does not support MTU configuration"
> > +ovs-vswitchd.log], [], [stdout])
> > +
> > +dnl Fail if error is encountered during MTU setup AT_FAIL_IF([grep
> > +"Interface phy0 MTU (9000) setup error" ovs-vswitchd.log], [],
> > +[stdout])
> > +
> > +AT_CHECK([ovs-appctl dpctl/show], [], [stdout]) AT_CHECK([egrep
> > +'mtu=9000' stdout], [], [stdout])
> > +
> > +
> > +dnl Clean up
> > +AT_CHECK([ovs-vsctl del-port br10 phy0], [], [stdout], [stderr])
> > +OVS_VSWITCHD_STOP("[SYSTEM_DPDK_ALLOWED_LOGS]")
> > +AT_CLEANUP
> > +dnl
> > +---------------------------------------------------------------------
> > +--
> > +---
> > +
> > +
> > +
> > +dnl
> > +---------------------------------------------------------------------
> > +--
> > +---
> > +dnl MTU decrease phy port
> > +AT_SETUP([OVS-DPDK - MTU decrease phy port])
> > +AT_KEYWORDS([dpdk])
> > +
> > +OVS_DPDK_PRE_PHY_SKIP()
> > +OVS_DPDK_START()
> > +
> > +dnl First set an increased MTU value and confirm that value, then
> > +decrease the MTU value and confirm the new value
> > +
> > +dnl Add userspace bridge and attach it to OVS and modify MTU value
> > +AT_CHECK([ovs-vsctl add-br br10 -- set bridge br10
> > +datapath_type=netdev]) AT_CHECK([ovs-vsctl add-port br10 phy0 -- set
> > +Interface phy0 type=dpdk options:dpdk-devargs=$(cat PCI_ADDR)], [],
> > +[stdout], [stderr]) AT_CHECK([ovs-vsctl set Interface phy0
> > +mtu_request=9000]) AT_CHECK([ovs-vsctl show], [], [stdout]) sleep 2
> > +
> > +dnl Fail if MTU is not supported
> > +AT_FAIL_IF([grep "Interface phy0 does not support MTU configuration"
> > +ovs-vswitchd.log], [], [stdout])
> > +
> > +dnl Fail if error is encountered during MTU setup AT_FAIL_IF([grep
> > +"Interface phy0 MTU (9000) setup error" ovs-vswitchd.log], [],
> > +[stdout])
> > +
> > +dnl Check MTU value in the datapath
> > +AT_CHECK([ovs-appctl dpctl/show], [], [stdout]) AT_CHECK([egrep
> > +'mtu=9000' stdout], [], [stdout])
> > +
> > +dnl Decrease MTU value and check in the datapath AT_CHECK([ovs-vsctl
> > +set Interface phy0 mtu_request=2000])
> > +
> > +AT_CHECK([ovs-appctl dpctl/show], [], [stdout]) AT_CHECK([egrep
> > +'mtu=2000' stdout], [], [stdout])
> > +
> > +
> > +dnl Clean up
> > +AT_CHECK([ovs-vsctl del-port br10 phy0], [], [stdout], [stderr])
> > +OVS_VSWITCHD_STOP("[SYSTEM_DPDK_ALLOWED_LOGS]")
> > +AT_CLEANUP
> > +dnl
> > +---------------------------------------------------------------------
> > +--
> > +---
> > +
> > +
> > +
> > +dnl
> > +---------------------------------------------------------------------
> > +--
> > +---
> > +dnl MTU increase vport port
> > +AT_SETUP([OVS-DPDK - MTU increase vport port])
> > +AT_KEYWORDS([dpdk])
> > +
> > +AT_SKIP_IF([! which dpdk-testpmd >/dev/null 2>/dev/null])
> > +OVS_DPDK_PRE_CHECK()
> > +OVS_DPDK_START()
> > +
> > +dnl Find number of sockets
> > +AT_CHECK([lscpu], [], [stdout])
> > +AT_CHECK([cat stdout | grep "NUMA node(s)" | awk '{c=1; while
> > +(c++<$(3)) {printf "512,"}; print "512"}' > NUMA_NODE])
> > +
> > +dnl Add userspace bridge and attach it to OVS with default MTU value
> > +AT_CHECK([ovs-vsctl add-br br10 -- set bridge br10
> > +datapath_type=netdev]) AT_CHECK([ovs-vsctl add-port br10
> > +dpdkvhostuserclient0 -- set Interface dpdkvhostuserclient0
> > +type=dpdkvhostuserclient
> > +options:vhost-server-path=$OVS_RUNDIR/dpdkvhostclient0], [],
> > +[stdout],
> > +[stderr]) AT_CHECK([ovs-vsctl show], [], [stdout]) sleep 2
> > +
> > +dnl Parse log file
> > +AT_CHECK([grep "VHOST_CONFIG: vhost-user client: socket created"
> > +ovs-vswitchd.log], [], [stdout]) AT_CHECK([grep "vHost User device
> > +'dpdkvhostuserclient0' created in 'client' mode, using client socket"
> > +ovs-vswitchd.log], [], [stdout]) AT_CHECK([grep "VHOST_CONFIG:
> > +$OVS_RUNDIR/dpdkvhostclient0: reconnecting..." ovs-vswitchd.log], [],
> > +[stdout])
> > +
> > +dnl Execute testpmd in background
> > +on_exit "pkill -f -x -9 'tail -f /dev/null'"
> > +tail -f /dev/null | dpdk-testpmd --socket-mem="$(cat NUMA_NODE)" --no-
> pci\
> > +           --
> vdev="net_virtio_user,path=$OVS_RUNDIR/dpdkvhostclient0,server=1"
> > \
> > +           --vdev="net_tap0,iface=tap0" --file-prefix page0 \
> > +           --single-file-segments -- -a
> > +>$OVS_RUNDIR/testpmd-dpdkvhostuserclient0.log 2>&1 &
> > +
> > +OVS_WAIT_UNTIL([grep "virtio is now ready for processing"
> > +ovs-vswitchd.log])
> > +
> > +dnl Check default MTU value in the datapath AT_CHECK([ovs-appctl
> > +dpctl/show], [], [stdout]) AT_CHECK([egrep 'mtu=1500' stdout], [],
> > +[stdout])
> > +
> > +dnl Increase MTU value and check in the datapath AT_CHECK([ovs-vsctl
> > +set Interface dpdkvhostuserclient0 mtu_request=9000])
> > +
> > +AT_CHECK([ovs-appctl dpctl/show], [], [stdout]) AT_CHECK([egrep
> > +'mtu=9000' stdout], [], [stdout])
> > +
> > +dnl Clean up
> > +AT_CHECK([ovs-vsctl del-port br10 dpdkvhostuserclient0], [],
> > +[stdout],
> > +[stderr]) OVS_VSWITCHD_STOP("m4_join([],
> > [SYSTEM_DPDK_ALLOWED_LOGS], [
> > +\@VHOST_CONFIG: failed to connect to $OVS_RUNDIR/dpdkvhostclient0:
> No
> > +such file or directory@d
> > +])")
> > +AT_CLEANUP
> > +dnl
> > +---------------------------------------------------------------------
> > +--
> > +---
> > +
> > +
> > +
> > +dnl
> > +---------------------------------------------------------------------
> > +--
> > +---
> > +dnl MTU decrease vport port
> > +AT_SETUP([OVS-DPDK - MTU decrease vport port])
> > +AT_KEYWORDS([dpdk])
> > +
> > +AT_SKIP_IF([! which dpdk-testpmd >/dev/null 2>/dev/null])
> > +OVS_DPDK_PRE_CHECK()
> > +OVS_DPDK_START()
> > +
> > +dnl Find number of sockets
> > +AT_CHECK([lscpu], [], [stdout])
> > +AT_CHECK([cat stdout | grep "NUMA node(s)" | awk '{c=1; while
> > +(c++<$(3)) {printf "512,"}; print "512"}' > NUMA_NODE])
> > +
> > +dnl Add userspace bridge and attach it to OVS and modify MTU value
> > +AT_CHECK([ovs-vsctl add-br br10 -- set bridge br10
> > +datapath_type=netdev]) AT_CHECK([ovs-vsctl add-port br10
> > +dpdkvhostuserclient0 -- set Interface dpdkvhostuserclient0
> > +type=dpdkvhostuserclient
> > +options:vhost-server-path=$OVS_RUNDIR/dpdkvhostclient0], [],
> > +[stdout],
> > +[stderr]) AT_CHECK([ovs-vsctl set Interface dpdkvhostuserclient0
> > +mtu_request=9000]) AT_CHECK([ovs-vsctl show], [], [stdout]) sleep 2
> > +
> > +dnl Parse log file
> > +AT_CHECK([grep "VHOST_CONFIG: vhost-user client: socket created"
> > +ovs-vswitchd.log], [], [stdout]) AT_CHECK([grep "vHost User device
> > +'dpdkvhostuserclient0' created in 'client' mode, using client socket"
> > +ovs-vswitchd.log], [], [stdout]) AT_CHECK([grep "VHOST_CONFIG:
> > +$OVS_RUNDIR/dpdkvhostclient0: reconnecting..." ovs-vswitchd.log], [],
> > +[stdout])
> > +
> > +dnl Execute testpmd in background
> > +on_exit "pkill -f -x -9 'tail -f /dev/null'"
> > +tail -f /dev/null | dpdk-testpmd --socket-mem="$(cat NUMA_NODE)" --no-
> pci\
> > +           --
> vdev="net_virtio_user,path=$OVS_RUNDIR/dpdkvhostclient0,server=1"
> > \
> > +           --vdev="net_tap0,iface=tap0" --file-prefix page0 \
> > +           --single-file-segments -- -a
> > +>$OVS_RUNDIR/testpmd-dpdkvhostuserclient0.log 2>&1 &
> > +
> > +OVS_WAIT_UNTIL([grep "virtio is now ready for processing"
> > +ovs-vswitchd.log])
> > +
> > +dnl Check MTU value in the datapath
> > +AT_CHECK([ovs-appctl dpctl/show], [], [stdout]) AT_CHECK([egrep
> > +'mtu=9000' stdout], [], [stdout])
> > +
> > +dnl Decrease MTU value and check in the datapath AT_CHECK([ovs-vsctl
> > +set Interface dpdkvhostuserclient0 mtu_request=2000])
> > +
> > +AT_CHECK([ovs-appctl dpctl/show], [], [stdout]) AT_CHECK([egrep
> > +'mtu=2000' stdout], [], [stdout])
> > +
> > +dnl Clean up
> > +AT_CHECK([ovs-vsctl del-port br10 dpdkvhostuserclient0], [],
> > +[stdout],
> > +[stderr]) OVS_VSWITCHD_STOP("m4_join([],
> > [SYSTEM_DPDK_ALLOWED_LOGS], [
> > +\@VHOST_CONFIG: failed to connect to $OVS_RUNDIR/dpdkvhostclient0:
> No
> > +such file or directory@d
> > +])")
> > +AT_CLEANUP
> > +dnl
> > +---------------------------------------------------------------------
> > +--
> > +---
> > +
> > +
> > +
> > +dnl
> > +---------------------------------------------------------------------
> > +--
> > +---
> > +dnl MTU upper bound phy port
> > +AT_SETUP([OVS-DPDK - MTU upper bound phy port])
> > +AT_KEYWORDS([dpdk])
> > +
> > +OVS_DPDK_PRE_PHY_SKIP()
> > +OVS_DPDK_START()
> > +
> > +dnl Add userspace bridge and attach it to OVS and set MTU value to
> > +max upper bound AT_CHECK([ovs-vsctl add-br br10 -- set bridge br10
> > +datapath_type=netdev]) AT_CHECK([ovs-vsctl add-port br10 phy0 -- set
> > +Interface phy0 type=dpdk options:dpdk-devargs=$(cat PCI_ADDR)], [],
> > +[stdout], [stderr]) AT_CHECK([ovs-vsctl set Interface phy0
> > +mtu_request=9702]) AT_CHECK([ovs-vsctl show], [], [stdout]) sleep 2
> > +
> > +dnl Fail if MTU is not supported
> > +AT_FAIL_IF([grep "Interface phy0 does not support MTU configuration"
> > +ovs-vswitchd.log], [], [stdout])
> > +
> > +dnl Fail if error is encountered during MTU setup AT_FAIL_IF([grep
> > +"Interface phy0 MTU (9702) setup error" ovs-vswitchd.log], [],
> > +[stdout])
> > +
> > +dnl Check MTU value in the datapath
> > +AT_CHECK([ovs-appctl dpctl/show], [], [stdout]) AT_CHECK([egrep
> > +'mtu=9702' stdout], [], [stdout])
> > +
> > +dnl Set MTU value above upper bound and check for error
> > +AT_CHECK([ovs-vsctl set Interface phy0 mtu_request=9711])
> > +AT_CHECK([grep "phy0: unsupported MTU 9711" ovs-vswitchd.log], [],
> > +[stdout])
> > +
> > +
> > +dnl Clean up
> > +AT_CHECK([ovs-vsctl del-port br10 phy0], [], [stdout], [stderr])
> > +OVS_VSWITCHD_STOP("m4_join([], [SYSTEM_DPDK_ALLOWED_LOGS], [
> > +\@phy0: unsupported MTU 9711@d
> > +\@failed to set MTU for network device phy0: Invalid argument@d
> > +])")
> > +AT_CLEANUP
> > +dnl
> > +---------------------------------------------------------------------
> > +--
> > +---
> > +
> > +
> > +
> > +dnl
> > +---------------------------------------------------------------------
> > +--
> > +---
> > +dnl MTU lower bound phy port
> > +AT_SETUP([OVS-DPDK - MTU lower bound phy port])
> > +AT_KEYWORDS([dpdk])
> > +
> > +OVS_DPDK_PRE_PHY_SKIP()
> > +OVS_DPDK_START()
> > +
> > +dnl Add userspace bridge and attach it to OVS and set MTU value to
> > +min lower bound AT_CHECK([ovs-vsctl add-br br10 -- set bridge br10
> > +datapath_type=netdev]) AT_CHECK([ovs-vsctl add-port br10 phy0 -- set
> > +Interface phy0 type=dpdk options:dpdk-devargs=$(cat PCI_ADDR)], [],
> > +[stdout], [stderr]) AT_CHECK([ovs-vsctl set Interface phy0
> > +mtu_request=68]) AT_CHECK([ovs-vsctl show], [], [stdout]) sleep 2
> > +
> > +dnl Fail if MTU is not supported
> > +AT_FAIL_IF([grep "Interface phy0 does not support MTU configuration"
> > +ovs-vswitchd.log], [], [stdout])
> > +
> > +dnl Fail if error is encountered during MTU setup AT_FAIL_IF([grep
> > +"Interface phy0 MTU (68) setup error" ovs-vswitchd.log], [],
> > +[stdout])
> > +
> > +dnl Check MTU value in the datapath
> > +AT_CHECK([ovs-appctl dpctl/show], [], [stdout]) AT_CHECK([egrep
> > +'mtu=68' stdout], [], [stdout])
> > +
> > +dnl Set MTU value below lower bound and check for error
> > +AT_CHECK([ovs-vsctl set Interface phy0 mtu_request=67])
> > +AT_CHECK([grep
> > +"phy0: unsupported MTU 67" ovs-vswitchd.log], [], [stdout])
> > +
> > +
> > +dnl Clean up
> > +AT_CHECK([ovs-vsctl del-port br10 phy0], [], [stdout], [stderr])
> > +OVS_VSWITCHD_STOP("m4_join([], [SYSTEM_DPDK_ALLOWED_LOGS], [
> > +\@phy0: unsupported MTU 67@d
> > +\@failed to set MTU for network device phy0: Invalid argument@d
> > +])")
> > +AT_CLEANUP
> > +dnl
> > +---------------------------------------------------------------------
> > +--
> > +---
> > +
> > +
> > +
> > +dnl
> > +---------------------------------------------------------------------
> > +--
> > +---
> > +dnl MTU upper bound vport port
> > +AT_SETUP([OVS-DPDK - MTU upper bound vport port])
> > +AT_KEYWORDS([dpdk])
> > +
> > +AT_SKIP_IF([! which dpdk-testpmd >/dev/null 2>/dev/null])
> > +OVS_DPDK_PRE_CHECK()
> > +OVS_DPDK_START()
> > +
> > +dnl Find number of sockets
> > +AT_CHECK([lscpu], [], [stdout])
> > +AT_CHECK([cat stdout | grep "NUMA node(s)" | awk '{c=1; while
> > +(c++<$(3)) {printf "512,"}; print "512"}' > NUMA_NODE])
> > +
> > +dnl Add userspace bridge and attach it to OVS and set MTU value to
> > +max upper bound AT_CHECK([ovs-vsctl add-br br10 -- set bridge br10
> > +datapath_type=netdev]) AT_CHECK([ovs-vsctl add-port br10
> > +dpdkvhostuserclient0 -- set Interface dpdkvhostuserclient0
> > +type=dpdkvhostuserclient
> > +options:vhost-server-path=$OVS_RUNDIR/dpdkvhostclient0], [],
> > +[stdout],
> > +[stderr]) AT_CHECK([ovs-vsctl set Interface dpdkvhostuserclient0
> > +mtu_request=9702]) AT_CHECK([ovs-vsctl show], [], [stdout]) sleep 2
> > +
> > +dnl Execute testpmd in background
> > +on_exit "pkill -f -x -9 'tail -f /dev/null'"
> > +tail -f /dev/null | dpdk-testpmd --socket-mem="$(cat NUMA_NODE)" --no-
> pci\
> > +           --
> vdev="net_virtio_user,path=$OVS_RUNDIR/dpdkvhostclient0,server=1"
> > \
> > +           --vdev="net_tap0,iface=tap0" --file-prefix page0 \
> > +           --single-file-segments -- -a
> > +>$OVS_RUNDIR/testpmd-dpdkvhostuserclient0.log 2>&1 &
> > +
> > +OVS_WAIT_UNTIL([grep "virtio is now ready for processing"
> > +ovs-vswitchd.log])
> > +
> > +dnl Check MTU value in the datapath
> > +AT_CHECK([ovs-appctl dpctl/show], [], [stdout]) AT_CHECK([egrep
> > +'mtu=9702' stdout], [], [stdout])
> > +
> > +dnl Set MTU value above upper bound and check for error
> > +AT_CHECK([ovs-vsctl set Interface dpdkvhostuserclient0
> > +mtu_request=9711]) AT_CHECK([grep "dpdkvhostuserclient0:
> unsupported
> > +MTU 9711" ovs-vswitchd.log], [], [stdout])
> > +
> > +dnl Clean up
> > +AT_CHECK([ovs-vsctl del-port br10 dpdkvhostuserclient0], [],
> > +[stdout],
> > +[stderr]) OVS_VSWITCHD_STOP("m4_join([],
> > [SYSTEM_DPDK_ALLOWED_LOGS], [
> > +\@VHOST_CONFIG: failed to connect to $OVS_RUNDIR/dpdkvhostclient0:
> No
> > +such file or directory@d
> > +\@dpdkvhostuserclient0: unsupported MTU 9711@d \@failed to set MTU
> > +for network device dpdkvhostuserclient0: Invalid argument@d
> > +])")
> > +AT_CLEANUP
> > +dnl
> > +---------------------------------------------------------------------
> > +--
> > +---
> > +
> > +
> > +
> > +dnl
> > +---------------------------------------------------------------------
> > +--
> > +---
> > +dnl MTU lower bound vport port
> > +AT_SETUP([OVS-DPDK - MTU lower bound vport port])
> > +AT_KEYWORDS([dpdk])
> > +
> > +AT_SKIP_IF([! which dpdk-testpmd >/dev/null 2>/dev/null])
> > +OVS_DPDK_PRE_CHECK()
> > +OVS_DPDK_START()
> > +
> > +dnl Find number of sockets
> > +AT_CHECK([lscpu], [], [stdout])
> > +AT_CHECK([cat stdout | grep "NUMA node(s)" | awk '{c=1; while
> > +(c++<$(3)) {printf "512,"}; print "512"}' > NUMA_NODE])
> > +
> > +dnl Add userspace bridge and attach it to OVS and set MTU value to
> > +min lower bound AT_CHECK([ovs-vsctl add-br br10 -- set bridge br10
> > +datapath_type=netdev]) AT_CHECK([ovs-vsctl add-port br10
> > +dpdkvhostuserclient0 -- set Interface dpdkvhostuserclient0
> > +type=dpdkvhostuserclient
> > +options:vhost-server-path=$OVS_RUNDIR/dpdkvhostclient0], [],
> > +[stdout],
> > +[stderr]) AT_CHECK([ovs-vsctl set Interface dpdkvhostuserclient0
> > +mtu_request=68]) AT_CHECK([ovs-vsctl show], [], [stdout]) sleep 2
> > +
> > +dnl Parse log file
> > +AT_CHECK([grep "VHOST_CONFIG: vhost-user client: socket created"
> > +ovs-vswitchd.log], [], [stdout]) AT_CHECK([grep "vHost User device
> > +'dpdkvhostuserclient0' created in 'client' mode, using client socket"
> > +ovs-vswitchd.log], [], [stdout]) AT_CHECK([grep "VHOST_CONFIG:
> > +$OVS_RUNDIR/dpdkvhostclient0: reconnecting..." ovs-vswitchd.log], [],
> > +[stdout])
> > +
> > +dnl Execute testpmd in background
> > +on_exit "pkill -f -x -9 'tail -f /dev/null'"
> > +tail -f /dev/null | dpdk-testpmd --socket-mem="$(cat NUMA_NODE)" --no-
> pci\
> > +           --
> vdev="net_virtio_user,path=$OVS_RUNDIR/dpdkvhostclient0,server=1"
> > \
> > +           --vdev="net_tap0,iface=tap0" --file-prefix page0 \
> > +           --single-file-segments -- -a
> > +>$OVS_RUNDIR/testpmd-dpdkvhostuserclient0.log 2>&1 &
> > +
> > +OVS_WAIT_UNTIL([grep "virtio is now ready for processing"
> > +ovs-vswitchd.log])
> > +
> > +dnl Check MTU value in the datapath
> > +AT_CHECK([ovs-appctl dpctl/show], [], [stdout]) AT_CHECK([egrep
> > +'mtu=68' stdout], [], [stdout])
> > +
> > +dnl Set MTU value below lower bound and check for error
> > +AT_CHECK([ovs-vsctl set Interface dpdkvhostuserclient0
> > +mtu_request=67]) AT_CHECK([grep "dpdkvhostuserclient0: unsupported
> MTU 67"
> > +ovs-vswitchd.log], [], [stdout])
> > +
> > +
> > +dnl Clean up
> > +AT_CHECK([ovs-vsctl del-port br10 dpdkvhostuserclient0], [],
> > +[stdout],
> > +[stderr]) OVS_VSWITCHD_STOP("m4_join([],
> > [SYSTEM_DPDK_ALLOWED_LOGS], [
> > +\@VHOST_CONFIG: failed to connect to $OVS_RUNDIR/dpdkvhostclient0:
> No
> > +such file or directory@d
> > +\@dpdkvhostuserclient0: unsupported MTU 67@d \@failed to set MTU
> for
> > +network device dpdkvhostuserclient0: Invalid argument@d
> > +])")
> > +AT_CLEANUP
> > +dnl
> > +---------------------------------------------------------------------
> > +--
> > +---
> > +
> > +
> > +
> >  dnl
> > ----------------------------------------------------------------------
> > ----
> >  dnl Add standard DPDK PHY port
> >  AT_SETUP([OVS-DPDK - MFEX Autovalidator])
> > --
> > 2.25.1
Stokes, Ian July 12, 2022, 2:50 p.m. UTC | #3
> Hi Michael,
> 
> The patch uses MTU sizes > 9000 values to check and fail but 9000 may not
> be good value for older NICs
> As they might fail the test ?
> 
> Can we kind of confirm is MTU > 9000 is safe if not we can just use a lower
> value like 1500 etc etc to be safe
> So that we don't fail un-necessary on the older NICs.
> 

Hi Amber, fair point , 9000 MTU might not be supported but given the nature of OVS I think it's a safe assumption, if not then maybe it requires further discussion on the DPDK side of exposing max MTU, but for now I think this is safe enough.

Thanks
Ian.


> Regards
> Amber
> 
> > > -----Original Message-----
> > > From: Phelan, Michael <michael.phelan@intel.com>
> > > Sent: Monday 11 July 2022 14:49
> > > To: dev@openvswitch.org
> > > Cc: Stokes, Ian <ian.stokes@intel.com>; aconole@redhat.com;
> > > i.maximets@ovn.org; maxime.coquelin@redhat.com; Phelan, Michael
> > > <michael.phelan@intel.com>; Pai G, Sunil <sunil.pai.g@intel.com>
> > > Subject: [PATCH v3] tests: Add OVS-DPDK MTU unit tests.
> > >
> > > This adds 8 new unit tests to the 'check-dpdk' subsystem that will
> > > test Maximum Transmission Unit (MTU) functionality.
> > >
> > > Signed-off-by: Michael Phelan <michael.phelan@intel.com>
> > > Signed-off-by: Sunil Pai G <sunil.pai.g@intel.com>
> > > Co-authored-by: Sunil Pai G <sunil.pai.g@intel.com>
> > >
> > > ---
> > > v3:
> > >   - Capitalize first letter in comments.
> > >   - Add [] in AT_CHECK commands.
> > >   - Remove unnecessary "," in grep commands.
> > >   - Establish connection with vhost front end (virtio-user) using
> > > testpmd first in all vport tests.
> > >
> > > v2:
> > >   - Removed DB checks when confirming MTU value in all tests.
> > >   - Added checks to catch errors in MTU setup or if device does not
> > > support MTU configuration.
> > >   - Fixed typo in comments.
> > > ---
> > > ---
> > >  tests/system-dpdk.at | 376
> > > +++++++++++++++++++++++++++++++++++++++++++
> > >  1 file changed, 376 insertions(+)
> > >
> > > diff --git a/tests/system-dpdk.at b/tests/system-dpdk.at index
> > > ea2f3509b..c04588e89 100644
> > > --- a/tests/system-dpdk.at
> > > +++ b/tests/system-dpdk.at
> > > @@ -384,6 +384,382 @@ dnl
> > > -------------------------------------------------------------
> > > -------------
> > >
> > >
> > >
> > > +dnl
> > > +---------------------------------------------------------------------
> > > +--
> > > +---
> > > +dnl MTU increase phy port
> > > +AT_SETUP([OVS-DPDK - MTU increase phy port])
> > > +AT_KEYWORDS([dpdk])
> > > +
> > > +OVS_DPDK_PRE_PHY_SKIP()
> > > +OVS_DPDK_START()
> > > +
> > > +dnl First set MTU to its default value and confirm that value, then
> > > +increase the MTU value and confirm the new value
> > > +
> > > +dnl Add userspace bridge and attach it to OVS with default MTU value
> > > +AT_CHECK([ovs-vsctl add-br br10 -- set bridge br10
> > > +datapath_type=netdev]) AT_CHECK([ovs-vsctl add-port br10 phy0 --
> set
> > > +Interface phy0 type=dpdk options:dpdk-devargs=$(cat PCI_ADDR)], [],
> > > +[stdout], [stderr]) AT_CHECK([ovs-vsctl show], [], [stdout]) sleep 2
> > > +
> > > +dnl Check default MTU value in the datapath AT_CHECK([ovs-appctl
> > > +dpctl/show], [], [stdout]) AT_CHECK([egrep 'mtu=1500' stdout], [],
> > > +[stdout])
> > > +
> > > +dnl Increase MTU value and check in the datapath AT_CHECK([ovs-vsctl
> > > +set Interface phy0 mtu_request=9000])
> > > +
> > > +dnl Fail if MTU is not supported
> > > +AT_FAIL_IF([grep "Interface phy0 does not support MTU
> configuration"
> > > +ovs-vswitchd.log], [], [stdout])
> > > +
> > > +dnl Fail if error is encountered during MTU setup AT_FAIL_IF([grep
> > > +"Interface phy0 MTU (9000) setup error" ovs-vswitchd.log], [],
> > > +[stdout])
> > > +
> > > +AT_CHECK([ovs-appctl dpctl/show], [], [stdout]) AT_CHECK([egrep
> > > +'mtu=9000' stdout], [], [stdout])
> > > +
> > > +
> > > +dnl Clean up
> > > +AT_CHECK([ovs-vsctl del-port br10 phy0], [], [stdout], [stderr])
> > > +OVS_VSWITCHD_STOP("[SYSTEM_DPDK_ALLOWED_LOGS]")
> > > +AT_CLEANUP
> > > +dnl
> > > +---------------------------------------------------------------------
> > > +--
> > > +---
> > > +
> > > +
> > > +
> > > +dnl
> > > +---------------------------------------------------------------------
> > > +--
> > > +---
> > > +dnl MTU decrease phy port
> > > +AT_SETUP([OVS-DPDK - MTU decrease phy port])
> > > +AT_KEYWORDS([dpdk])
> > > +
> > > +OVS_DPDK_PRE_PHY_SKIP()
> > > +OVS_DPDK_START()
> > > +
> > > +dnl First set an increased MTU value and confirm that value, then
> > > +decrease the MTU value and confirm the new value
> > > +
> > > +dnl Add userspace bridge and attach it to OVS and modify MTU value
> > > +AT_CHECK([ovs-vsctl add-br br10 -- set bridge br10
> > > +datapath_type=netdev]) AT_CHECK([ovs-vsctl add-port br10 phy0 --
> set
> > > +Interface phy0 type=dpdk options:dpdk-devargs=$(cat PCI_ADDR)], [],
> > > +[stdout], [stderr]) AT_CHECK([ovs-vsctl set Interface phy0
> > > +mtu_request=9000]) AT_CHECK([ovs-vsctl show], [], [stdout]) sleep 2
> > > +
> > > +dnl Fail if MTU is not supported
> > > +AT_FAIL_IF([grep "Interface phy0 does not support MTU
> configuration"
> > > +ovs-vswitchd.log], [], [stdout])
> > > +
> > > +dnl Fail if error is encountered during MTU setup AT_FAIL_IF([grep
> > > +"Interface phy0 MTU (9000) setup error" ovs-vswitchd.log], [],
> > > +[stdout])
> > > +
> > > +dnl Check MTU value in the datapath
> > > +AT_CHECK([ovs-appctl dpctl/show], [], [stdout]) AT_CHECK([egrep
> > > +'mtu=9000' stdout], [], [stdout])
> > > +
> > > +dnl Decrease MTU value and check in the datapath AT_CHECK([ovs-
> vsctl
> > > +set Interface phy0 mtu_request=2000])
> > > +
> > > +AT_CHECK([ovs-appctl dpctl/show], [], [stdout]) AT_CHECK([egrep
> > > +'mtu=2000' stdout], [], [stdout])
> > > +
> > > +
> > > +dnl Clean up
> > > +AT_CHECK([ovs-vsctl del-port br10 phy0], [], [stdout], [stderr])
> > > +OVS_VSWITCHD_STOP("[SYSTEM_DPDK_ALLOWED_LOGS]")
> > > +AT_CLEANUP
> > > +dnl
> > > +---------------------------------------------------------------------
> > > +--
> > > +---
> > > +
> > > +
> > > +
> > > +dnl
> > > +---------------------------------------------------------------------
> > > +--
> > > +---
> > > +dnl MTU increase vport port
> > > +AT_SETUP([OVS-DPDK - MTU increase vport port])
> > > +AT_KEYWORDS([dpdk])
> > > +
> > > +AT_SKIP_IF([! which dpdk-testpmd >/dev/null 2>/dev/null])
> > > +OVS_DPDK_PRE_CHECK()
> > > +OVS_DPDK_START()
> > > +
> > > +dnl Find number of sockets
> > > +AT_CHECK([lscpu], [], [stdout])
> > > +AT_CHECK([cat stdout | grep "NUMA node(s)" | awk '{c=1; while
> > > +(c++<$(3)) {printf "512,"}; print "512"}' > NUMA_NODE])
> > > +
> > > +dnl Add userspace bridge and attach it to OVS with default MTU value
> > > +AT_CHECK([ovs-vsctl add-br br10 -- set bridge br10
> > > +datapath_type=netdev]) AT_CHECK([ovs-vsctl add-port br10
> > > +dpdkvhostuserclient0 -- set Interface dpdkvhostuserclient0
> > > +type=dpdkvhostuserclient
> > > +options:vhost-server-path=$OVS_RUNDIR/dpdkvhostclient0], [],
> > > +[stdout],
> > > +[stderr]) AT_CHECK([ovs-vsctl show], [], [stdout]) sleep 2
> > > +
> > > +dnl Parse log file
> > > +AT_CHECK([grep "VHOST_CONFIG: vhost-user client: socket created"
> > > +ovs-vswitchd.log], [], [stdout]) AT_CHECK([grep "vHost User device
> > > +'dpdkvhostuserclient0' created in 'client' mode, using client socket"
> > > +ovs-vswitchd.log], [], [stdout]) AT_CHECK([grep "VHOST_CONFIG:
> > > +$OVS_RUNDIR/dpdkvhostclient0: reconnecting..." ovs-vswitchd.log], [],
> > > +[stdout])
> > > +
> > > +dnl Execute testpmd in background
> > > +on_exit "pkill -f -x -9 'tail -f /dev/null'"
> > > +tail -f /dev/null | dpdk-testpmd --socket-mem="$(cat NUMA_NODE)" -
> -no-
> > pci\
> > > +           --
> > vdev="net_virtio_user,path=$OVS_RUNDIR/dpdkvhostclient0,server=1"
> > > \
> > > +           --vdev="net_tap0,iface=tap0" --file-prefix page0 \
> > > +           --single-file-segments -- -a
> > > +>$OVS_RUNDIR/testpmd-dpdkvhostuserclient0.log 2>&1 &
> > > +
> > > +OVS_WAIT_UNTIL([grep "virtio is now ready for processing"
> > > +ovs-vswitchd.log])
> > > +
> > > +dnl Check default MTU value in the datapath AT_CHECK([ovs-appctl
> > > +dpctl/show], [], [stdout]) AT_CHECK([egrep 'mtu=1500' stdout], [],
> > > +[stdout])
> > > +
> > > +dnl Increase MTU value and check in the datapath AT_CHECK([ovs-vsctl
> > > +set Interface dpdkvhostuserclient0 mtu_request=9000])
> > > +
> > > +AT_CHECK([ovs-appctl dpctl/show], [], [stdout]) AT_CHECK([egrep
> > > +'mtu=9000' stdout], [], [stdout])
> > > +
> > > +dnl Clean up
> > > +AT_CHECK([ovs-vsctl del-port br10 dpdkvhostuserclient0], [],
> > > +[stdout],
> > > +[stderr]) OVS_VSWITCHD_STOP("m4_join([],
> > > [SYSTEM_DPDK_ALLOWED_LOGS], [
> > > +\@VHOST_CONFIG: failed to connect to
> $OVS_RUNDIR/dpdkvhostclient0:
> > No
> > > +such file or directory@d
> > > +])")
> > > +AT_CLEANUP
> > > +dnl
> > > +---------------------------------------------------------------------
> > > +--
> > > +---
> > > +
> > > +
> > > +
> > > +dnl
> > > +---------------------------------------------------------------------
> > > +--
> > > +---
> > > +dnl MTU decrease vport port
> > > +AT_SETUP([OVS-DPDK - MTU decrease vport port])
> > > +AT_KEYWORDS([dpdk])
> > > +
> > > +AT_SKIP_IF([! which dpdk-testpmd >/dev/null 2>/dev/null])
> > > +OVS_DPDK_PRE_CHECK()
> > > +OVS_DPDK_START()
> > > +
> > > +dnl Find number of sockets
> > > +AT_CHECK([lscpu], [], [stdout])
> > > +AT_CHECK([cat stdout | grep "NUMA node(s)" | awk '{c=1; while
> > > +(c++<$(3)) {printf "512,"}; print "512"}' > NUMA_NODE])
> > > +
> > > +dnl Add userspace bridge and attach it to OVS and modify MTU value
> > > +AT_CHECK([ovs-vsctl add-br br10 -- set bridge br10
> > > +datapath_type=netdev]) AT_CHECK([ovs-vsctl add-port br10
> > > +dpdkvhostuserclient0 -- set Interface dpdkvhostuserclient0
> > > +type=dpdkvhostuserclient
> > > +options:vhost-server-path=$OVS_RUNDIR/dpdkvhostclient0], [],
> > > +[stdout],
> > > +[stderr]) AT_CHECK([ovs-vsctl set Interface dpdkvhostuserclient0
> > > +mtu_request=9000]) AT_CHECK([ovs-vsctl show], [], [stdout]) sleep 2
> > > +
> > > +dnl Parse log file
> > > +AT_CHECK([grep "VHOST_CONFIG: vhost-user client: socket created"
> > > +ovs-vswitchd.log], [], [stdout]) AT_CHECK([grep "vHost User device
> > > +'dpdkvhostuserclient0' created in 'client' mode, using client socket"
> > > +ovs-vswitchd.log], [], [stdout]) AT_CHECK([grep "VHOST_CONFIG:
> > > +$OVS_RUNDIR/dpdkvhostclient0: reconnecting..." ovs-vswitchd.log], [],
> > > +[stdout])
> > > +
> > > +dnl Execute testpmd in background
> > > +on_exit "pkill -f -x -9 'tail -f /dev/null'"
> > > +tail -f /dev/null | dpdk-testpmd --socket-mem="$(cat NUMA_NODE)" -
> -no-
> > pci\
> > > +           --
> > vdev="net_virtio_user,path=$OVS_RUNDIR/dpdkvhostclient0,server=1"
> > > \
> > > +           --vdev="net_tap0,iface=tap0" --file-prefix page0 \
> > > +           --single-file-segments -- -a
> > > +>$OVS_RUNDIR/testpmd-dpdkvhostuserclient0.log 2>&1 &
> > > +
> > > +OVS_WAIT_UNTIL([grep "virtio is now ready for processing"
> > > +ovs-vswitchd.log])
> > > +
> > > +dnl Check MTU value in the datapath
> > > +AT_CHECK([ovs-appctl dpctl/show], [], [stdout]) AT_CHECK([egrep
> > > +'mtu=9000' stdout], [], [stdout])
> > > +
> > > +dnl Decrease MTU value and check in the datapath AT_CHECK([ovs-
> vsctl
> > > +set Interface dpdkvhostuserclient0 mtu_request=2000])
> > > +
> > > +AT_CHECK([ovs-appctl dpctl/show], [], [stdout]) AT_CHECK([egrep
> > > +'mtu=2000' stdout], [], [stdout])
> > > +
> > > +dnl Clean up
> > > +AT_CHECK([ovs-vsctl del-port br10 dpdkvhostuserclient0], [],
> > > +[stdout],
> > > +[stderr]) OVS_VSWITCHD_STOP("m4_join([],
> > > [SYSTEM_DPDK_ALLOWED_LOGS], [
> > > +\@VHOST_CONFIG: failed to connect to
> $OVS_RUNDIR/dpdkvhostclient0:
> > No
> > > +such file or directory@d
> > > +])")
> > > +AT_CLEANUP
> > > +dnl
> > > +---------------------------------------------------------------------
> > > +--
> > > +---
> > > +
> > > +
> > > +
> > > +dnl
> > > +---------------------------------------------------------------------
> > > +--
> > > +---
> > > +dnl MTU upper bound phy port
> > > +AT_SETUP([OVS-DPDK - MTU upper bound phy port])
> > > +AT_KEYWORDS([dpdk])
> > > +
> > > +OVS_DPDK_PRE_PHY_SKIP()
> > > +OVS_DPDK_START()
> > > +
> > > +dnl Add userspace bridge and attach it to OVS and set MTU value to
> > > +max upper bound AT_CHECK([ovs-vsctl add-br br10 -- set bridge br10
> > > +datapath_type=netdev]) AT_CHECK([ovs-vsctl add-port br10 phy0 --
> set
> > > +Interface phy0 type=dpdk options:dpdk-devargs=$(cat PCI_ADDR)], [],
> > > +[stdout], [stderr]) AT_CHECK([ovs-vsctl set Interface phy0
> > > +mtu_request=9702]) AT_CHECK([ovs-vsctl show], [], [stdout]) sleep 2
> > > +
> > > +dnl Fail if MTU is not supported
> > > +AT_FAIL_IF([grep "Interface phy0 does not support MTU
> configuration"
> > > +ovs-vswitchd.log], [], [stdout])
> > > +
> > > +dnl Fail if error is encountered during MTU setup AT_FAIL_IF([grep
> > > +"Interface phy0 MTU (9702) setup error" ovs-vswitchd.log], [],
> > > +[stdout])
> > > +
> > > +dnl Check MTU value in the datapath
> > > +AT_CHECK([ovs-appctl dpctl/show], [], [stdout]) AT_CHECK([egrep
> > > +'mtu=9702' stdout], [], [stdout])
> > > +
> > > +dnl Set MTU value above upper bound and check for error
> > > +AT_CHECK([ovs-vsctl set Interface phy0 mtu_request=9711])
> > > +AT_CHECK([grep "phy0: unsupported MTU 9711" ovs-vswitchd.log], [],
> > > +[stdout])
> > > +
> > > +
> > > +dnl Clean up
> > > +AT_CHECK([ovs-vsctl del-port br10 phy0], [], [stdout], [stderr])
> > > +OVS_VSWITCHD_STOP("m4_join([], [SYSTEM_DPDK_ALLOWED_LOGS],
> [
> > > +\@phy0: unsupported MTU 9711@d
> > > +\@failed to set MTU for network device phy0: Invalid argument@d
> > > +])")
> > > +AT_CLEANUP
> > > +dnl
> > > +---------------------------------------------------------------------
> > > +--
> > > +---
> > > +
> > > +
> > > +
> > > +dnl
> > > +---------------------------------------------------------------------
> > > +--
> > > +---
> > > +dnl MTU lower bound phy port
> > > +AT_SETUP([OVS-DPDK - MTU lower bound phy port])
> > > +AT_KEYWORDS([dpdk])
> > > +
> > > +OVS_DPDK_PRE_PHY_SKIP()
> > > +OVS_DPDK_START()
> > > +
> > > +dnl Add userspace bridge and attach it to OVS and set MTU value to
> > > +min lower bound AT_CHECK([ovs-vsctl add-br br10 -- set bridge br10
> > > +datapath_type=netdev]) AT_CHECK([ovs-vsctl add-port br10 phy0 --
> set
> > > +Interface phy0 type=dpdk options:dpdk-devargs=$(cat PCI_ADDR)], [],
> > > +[stdout], [stderr]) AT_CHECK([ovs-vsctl set Interface phy0
> > > +mtu_request=68]) AT_CHECK([ovs-vsctl show], [], [stdout]) sleep 2
> > > +
> > > +dnl Fail if MTU is not supported
> > > +AT_FAIL_IF([grep "Interface phy0 does not support MTU
> configuration"
> > > +ovs-vswitchd.log], [], [stdout])
> > > +
> > > +dnl Fail if error is encountered during MTU setup AT_FAIL_IF([grep
> > > +"Interface phy0 MTU (68) setup error" ovs-vswitchd.log], [],
> > > +[stdout])
> > > +
> > > +dnl Check MTU value in the datapath
> > > +AT_CHECK([ovs-appctl dpctl/show], [], [stdout]) AT_CHECK([egrep
> > > +'mtu=68' stdout], [], [stdout])
> > > +
> > > +dnl Set MTU value below lower bound and check for error
> > > +AT_CHECK([ovs-vsctl set Interface phy0 mtu_request=67])
> > > +AT_CHECK([grep
> > > +"phy0: unsupported MTU 67" ovs-vswitchd.log], [], [stdout])
> > > +
> > > +
> > > +dnl Clean up
> > > +AT_CHECK([ovs-vsctl del-port br10 phy0], [], [stdout], [stderr])
> > > +OVS_VSWITCHD_STOP("m4_join([], [SYSTEM_DPDK_ALLOWED_LOGS],
> [
> > > +\@phy0: unsupported MTU 67@d
> > > +\@failed to set MTU for network device phy0: Invalid argument@d
> > > +])")
> > > +AT_CLEANUP
> > > +dnl
> > > +---------------------------------------------------------------------
> > > +--
> > > +---
> > > +
> > > +
> > > +
> > > +dnl
> > > +---------------------------------------------------------------------
> > > +--
> > > +---
> > > +dnl MTU upper bound vport port
> > > +AT_SETUP([OVS-DPDK - MTU upper bound vport port])
> > > +AT_KEYWORDS([dpdk])
> > > +
> > > +AT_SKIP_IF([! which dpdk-testpmd >/dev/null 2>/dev/null])
> > > +OVS_DPDK_PRE_CHECK()
> > > +OVS_DPDK_START()
> > > +
> > > +dnl Find number of sockets
> > > +AT_CHECK([lscpu], [], [stdout])
> > > +AT_CHECK([cat stdout | grep "NUMA node(s)" | awk '{c=1; while
> > > +(c++<$(3)) {printf "512,"}; print "512"}' > NUMA_NODE])
> > > +
> > > +dnl Add userspace bridge and attach it to OVS and set MTU value to
> > > +max upper bound AT_CHECK([ovs-vsctl add-br br10 -- set bridge br10
> > > +datapath_type=netdev]) AT_CHECK([ovs-vsctl add-port br10
> > > +dpdkvhostuserclient0 -- set Interface dpdkvhostuserclient0
> > > +type=dpdkvhostuserclient
> > > +options:vhost-server-path=$OVS_RUNDIR/dpdkvhostclient0], [],
> > > +[stdout],
> > > +[stderr]) AT_CHECK([ovs-vsctl set Interface dpdkvhostuserclient0
> > > +mtu_request=9702]) AT_CHECK([ovs-vsctl show], [], [stdout]) sleep 2
> > > +
> > > +dnl Execute testpmd in background
> > > +on_exit "pkill -f -x -9 'tail -f /dev/null'"
> > > +tail -f /dev/null | dpdk-testpmd --socket-mem="$(cat NUMA_NODE)" -
> -no-
> > pci\
> > > +           --
> > vdev="net_virtio_user,path=$OVS_RUNDIR/dpdkvhostclient0,server=1"
> > > \
> > > +           --vdev="net_tap0,iface=tap0" --file-prefix page0 \
> > > +           --single-file-segments -- -a
> > > +>$OVS_RUNDIR/testpmd-dpdkvhostuserclient0.log 2>&1 &
> > > +
> > > +OVS_WAIT_UNTIL([grep "virtio is now ready for processing"
> > > +ovs-vswitchd.log])
> > > +
> > > +dnl Check MTU value in the datapath
> > > +AT_CHECK([ovs-appctl dpctl/show], [], [stdout]) AT_CHECK([egrep
> > > +'mtu=9702' stdout], [], [stdout])
> > > +
> > > +dnl Set MTU value above upper bound and check for error
> > > +AT_CHECK([ovs-vsctl set Interface dpdkvhostuserclient0
> > > +mtu_request=9711]) AT_CHECK([grep "dpdkvhostuserclient0:
> > unsupported
> > > +MTU 9711" ovs-vswitchd.log], [], [stdout])
> > > +
> > > +dnl Clean up
> > > +AT_CHECK([ovs-vsctl del-port br10 dpdkvhostuserclient0], [],
> > > +[stdout],
> > > +[stderr]) OVS_VSWITCHD_STOP("m4_join([],
> > > [SYSTEM_DPDK_ALLOWED_LOGS], [
> > > +\@VHOST_CONFIG: failed to connect to
> $OVS_RUNDIR/dpdkvhostclient0:
> > No
> > > +such file or directory@d
> > > +\@dpdkvhostuserclient0: unsupported MTU 9711@d \@failed to set
> MTU
> > > +for network device dpdkvhostuserclient0: Invalid argument@d
> > > +])")
> > > +AT_CLEANUP
> > > +dnl
> > > +---------------------------------------------------------------------
> > > +--
> > > +---
> > > +
> > > +
> > > +
> > > +dnl
> > > +---------------------------------------------------------------------
> > > +--
> > > +---
> > > +dnl MTU lower bound vport port
> > > +AT_SETUP([OVS-DPDK - MTU lower bound vport port])
> > > +AT_KEYWORDS([dpdk])
> > > +
> > > +AT_SKIP_IF([! which dpdk-testpmd >/dev/null 2>/dev/null])
> > > +OVS_DPDK_PRE_CHECK()
> > > +OVS_DPDK_START()
> > > +
> > > +dnl Find number of sockets
> > > +AT_CHECK([lscpu], [], [stdout])
> > > +AT_CHECK([cat stdout | grep "NUMA node(s)" | awk '{c=1; while
> > > +(c++<$(3)) {printf "512,"}; print "512"}' > NUMA_NODE])
> > > +
> > > +dnl Add userspace bridge and attach it to OVS and set MTU value to
> > > +min lower bound AT_CHECK([ovs-vsctl add-br br10 -- set bridge br10
> > > +datapath_type=netdev]) AT_CHECK([ovs-vsctl add-port br10
> > > +dpdkvhostuserclient0 -- set Interface dpdkvhostuserclient0
> > > +type=dpdkvhostuserclient
> > > +options:vhost-server-path=$OVS_RUNDIR/dpdkvhostclient0], [],
> > > +[stdout],
> > > +[stderr]) AT_CHECK([ovs-vsctl set Interface dpdkvhostuserclient0
> > > +mtu_request=68]) AT_CHECK([ovs-vsctl show], [], [stdout]) sleep 2
> > > +
> > > +dnl Parse log file
> > > +AT_CHECK([grep "VHOST_CONFIG: vhost-user client: socket created"
> > > +ovs-vswitchd.log], [], [stdout]) AT_CHECK([grep "vHost User device
> > > +'dpdkvhostuserclient0' created in 'client' mode, using client socket"
> > > +ovs-vswitchd.log], [], [stdout]) AT_CHECK([grep "VHOST_CONFIG:
> > > +$OVS_RUNDIR/dpdkvhostclient0: reconnecting..." ovs-vswitchd.log], [],
> > > +[stdout])
> > > +
> > > +dnl Execute testpmd in background
> > > +on_exit "pkill -f -x -9 'tail -f /dev/null'"
> > > +tail -f /dev/null | dpdk-testpmd --socket-mem="$(cat NUMA_NODE)" -
> -no-
> > pci\
> > > +           --
> > vdev="net_virtio_user,path=$OVS_RUNDIR/dpdkvhostclient0,server=1"
> > > \
> > > +           --vdev="net_tap0,iface=tap0" --file-prefix page0 \
> > > +           --single-file-segments -- -a
> > > +>$OVS_RUNDIR/testpmd-dpdkvhostuserclient0.log 2>&1 &
> > > +
> > > +OVS_WAIT_UNTIL([grep "virtio is now ready for processing"
> > > +ovs-vswitchd.log])
> > > +
> > > +dnl Check MTU value in the datapath
> > > +AT_CHECK([ovs-appctl dpctl/show], [], [stdout]) AT_CHECK([egrep
> > > +'mtu=68' stdout], [], [stdout])
> > > +
> > > +dnl Set MTU value below lower bound and check for error
> > > +AT_CHECK([ovs-vsctl set Interface dpdkvhostuserclient0
> > > +mtu_request=67]) AT_CHECK([grep "dpdkvhostuserclient0:
> unsupported
> > MTU 67"
> > > +ovs-vswitchd.log], [], [stdout])
> > > +
> > > +
> > > +dnl Clean up
> > > +AT_CHECK([ovs-vsctl del-port br10 dpdkvhostuserclient0], [],
> > > +[stdout],
> > > +[stderr]) OVS_VSWITCHD_STOP("m4_join([],
> > > [SYSTEM_DPDK_ALLOWED_LOGS], [
> > > +\@VHOST_CONFIG: failed to connect to
> $OVS_RUNDIR/dpdkvhostclient0:
> > No
> > > +such file or directory@d
> > > +\@dpdkvhostuserclient0: unsupported MTU 67@d \@failed to set
> MTU
> > for
> > > +network device dpdkvhostuserclient0: Invalid argument@d
> > > +])")
> > > +AT_CLEANUP
> > > +dnl
> > > +---------------------------------------------------------------------
> > > +--
> > > +---
> > > +
> > > +
> > > +
> > >  dnl
> > > ----------------------------------------------------------------------
> > > ----
> > >  dnl Add standard DPDK PHY port
> > >  AT_SETUP([OVS-DPDK - MFEX Autovalidator])
> > > --
> > > 2.25.1
Kumar Amber July 12, 2022, 3:25 p.m. UTC | #4
> > Hi Michael,
> >
> > The patch uses MTU sizes > 9000 values to check and fail but 9000 may
> > not be good value for older NICs As they might fail the test ?
> >
> > Can we kind of confirm is MTU > 9000 is safe if not we can just use a
> > lower value like 1500 etc etc to be safe So that we don't fail
> > un-necessary on the older NICs.
> >
> 
> Hi Amber, fair point , 9000 MTU might not be supported but given the nature
> of OVS I think it's a safe assumption, if not then maybe it requires further
> discussion on the DPDK side of exposing max MTU, but for now I think this is
> safe enough.
> 

I have no other concerns on the Patch Ian, Thanks for the explanation.

> Thanks
> Ian.

<snip>

Acked-by: Kumar Amber <kumar.amber@intel.com>

Regards
Amber
diff mbox series

Patch

diff --git a/tests/system-dpdk.at b/tests/system-dpdk.at
index ea2f3509b..c04588e89 100644
--- a/tests/system-dpdk.at
+++ b/tests/system-dpdk.at
@@ -384,6 +384,382 @@  dnl --------------------------------------------------------------------------
 
 
 
+dnl --------------------------------------------------------------------------
+dnl MTU increase phy port
+AT_SETUP([OVS-DPDK - MTU increase phy port])
+AT_KEYWORDS([dpdk])
+
+OVS_DPDK_PRE_PHY_SKIP()
+OVS_DPDK_START()
+
+dnl First set MTU to its default value and confirm that value, then increase the MTU value and confirm the new value
+
+dnl Add userspace bridge and attach it to OVS with default MTU value
+AT_CHECK([ovs-vsctl add-br br10 -- set bridge br10 datapath_type=netdev])
+AT_CHECK([ovs-vsctl add-port br10 phy0 -- set Interface phy0 type=dpdk options:dpdk-devargs=$(cat PCI_ADDR)], [], [stdout], [stderr])
+AT_CHECK([ovs-vsctl show], [], [stdout])
+sleep 2
+
+dnl Check default MTU value in the datapath
+AT_CHECK([ovs-appctl dpctl/show], [], [stdout])
+AT_CHECK([egrep 'mtu=1500' stdout], [], [stdout])
+
+dnl Increase MTU value and check in the datapath
+AT_CHECK([ovs-vsctl set Interface phy0 mtu_request=9000])
+
+dnl Fail if MTU is not supported
+AT_FAIL_IF([grep "Interface phy0 does not support MTU configuration" ovs-vswitchd.log], [], [stdout])
+
+dnl Fail if error is encountered during MTU setup
+AT_FAIL_IF([grep "Interface phy0 MTU (9000) setup error" ovs-vswitchd.log], [], [stdout])
+
+AT_CHECK([ovs-appctl dpctl/show], [], [stdout])
+AT_CHECK([egrep 'mtu=9000' stdout], [], [stdout])
+
+
+dnl Clean up
+AT_CHECK([ovs-vsctl del-port br10 phy0], [], [stdout], [stderr])
+OVS_VSWITCHD_STOP("[SYSTEM_DPDK_ALLOWED_LOGS]")
+AT_CLEANUP
+dnl --------------------------------------------------------------------------
+
+
+
+dnl --------------------------------------------------------------------------
+dnl MTU decrease phy port
+AT_SETUP([OVS-DPDK - MTU decrease phy port])
+AT_KEYWORDS([dpdk])
+
+OVS_DPDK_PRE_PHY_SKIP()
+OVS_DPDK_START()
+
+dnl First set an increased MTU value and confirm that value, then decrease the MTU value and confirm the new value
+
+dnl Add userspace bridge and attach it to OVS and modify MTU value
+AT_CHECK([ovs-vsctl add-br br10 -- set bridge br10 datapath_type=netdev])
+AT_CHECK([ovs-vsctl add-port br10 phy0 -- set Interface phy0 type=dpdk options:dpdk-devargs=$(cat PCI_ADDR)], [], [stdout], [stderr])
+AT_CHECK([ovs-vsctl set Interface phy0 mtu_request=9000])
+AT_CHECK([ovs-vsctl show], [], [stdout])
+sleep 2
+
+dnl Fail if MTU is not supported
+AT_FAIL_IF([grep "Interface phy0 does not support MTU configuration" ovs-vswitchd.log], [], [stdout])
+
+dnl Fail if error is encountered during MTU setup
+AT_FAIL_IF([grep "Interface phy0 MTU (9000) setup error" ovs-vswitchd.log], [], [stdout])
+
+dnl Check MTU value in the datapath
+AT_CHECK([ovs-appctl dpctl/show], [], [stdout])
+AT_CHECK([egrep 'mtu=9000' stdout], [], [stdout])
+
+dnl Decrease MTU value and check in the datapath
+AT_CHECK([ovs-vsctl set Interface phy0 mtu_request=2000])
+
+AT_CHECK([ovs-appctl dpctl/show], [], [stdout])
+AT_CHECK([egrep 'mtu=2000' stdout], [], [stdout])
+
+
+dnl Clean up
+AT_CHECK([ovs-vsctl del-port br10 phy0], [], [stdout], [stderr])
+OVS_VSWITCHD_STOP("[SYSTEM_DPDK_ALLOWED_LOGS]")
+AT_CLEANUP
+dnl --------------------------------------------------------------------------
+
+
+
+dnl --------------------------------------------------------------------------
+dnl MTU increase vport port
+AT_SETUP([OVS-DPDK - MTU increase vport port])
+AT_KEYWORDS([dpdk])
+
+AT_SKIP_IF([! which dpdk-testpmd >/dev/null 2>/dev/null])
+OVS_DPDK_PRE_CHECK()
+OVS_DPDK_START()
+
+dnl Find number of sockets
+AT_CHECK([lscpu], [], [stdout])
+AT_CHECK([cat stdout | grep "NUMA node(s)" | awk '{c=1; while (c++<$(3)) {printf "512,"}; print "512"}' > NUMA_NODE])
+
+dnl Add userspace bridge and attach it to OVS with default MTU value
+AT_CHECK([ovs-vsctl add-br br10 -- set bridge br10 datapath_type=netdev])
+AT_CHECK([ovs-vsctl add-port br10 dpdkvhostuserclient0 -- set Interface dpdkvhostuserclient0 type=dpdkvhostuserclient options:vhost-server-path=$OVS_RUNDIR/dpdkvhostclient0], [], [stdout], [stderr])
+AT_CHECK([ovs-vsctl show], [], [stdout])
+sleep 2
+
+dnl Parse log file
+AT_CHECK([grep "VHOST_CONFIG: vhost-user client: socket created" ovs-vswitchd.log], [], [stdout])
+AT_CHECK([grep "vHost User device 'dpdkvhostuserclient0' created in 'client' mode, using client socket" ovs-vswitchd.log], [], [stdout])
+AT_CHECK([grep "VHOST_CONFIG: $OVS_RUNDIR/dpdkvhostclient0: reconnecting..." ovs-vswitchd.log], [], [stdout])
+
+dnl Execute testpmd in background
+on_exit "pkill -f -x -9 'tail -f /dev/null'"
+tail -f /dev/null | dpdk-testpmd --socket-mem="$(cat NUMA_NODE)" --no-pci\
+           --vdev="net_virtio_user,path=$OVS_RUNDIR/dpdkvhostclient0,server=1" \
+           --vdev="net_tap0,iface=tap0" --file-prefix page0 \
+           --single-file-segments -- -a >$OVS_RUNDIR/testpmd-dpdkvhostuserclient0.log 2>&1 &
+
+OVS_WAIT_UNTIL([grep "virtio is now ready for processing" ovs-vswitchd.log])
+
+dnl Check default MTU value in the datapath
+AT_CHECK([ovs-appctl dpctl/show], [], [stdout])
+AT_CHECK([egrep 'mtu=1500' stdout], [], [stdout])
+
+dnl Increase MTU value and check in the datapath
+AT_CHECK([ovs-vsctl set Interface dpdkvhostuserclient0 mtu_request=9000])
+
+AT_CHECK([ovs-appctl dpctl/show], [], [stdout])
+AT_CHECK([egrep 'mtu=9000' stdout], [], [stdout])
+
+dnl Clean up
+AT_CHECK([ovs-vsctl del-port br10 dpdkvhostuserclient0], [], [stdout], [stderr])
+OVS_VSWITCHD_STOP("m4_join([], [SYSTEM_DPDK_ALLOWED_LOGS], [
+\@VHOST_CONFIG: failed to connect to $OVS_RUNDIR/dpdkvhostclient0: No such file or directory@d
+])")
+AT_CLEANUP
+dnl --------------------------------------------------------------------------
+
+
+
+dnl --------------------------------------------------------------------------
+dnl MTU decrease vport port
+AT_SETUP([OVS-DPDK - MTU decrease vport port])
+AT_KEYWORDS([dpdk])
+
+AT_SKIP_IF([! which dpdk-testpmd >/dev/null 2>/dev/null])
+OVS_DPDK_PRE_CHECK()
+OVS_DPDK_START()
+
+dnl Find number of sockets
+AT_CHECK([lscpu], [], [stdout])
+AT_CHECK([cat stdout | grep "NUMA node(s)" | awk '{c=1; while (c++<$(3)) {printf "512,"}; print "512"}' > NUMA_NODE])
+
+dnl Add userspace bridge and attach it to OVS and modify MTU value
+AT_CHECK([ovs-vsctl add-br br10 -- set bridge br10 datapath_type=netdev])
+AT_CHECK([ovs-vsctl add-port br10 dpdkvhostuserclient0 -- set Interface dpdkvhostuserclient0 type=dpdkvhostuserclient options:vhost-server-path=$OVS_RUNDIR/dpdkvhostclient0], [], [stdout], [stderr])
+AT_CHECK([ovs-vsctl set Interface dpdkvhostuserclient0 mtu_request=9000])
+AT_CHECK([ovs-vsctl show], [], [stdout])
+sleep 2
+
+dnl Parse log file
+AT_CHECK([grep "VHOST_CONFIG: vhost-user client: socket created" ovs-vswitchd.log], [], [stdout])
+AT_CHECK([grep "vHost User device 'dpdkvhostuserclient0' created in 'client' mode, using client socket" ovs-vswitchd.log], [], [stdout])
+AT_CHECK([grep "VHOST_CONFIG: $OVS_RUNDIR/dpdkvhostclient0: reconnecting..." ovs-vswitchd.log], [], [stdout])
+
+dnl Execute testpmd in background
+on_exit "pkill -f -x -9 'tail -f /dev/null'"
+tail -f /dev/null | dpdk-testpmd --socket-mem="$(cat NUMA_NODE)" --no-pci\
+           --vdev="net_virtio_user,path=$OVS_RUNDIR/dpdkvhostclient0,server=1" \
+           --vdev="net_tap0,iface=tap0" --file-prefix page0 \
+           --single-file-segments -- -a >$OVS_RUNDIR/testpmd-dpdkvhostuserclient0.log 2>&1 &
+
+OVS_WAIT_UNTIL([grep "virtio is now ready for processing" ovs-vswitchd.log])
+
+dnl Check MTU value in the datapath
+AT_CHECK([ovs-appctl dpctl/show], [], [stdout])
+AT_CHECK([egrep 'mtu=9000' stdout], [], [stdout])
+
+dnl Decrease MTU value and check in the datapath
+AT_CHECK([ovs-vsctl set Interface dpdkvhostuserclient0 mtu_request=2000])
+
+AT_CHECK([ovs-appctl dpctl/show], [], [stdout])
+AT_CHECK([egrep 'mtu=2000' stdout], [], [stdout])
+
+dnl Clean up
+AT_CHECK([ovs-vsctl del-port br10 dpdkvhostuserclient0], [], [stdout], [stderr])
+OVS_VSWITCHD_STOP("m4_join([], [SYSTEM_DPDK_ALLOWED_LOGS], [
+\@VHOST_CONFIG: failed to connect to $OVS_RUNDIR/dpdkvhostclient0: No such file or directory@d
+])")
+AT_CLEANUP
+dnl --------------------------------------------------------------------------
+
+
+
+dnl --------------------------------------------------------------------------
+dnl MTU upper bound phy port
+AT_SETUP([OVS-DPDK - MTU upper bound phy port])
+AT_KEYWORDS([dpdk])
+
+OVS_DPDK_PRE_PHY_SKIP()
+OVS_DPDK_START()
+
+dnl Add userspace bridge and attach it to OVS and set MTU value to max upper bound
+AT_CHECK([ovs-vsctl add-br br10 -- set bridge br10 datapath_type=netdev])
+AT_CHECK([ovs-vsctl add-port br10 phy0 -- set Interface phy0 type=dpdk options:dpdk-devargs=$(cat PCI_ADDR)], [], [stdout], [stderr])
+AT_CHECK([ovs-vsctl set Interface phy0 mtu_request=9702])
+AT_CHECK([ovs-vsctl show], [], [stdout])
+sleep 2
+
+dnl Fail if MTU is not supported
+AT_FAIL_IF([grep "Interface phy0 does not support MTU configuration" ovs-vswitchd.log], [], [stdout])
+
+dnl Fail if error is encountered during MTU setup
+AT_FAIL_IF([grep "Interface phy0 MTU (9702) setup error" ovs-vswitchd.log], [], [stdout])
+
+dnl Check MTU value in the datapath
+AT_CHECK([ovs-appctl dpctl/show], [], [stdout])
+AT_CHECK([egrep 'mtu=9702' stdout], [], [stdout])
+
+dnl Set MTU value above upper bound and check for error
+AT_CHECK([ovs-vsctl set Interface phy0 mtu_request=9711])
+AT_CHECK([grep "phy0: unsupported MTU 9711" ovs-vswitchd.log], [], [stdout])
+
+
+dnl Clean up
+AT_CHECK([ovs-vsctl del-port br10 phy0], [], [stdout], [stderr])
+OVS_VSWITCHD_STOP("m4_join([], [SYSTEM_DPDK_ALLOWED_LOGS], [
+\@phy0: unsupported MTU 9711@d
+\@failed to set MTU for network device phy0: Invalid argument@d
+])")
+AT_CLEANUP
+dnl --------------------------------------------------------------------------
+
+
+
+dnl --------------------------------------------------------------------------
+dnl MTU lower bound phy port
+AT_SETUP([OVS-DPDK - MTU lower bound phy port])
+AT_KEYWORDS([dpdk])
+
+OVS_DPDK_PRE_PHY_SKIP()
+OVS_DPDK_START()
+
+dnl Add userspace bridge and attach it to OVS and set MTU value to min lower bound
+AT_CHECK([ovs-vsctl add-br br10 -- set bridge br10 datapath_type=netdev])
+AT_CHECK([ovs-vsctl add-port br10 phy0 -- set Interface phy0 type=dpdk options:dpdk-devargs=$(cat PCI_ADDR)], [], [stdout], [stderr])
+AT_CHECK([ovs-vsctl set Interface phy0 mtu_request=68])
+AT_CHECK([ovs-vsctl show], [], [stdout])
+sleep 2
+
+dnl Fail if MTU is not supported
+AT_FAIL_IF([grep "Interface phy0 does not support MTU configuration" ovs-vswitchd.log], [], [stdout])
+
+dnl Fail if error is encountered during MTU setup
+AT_FAIL_IF([grep "Interface phy0 MTU (68) setup error" ovs-vswitchd.log], [], [stdout])
+
+dnl Check MTU value in the datapath
+AT_CHECK([ovs-appctl dpctl/show], [], [stdout])
+AT_CHECK([egrep 'mtu=68' stdout], [], [stdout])
+
+dnl Set MTU value below lower bound and check for error
+AT_CHECK([ovs-vsctl set Interface phy0 mtu_request=67])
+AT_CHECK([grep "phy0: unsupported MTU 67" ovs-vswitchd.log], [], [stdout])
+
+
+dnl Clean up
+AT_CHECK([ovs-vsctl del-port br10 phy0], [], [stdout], [stderr])
+OVS_VSWITCHD_STOP("m4_join([], [SYSTEM_DPDK_ALLOWED_LOGS], [
+\@phy0: unsupported MTU 67@d
+\@failed to set MTU for network device phy0: Invalid argument@d
+])")
+AT_CLEANUP
+dnl --------------------------------------------------------------------------
+
+
+
+dnl --------------------------------------------------------------------------
+dnl MTU upper bound vport port
+AT_SETUP([OVS-DPDK - MTU upper bound vport port])
+AT_KEYWORDS([dpdk])
+
+AT_SKIP_IF([! which dpdk-testpmd >/dev/null 2>/dev/null])
+OVS_DPDK_PRE_CHECK()
+OVS_DPDK_START()
+
+dnl Find number of sockets
+AT_CHECK([lscpu], [], [stdout])
+AT_CHECK([cat stdout | grep "NUMA node(s)" | awk '{c=1; while (c++<$(3)) {printf "512,"}; print "512"}' > NUMA_NODE])
+
+dnl Add userspace bridge and attach it to OVS and set MTU value to max upper bound
+AT_CHECK([ovs-vsctl add-br br10 -- set bridge br10 datapath_type=netdev])
+AT_CHECK([ovs-vsctl add-port br10 dpdkvhostuserclient0 -- set Interface dpdkvhostuserclient0 type=dpdkvhostuserclient options:vhost-server-path=$OVS_RUNDIR/dpdkvhostclient0], [], [stdout], [stderr])
+AT_CHECK([ovs-vsctl set Interface dpdkvhostuserclient0 mtu_request=9702])
+AT_CHECK([ovs-vsctl show], [], [stdout])
+sleep 2
+
+dnl Execute testpmd in background
+on_exit "pkill -f -x -9 'tail -f /dev/null'"
+tail -f /dev/null | dpdk-testpmd --socket-mem="$(cat NUMA_NODE)" --no-pci\
+           --vdev="net_virtio_user,path=$OVS_RUNDIR/dpdkvhostclient0,server=1" \
+           --vdev="net_tap0,iface=tap0" --file-prefix page0 \
+           --single-file-segments -- -a >$OVS_RUNDIR/testpmd-dpdkvhostuserclient0.log 2>&1 &
+
+OVS_WAIT_UNTIL([grep "virtio is now ready for processing" ovs-vswitchd.log])
+
+dnl Check MTU value in the datapath
+AT_CHECK([ovs-appctl dpctl/show], [], [stdout])
+AT_CHECK([egrep 'mtu=9702' stdout], [], [stdout])
+
+dnl Set MTU value above upper bound and check for error
+AT_CHECK([ovs-vsctl set Interface dpdkvhostuserclient0 mtu_request=9711])
+AT_CHECK([grep "dpdkvhostuserclient0: unsupported MTU 9711" ovs-vswitchd.log], [], [stdout])
+
+dnl Clean up
+AT_CHECK([ovs-vsctl del-port br10 dpdkvhostuserclient0], [], [stdout], [stderr])
+OVS_VSWITCHD_STOP("m4_join([], [SYSTEM_DPDK_ALLOWED_LOGS], [
+\@VHOST_CONFIG: failed to connect to $OVS_RUNDIR/dpdkvhostclient0: No such file or directory@d
+\@dpdkvhostuserclient0: unsupported MTU 9711@d
+\@failed to set MTU for network device dpdkvhostuserclient0: Invalid argument@d
+])")
+AT_CLEANUP
+dnl --------------------------------------------------------------------------
+
+
+
+dnl --------------------------------------------------------------------------
+dnl MTU lower bound vport port
+AT_SETUP([OVS-DPDK - MTU lower bound vport port])
+AT_KEYWORDS([dpdk])
+
+AT_SKIP_IF([! which dpdk-testpmd >/dev/null 2>/dev/null])
+OVS_DPDK_PRE_CHECK()
+OVS_DPDK_START()
+
+dnl Find number of sockets
+AT_CHECK([lscpu], [], [stdout])
+AT_CHECK([cat stdout | grep "NUMA node(s)" | awk '{c=1; while (c++<$(3)) {printf "512,"}; print "512"}' > NUMA_NODE])
+
+dnl Add userspace bridge and attach it to OVS and set MTU value to min lower bound
+AT_CHECK([ovs-vsctl add-br br10 -- set bridge br10 datapath_type=netdev])
+AT_CHECK([ovs-vsctl add-port br10 dpdkvhostuserclient0 -- set Interface dpdkvhostuserclient0 type=dpdkvhostuserclient options:vhost-server-path=$OVS_RUNDIR/dpdkvhostclient0], [], [stdout], [stderr])
+AT_CHECK([ovs-vsctl set Interface dpdkvhostuserclient0 mtu_request=68])
+AT_CHECK([ovs-vsctl show], [], [stdout])
+sleep 2
+
+dnl Parse log file
+AT_CHECK([grep "VHOST_CONFIG: vhost-user client: socket created" ovs-vswitchd.log], [], [stdout])
+AT_CHECK([grep "vHost User device 'dpdkvhostuserclient0' created in 'client' mode, using client socket" ovs-vswitchd.log], [], [stdout])
+AT_CHECK([grep "VHOST_CONFIG: $OVS_RUNDIR/dpdkvhostclient0: reconnecting..." ovs-vswitchd.log], [], [stdout])
+
+dnl Execute testpmd in background
+on_exit "pkill -f -x -9 'tail -f /dev/null'"
+tail -f /dev/null | dpdk-testpmd --socket-mem="$(cat NUMA_NODE)" --no-pci\
+           --vdev="net_virtio_user,path=$OVS_RUNDIR/dpdkvhostclient0,server=1" \
+           --vdev="net_tap0,iface=tap0" --file-prefix page0 \
+           --single-file-segments -- -a >$OVS_RUNDIR/testpmd-dpdkvhostuserclient0.log 2>&1 &
+
+OVS_WAIT_UNTIL([grep "virtio is now ready for processing" ovs-vswitchd.log])
+
+dnl Check MTU value in the datapath
+AT_CHECK([ovs-appctl dpctl/show], [], [stdout])
+AT_CHECK([egrep 'mtu=68' stdout], [], [stdout])
+
+dnl Set MTU value below lower bound and check for error
+AT_CHECK([ovs-vsctl set Interface dpdkvhostuserclient0 mtu_request=67])
+AT_CHECK([grep "dpdkvhostuserclient0: unsupported MTU 67" ovs-vswitchd.log], [], [stdout])
+
+
+dnl Clean up
+AT_CHECK([ovs-vsctl del-port br10 dpdkvhostuserclient0], [], [stdout], [stderr])
+OVS_VSWITCHD_STOP("m4_join([], [SYSTEM_DPDK_ALLOWED_LOGS], [
+\@VHOST_CONFIG: failed to connect to $OVS_RUNDIR/dpdkvhostclient0: No such file or directory@d
+\@dpdkvhostuserclient0: unsupported MTU 67@d
+\@failed to set MTU for network device dpdkvhostuserclient0: Invalid argument@d
+])")
+AT_CLEANUP
+dnl --------------------------------------------------------------------------
+
+
+
 dnl --------------------------------------------------------------------------
 dnl Add standard DPDK PHY port
 AT_SETUP([OVS-DPDK - MFEX Autovalidator])