[PATCHv5] validation: implement platform env and add performance/odp_example_l2fwd_run

Message ID 1427301166-31433-1-git-send-email-maxim.uvarov@linaro.org
State New
Headers show

Commit Message

Maxim Uvarov March 25, 2015, 4:32 p.m.
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.
As prof of validation that it works l2fwd is added to make check.

Signed-off-by: Maxim Uvarov <maxim.uvarov@linaro.org>
---
 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   | 113 +++++++++++++++++++++++++++++
 test/performance/Makefile.am            |   4 +-
 test/performance/odp_example_l2fwd_run  |  42 +++++++++++
 test/performance/odp_scheduling_run     |   5 ++
 test/validation/odp_pktio_run           | 125 +++++---------------------------
 8 files changed, 186 insertions(+), 108 deletions(-)
 create mode 100644 platform/linux-generic/test/Makefile.am
 create mode 100755 platform/linux-generic/test/pktio_env
 create mode 100755 test/performance/odp_example_l2fwd_run

Comments

Mike Holmes March 26, 2015, 1:36 p.m. | #1
On 25 March 2015 at 12:32, Maxim Uvarov <maxim.uvarov@linaro.org> wrote:

> 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.
> As prof of validation that it works l2fwd is added to make check.
>
> Signed-off-by: Maxim Uvarov <maxim.uvarov@linaro.org>
> ---
>  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   | 113
> +++++++++++++++++++++++++++++
>  test/performance/Makefile.am            |   4 +-
>  test/performance/odp_example_l2fwd_run  |  42 +++++++++++
>  test/performance/odp_scheduling_run     |   5 ++
>  test/validation/odp_pktio_run           | 125
> +++++---------------------------
>  8 files changed, 186 insertions(+), 108 deletions(-)
>  create mode 100644 platform/linux-generic/test/Makefile.am
>  create mode 100755 platform/linux-generic/test/pktio_env
>  create mode 100755 test/performance/odp_example_l2fwd_run
>
> 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 100755
> index 0000000..02b64fb
> --- /dev/null
> +++ b/platform/linux-generic/test/pktio_env
> @@ -0,0 +1,113 @@
> +#!/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.
> +#
> +TEST_DIR=$(dirname $0)
> +# Network set up
> +# IF0 <---> IF1
> +# IF2 <---> IF3
> +IF0=pktio-p0-p1
> +IF1=pktio-p1-p0
> +IF2=pktio-p2-p3
> +IF3=pktio-p3-p2
> +
> +# exit codes expected by automake for skipped tests
> +TEST_SKIPPED=77
> +
> +check_for_root()
> +{
> +       if [ "$(id -u)" != "0" ]; then
> +               echo "check_for_root(): need to be root to setup VETH"
> +               exit $TEST_SKIPPED
>

Exiting with a skip at this point does not exercise the executable as much
as letting the test itself decide if there is valuable work still to be done
I think it is a valid test case that the executable exit cleanly because it
can't run rather than the script deciding for it at this level since this
is shared by many tests.


> +       fi
> +}
> +
> +# 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
> +
> +       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
> +               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"
> +               exit $TEST_SKIPPED
> +       fi
> +       ip link add $IF2 type veth peer name $IF3
> +       if [ $? -ne 0 ]; then
> +               echo "pktio: error: unable to create veth pair"
> +               exit $TEST_SKIPPED
> +       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"
> +                       exit 1
> +               fi
> +       done
> +}
> +
> +cleanup_pktio_env()
> +{
> +       echo "pktio: removing test interfaces $IF0, $IF1, $IF2, $IF3"
> +       check_for_root
> +
> +       for iface in $IF0 $IF1 $IF2 $IF3; do
> +               ip link del $iface 2> /dev/null
> +       done
> +       return 0
> +}
> diff --git a/test/performance/Makefile.am b/test/performance/Makefile.am
> index b0f7457..665c499 100644
> --- a/test/performance/Makefile.am
> +++ b/test/performance/Makefile.am
> @@ -1,12 +1,12 @@
>  include $(top_srcdir)/test/Makefile.inc
>
> -TESTS_ENVIRONMENT = TEST_DIR=${builddir}
> +TESTS_ENVIRONMENT = TEST_DIR=${builddir} ODP_PLATFORM=${with_platform}
>
>  EXECUTABLES = odp_atomic
>
>  COMPILE_ONLY = odp_scheduling
>
> -TESTSCRIPTS = odp_scheduling_run
> +TESTSCRIPTS = odp_scheduling_run odp_example_l2fwd_run
>
>  if test_perf
>  TESTS = $(EXECUTABLES) $(TESTSCRIPTS)
> diff --git a/test/performance/odp_example_l2fwd_run
> b/test/performance/odp_example_l2fwd_run
> new file mode 100755
> index 0000000..27aa20c
> --- /dev/null
> +++ b/test/performance/odp_example_l2fwd_run
> @@ -0,0 +1,42 @@
> +#!/bin/sh
> +#
> +# Copyright (c) 2015, Linaro Limited
> +# All rights reserved.
> +#
> +# SPDX-License-Identifier:     BSD-3-Clause
> +#
> +
> +TEST_DIR=$(dirname $0)
> +
> +# Use installed pktio env or for make check take it from platform
> directory
> +if [ -f "./pktio_env" ]; then
> +       . ./pktio_env
> +else if [ -f ${TEST_DIR}/../../platform/$ODP_PLATFORM/test/pktio_env ];
> then
> +       . ${TEST_DIR}/../../platform/$ODP_PLATFORM/test/pktio_env
> +else
> +       echo "unable to find pktio_env"
>

This message is not very helpful, the update to the pktio_env script
informs the user and makes it clear how to fix the issue, this message
still leves the user wondering what
 pktio_env is and where to start looking for it. As a diagnostic to a human
I think it should be clearer what was expected.


+       exit 1
> +       fi
> +fi
> +
> +run_l2fwd_example()
> +{
> +       setup_pktio_env
> +       #@todo: limit odp_generator to cores
> +       #https://bugs.linaro.org/show_bug.cgi?id=1398
> +       ($TEST_DIR/../../example/generator/odp_generator -I $IF0 \
> +                       --srcmac fe:0f:97:c9:e0:44  --dstmac
> 32:cb:9b:27:2f:1a \
> +                       --srcip 192.168.0.1 --dstip 192.168.0.2 -m u 2>&1
> > /dev/null) \
> +                       2>&1 > /dev/null &
> +
> +       echo "Run $TEST_DIR/../../example/l2fwd/odp_l2fwd -i $IF1,$IF2 -m
> 0 -t 30 -c 2"
> +       $TEST_DIR/../../example/l2fwd/odp_l2fwd -i $IF1,$IF2 -m 0 -t 30 -c
> 2
> +       cleanup_pktio_env
> +       exit 0
> +}
> +
> +case "$1" in
> +       setup)   setup_pktio_env   ;;
> +       cleanup) cleanup_pktio_env ;;
> +       *)       run_l2fwd_example ;;
> +esac
> diff --git a/test/performance/odp_scheduling_run
> b/test/performance/odp_scheduling_run
> index b64a79d..e957a98 100755
> --- a/test/performance/odp_scheduling_run
> +++ b/test/performance/odp_scheduling_run
> @@ -1,5 +1,10 @@
>  #!/bin/sh
>  #
> +# Copyright (c) 2015, Linaro Limited
> +# All rights reserved.
> +#
> +# SPDX-License-Identifier:     BSD-3-Clause
> +#
>  # Script that passes command line arguments to odp_scheduling test when
>  # launched by 'make check'
>
> diff --git a/test/validation/odp_pktio_run b/test/validation/odp_pktio_run
> index b725a5f..2b72ce8 100755
> --- a/test/validation/odp_pktio_run
> +++ b/test/validation/odp_pktio_run
> @@ -1,104 +1,23 @@
>  #!/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.
> -#
> -# 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
> -
> -# 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
> +TEST_DIR=$(dirname $0)
>
> -       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
> -       fi
> -
> -       echo "pktio: setting up test interfaces $IF0 and $IF1"
> -
> -       if [ "$1" = "clean" ]; then
> -               trap cleanup_env1 EXIT
> +# Use installed pktio env or for make check take it from platform
> directory
> +if [ -f "./pktio_env" ]; then
> +       . ./pktio_env
> +else if [ -f ${TEST_DIR}/../../platform/$ODP_PLATFORM/test/pktio_env ];
> then
> +       . ${TEST_DIR}/../../platform/$ODP_PLATFORM/test/pktio_env
> +else
> +       echo "unable to find pktio_env"
> +       exit 1
>         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()
>  {
> @@ -116,12 +35,12 @@ run_test()
>                         export ODP_PKTIO_DISABLE_SOCKET_${distype}=y
>                 fi
>                 $TEST_DIR/odp_pktio
> -               if [ $? != 0 ]; then
> +               if [ $? -ne 0 ]; then
>                         ret=1
>                 fi
>         done
>
> -       if [ $ret != 0 ]; then
> +       if [ $ret -ne 0 ]; then
>                 echo "!!! FAILED !!!"
>         fi
>
> @@ -138,7 +57,7 @@ run()
>
>         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 +65,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
> --
> 1.9.1
>
>
> _______________________________________________
> lng-odp mailing list
> lng-odp@lists.linaro.org
> http://lists.linaro.org/mailman/listinfo/lng-odp
>

Patch

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 100755
index 0000000..02b64fb
--- /dev/null
+++ b/platform/linux-generic/test/pktio_env
@@ -0,0 +1,113 @@ 
+#!/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.
+#
+TEST_DIR=$(dirname $0)
+# Network set up
+# IF0 <---> IF1
+# IF2 <---> IF3
+IF0=pktio-p0-p1
+IF1=pktio-p1-p0
+IF2=pktio-p2-p3
+IF3=pktio-p3-p2
+
+# exit codes expected by automake for skipped tests
+TEST_SKIPPED=77
+
+check_for_root()
+{
+	if [ "$(id -u)" != "0" ]; then
+		echo "check_for_root(): need to be root to setup VETH"
+		exit $TEST_SKIPPED
+	fi
+}
+
+# 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
+
+	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
+		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"
+		exit $TEST_SKIPPED
+	fi
+	ip link add $IF2 type veth peer name $IF3
+	if [ $? -ne 0 ]; then
+		echo "pktio: error: unable to create veth pair"
+		exit $TEST_SKIPPED
+	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"
+			exit 1
+		fi
+	done
+}
+
+cleanup_pktio_env()
+{
+	echo "pktio: removing test interfaces $IF0, $IF1, $IF2, $IF3"
+	check_for_root
+
+	for iface in $IF0 $IF1 $IF2 $IF3; do
+		ip link del $iface 2> /dev/null
+	done
+	return 0
+}
diff --git a/test/performance/Makefile.am b/test/performance/Makefile.am
index b0f7457..665c499 100644
--- a/test/performance/Makefile.am
+++ b/test/performance/Makefile.am
@@ -1,12 +1,12 @@ 
 include $(top_srcdir)/test/Makefile.inc
 
-TESTS_ENVIRONMENT = TEST_DIR=${builddir}
+TESTS_ENVIRONMENT = TEST_DIR=${builddir} ODP_PLATFORM=${with_platform}
 
 EXECUTABLES = odp_atomic
 
 COMPILE_ONLY = odp_scheduling
 
-TESTSCRIPTS = odp_scheduling_run
+TESTSCRIPTS = odp_scheduling_run odp_example_l2fwd_run
 
 if test_perf
 TESTS = $(EXECUTABLES) $(TESTSCRIPTS)
diff --git a/test/performance/odp_example_l2fwd_run b/test/performance/odp_example_l2fwd_run
new file mode 100755
index 0000000..27aa20c
--- /dev/null
+++ b/test/performance/odp_example_l2fwd_run
@@ -0,0 +1,42 @@ 
+#!/bin/sh
+#
+# Copyright (c) 2015, Linaro Limited
+# All rights reserved.
+#
+# SPDX-License-Identifier:	BSD-3-Clause
+#
+
+TEST_DIR=$(dirname $0)
+
+# Use installed pktio env or for make check take it from platform directory
+if [ -f "./pktio_env" ]; then
+	. ./pktio_env
+else if [ -f ${TEST_DIR}/../../platform/$ODP_PLATFORM/test/pktio_env ]; then
+	. ${TEST_DIR}/../../platform/$ODP_PLATFORM/test/pktio_env
+else
+	echo "unable to find pktio_env"
+	exit 1
+	fi
+fi
+
+run_l2fwd_example()
+{
+	setup_pktio_env
+	#@todo: limit odp_generator to cores
+	#https://bugs.linaro.org/show_bug.cgi?id=1398
+	($TEST_DIR/../../example/generator/odp_generator -I $IF0 \
+			--srcmac fe:0f:97:c9:e0:44  --dstmac 32:cb:9b:27:2f:1a \
+			--srcip 192.168.0.1 --dstip 192.168.0.2 -m u 2>&1 > /dev/null) \
+			2>&1 > /dev/null &
+
+	echo "Run $TEST_DIR/../../example/l2fwd/odp_l2fwd -i $IF1,$IF2 -m 0 -t 30 -c 2"
+	$TEST_DIR/../../example/l2fwd/odp_l2fwd -i $IF1,$IF2 -m 0 -t 30 -c 2
+	cleanup_pktio_env
+	exit 0
+}
+
+case "$1" in
+	setup)   setup_pktio_env   ;;
+	cleanup) cleanup_pktio_env ;;
+	*)       run_l2fwd_example ;;
+esac
diff --git a/test/performance/odp_scheduling_run b/test/performance/odp_scheduling_run
index b64a79d..e957a98 100755
--- a/test/performance/odp_scheduling_run
+++ b/test/performance/odp_scheduling_run
@@ -1,5 +1,10 @@ 
 #!/bin/sh
 #
+# Copyright (c) 2015, Linaro Limited
+# All rights reserved.
+#
+# SPDX-License-Identifier:	BSD-3-Clause
+#
 # Script that passes command line arguments to odp_scheduling test when
 # launched by 'make check'
 
diff --git a/test/validation/odp_pktio_run b/test/validation/odp_pktio_run
index b725a5f..2b72ce8 100755
--- a/test/validation/odp_pktio_run
+++ b/test/validation/odp_pktio_run
@@ -1,104 +1,23 @@ 
 #!/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.
-#
-# 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
-
-# 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
+TEST_DIR=$(dirname $0)
 
-	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
-	fi
-
-	echo "pktio: setting up test interfaces $IF0 and $IF1"
-
-	if [ "$1" = "clean" ]; then
-		trap cleanup_env1 EXIT
+# Use installed pktio env or for make check take it from platform directory
+if [ -f "./pktio_env" ]; then
+	. ./pktio_env
+else if [ -f ${TEST_DIR}/../../platform/$ODP_PLATFORM/test/pktio_env ]; then
+	. ${TEST_DIR}/../../platform/$ODP_PLATFORM/test/pktio_env
+else
+	echo "unable to find pktio_env"
+	exit 1
 	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()
 {
@@ -116,12 +35,12 @@  run_test()
 			export ODP_PKTIO_DISABLE_SOCKET_${distype}=y
 		fi
 		$TEST_DIR/odp_pktio
-		if [ $? != 0 ]; then
+		if [ $? -ne 0 ]; then
 			ret=1
 		fi
 	done
 
-	if [ $ret != 0 ]; then
+	if [ $ret -ne 0 ]; then
 		echo "!!! FAILED !!!"
 	fi
 
@@ -138,7 +57,7 @@  run()
 
 	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 +65,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