Re: [PATCH net-next] selftests: Add FIB onlink tests

2018-02-13 Thread David Ahern
On 2/13/18 1:39 PM, Ido Schimmel wrote:
> On Tue, Feb 13, 2018 at 08:44:06AM -0800, David Ahern wrote:
>> Add test cases verifying FIB onlink commands work as expected in
>> various conditions - IPv4, IPv6, main table, and VRF.
>>
>> Signed-off-by: David Ahern 
>> ---
>>  tools/testing/selftests/net/fib-onlink-tests.sh | 375 
>> 
>>  1 file changed, 375 insertions(+)
>>  create mode 100755 tools/testing/selftests/net/fib-onlink-tests.sh
> 
> You probably want to add it to the Makefile...
> 

ack. will add


Re: [PATCH net-next] selftests: Add FIB onlink tests

2018-02-13 Thread Ido Schimmel
On Tue, Feb 13, 2018 at 08:44:06AM -0800, David Ahern wrote:
> Add test cases verifying FIB onlink commands work as expected in
> various conditions - IPv4, IPv6, main table, and VRF.
> 
> Signed-off-by: David Ahern 
> ---
>  tools/testing/selftests/net/fib-onlink-tests.sh | 375 
> 
>  1 file changed, 375 insertions(+)
>  create mode 100755 tools/testing/selftests/net/fib-onlink-tests.sh

You probably want to add it to the Makefile...


Re: [PATCH net-next] selftests: Add FIB onlink tests

2018-02-13 Thread David Miller
From: David Ahern 
Date: Tue, 13 Feb 2018 08:44:06 -0800

> Add test cases verifying FIB onlink commands work as expected in
> various conditions - IPv4, IPv6, main table, and VRF.
> 
> Signed-off-by: David Ahern 

Applied with various trailing whitespace errors fixed up.

Thanks David.


[PATCH net-next] selftests: Add FIB onlink tests

2018-02-13 Thread David Ahern
Add test cases verifying FIB onlink commands work as expected in
various conditions - IPv4, IPv6, main table, and VRF.

Signed-off-by: David Ahern 
---
 tools/testing/selftests/net/fib-onlink-tests.sh | 375 
 1 file changed, 375 insertions(+)
 create mode 100755 tools/testing/selftests/net/fib-onlink-tests.sh

diff --git a/tools/testing/selftests/net/fib-onlink-tests.sh 
b/tools/testing/selftests/net/fib-onlink-tests.sh
new file mode 100755
index ..8c7301a15384
--- /dev/null
+++ b/tools/testing/selftests/net/fib-onlink-tests.sh
@@ -0,0 +1,375 @@
+#!/bin/bash
+# SPDX-License-Identifier: GPL-2.0
+
+# IPv4 and IPv6 onlink tests
+
+PAUSE_ON_FAIL=${PAUSE_ON_FAIL:=no}
+
+# Network interfaces
+# - odd in current namespace; even in peer ns
+declare -A NETIFS
+# default VRF
+NETIFS[p1]=veth1
+NETIFS[p2]=veth2
+NETIFS[p3]=veth3
+NETIFS[p4]=veth4
+# VRF
+NETIFS[p5]=veth5
+NETIFS[p6]=veth6
+NETIFS[p7]=veth7
+NETIFS[p8]=veth8
+
+# /24 network
+declare -A V4ADDRS
+V4ADDRS[p1]=169.254.1.1
+V4ADDRS[p2]=169.254.1.2
+V4ADDRS[p3]=169.254.3.1
+V4ADDRS[p4]=169.254.3.2
+V4ADDRS[p5]=169.254.5.1
+V4ADDRS[p6]=169.254.5.2
+V4ADDRS[p7]=169.254.7.1
+V4ADDRS[p8]=169.254.7.2
+
+# /64 network
+declare -A V6ADDRS
+V6ADDRS[p1]=2001:db8:101::1
+V6ADDRS[p2]=2001:db8:101::2
+V6ADDRS[p3]=2001:db8:301::1
+V6ADDRS[p4]=2001:db8:301::2
+V6ADDRS[p5]=2001:db8:501::1
+V6ADDRS[p6]=2001:db8:501::2
+V6ADDRS[p7]=2001:db8:701::1
+V6ADDRS[p8]=2001:db8:701::2
+
+# Test networks:
+# [1] = default table
+# [2] = VRF
+#
+# /32 host routes
+declare -A TEST_NET4
+TEST_NET4[1]=169.254.101
+TEST_NET4[2]=169.254.102
+# /128 host routes
+declare -A TEST_NET6
+TEST_NET6[1]=2001:db8:101
+TEST_NET6[2]=2001:db8:102
+
+# connected gateway
+CONGW[1]=169.254.1.254
+CONGW[2]=169.254.5.254
+
+# recursive gateway
+RECGW4[1]=169.254.11.254
+RECGW4[2]=169.254.12.254
+RECGW6[1]=2001:db8:11::64
+RECGW6[2]=2001:db8:12::64
+
+# for v4 mapped to v6
+declare -A TEST_NET4IN6IN6
+TEST_NET4IN6[1]=10.1.1.254
+TEST_NET4IN6[2]=10.2.1.254
+
+# mcast address
+MCAST6=ff02::1
+
+
+PEER_NS=bart
+PEER_CMD="ip netns exec ${PEER_NS}"
+VRF=lisa
+VRF_TABLE=1101
+PBR_TABLE=101
+
+
+# utilities
+
+log_test()
+{
+   local rc=$1
+   local expected=$2
+   local msg="$3"
+
+   if [ ${rc} -eq ${expected} ]; then
+   nsuccess=$((nsuccess+1))
+   printf "\nTEST: %-50s  [ OK ]\n" "${msg}"
+   else
+   nfail=$((nfail+1))
+   printf "\nTEST: %-50s  [FAIL]\n" "${msg}"
+   if [ "${PAUSE_ON_FAIL}" = "yes" ]; then
+   echo
+   echo "hit enter to continue, 'q' to quit"
+   read a
+   [ "$a" = "q" ] && exit 1
+   fi
+   fi
+}
+
+log_section()
+{
+   echo
+   echo 
"##"
+   echo "TEST SECTION: $*"
+   echo 
"##"
+}
+
+log_subsection()
+{
+   echo
+   echo "#"
+   echo "TEST SUBSECTION: $*"
+}
+
+run_cmd()
+{
+   echo
+   echo "COMMAND: $*"
+   eval $*
+}
+
+get_linklocal()
+{
+   local dev=$1
+   local pfx
+   local addr
+
+   addr=$(${pfx} ip -6 -br addr show dev ${dev} | \
+   awk '{
+   for (i = 3; i <= NF; ++i) {
+   if ($i ~ /^fe80/)
+   print $i
+   }
+   }'
+   )
+   addr=${addr/\/*}
+
+   [ -z "$addr" ] && return 1
+
+   echo $addr
+
+   return 0
+}
+
+
+#
+
+setup()
+{
+   echo
+   echo ""
+   echo "Configuring interfaces"
+
+   set -e
+
+   # create namespace
+   ip netns add ${PEER_NS}
+   ip -netns ${PEER_NS} li set lo up
+
+   # add vrf table
+   ip li add ${VRF} type vrf table ${VRF_TABLE}
+   ip li set ${VRF} up
+   ip ro add table ${VRF_TABLE} unreachable default
+   ip -6 ro add table ${VRF_TABLE} unreachable default
+
+   # create test interfaces
+   ip li add ${NETIFS[p1]} type veth peer name ${NETIFS[p2]}
+   ip li add ${NETIFS[p3]} type veth peer name ${NETIFS[p4]}
+   ip li add ${NETIFS[p5]} type veth peer name ${NETIFS[p6]}
+   ip li add ${NETIFS[p7]} type veth peer name ${NETIFS[p8]}
+
+   # enslave vrf interfaces
+   for n in 5 7; do
+   ip li set ${NETIFS[p${n}]} vrf ${VRF}
+   done
+
+   # add addresses
+   for n in 1 3 5 7; do
+   ip li set ${NETIFS[p${n}]} up
+   ip addr add ${V4ADDRS[p${n}]}/24 dev ${NETIFS[p${n}]} 
+   ip addr add ${V6ADDRS[p${n}]}/64 dev ${NETIFS[p${n}]} 
+   done
+
+   # move peer interfac