forked from microsoft/WSL2-Linux-Kernel
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
selftests/net: test nexthop without gw
This test implement the scenario described in the commit "ip: fix dflt addr selection for connected nexthop". The test configures a nexthop object with an output device only (no gateway address) and a route that uses this nexthop. The goal is to check if the kernel selects a valid source address. Link: https://lore.kernel.org/netdev/20220712095545.10947-1-nicolas.dichtel@6wind.com/ Signed-off-by: Nicolas Dichtel <nicolas.dichtel@6wind.com> Link: https://lore.kernel.org/r/20220713114853.29406-2-nicolas.dichtel@6wind.com Signed-off-by: Paolo Abeni <pabeni@redhat.com>
- Loading branch information
1 parent
747c143
commit cd72e61
Showing
2 changed files
with
120 additions
and
1 deletion.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,119 @@ | ||
#!/bin/bash | ||
# SPDX-License-Identifier: GPL-2.0 | ||
# | ||
# ns: h1 | ns: h2 | ||
# 192.168.0.1/24 | | ||
# eth0 | | ||
# | 192.168.1.1/32 | ||
# veth0 <---|---> veth1 | ||
# Validate source address selection for route without gateway | ||
|
||
PAUSE_ON_FAIL=no | ||
VERBOSE=0 | ||
ret=0 | ||
|
||
################################################################################ | ||
# helpers | ||
|
||
log_test() | ||
{ | ||
local rc=$1 | ||
local expected=$2 | ||
local msg="$3" | ||
|
||
if [ ${rc} -eq ${expected} ]; then | ||
printf "TEST: %-60s [ OK ]\n" "${msg}" | ||
nsuccess=$((nsuccess+1)) | ||
else | ||
ret=1 | ||
nfail=$((nfail+1)) | ||
printf "TEST: %-60s [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 | ||
|
||
[ "$VERBOSE" = "1" ] && echo | ||
} | ||
|
||
run_cmd() | ||
{ | ||
local cmd="$*" | ||
local out | ||
local rc | ||
|
||
if [ "$VERBOSE" = "1" ]; then | ||
echo "COMMAND: $cmd" | ||
fi | ||
|
||
out=$(eval $cmd 2>&1) | ||
rc=$? | ||
if [ "$VERBOSE" = "1" -a -n "$out" ]; then | ||
echo "$out" | ||
fi | ||
|
||
[ "$VERBOSE" = "1" ] && echo | ||
|
||
return $rc | ||
} | ||
|
||
################################################################################ | ||
# config | ||
setup() | ||
{ | ||
ip netns add h1 | ||
ip -n h1 link set lo up | ||
ip netns add h2 | ||
ip -n h2 link set lo up | ||
|
||
# Add a fake eth0 to support an ip address | ||
ip -n h1 link add name eth0 type dummy | ||
ip -n h1 link set eth0 up | ||
ip -n h1 address add 192.168.0.1/24 dev eth0 | ||
|
||
# Configure veths (same @mac, arp off) | ||
ip -n h1 link add name veth0 type veth peer name veth1 netns h2 | ||
ip -n h1 link set veth0 up | ||
|
||
ip -n h2 link set veth1 up | ||
|
||
# Configure @IP in the peer netns | ||
ip -n h2 address add 192.168.1.1/32 dev veth1 | ||
ip -n h2 route add default dev veth1 | ||
|
||
# Add a nexthop without @gw and use it in a route | ||
ip -n h1 nexthop add id 1 dev veth0 | ||
ip -n h1 route add 192.168.1.1 nhid 1 | ||
} | ||
|
||
cleanup() | ||
{ | ||
ip netns del h1 2>/dev/null | ||
ip netns del h2 2>/dev/null | ||
} | ||
|
||
trap cleanup EXIT | ||
|
||
################################################################################ | ||
# main | ||
|
||
while getopts :pv o | ||
do | ||
case $o in | ||
p) PAUSE_ON_FAIL=yes;; | ||
v) VERBOSE=1;; | ||
esac | ||
done | ||
|
||
cleanup | ||
setup | ||
|
||
run_cmd ip -netns h1 route get 192.168.1.1 | ||
log_test $? 0 "nexthop: get route with nexthop without gw" | ||
run_cmd ip netns exec h1 ping -c1 192.168.1.1 | ||
log_test $? 0 "nexthop: ping through nexthop without gw" | ||
|
||
exit $ret |