From patchwork Fri Sep 14 14:12:02 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Bala Sankaran X-Patchwork-Id: 969895 X-Patchwork-Delegate: ian.stokes@intel.com Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (mailfrom) smtp.mailfrom=openvswitch.org (client-ip=140.211.169.12; helo=mail.linuxfoundation.org; envelope-from=ovs-dev-bounces@openvswitch.org; receiver=) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=redhat.com Received: from mail.linuxfoundation.org (mail.linuxfoundation.org [140.211.169.12]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 42BcwP5D3pz9s4V for ; Sat, 15 Sep 2018 00:14:45 +1000 (AEST) Received: from mail.linux-foundation.org (localhost [127.0.0.1]) by mail.linuxfoundation.org (Postfix) with ESMTP id 2DCD3E6B; Fri, 14 Sep 2018 14:12:18 +0000 (UTC) X-Original-To: dev@openvswitch.org Delivered-To: ovs-dev@mail.linuxfoundation.org Received: from smtp1.linuxfoundation.org (smtp1.linux-foundation.org [172.17.192.35]) by mail.linuxfoundation.org (Postfix) with ESMTPS id 15F4BE68 for ; Fri, 14 Sep 2018 14:12:17 +0000 (UTC) X-Greylist: domain auto-whitelisted by SQLgrey-1.7.6 Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by smtp1.linuxfoundation.org (Postfix) with ESMTPS id 57DBB7E5 for ; Fri, 14 Sep 2018 14:12:16 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.11]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id F3273C0467C5; Fri, 14 Sep 2018 14:12:15 +0000 (UTC) Received: from localhost.localdomain (unknown [10.18.25.174]) by smtp.corp.redhat.com (Postfix) with ESMTP id 40482600C6; Fri, 14 Sep 2018 14:12:14 +0000 (UTC) From: Bala Sankaran To: dev@openvswitch.org Date: Fri, 14 Sep 2018 10:12:02 -0400 Message-Id: <20180914141202.5334-7-bsankara@redhat.com> In-Reply-To: <20180914141202.5334-1-bsankara@redhat.com> References: <20180914141202.5334-1-bsankara@redhat.com> X-Scanned-By: MIMEDefang 2.79 on 10.5.11.11 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.31]); Fri, 14 Sep 2018 14:12:16 +0000 (UTC) X-Spam-Status: No, score=-6.9 required=5.0 tests=BAYES_00,RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on smtp1.linux-foundation.org Subject: [ovs-dev] [PATCH v5 6/6] system-dpdk: Connect network namespaces via dpdkvhostuser ports X-BeenThere: ovs-dev@openvswitch.org X-Mailman-Version: 2.1.12 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Sender: ovs-dev-bounces@openvswitch.org Errors-To: ovs-dev-bounces@openvswitch.org This adds a few unit tests to the 'check-dpdk' subsystem that will exercise allocations of two network namespaces, PMDs, and the vhost-user and vhost-user-client code path(separate tests). As part of the tests, userspace bridge is added and attached to OVS. Also, the tap devices created are added to the network namespaces. The ultimatum is to connect the two network namespaces by pinging them. Signed-off-by: Bala Sankaran Co-authored-by: Aaron Conole Signed-off-by: Aaron Conole Tested-by: Tiago Lam --- tests/system-dpdk.at | 160 ++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 159 insertions(+), 1 deletion(-) diff --git a/tests/system-dpdk.at b/tests/system-dpdk.at index 58dc8aaae..1da020aba 100644 --- a/tests/system-dpdk.at +++ b/tests/system-dpdk.at @@ -1,7 +1,10 @@ +m4_define([CONFIGURE_VETH_OFFLOADS], + [AT_CHECK([ethtool -K $1 tx off], [0], [ignore], [ignore])]) + AT_BANNER([OVS-DPDK unit tests]) dnl -------------------------------------------------------------------------- -dnl Check if EAL init is successfull +dnl Check if EAL init is successful AT_SETUP([OVS-DPDK datapath - EAL init]) AT_KEYWORDS([dpdk]) OVS_DPDK_PRE_CHECK() @@ -74,3 +77,158 @@ OVS_VSWITCHD_STOP(["\@does not exist. The Open vSwitch kernel module is probably \@EAL: No free hugepages reported in hugepages-1048576kB@d"]) AT_CLEANUP dnl -------------------------------------------------------------------------- + + + +dnl -------------------------------------------------------------------------- +dnl Ping vhost-user port +AT_SETUP([OVS-DPDK datapath - ping vhost-user ports]) +AT_KEYWORDS([dpdk]) +OVS_DPDK_PRE_CHECK() +AT_SKIP_IF([! which testpmd >/dev/null 2>/dev/null]) +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 +AT_CHECK([ovs-vsctl add-br br10 -- set bridge br10 datapath_type=netdev]) +AT_CHECK([ovs-vsctl add-port br10 dpdkvhostuser0 -- set Interface dpdkvhostuser0 \ + type=dpdkvhostuser], [], + [stdout], [stderr]) +AT_CHECK([ovs-vsctl show], [], [stdout]) + +dnl Parse log file +AT_CHECK([grep "VHOST_CONFIG: vhost-user server: socket created" \ + ovs-vswitchd.log], [], [stdout]) +AT_CHECK([grep "Socket $OVS_RUNDIR/dpdkvhostuser0 created for vhost-user port dpdkvhostuser0" \ + ovs-vswitchd.log], [], [stdout]) +AT_CHECK([grep "VHOST_CONFIG: bind to $OVS_RUNDIR/dpdkvhostuser0" ovs-vswitchd.log], [], + [stdout]) + +dnl Set up namespaces +ADD_NAMESPACES(ns1, ns2) + +dnl Add veth device +ADD_VETH(tap1, ns2, br10, "172.31.110.12/24") + +dnl Execute testpmd in background +on_exit "pkill -f -x -9 'tail -f /dev/null'" +tail -f /dev/null | testpmd --socket-mem="$(cat NUMA_NODE)" --no-pci\ + --vdev="net_virtio_user,path=$OVS_RUNDIR/dpdkvhostuser0" \ + --vdev="net_tap0,iface=tap0" --file-prefix page0 \ + --single-file-segments -- -a >$OVS_RUNDIR/testpmd-dpdkvhostuser0.log 2>&1 & + +dnl Give settling time to the testpmd processes - NOTE: this is bad form. +sleep 10 + +dnl Move the tap devices to the namespaces +AT_CHECK([ps aux | grep testpmd], [], [stdout], [stderr]) +AT_CHECK([ip link show], [], [stdout], [stderr]) +AT_CHECK([ip link set tap0 netns ns1], [], [stdout], [stderr]) + +AT_CHECK([ip netns exec ns1 ip link show], [], [stdout], [stderr]) +AT_CHECK([ip netns exec ns1 ip link show | grep tap0], [], [stdout], [stderr]) +AT_CHECK([ip netns exec ns1 ip link set tap0 up], [], [stdout], [stderr]) +AT_CHECK([ip netns exec ns1 ip addr add 172.31.110.11/24 dev tap0], [], + [stdout], [stderr]) + +AT_CHECK([ip netns exec ns1 ip link show], [], [stdout], [stderr]) +AT_CHECK([ip netns exec ns2 ip link show], [], [stdout], [stderr]) +AT_CHECK([ip netns exec ns1 ping -c 4 -I tap0 172.31.110.12], [], [stdout], + [stderr]) + +dnl Clean up the testpmd now +pkill -f -x -9 'tail -f /dev/null' + +dnl Clean up +AT_CHECK([ovs-vsctl del-port br10 dpdkvhostuser0], [], [stdout], [stderr]) +OVS_VSWITCHD_STOP(["\@does not exist. The Open vSwitch kernel module is probably not loaded.@d +\@Failed to enable flow control@d +\@VHOST_CONFIG: recvmsg failed@d +\@VHOST_CONFIG: failed to connect to $OVS_RUNDIR/dpdkvhostuser0: No such file or directory@d +\@Global register is changed during@d +\@dpdkvhostuser ports are considered deprecated; please migrate to dpdkvhostuserclient ports.@d +\@failed to enumerate system datapaths: No such file or directory@d +\@EAL: Invalid NUMA socket, default to 0@d +\@EAL: WARNING: cpu flags constant_tsc=yes nonstop_tsc=no -> using unreliable clock cycles !@d +\@EAL: No free hugepages reported in hugepages-1048576kB@d"]) +AT_CLEANUP +dnl -------------------------------------------------------------------------- + +dnl -------------------------------------------------------------------------- +dnl Ping vhost-user-client port +AT_SETUP([OVS-DPDK datapath - ping vhost-user-client ports]) +AT_KEYWORDS([dpdk]) +OVS_DPDK_PRE_CHECK() +AT_SKIP_IF([! which testpmd >/dev/null 2>/dev/null]) +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 +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]) + +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 Set up namespaces +ADD_NAMESPACES(ns1, ns2) + +dnl Add veth device +ADD_VETH(tap1, ns2, br10, "172.31.110.12/24") + +dnl Execute testpmd in background +on_exit "pkill -f -x -9 'tail -f /dev/null'" +tail -f /dev/null | 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 & + +dnl Give settling time to the testpmd processes - NOTE: this is bad form. +sleep 10 + +dnl Move the tap devices to the namespaces +AT_CHECK([ps aux | grep testpmd], [], [stdout], [stderr]) +AT_CHECK([ip link show], [], [stdout], [stderr]) +AT_CHECK([ip link set tap0 netns ns1], [], [stdout], [stderr]) + +AT_CHECK([ip netns exec ns1 ip link show], [], [stdout], [stderr]) +AT_CHECK([ip netns exec ns1 ip link show | grep tap0], [], [stdout], [stderr]) +AT_CHECK([ip netns exec ns1 ip link set tap0 up], [], [stdout], [stderr]) +AT_CHECK([ip netns exec ns1 ip addr add 172.31.110.11/24 dev tap0], [], + [stdout], [stderr]) + +AT_CHECK([ip netns exec ns1 ip link show], [], [stdout], [stderr]) +AT_CHECK([ip netns exec ns2 ip link show], [], [stdout], [stderr]) +AT_CHECK([ip netns exec ns1 ping -c 4 -I tap0 172.31.110.12], [], [stdout], + [stderr]) + +dnl Clean up the testpmd now +pkill -f -x -9 'tail -f /dev/null' + +dnl Clean up +AT_CHECK([ovs-vsctl del-port br10 dpdkvhostuserclient0], [], [stdout], [stderr]) +OVS_VSWITCHD_STOP(["\@does not exist. The Open vSwitch kernel module is probably not loaded.@d +\@Failed to enable flow control@d +\@VHOST_CONFIG: recvmsg failed@d +\@VHOST_CONFIG: failed to connect to $OVS_RUNDIR/dpdkvhostclient0: No such file or directory@d +\@Global register is changed during@d +\@dpdkvhostuser ports are considered deprecated; please migrate to dpdkvhostuserclient ports.@d +\@failed to enumerate system datapaths: No such file or directory@d +\@EAL: Invalid NUMA socket, default to 0@d +\@EAL: WARNING: cpu flags constant_tsc=yes nonstop_tsc=no -> using unreliable clock cycles !@d +\@EAL: No free hugepages reported in hugepages-1048576kB@d"]) +AT_CLEANUP +dnl --------------------------------------------------------------------------