From patchwork Wed Apr 8 18:22:13 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Maxim Uvarov X-Patchwork-Id: 46887 Return-Path: X-Original-To: linaro@patches.linaro.org Delivered-To: linaro@patches.linaro.org Received: from mail-la0-f70.google.com (mail-la0-f70.google.com [209.85.215.70]) by ip-10-151-82-157.ec2.internal (Postfix) with ESMTPS id DDA0821416 for ; Wed, 8 Apr 2015 18:23:25 +0000 (UTC) Received: by labgx2 with SMTP id gx2sf21894067lab.1 for ; Wed, 08 Apr 2015 11:23:24 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:delivered-to:delivered-to:from:to:date :message-id:in-reply-to:references:subject:precedence:list-id :list-unsubscribe:list-archive:list-post:list-help:list-subscribe :mime-version:content-type:content-transfer-encoding:errors-to :sender:x-original-sender:x-original-authentication-results :mailing-list; bh=VdlmzuJ7FWN7h/ofZvZVt0SrQTyNMf24pCBZ40mrGcE=; b=UmpKrjRF2YbycKvjaBA1wze5ebuL9MH/h8AT0Fjd7pEww8j/JIxf2kgVWaS95CUzqq 3xOQZPIBzxaRtnWmcksgWP6ILDta7pUV2ZcAIete6j/Imf7U6LMU0z5z9IE0JjUJ2Upl 1nSXc1CIRf58z1PH7wTZW/h+73c4OaQEE6Xf8XNyx5lqZS6XoA5sMgMotZQa4wXaQ9gW 08HWLvZTcA6xWJErnBNLXMdLzYfPB++/WEBUJd8KhhO+Fw57vwJAeoH7Yd8tJ2eOT2Oe TB3nP4busN4nvlNtLzkTOINMVLA2wKVN5ukKRo9zPeDNnuHIAY8cFdPWt3yDDOK9gyQT r5Gg== X-Gm-Message-State: ALoCoQlHK7XrG3JC9QY3pZsKivFxc+5o7N4FzKtupbJI8yAwHaCOPSaO3zzl6a3Xri3YR6n92rlB X-Received: by 10.112.203.168 with SMTP id kr8mr2824927lbc.10.1428517404087; Wed, 08 Apr 2015 11:23:24 -0700 (PDT) X-BeenThere: patchwork-forward@linaro.org Received: by 10.152.45.98 with SMTP id l2ls195970lam.28.gmail; Wed, 08 Apr 2015 11:23:23 -0700 (PDT) X-Received: by 10.112.157.100 with SMTP id wl4mr24674684lbb.108.1428517403720; Wed, 08 Apr 2015 11:23:23 -0700 (PDT) Received: from mail-la0-f43.google.com (mail-la0-f43.google.com. [209.85.215.43]) by mx.google.com with ESMTPS id u2si9455027laz.161.2015.04.08.11.23.23 for (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 08 Apr 2015 11:23:23 -0700 (PDT) Received-SPF: pass (google.com: domain of patch+caf_=patchwork-forward=linaro.org@linaro.org designates 209.85.215.43 as permitted sender) client-ip=209.85.215.43; Received: by lagv1 with SMTP id v1so72488686lag.3 for ; Wed, 08 Apr 2015 11:23:23 -0700 (PDT) X-Received: by 10.112.16.196 with SMTP id i4mr13658390lbd.72.1428517403571; Wed, 08 Apr 2015 11:23:23 -0700 (PDT) X-Forwarded-To: patchwork-forward@linaro.org X-Forwarded-For: patch@linaro.org patchwork-forward@linaro.org Delivered-To: patch@linaro.org Received: by 10.112.67.65 with SMTP id l1csp17363lbt; Wed, 8 Apr 2015 11:23:22 -0700 (PDT) X-Received: by 10.229.122.199 with SMTP id m7mr32466376qcr.22.1428517401307; Wed, 08 Apr 2015 11:23:21 -0700 (PDT) Received: from lists.linaro.org (lists.linaro.org. [54.225.227.206]) by mx.google.com with ESMTP id w10si11786606qcd.13.2015.04.08.11.23.20; Wed, 08 Apr 2015 11:23:21 -0700 (PDT) Received-SPF: pass (google.com: domain of lng-odp-bounces@lists.linaro.org designates 54.225.227.206 as permitted sender) client-ip=54.225.227.206; Received: by lists.linaro.org (Postfix, from userid 109) id 775D364FD7; Wed, 8 Apr 2015 18:23:20 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on ip-10-142-244-252.ec2.internal X-Spam-Level: X-Spam-Status: No, score=-0.7 required=5.0 tests=RCVD_IN_DNSWL_LOW, RCVD_IN_MSPIKE_H2, URIBL_BLOCKED autolearn=unavailable autolearn_force=no version=3.4.0 Received: from ip-10-142-244-252.ec2.internal (localhost [127.0.0.1]) by lists.linaro.org (Postfix) with ESMTP id 1CB0964FA7; Wed, 8 Apr 2015 18:22:45 +0000 (UTC) X-Original-To: lng-odp@lists.linaro.org Delivered-To: lng-odp@lists.linaro.org Received: by lists.linaro.org (Postfix, from userid 109) id 4AA8764FCB; Wed, 8 Apr 2015 18:22:36 +0000 (UTC) Received: from mail-lb0-f176.google.com (mail-lb0-f176.google.com [209.85.217.176]) by lists.linaro.org (Postfix) with ESMTPS id 06F7664FA7 for ; Wed, 8 Apr 2015 18:22:27 +0000 (UTC) Received: by lbcga7 with SMTP id ga7so23907572lbc.1 for ; Wed, 08 Apr 2015 11:22:25 -0700 (PDT) X-Received: by 10.112.42.16 with SMTP id j16mr20546375lbl.98.1428517345709; Wed, 08 Apr 2015 11:22:25 -0700 (PDT) Received: from localhost.localdomain (ppp91-76-169-66.pppoe.mtu-net.ru. [91.76.169.66]) by mx.google.com with ESMTPSA id o8sm2664845lal.2.2015.04.08.11.22.24 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Wed, 08 Apr 2015 11:22:24 -0700 (PDT) From: Maxim Uvarov To: lng-odp@lists.linaro.org Date: Wed, 8 Apr 2015 21:22:13 +0300 Message-Id: <1428517336-29626-3-git-send-email-maxim.uvarov@linaro.org> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1428517336-29626-1-git-send-email-maxim.uvarov@linaro.org> References: <1428517336-29626-1-git-send-email-maxim.uvarov@linaro.org> X-Topics: patch Subject: [lng-odp] [PATCHv13 2/5] validation: implement platform env X-BeenThere: lng-odp@lists.linaro.org X-Mailman-Version: 2.1.16 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: , List-Help: , List-Subscribe: , MIME-Version: 1.0 Errors-To: lng-odp-bounces@lists.linaro.org Sender: "lng-odp" X-Removed-Original-Auth: Dkim didn't pass. X-Original-Sender: maxim.uvarov@linaro.org X-Original-Authentication-Results: mx.google.com; spf=pass (google.com: domain of patch+caf_=patchwork-forward=linaro.org@linaro.org designates 209.85.215.43 as permitted sender) smtp.mail=patch+caf_=patchwork-forward=linaro.org@linaro.org Mailing-list: list patchwork-forward@linaro.org; contact patchwork-forward+owners@linaro.org X-Google-Group-Id: 836684582541 Different platforms need different steps to set up pktio for testing. That might be veth devices for linux-generic, kernel modules and extended set up for dpdk and simple set pktio testing names for other platforms. This patch implements platform/test/pktio_env file which sets up global envs for pktio. Signed-off-by: Maxim Uvarov Signed-off-by: Ciprian Barbu Signed-off-by: Maxim Uvarov --- platform/linux-generic/Makefile.am | 2 + platform/linux-generic/m4/configure.m4 | 2 + platform/linux-generic/test/Makefile.am | 1 + platform/linux-generic/test/pktio_env | 120 +++++++++++++++++++++++++ test/README | 7 +- test/validation/odp_pktio_run | 151 ++++++++++---------------------- 6 files changed, 177 insertions(+), 106 deletions(-) create mode 100644 platform/linux-generic/test/Makefile.am create mode 100644 platform/linux-generic/test/pktio_env diff --git a/platform/linux-generic/Makefile.am b/platform/linux-generic/Makefile.am index e5558ac..033be51 100644 --- a/platform/linux-generic/Makefile.am +++ b/platform/linux-generic/Makefile.am @@ -5,6 +5,8 @@ AM_CFLAGS += -I$(srcdir)/include AM_CFLAGS += -I$(top_srcdir)/include AM_CFLAGS += -I$(top_srcdir)/helper/include +SUBDIRS = test + include_HEADERS = \ $(top_srcdir)/include/odp.h diff --git a/platform/linux-generic/m4/configure.m4 b/platform/linux-generic/m4/configure.m4 index 00f2f89..55124f1 100644 --- a/platform/linux-generic/m4/configure.m4 +++ b/platform/linux-generic/m4/configure.m4 @@ -15,3 +15,5 @@ AC_LINK_IFELSE( echo "GCC-style __atomic builtins not supported by the compiler." echo "Use newer version. For gcc > 4.7.0" exit -1) + +AC_CONFIG_FILES([platform/linux-generic/test/Makefile]) diff --git a/platform/linux-generic/test/Makefile.am b/platform/linux-generic/test/Makefile.am new file mode 100644 index 0000000..91e361c --- /dev/null +++ b/platform/linux-generic/test/Makefile.am @@ -0,0 +1 @@ +dist_bin_SCRIPTS = $(srcdir)/pktio_env diff --git a/platform/linux-generic/test/pktio_env b/platform/linux-generic/test/pktio_env new file mode 100644 index 0000000..5e547e4 --- /dev/null +++ b/platform/linux-generic/test/pktio_env @@ -0,0 +1,120 @@ +#!/bin/sh +# +# Copyright (c) 2015, Linaro Limited +# All rights reserved. +# +# SPDX-License-Identifier: BSD-3-Clause +# +# Test script wrapper for running ODP pktio apps on linux-generic. +# +# For linux-generic the default behavior is to create two pairs of +# virtual Ethernet interfaces and provide the names of these via +# environment variables to pktio apps, the interfaces will be removed +# before the script exits. +# +# Note that the creation of virtual Ethernet devices depends on having +# CONFIG_VETH enabled in the kernel, if not enabled the env setup will be skipped. +# +# Network set up +# IF0 <---> IF1 +# IF2 <---> IF3 +IF0=pktio-p0-p1 +IF1=pktio-p1-p0 +IF2=pktio-p2-p3 +IF3=pktio-p3-p2 + +if [ "$0" = "$BASH_SOURCE" ]; then + echo "Error: Platform specific env file has to be sourced." +fi + +check_for_root() +{ + if [ "$(id -u)" != "0" ]; then + echo "check_for_root(): need to be root to setup VETH" + return 1 + fi + return 0 +} + +# wait for a network interface's operational state to be "up" +wait_for_iface_up() +{ + iface=$1 + cnt=0 + + while [ $cnt -lt 50 ]; do + read operstate < /sys/class/net/$iface/operstate + + if [ $? -ne 0 ]; then + break + elif [ "$operstate" = "up" ]; then + return 0 + fi + + sleep 0.1 + cnt=`expr $cnt + 1` + done + + return 1 +} + +setup_pktio_env() +{ + echo "pktio: setting up test interfaces $IF0, $IF1, $IF2, $IF3." + + check_for_root + if [ $? -ne 0 ]; then + return 1 + fi + + for iface in $IF0 $IF1 $IF2 $IF3; do + ip link show $iface 2> /dev/null + if [ $? -eq 0 ]; then + echo "pktio: interface $iface already exist $?" + return 2 + fi + done + + if [ "$1" = "clean" ]; then + trap cleanup_pktio_env EXIT + fi + + ip link add $IF0 type veth peer name $IF1 + if [ $? -ne 0 ]; then + echo "pktio: error: unable to create veth pair" + return 3 + fi + ip link add $IF2 type veth peer name $IF3 + if [ $? -ne 0 ]; then + echo "pktio: error: unable to create veth pair" + return 4 + fi + + for iface in $IF0 $IF1 $IF2 $IF3; do + ip link set $iface mtu 9216 up + ifconfig $iface -arp + done + + # check that the interface has come up before starting the test + for iface in $IF0 $IF1 $IF2 $IF3; do + wait_for_iface_up $iface + if [ $? -ne 0 ]; then + echo "pktio: interface $iface failed to come up" + return 5 + fi + done +} + +cleanup_pktio_env() +{ + echo "pktio: removing test interfaces $IF0, $IF1, $IF2, $IF3" + check_for_root + if [ $? -ne 0 ]; then + return 1 + fi + + for iface in $IF0 $IF1 $IF2 $IF3; do + ip link del $iface 2> /dev/null + done + return 0 +} diff --git a/test/README b/test/README index b3aa3ab..b5700d1 100644 --- a/test/README +++ b/test/README @@ -13,4 +13,9 @@ To run valgrind on the executables do: $ ./bootstrap $ ./configure --enable-test-vald --enable-valgrind $ cd test/validation -$ make check-valgrind + +Some tests scripts, like pktio require ODP_PLATFORM variable to be exported to load +platform specific env files. 'make check' defines that variable automatically, +and package will put all required files at the same place as tests binaries. But if +you run tests manually from odp source code then you need it to be defined, like: +export ODP_PLATFROM=linux-generic. diff --git a/test/validation/odp_pktio_run b/test/validation/odp_pktio_run index b725a5f..47fdf1e 100755 --- a/test/validation/odp_pktio_run +++ b/test/validation/odp_pktio_run @@ -1,104 +1,51 @@ #!/bin/sh # -# Test script wrapper for running ODP pktio tests on linux-generic. +# Copyright (c) 2015, Linaro Limited +# All rights reserved. # -# For platforms other than linux-generic this script does nothing other -# than running the odp_pktio binary, odp_pktio will then attempt to -# open and use the special device named "loop" for testing. +# SPDX-License-Identifier: BSD-3-Clause # -# For linux-generic the default behaviour is to create a pair of -# virtual Ethernet interfaces and provide the names of these via -# environment variables to odp_pktio, the interfaces will be removed -# before the script exits. Note that the creation of virtual Ethernet -# devices depends on having CONFIG_VETH enabled in the kernel, if not -# enabled the test will be skipped. + +# TEST_DIR is set by Makefile to point to the directory where binaries have been +# built (Makefile variable builddir) +# If TEST_DIR is not set it means we are not running with make, and in this case +# there are two situations: +# 1. user build ODP in the same dir as the source (most likely) +# here the user can simply call odp_pktio_run +# 2. user may have built ODP in a separate build dir (like bitbake usually does) +# here the user has to do something like $ODP/test/validation/odp_pktio_run # -# The evironment variable ODP_PLATFORM is used to determine the -# platform under test, when this script is invoked via 'make check' -# this variable is set automatically. -# -# It's also possible to split up the steps, which makes it easier when -# debugging, for example; -# -# export ODP_PLATFORM=linux-generic -# odp_pktio_run setup -# wireshark -i pktio-p0 -k & -# odp_pktio_run -# (repeat running test multiple times..) -# odp_pktio_run cleanup -# -TEST_DIR="${TEST_DIR:-$(dirname $0)}" -IF0=pktio-p0 -IF1=pktio-p1 +# In both situations the script assumes that the user is in the directory where +# odp_pktio exists. If that's not true, then the user has to specify the path +# to it and run: +# TEST_DIR=$builddir $ODP/test/validation/odp_pktio_run + +# directory where test binaries have been built +TEST_DIR="${TEST_DIR:-$PWD}" +# directory where test sources are, including scripts +TEST_SRC_DIR=$(dirname $0) + +PATH=$TEST_DIR:$PATH # exit codes expected by automake for skipped tests TEST_SKIPPED=77 -# wait for a network interface's operational state to be "up" -wait_for_iface_up() -{ - iface=$1 - cnt=0 - - while [ $cnt -lt 50 ]; do - read operstate < /sys/class/net/$iface/operstate - - if [ $? != 0 ]; then - break - elif [ "$operstate" = "up" ]; then - return 0 - fi - - sleep 0.1 - cnt=`expr $cnt + 1` - done - - return 1 -} - -setup_env1() -{ - ip link show $IF0 2> /dev/null - if [ $? = 0 ]; then - ip link show $IF1 2> /dev/null - if [ $? = 0 ]; then - echo "pktio: interfaces $IF0 and $IF1 already exist" - return - fi +# Use installed pktio env or for make check take it from platform directory +if [ -f "./pktio_env" ]; then + . ./pktio_env + if [ "$ODP_PLATFORM" = "" ]; then + echo "$0: error: ODP_PLATFORM must be defined" + # not skipped as this should never happen via "make check" + exit 1 + elif [ -f ${TEST_SRC_DIR}/../../platform/$ODP_PLATFORM/test/pktio_env ]; then + . ${TEST_SRC_DIR}/../../platform/$ODP_PLATFORM/test/pktio_env + else + echo "BUG: unable to find pktio_env!" + echo "pktio_env has to be in current directory or in platform/\$ODP_PLATFORM/test." + echo "ODP_PLATFORM=\"$ODP_PLATFORM\"" + exit 1 fi - - echo "pktio: setting up test interfaces $IF0 and $IF1" - - if [ "$1" = "clean" ]; then - trap cleanup_env1 EXIT - fi - - ip link add $IF0 type veth peer name $IF1 - if [ $? != 0 ]; then - echo "pktio: error: unable to create veth pair" - exit $TEST_SKIPPED - fi - ip link set $IF0 mtu 9216 up - ip link set $IF1 mtu 9216 up - ifconfig $IF0 -arp - ifconfig $IF1 -arp - - # check that the interface has come up before starting the test - for iface in $IF0 $IF1; do - wait_for_iface_up $iface - if [ $? != 0 ]; then - echo "pktio: interface $iface failed to come up" - exit 1 - fi - done -} - -cleanup_env1() -{ - echo "pktio: removing test interfaces $IF0 and $IF1" - ip link del $IF0 2> /dev/null - ip link del $IF1 2> /dev/null -} +fi run_test() { @@ -115,13 +62,13 @@ run_test() if [ "$disabletype" != "SKIP" ]; then export ODP_PKTIO_DISABLE_SOCKET_${distype}=y fi - $TEST_DIR/odp_pktio - if [ $? != 0 ]; then + odp_pktio + if [ $? -ne 0 ]; then ret=1 fi done - if [ $ret != 0 ]; then + if [ $ret -ne 0 ]; then echo "!!! FAILED !!!" fi @@ -132,13 +79,13 @@ run() { if [ "$ODP_PLATFORM" != "linux-generic" -o "$(id -u)" != "0" ]; then echo "pktio: using 'loop' device" - $TEST_DIR/odp_pktio + odp_pktio exit $? fi if [ "$ODP_PKTIO_IF0" = "" ]; then # no interfaces specified on linux-generic, use defaults - setup_env1 clean + setup_pktio_env clean export ODP_PKTIO_IF0=$IF0 export ODP_PKTIO_IF1=$IF1 fi @@ -146,14 +93,8 @@ run() run_test } -if [ "$ODP_PLATFORM" = "" ]; then - echo "pktio: error: ODP_PLATFORM must be defined" - # not skipped as this should never happen via "make check" - exit 1 -fi - case "$1" in - setup) setup_env1 ;; - cleanup) cleanup_env1 ;; - *) run ;; + setup) setup_pktio_env ;; + cleanup) cleanup_pktio_env ;; + *) run ;; esac