Commit 36b0bdb6 authored by David S. Miller's avatar David S. Miller

Merge branch 'net-selftests-unique-namespace'

Hangbin Liu says:

====================
Convert net selftests to run in unique namespace (Part 2)

Here is the 2nd part of converting net selftests to run in unique namespace.
This part converts all bridge, vxlan, vrf tests.

Here is the part 1 link:
https://lore.kernel.org/netdev/20231202020110.362433-1-liuhangbin@gmail.com
====================
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parents 6b4756be 61b12ebe
...@@ -35,9 +35,8 @@ ...@@ -35,9 +35,8 @@
# | sw1 | | sw2 | # | sw1 | | sw2 |
# +------------------------------------+ +------------------------------------+ # +------------------------------------+ +------------------------------------+
source lib.sh
ret=0 ret=0
# Kselftest framework requirement - SKIP code is 4.
ksft_skip=4
# All tests in this script. Can be overridden with -t option. # All tests in this script. Can be overridden with -t option.
TESTS=" TESTS="
...@@ -132,9 +131,6 @@ setup_topo_ns() ...@@ -132,9 +131,6 @@ setup_topo_ns()
{ {
local ns=$1; shift local ns=$1; shift
ip netns add $ns
ip -n $ns link set dev lo up
ip netns exec $ns sysctl -qw net.ipv6.conf.all.keep_addr_on_down=1 ip netns exec $ns sysctl -qw net.ipv6.conf.all.keep_addr_on_down=1
ip netns exec $ns sysctl -qw net.ipv6.conf.default.ignore_routes_with_linkdown=1 ip netns exec $ns sysctl -qw net.ipv6.conf.default.ignore_routes_with_linkdown=1
ip netns exec $ns sysctl -qw net.ipv6.conf.all.accept_dad=0 ip netns exec $ns sysctl -qw net.ipv6.conf.all.accept_dad=0
...@@ -145,13 +141,14 @@ setup_topo() ...@@ -145,13 +141,14 @@ setup_topo()
{ {
local ns local ns
for ns in sw1 sw2; do setup_ns sw1 sw2
for ns in $sw1 $sw2; do
setup_topo_ns $ns setup_topo_ns $ns
done done
ip link add name veth0 type veth peer name veth1 ip link add name veth0 type veth peer name veth1
ip link set dev veth0 netns sw1 name veth0 ip link set dev veth0 netns $sw1 name veth0
ip link set dev veth1 netns sw2 name veth0 ip link set dev veth1 netns $sw2 name veth0
} }
setup_sw_common() setup_sw_common()
...@@ -190,7 +187,7 @@ setup_sw_common() ...@@ -190,7 +187,7 @@ setup_sw_common()
setup_sw1() setup_sw1()
{ {
local ns=sw1 local ns=$sw1
local local_addr=192.0.2.33 local local_addr=192.0.2.33
local remote_addr=192.0.2.34 local remote_addr=192.0.2.34
local veth_addr=192.0.2.49 local veth_addr=192.0.2.49
...@@ -203,7 +200,7 @@ setup_sw1() ...@@ -203,7 +200,7 @@ setup_sw1()
setup_sw2() setup_sw2()
{ {
local ns=sw2 local ns=$sw2
local local_addr=192.0.2.34 local local_addr=192.0.2.34
local remote_addr=192.0.2.33 local remote_addr=192.0.2.33
local veth_addr=192.0.2.50 local veth_addr=192.0.2.50
...@@ -229,11 +226,7 @@ setup() ...@@ -229,11 +226,7 @@ setup()
cleanup() cleanup()
{ {
local ns cleanup_ns $sw1 $sw2
for ns in h1 h2 sw1 sw2; do
ip netns del $ns &> /dev/null
done
} }
################################################################################ ################################################################################
...@@ -248,85 +241,85 @@ backup_port() ...@@ -248,85 +241,85 @@ backup_port()
echo "Backup port" echo "Backup port"
echo "-----------" echo "-----------"
run_cmd "tc -n sw1 qdisc replace dev swp1 clsact" run_cmd "tc -n $sw1 qdisc replace dev swp1 clsact"
run_cmd "tc -n sw1 filter replace dev swp1 egress pref 1 handle 101 proto ip flower src_mac $smac dst_mac $dmac action pass" run_cmd "tc -n $sw1 filter replace dev swp1 egress pref 1 handle 101 proto ip flower src_mac $smac dst_mac $dmac action pass"
run_cmd "tc -n sw1 qdisc replace dev vx0 clsact" run_cmd "tc -n $sw1 qdisc replace dev vx0 clsact"
run_cmd "tc -n sw1 filter replace dev vx0 egress pref 1 handle 101 proto ip flower src_mac $smac dst_mac $dmac action pass" run_cmd "tc -n $sw1 filter replace dev vx0 egress pref 1 handle 101 proto ip flower src_mac $smac dst_mac $dmac action pass"
run_cmd "bridge -n sw1 fdb replace $dmac dev swp1 master static vlan 10" run_cmd "bridge -n $sw1 fdb replace $dmac dev swp1 master static vlan 10"
# Initial state - check that packets are forwarded out of swp1 when it # Initial state - check that packets are forwarded out of swp1 when it
# has a carrier and not forwarded out of any port when it does not have # has a carrier and not forwarded out of any port when it does not have
# a carrier. # a carrier.
run_cmd "ip netns exec sw1 mausezahn br0.10 -a $smac -b $dmac -A 198.51.100.1 -B 198.51.100.2 -t ip -p 100 -q -c 1" run_cmd "ip netns exec $sw1 mausezahn br0.10 -a $smac -b $dmac -A 198.51.100.1 -B 198.51.100.2 -t ip -p 100 -q -c 1"
tc_check_packets sw1 "dev swp1 egress" 101 1 tc_check_packets $sw1 "dev swp1 egress" 101 1
log_test $? 0 "Forwarding out of swp1" log_test $? 0 "Forwarding out of swp1"
tc_check_packets sw1 "dev vx0 egress" 101 0 tc_check_packets $sw1 "dev vx0 egress" 101 0
log_test $? 0 "No forwarding out of vx0" log_test $? 0 "No forwarding out of vx0"
run_cmd "ip -n sw1 link set dev swp1 carrier off" run_cmd "ip -n $sw1 link set dev swp1 carrier off"
log_test $? 0 "swp1 carrier off" log_test $? 0 "swp1 carrier off"
run_cmd "ip netns exec sw1 mausezahn br0.10 -a $smac -b $dmac -A 198.51.100.1 -B 198.51.100.2 -t ip -p 100 -q -c 1" run_cmd "ip netns exec $sw1 mausezahn br0.10 -a $smac -b $dmac -A 198.51.100.1 -B 198.51.100.2 -t ip -p 100 -q -c 1"
tc_check_packets sw1 "dev swp1 egress" 101 1 tc_check_packets $sw1 "dev swp1 egress" 101 1
log_test $? 0 "No forwarding out of swp1" log_test $? 0 "No forwarding out of swp1"
tc_check_packets sw1 "dev vx0 egress" 101 0 tc_check_packets $sw1 "dev vx0 egress" 101 0
log_test $? 0 "No forwarding out of vx0" log_test $? 0 "No forwarding out of vx0"
run_cmd "ip -n sw1 link set dev swp1 carrier on" run_cmd "ip -n $sw1 link set dev swp1 carrier on"
log_test $? 0 "swp1 carrier on" log_test $? 0 "swp1 carrier on"
# Configure vx0 as the backup port of swp1 and check that packets are # Configure vx0 as the backup port of swp1 and check that packets are
# forwarded out of swp1 when it has a carrier and out of vx0 when swp1 # forwarded out of swp1 when it has a carrier and out of vx0 when swp1
# does not have a carrier. # does not have a carrier.
run_cmd "bridge -n sw1 link set dev swp1 backup_port vx0" run_cmd "bridge -n $sw1 link set dev swp1 backup_port vx0"
run_cmd "bridge -n sw1 -d link show dev swp1 | grep \"backup_port vx0\"" run_cmd "bridge -n $sw1 -d link show dev swp1 | grep \"backup_port vx0\""
log_test $? 0 "vx0 configured as backup port of swp1" log_test $? 0 "vx0 configured as backup port of swp1"
run_cmd "ip netns exec sw1 mausezahn br0.10 -a $smac -b $dmac -A 198.51.100.1 -B 198.51.100.2 -t ip -p 100 -q -c 1" run_cmd "ip netns exec $sw1 mausezahn br0.10 -a $smac -b $dmac -A 198.51.100.1 -B 198.51.100.2 -t ip -p 100 -q -c 1"
tc_check_packets sw1 "dev swp1 egress" 101 2 tc_check_packets $sw1 "dev swp1 egress" 101 2
log_test $? 0 "Forwarding out of swp1" log_test $? 0 "Forwarding out of swp1"
tc_check_packets sw1 "dev vx0 egress" 101 0 tc_check_packets $sw1 "dev vx0 egress" 101 0
log_test $? 0 "No forwarding out of vx0" log_test $? 0 "No forwarding out of vx0"
run_cmd "ip -n sw1 link set dev swp1 carrier off" run_cmd "ip -n $sw1 link set dev swp1 carrier off"
log_test $? 0 "swp1 carrier off" log_test $? 0 "swp1 carrier off"
run_cmd "ip netns exec sw1 mausezahn br0.10 -a $smac -b $dmac -A 198.51.100.1 -B 198.51.100.2 -t ip -p 100 -q -c 1" run_cmd "ip netns exec $sw1 mausezahn br0.10 -a $smac -b $dmac -A 198.51.100.1 -B 198.51.100.2 -t ip -p 100 -q -c 1"
tc_check_packets sw1 "dev swp1 egress" 101 2 tc_check_packets $sw1 "dev swp1 egress" 101 2
log_test $? 0 "No forwarding out of swp1" log_test $? 0 "No forwarding out of swp1"
tc_check_packets sw1 "dev vx0 egress" 101 1 tc_check_packets $sw1 "dev vx0 egress" 101 1
log_test $? 0 "Forwarding out of vx0" log_test $? 0 "Forwarding out of vx0"
run_cmd "ip -n sw1 link set dev swp1 carrier on" run_cmd "ip -n $sw1 link set dev swp1 carrier on"
log_test $? 0 "swp1 carrier on" log_test $? 0 "swp1 carrier on"
run_cmd "ip netns exec sw1 mausezahn br0.10 -a $smac -b $dmac -A 198.51.100.1 -B 198.51.100.2 -t ip -p 100 -q -c 1" run_cmd "ip netns exec $sw1 mausezahn br0.10 -a $smac -b $dmac -A 198.51.100.1 -B 198.51.100.2 -t ip -p 100 -q -c 1"
tc_check_packets sw1 "dev swp1 egress" 101 3 tc_check_packets $sw1 "dev swp1 egress" 101 3
log_test $? 0 "Forwarding out of swp1" log_test $? 0 "Forwarding out of swp1"
tc_check_packets sw1 "dev vx0 egress" 101 1 tc_check_packets $sw1 "dev vx0 egress" 101 1
log_test $? 0 "No forwarding out of vx0" log_test $? 0 "No forwarding out of vx0"
# Remove vx0 as the backup port of swp1 and check that packets are no # Remove vx0 as the backup port of swp1 and check that packets are no
# longer forwarded out of vx0 when swp1 does not have a carrier. # longer forwarded out of vx0 when swp1 does not have a carrier.
run_cmd "bridge -n sw1 link set dev swp1 nobackup_port" run_cmd "bridge -n $sw1 link set dev swp1 nobackup_port"
run_cmd "bridge -n sw1 -d link show dev swp1 | grep \"backup_port vx0\"" run_cmd "bridge -n $sw1 -d link show dev swp1 | grep \"backup_port vx0\""
log_test $? 1 "vx0 not configured as backup port of swp1" log_test $? 1 "vx0 not configured as backup port of swp1"
run_cmd "ip netns exec sw1 mausezahn br0.10 -a $smac -b $dmac -A 198.51.100.1 -B 198.51.100.2 -t ip -p 100 -q -c 1" run_cmd "ip netns exec $sw1 mausezahn br0.10 -a $smac -b $dmac -A 198.51.100.1 -B 198.51.100.2 -t ip -p 100 -q -c 1"
tc_check_packets sw1 "dev swp1 egress" 101 4 tc_check_packets $sw1 "dev swp1 egress" 101 4
log_test $? 0 "Forwarding out of swp1" log_test $? 0 "Forwarding out of swp1"
tc_check_packets sw1 "dev vx0 egress" 101 1 tc_check_packets $sw1 "dev vx0 egress" 101 1
log_test $? 0 "No forwarding out of vx0" log_test $? 0 "No forwarding out of vx0"
run_cmd "ip -n sw1 link set dev swp1 carrier off" run_cmd "ip -n $sw1 link set dev swp1 carrier off"
log_test $? 0 "swp1 carrier off" log_test $? 0 "swp1 carrier off"
run_cmd "ip netns exec sw1 mausezahn br0.10 -a $smac -b $dmac -A 198.51.100.1 -B 198.51.100.2 -t ip -p 100 -q -c 1" run_cmd "ip netns exec $sw1 mausezahn br0.10 -a $smac -b $dmac -A 198.51.100.1 -B 198.51.100.2 -t ip -p 100 -q -c 1"
tc_check_packets sw1 "dev swp1 egress" 101 4 tc_check_packets $sw1 "dev swp1 egress" 101 4
log_test $? 0 "No forwarding out of swp1" log_test $? 0 "No forwarding out of swp1"
tc_check_packets sw1 "dev vx0 egress" 101 1 tc_check_packets $sw1 "dev vx0 egress" 101 1
log_test $? 0 "No forwarding out of vx0" log_test $? 0 "No forwarding out of vx0"
} }
...@@ -339,125 +332,125 @@ backup_nhid() ...@@ -339,125 +332,125 @@ backup_nhid()
echo "Backup nexthop ID" echo "Backup nexthop ID"
echo "-----------------" echo "-----------------"
run_cmd "tc -n sw1 qdisc replace dev swp1 clsact" run_cmd "tc -n $sw1 qdisc replace dev swp1 clsact"
run_cmd "tc -n sw1 filter replace dev swp1 egress pref 1 handle 101 proto ip flower src_mac $smac dst_mac $dmac action pass" run_cmd "tc -n $sw1 filter replace dev swp1 egress pref 1 handle 101 proto ip flower src_mac $smac dst_mac $dmac action pass"
run_cmd "tc -n sw1 qdisc replace dev vx0 clsact" run_cmd "tc -n $sw1 qdisc replace dev vx0 clsact"
run_cmd "tc -n sw1 filter replace dev vx0 egress pref 1 handle 101 proto ip flower src_mac $smac dst_mac $dmac action pass" run_cmd "tc -n $sw1 filter replace dev vx0 egress pref 1 handle 101 proto ip flower src_mac $smac dst_mac $dmac action pass"
run_cmd "ip -n sw1 nexthop replace id 1 via 192.0.2.34 fdb" run_cmd "ip -n $sw1 nexthop replace id 1 via 192.0.2.34 fdb"
run_cmd "ip -n sw1 nexthop replace id 2 via 192.0.2.34 fdb" run_cmd "ip -n $sw1 nexthop replace id 2 via 192.0.2.34 fdb"
run_cmd "ip -n sw1 nexthop replace id 10 group 1/2 fdb" run_cmd "ip -n $sw1 nexthop replace id 10 group 1/2 fdb"
run_cmd "bridge -n sw1 fdb replace $dmac dev swp1 master static vlan 10" run_cmd "bridge -n $sw1 fdb replace $dmac dev swp1 master static vlan 10"
run_cmd "bridge -n sw1 fdb replace $dmac dev vx0 self static dst 192.0.2.36 src_vni 10010" run_cmd "bridge -n $sw1 fdb replace $dmac dev vx0 self static dst 192.0.2.36 src_vni 10010"
run_cmd "ip -n sw2 address replace 192.0.2.36/32 dev lo" run_cmd "ip -n $sw2 address replace 192.0.2.36/32 dev lo"
# The first filter matches on packets forwarded using the backup # The first filter matches on packets forwarded using the backup
# nexthop ID and the second filter matches on packets forwarded using a # nexthop ID and the second filter matches on packets forwarded using a
# regular VXLAN FDB entry. # regular VXLAN FDB entry.
run_cmd "tc -n sw2 qdisc replace dev vx0 clsact" run_cmd "tc -n $sw2 qdisc replace dev vx0 clsact"
run_cmd "tc -n sw2 filter replace dev vx0 ingress pref 1 handle 101 proto ip flower src_mac $smac dst_mac $dmac enc_key_id 10010 enc_dst_ip 192.0.2.34 action pass" run_cmd "tc -n $sw2 filter replace dev vx0 ingress pref 1 handle 101 proto ip flower src_mac $smac dst_mac $dmac enc_key_id 10010 enc_dst_ip 192.0.2.34 action pass"
run_cmd "tc -n sw2 filter replace dev vx0 ingress pref 1 handle 102 proto ip flower src_mac $smac dst_mac $dmac enc_key_id 10010 enc_dst_ip 192.0.2.36 action pass" run_cmd "tc -n $sw2 filter replace dev vx0 ingress pref 1 handle 102 proto ip flower src_mac $smac dst_mac $dmac enc_key_id 10010 enc_dst_ip 192.0.2.36 action pass"
# Configure vx0 as the backup port of swp1 and check that packets are # Configure vx0 as the backup port of swp1 and check that packets are
# forwarded out of swp1 when it has a carrier and out of vx0 when swp1 # forwarded out of swp1 when it has a carrier and out of vx0 when swp1
# does not have a carrier. When packets are forwarded out of vx0, check # does not have a carrier. When packets are forwarded out of vx0, check
# that they are forwarded by the VXLAN FDB entry. # that they are forwarded by the VXLAN FDB entry.
run_cmd "bridge -n sw1 link set dev swp1 backup_port vx0" run_cmd "bridge -n $sw1 link set dev swp1 backup_port vx0"
run_cmd "bridge -n sw1 -d link show dev swp1 | grep \"backup_port vx0\"" run_cmd "bridge -n $sw1 -d link show dev swp1 | grep \"backup_port vx0\""
log_test $? 0 "vx0 configured as backup port of swp1" log_test $? 0 "vx0 configured as backup port of swp1"
run_cmd "ip netns exec sw1 mausezahn br0.10 -a $smac -b $dmac -A 198.51.100.1 -B 198.51.100.2 -t ip -p 100 -q -c 1" run_cmd "ip netns exec $sw1 mausezahn br0.10 -a $smac -b $dmac -A 198.51.100.1 -B 198.51.100.2 -t ip -p 100 -q -c 1"
tc_check_packets sw1 "dev swp1 egress" 101 1 tc_check_packets $sw1 "dev swp1 egress" 101 1
log_test $? 0 "Forwarding out of swp1" log_test $? 0 "Forwarding out of swp1"
tc_check_packets sw1 "dev vx0 egress" 101 0 tc_check_packets $sw1 "dev vx0 egress" 101 0
log_test $? 0 "No forwarding out of vx0" log_test $? 0 "No forwarding out of vx0"
run_cmd "ip -n sw1 link set dev swp1 carrier off" run_cmd "ip -n $sw1 link set dev swp1 carrier off"
log_test $? 0 "swp1 carrier off" log_test $? 0 "swp1 carrier off"
run_cmd "ip netns exec sw1 mausezahn br0.10 -a $smac -b $dmac -A 198.51.100.1 -B 198.51.100.2 -t ip -p 100 -q -c 1" run_cmd "ip netns exec $sw1 mausezahn br0.10 -a $smac -b $dmac -A 198.51.100.1 -B 198.51.100.2 -t ip -p 100 -q -c 1"
tc_check_packets sw1 "dev swp1 egress" 101 1 tc_check_packets $sw1 "dev swp1 egress" 101 1
log_test $? 0 "No forwarding out of swp1" log_test $? 0 "No forwarding out of swp1"
tc_check_packets sw1 "dev vx0 egress" 101 1 tc_check_packets $sw1 "dev vx0 egress" 101 1
log_test $? 0 "Forwarding out of vx0" log_test $? 0 "Forwarding out of vx0"
tc_check_packets sw2 "dev vx0 ingress" 101 0 tc_check_packets $sw2 "dev vx0 ingress" 101 0
log_test $? 0 "No forwarding using backup nexthop ID" log_test $? 0 "No forwarding using backup nexthop ID"
tc_check_packets sw2 "dev vx0 ingress" 102 1 tc_check_packets $sw2 "dev vx0 ingress" 102 1
log_test $? 0 "Forwarding using VXLAN FDB entry" log_test $? 0 "Forwarding using VXLAN FDB entry"
run_cmd "ip -n sw1 link set dev swp1 carrier on" run_cmd "ip -n $sw1 link set dev swp1 carrier on"
log_test $? 0 "swp1 carrier on" log_test $? 0 "swp1 carrier on"
# Configure nexthop ID 10 as the backup nexthop ID of swp1 and check # Configure nexthop ID 10 as the backup nexthop ID of swp1 and check
# that when packets are forwarded out of vx0, they are forwarded using # that when packets are forwarded out of vx0, they are forwarded using
# the backup nexthop ID. # the backup nexthop ID.
run_cmd "bridge -n sw1 link set dev swp1 backup_nhid 10" run_cmd "bridge -n $sw1 link set dev swp1 backup_nhid 10"
run_cmd "bridge -n sw1 -d link show dev swp1 | grep \"backup_nhid 10\"" run_cmd "bridge -n $sw1 -d link show dev swp1 | grep \"backup_nhid 10\""
log_test $? 0 "nexthop ID 10 configured as backup nexthop ID of swp1" log_test $? 0 "nexthop ID 10 configured as backup nexthop ID of swp1"
run_cmd "ip netns exec sw1 mausezahn br0.10 -a $smac -b $dmac -A 198.51.100.1 -B 198.51.100.2 -t ip -p 100 -q -c 1" run_cmd "ip netns exec $sw1 mausezahn br0.10 -a $smac -b $dmac -A 198.51.100.1 -B 198.51.100.2 -t ip -p 100 -q -c 1"
tc_check_packets sw1 "dev swp1 egress" 101 2 tc_check_packets $sw1 "dev swp1 egress" 101 2
log_test $? 0 "Forwarding out of swp1" log_test $? 0 "Forwarding out of swp1"
tc_check_packets sw1 "dev vx0 egress" 101 1 tc_check_packets $sw1 "dev vx0 egress" 101 1
log_test $? 0 "No forwarding out of vx0" log_test $? 0 "No forwarding out of vx0"
run_cmd "ip -n sw1 link set dev swp1 carrier off" run_cmd "ip -n $sw1 link set dev swp1 carrier off"
log_test $? 0 "swp1 carrier off" log_test $? 0 "swp1 carrier off"
run_cmd "ip netns exec sw1 mausezahn br0.10 -a $smac -b $dmac -A 198.51.100.1 -B 198.51.100.2 -t ip -p 100 -q -c 1" run_cmd "ip netns exec $sw1 mausezahn br0.10 -a $smac -b $dmac -A 198.51.100.1 -B 198.51.100.2 -t ip -p 100 -q -c 1"
tc_check_packets sw1 "dev swp1 egress" 101 2 tc_check_packets $sw1 "dev swp1 egress" 101 2
log_test $? 0 "No forwarding out of swp1" log_test $? 0 "No forwarding out of swp1"
tc_check_packets sw1 "dev vx0 egress" 101 2 tc_check_packets $sw1 "dev vx0 egress" 101 2
log_test $? 0 "Forwarding out of vx0" log_test $? 0 "Forwarding out of vx0"
tc_check_packets sw2 "dev vx0 ingress" 101 1 tc_check_packets $sw2 "dev vx0 ingress" 101 1
log_test $? 0 "Forwarding using backup nexthop ID" log_test $? 0 "Forwarding using backup nexthop ID"
tc_check_packets sw2 "dev vx0 ingress" 102 1 tc_check_packets $sw2 "dev vx0 ingress" 102 1
log_test $? 0 "No forwarding using VXLAN FDB entry" log_test $? 0 "No forwarding using VXLAN FDB entry"
run_cmd "ip -n sw1 link set dev swp1 carrier on" run_cmd "ip -n $sw1 link set dev swp1 carrier on"
log_test $? 0 "swp1 carrier on" log_test $? 0 "swp1 carrier on"
run_cmd "ip netns exec sw1 mausezahn br0.10 -a $smac -b $dmac -A 198.51.100.1 -B 198.51.100.2 -t ip -p 100 -q -c 1" run_cmd "ip netns exec $sw1 mausezahn br0.10 -a $smac -b $dmac -A 198.51.100.1 -B 198.51.100.2 -t ip -p 100 -q -c 1"
tc_check_packets sw1 "dev swp1 egress" 101 3 tc_check_packets $sw1 "dev swp1 egress" 101 3
log_test $? 0 "Forwarding out of swp1" log_test $? 0 "Forwarding out of swp1"
tc_check_packets sw1 "dev vx0 egress" 101 2 tc_check_packets $sw1 "dev vx0 egress" 101 2
log_test $? 0 "No forwarding out of vx0" log_test $? 0 "No forwarding out of vx0"
tc_check_packets sw2 "dev vx0 ingress" 101 1 tc_check_packets $sw2 "dev vx0 ingress" 101 1
log_test $? 0 "No forwarding using backup nexthop ID" log_test $? 0 "No forwarding using backup nexthop ID"
tc_check_packets sw2 "dev vx0 ingress" 102 1 tc_check_packets $sw2 "dev vx0 ingress" 102 1
log_test $? 0 "No forwarding using VXLAN FDB entry" log_test $? 0 "No forwarding using VXLAN FDB entry"
# Reset the backup nexthop ID to 0 and check that packets are no longer # Reset the backup nexthop ID to 0 and check that packets are no longer
# forwarded using the backup nexthop ID when swp1 does not have a # forwarded using the backup nexthop ID when swp1 does not have a
# carrier and are instead forwarded by the VXLAN FDB. # carrier and are instead forwarded by the VXLAN FDB.
run_cmd "bridge -n sw1 link set dev swp1 backup_nhid 0" run_cmd "bridge -n $sw1 link set dev swp1 backup_nhid 0"
run_cmd "bridge -n sw1 -d link show dev swp1 | grep \"backup_nhid\"" run_cmd "bridge -n $sw1 -d link show dev swp1 | grep \"backup_nhid\""
log_test $? 1 "No backup nexthop ID configured for swp1" log_test $? 1 "No backup nexthop ID configured for swp1"
run_cmd "ip netns exec sw1 mausezahn br0.10 -a $smac -b $dmac -A 198.51.100.1 -B 198.51.100.2 -t ip -p 100 -q -c 1" run_cmd "ip netns exec $sw1 mausezahn br0.10 -a $smac -b $dmac -A 198.51.100.1 -B 198.51.100.2 -t ip -p 100 -q -c 1"
tc_check_packets sw1 "dev swp1 egress" 101 4 tc_check_packets $sw1 "dev swp1 egress" 101 4
log_test $? 0 "Forwarding out of swp1" log_test $? 0 "Forwarding out of swp1"
tc_check_packets sw1 "dev vx0 egress" 101 2 tc_check_packets $sw1 "dev vx0 egress" 101 2
log_test $? 0 "No forwarding out of vx0" log_test $? 0 "No forwarding out of vx0"
tc_check_packets sw2 "dev vx0 ingress" 101 1 tc_check_packets $sw2 "dev vx0 ingress" 101 1
log_test $? 0 "No forwarding using backup nexthop ID" log_test $? 0 "No forwarding using backup nexthop ID"
tc_check_packets sw2 "dev vx0 ingress" 102 1 tc_check_packets $sw2 "dev vx0 ingress" 102 1
log_test $? 0 "No forwarding using VXLAN FDB entry" log_test $? 0 "No forwarding using VXLAN FDB entry"
run_cmd "ip -n sw1 link set dev swp1 carrier off" run_cmd "ip -n $sw1 link set dev swp1 carrier off"
log_test $? 0 "swp1 carrier off" log_test $? 0 "swp1 carrier off"
run_cmd "ip netns exec sw1 mausezahn br0.10 -a $smac -b $dmac -A 198.51.100.1 -B 198.51.100.2 -t ip -p 100 -q -c 1" run_cmd "ip netns exec $sw1 mausezahn br0.10 -a $smac -b $dmac -A 198.51.100.1 -B 198.51.100.2 -t ip -p 100 -q -c 1"
tc_check_packets sw1 "dev swp1 egress" 101 4 tc_check_packets $sw1 "dev swp1 egress" 101 4
log_test $? 0 "No forwarding out of swp1" log_test $? 0 "No forwarding out of swp1"
tc_check_packets sw1 "dev vx0 egress" 101 3 tc_check_packets $sw1 "dev vx0 egress" 101 3
log_test $? 0 "Forwarding out of vx0" log_test $? 0 "Forwarding out of vx0"
tc_check_packets sw2 "dev vx0 ingress" 101 1 tc_check_packets $sw2 "dev vx0 ingress" 101 1
log_test $? 0 "No forwarding using backup nexthop ID" log_test $? 0 "No forwarding using backup nexthop ID"
tc_check_packets sw2 "dev vx0 ingress" 102 2 tc_check_packets $sw2 "dev vx0 ingress" 102 2
log_test $? 0 "Forwarding using VXLAN FDB entry" log_test $? 0 "Forwarding using VXLAN FDB entry"
} }
...@@ -475,109 +468,109 @@ backup_nhid_invalid() ...@@ -475,109 +468,109 @@ backup_nhid_invalid()
# is forwarded out of the VXLAN port, but dropped by the VXLAN driver # is forwarded out of the VXLAN port, but dropped by the VXLAN driver
# and does not crash the host. # and does not crash the host.
run_cmd "tc -n sw1 qdisc replace dev swp1 clsact" run_cmd "tc -n $sw1 qdisc replace dev swp1 clsact"
run_cmd "tc -n sw1 filter replace dev swp1 egress pref 1 handle 101 proto ip flower src_mac $smac dst_mac $dmac action pass" run_cmd "tc -n $sw1 filter replace dev swp1 egress pref 1 handle 101 proto ip flower src_mac $smac dst_mac $dmac action pass"
run_cmd "tc -n sw1 qdisc replace dev vx0 clsact" run_cmd "tc -n $sw1 qdisc replace dev vx0 clsact"
run_cmd "tc -n sw1 filter replace dev vx0 egress pref 1 handle 101 proto ip flower src_mac $smac dst_mac $dmac action pass" run_cmd "tc -n $sw1 filter replace dev vx0 egress pref 1 handle 101 proto ip flower src_mac $smac dst_mac $dmac action pass"
# Drop all other Tx traffic to avoid changes to Tx drop counter. # Drop all other Tx traffic to avoid changes to Tx drop counter.
run_cmd "tc -n sw1 filter replace dev vx0 egress pref 2 handle 102 proto all matchall action drop" run_cmd "tc -n $sw1 filter replace dev vx0 egress pref 2 handle 102 proto all matchall action drop"
tx_drop=$(ip -n sw1 -s -j link show dev vx0 | jq '.[]["stats64"]["tx"]["dropped"]') tx_drop=$(ip -n $sw1 -s -j link show dev vx0 | jq '.[]["stats64"]["tx"]["dropped"]')
run_cmd "ip -n sw1 nexthop replace id 1 via 192.0.2.34 fdb" run_cmd "ip -n $sw1 nexthop replace id 1 via 192.0.2.34 fdb"
run_cmd "ip -n sw1 nexthop replace id 2 via 192.0.2.34 fdb" run_cmd "ip -n $sw1 nexthop replace id 2 via 192.0.2.34 fdb"
run_cmd "ip -n sw1 nexthop replace id 10 group 1/2 fdb" run_cmd "ip -n $sw1 nexthop replace id 10 group 1/2 fdb"
run_cmd "bridge -n sw1 fdb replace $dmac dev swp1 master static vlan 10" run_cmd "bridge -n $sw1 fdb replace $dmac dev swp1 master static vlan 10"
run_cmd "tc -n sw2 qdisc replace dev vx0 clsact" run_cmd "tc -n $sw2 qdisc replace dev vx0 clsact"
run_cmd "tc -n sw2 filter replace dev vx0 ingress pref 1 handle 101 proto ip flower src_mac $smac dst_mac $dmac enc_key_id 10010 enc_dst_ip 192.0.2.34 action pass" run_cmd "tc -n $sw2 filter replace dev vx0 ingress pref 1 handle 101 proto ip flower src_mac $smac dst_mac $dmac enc_key_id 10010 enc_dst_ip 192.0.2.34 action pass"
# First, check that redirection works. # First, check that redirection works.
run_cmd "bridge -n sw1 link set dev swp1 backup_port vx0" run_cmd "bridge -n $sw1 link set dev swp1 backup_port vx0"
run_cmd "bridge -n sw1 -d link show dev swp1 | grep \"backup_port vx0\"" run_cmd "bridge -n $sw1 -d link show dev swp1 | grep \"backup_port vx0\""
log_test $? 0 "vx0 configured as backup port of swp1" log_test $? 0 "vx0 configured as backup port of swp1"
run_cmd "bridge -n sw1 link set dev swp1 backup_nhid 10" run_cmd "bridge -n $sw1 link set dev swp1 backup_nhid 10"
run_cmd "bridge -n sw1 -d link show dev swp1 | grep \"backup_nhid 10\"" run_cmd "bridge -n $sw1 -d link show dev swp1 | grep \"backup_nhid 10\""
log_test $? 0 "Valid nexthop as backup nexthop" log_test $? 0 "Valid nexthop as backup nexthop"
run_cmd "ip -n sw1 link set dev swp1 carrier off" run_cmd "ip -n $sw1 link set dev swp1 carrier off"
log_test $? 0 "swp1 carrier off" log_test $? 0 "swp1 carrier off"
run_cmd "ip netns exec sw1 mausezahn br0.10 -a $smac -b $dmac -A 198.51.100.1 -B 198.51.100.2 -t ip -p 100 -q -c 1" run_cmd "ip netns exec $sw1 mausezahn br0.10 -a $smac -b $dmac -A 198.51.100.1 -B 198.51.100.2 -t ip -p 100 -q -c 1"
tc_check_packets sw1 "dev swp1 egress" 101 0 tc_check_packets $sw1 "dev swp1 egress" 101 0
log_test $? 0 "No forwarding out of swp1" log_test $? 0 "No forwarding out of swp1"
tc_check_packets sw1 "dev vx0 egress" 101 1 tc_check_packets $sw1 "dev vx0 egress" 101 1
log_test $? 0 "Forwarding out of vx0" log_test $? 0 "Forwarding out of vx0"
tc_check_packets sw2 "dev vx0 ingress" 101 1 tc_check_packets $sw2 "dev vx0 ingress" 101 1
log_test $? 0 "Forwarding using backup nexthop ID" log_test $? 0 "Forwarding using backup nexthop ID"
run_cmd "ip -n sw1 -s -j link show dev vx0 | jq -e '.[][\"stats64\"][\"tx\"][\"dropped\"] == $tx_drop'" run_cmd "ip -n $sw1 -s -j link show dev vx0 | jq -e '.[][\"stats64\"][\"tx\"][\"dropped\"] == $tx_drop'"
log_test $? 0 "No Tx drop increase" log_test $? 0 "No Tx drop increase"
# Use a non-existent nexthop ID. # Use a non-existent nexthop ID.
run_cmd "bridge -n sw1 link set dev swp1 backup_nhid 20" run_cmd "bridge -n $sw1 link set dev swp1 backup_nhid 20"
run_cmd "bridge -n sw1 -d link show dev swp1 | grep \"backup_nhid 20\"" run_cmd "bridge -n $sw1 -d link show dev swp1 | grep \"backup_nhid 20\""
log_test $? 0 "Non-existent nexthop as backup nexthop" log_test $? 0 "Non-existent nexthop as backup nexthop"
run_cmd "ip netns exec sw1 mausezahn br0.10 -a $smac -b $dmac -A 198.51.100.1 -B 198.51.100.2 -t ip -p 100 -q -c 1" run_cmd "ip netns exec $sw1 mausezahn br0.10 -a $smac -b $dmac -A 198.51.100.1 -B 198.51.100.2 -t ip -p 100 -q -c 1"
tc_check_packets sw1 "dev swp1 egress" 101 0 tc_check_packets $sw1 "dev swp1 egress" 101 0
log_test $? 0 "No forwarding out of swp1" log_test $? 0 "No forwarding out of swp1"
tc_check_packets sw1 "dev vx0 egress" 101 2 tc_check_packets $sw1 "dev vx0 egress" 101 2
log_test $? 0 "Forwarding out of vx0" log_test $? 0 "Forwarding out of vx0"
tc_check_packets sw2 "dev vx0 ingress" 101 1 tc_check_packets $sw2 "dev vx0 ingress" 101 1
log_test $? 0 "No forwarding using backup nexthop ID" log_test $? 0 "No forwarding using backup nexthop ID"
run_cmd "ip -n sw1 -s -j link show dev vx0 | jq -e '.[][\"stats64\"][\"tx\"][\"dropped\"] == $((tx_drop + 1))'" run_cmd "ip -n $sw1 -s -j link show dev vx0 | jq -e '.[][\"stats64\"][\"tx\"][\"dropped\"] == $((tx_drop + 1))'"
log_test $? 0 "Tx drop increased" log_test $? 0 "Tx drop increased"
# Use a blckhole nexthop. # Use a blckhole nexthop.
run_cmd "ip -n sw1 nexthop replace id 30 blackhole" run_cmd "ip -n $sw1 nexthop replace id 30 blackhole"
run_cmd "bridge -n sw1 link set dev swp1 backup_nhid 30" run_cmd "bridge -n $sw1 link set dev swp1 backup_nhid 30"
run_cmd "bridge -n sw1 -d link show dev swp1 | grep \"backup_nhid 30\"" run_cmd "bridge -n $sw1 -d link show dev swp1 | grep \"backup_nhid 30\""
log_test $? 0 "Blackhole nexthop as backup nexthop" log_test $? 0 "Blackhole nexthop as backup nexthop"
run_cmd "ip netns exec sw1 mausezahn br0.10 -a $smac -b $dmac -A 198.51.100.1 -B 198.51.100.2 -t ip -p 100 -q -c 1" run_cmd "ip netns exec $sw1 mausezahn br0.10 -a $smac -b $dmac -A 198.51.100.1 -B 198.51.100.2 -t ip -p 100 -q -c 1"
tc_check_packets sw1 "dev swp1 egress" 101 0 tc_check_packets $sw1 "dev swp1 egress" 101 0
log_test $? 0 "No forwarding out of swp1" log_test $? 0 "No forwarding out of swp1"
tc_check_packets sw1 "dev vx0 egress" 101 3 tc_check_packets $sw1 "dev vx0 egress" 101 3
log_test $? 0 "Forwarding out of vx0" log_test $? 0 "Forwarding out of vx0"
tc_check_packets sw2 "dev vx0 ingress" 101 1 tc_check_packets $sw2 "dev vx0 ingress" 101 1
log_test $? 0 "No forwarding using backup nexthop ID" log_test $? 0 "No forwarding using backup nexthop ID"
run_cmd "ip -n sw1 -s -j link show dev vx0 | jq -e '.[][\"stats64\"][\"tx\"][\"dropped\"] == $((tx_drop + 2))'" run_cmd "ip -n $sw1 -s -j link show dev vx0 | jq -e '.[][\"stats64\"][\"tx\"][\"dropped\"] == $((tx_drop + 2))'"
log_test $? 0 "Tx drop increased" log_test $? 0 "Tx drop increased"
# Non-group FDB nexthop. # Non-group FDB nexthop.
run_cmd "bridge -n sw1 link set dev swp1 backup_nhid 1" run_cmd "bridge -n $sw1 link set dev swp1 backup_nhid 1"
run_cmd "bridge -n sw1 -d link show dev swp1 | grep \"backup_nhid 1\"" run_cmd "bridge -n $sw1 -d link show dev swp1 | grep \"backup_nhid 1\""
log_test $? 0 "Non-group FDB nexthop as backup nexthop" log_test $? 0 "Non-group FDB nexthop as backup nexthop"
run_cmd "ip netns exec sw1 mausezahn br0.10 -a $smac -b $dmac -A 198.51.100.1 -B 198.51.100.2 -t ip -p 100 -q -c 1" run_cmd "ip netns exec $sw1 mausezahn br0.10 -a $smac -b $dmac -A 198.51.100.1 -B 198.51.100.2 -t ip -p 100 -q -c 1"
tc_check_packets sw1 "dev swp1 egress" 101 0 tc_check_packets $sw1 "dev swp1 egress" 101 0
log_test $? 0 "No forwarding out of swp1" log_test $? 0 "No forwarding out of swp1"
tc_check_packets sw1 "dev vx0 egress" 101 4 tc_check_packets $sw1 "dev vx0 egress" 101 4
log_test $? 0 "Forwarding out of vx0" log_test $? 0 "Forwarding out of vx0"
tc_check_packets sw2 "dev vx0 ingress" 101 1 tc_check_packets $sw2 "dev vx0 ingress" 101 1
log_test $? 0 "No forwarding using backup nexthop ID" log_test $? 0 "No forwarding using backup nexthop ID"
run_cmd "ip -n sw1 -s -j link show dev vx0 | jq -e '.[][\"stats64\"][\"tx\"][\"dropped\"] == $((tx_drop + 3))'" run_cmd "ip -n $sw1 -s -j link show dev vx0 | jq -e '.[][\"stats64\"][\"tx\"][\"dropped\"] == $((tx_drop + 3))'"
log_test $? 0 "Tx drop increased" log_test $? 0 "Tx drop increased"
# IPv6 address family nexthop. # IPv6 address family nexthop.
run_cmd "ip -n sw1 nexthop replace id 100 via 2001:db8:100::1 fdb" run_cmd "ip -n $sw1 nexthop replace id 100 via 2001:db8:100::1 fdb"
run_cmd "ip -n sw1 nexthop replace id 200 via 2001:db8:100::1 fdb" run_cmd "ip -n $sw1 nexthop replace id 200 via 2001:db8:100::1 fdb"
run_cmd "ip -n sw1 nexthop replace id 300 group 100/200 fdb" run_cmd "ip -n $sw1 nexthop replace id 300 group 100/200 fdb"
run_cmd "bridge -n sw1 link set dev swp1 backup_nhid 300" run_cmd "bridge -n $sw1 link set dev swp1 backup_nhid 300"
run_cmd "bridge -n sw1 -d link show dev swp1 | grep \"backup_nhid 300\"" run_cmd "bridge -n $sw1 -d link show dev swp1 | grep \"backup_nhid 300\""
log_test $? 0 "IPv6 address family nexthop as backup nexthop" log_test $? 0 "IPv6 address family nexthop as backup nexthop"
run_cmd "ip netns exec sw1 mausezahn br0.10 -a $smac -b $dmac -A 198.51.100.1 -B 198.51.100.2 -t ip -p 100 -q -c 1" run_cmd "ip netns exec $sw1 mausezahn br0.10 -a $smac -b $dmac -A 198.51.100.1 -B 198.51.100.2 -t ip -p 100 -q -c 1"
tc_check_packets sw1 "dev swp1 egress" 101 0 tc_check_packets $sw1 "dev swp1 egress" 101 0
log_test $? 0 "No forwarding out of swp1" log_test $? 0 "No forwarding out of swp1"
tc_check_packets sw1 "dev vx0 egress" 101 5 tc_check_packets $sw1 "dev vx0 egress" 101 5
log_test $? 0 "Forwarding out of vx0" log_test $? 0 "Forwarding out of vx0"
tc_check_packets sw2 "dev vx0 ingress" 101 1 tc_check_packets $sw2 "dev vx0 ingress" 101 1
log_test $? 0 "No forwarding using backup nexthop ID" log_test $? 0 "No forwarding using backup nexthop ID"
run_cmd "ip -n sw1 -s -j link show dev vx0 | jq -e '.[][\"stats64\"][\"tx\"][\"dropped\"] == $((tx_drop + 4))'" run_cmd "ip -n $sw1 -s -j link show dev vx0 | jq -e '.[][\"stats64\"][\"tx\"][\"dropped\"] == $((tx_drop + 4))'"
log_test $? 0 "Tx drop increased" log_test $? 0 "Tx drop increased"
} }
...@@ -591,44 +584,44 @@ backup_nhid_ping() ...@@ -591,44 +584,44 @@ backup_nhid_ping()
echo "------------------------" echo "------------------------"
# Test bidirectional traffic when traffic is redirected in both VTEPs. # Test bidirectional traffic when traffic is redirected in both VTEPs.
sw1_mac=$(ip -n sw1 -j -p link show br0.10 | jq -r '.[]["address"]') sw1_mac=$(ip -n $sw1 -j -p link show br0.10 | jq -r '.[]["address"]')
sw2_mac=$(ip -n sw2 -j -p link show br0.10 | jq -r '.[]["address"]') sw2_mac=$(ip -n $sw2 -j -p link show br0.10 | jq -r '.[]["address"]')
run_cmd "bridge -n sw1 fdb replace $sw2_mac dev swp1 master static vlan 10" run_cmd "bridge -n $sw1 fdb replace $sw2_mac dev swp1 master static vlan 10"
run_cmd "bridge -n sw2 fdb replace $sw1_mac dev swp1 master static vlan 10" run_cmd "bridge -n $sw2 fdb replace $sw1_mac dev swp1 master static vlan 10"
run_cmd "ip -n sw1 neigh replace 192.0.2.66 lladdr $sw2_mac nud perm dev br0.10" run_cmd "ip -n $sw1 neigh replace 192.0.2.66 lladdr $sw2_mac nud perm dev br0.10"
run_cmd "ip -n sw2 neigh replace 192.0.2.65 lladdr $sw1_mac nud perm dev br0.10" run_cmd "ip -n $sw2 neigh replace 192.0.2.65 lladdr $sw1_mac nud perm dev br0.10"
run_cmd "ip -n sw1 nexthop replace id 1 via 192.0.2.34 fdb" run_cmd "ip -n $sw1 nexthop replace id 1 via 192.0.2.34 fdb"
run_cmd "ip -n sw2 nexthop replace id 1 via 192.0.2.33 fdb" run_cmd "ip -n $sw2 nexthop replace id 1 via 192.0.2.33 fdb"
run_cmd "ip -n sw1 nexthop replace id 10 group 1 fdb" run_cmd "ip -n $sw1 nexthop replace id 10 group 1 fdb"
run_cmd "ip -n sw2 nexthop replace id 10 group 1 fdb" run_cmd "ip -n $sw2 nexthop replace id 10 group 1 fdb"
run_cmd "bridge -n sw1 link set dev swp1 backup_port vx0" run_cmd "bridge -n $sw1 link set dev swp1 backup_port vx0"
run_cmd "bridge -n sw2 link set dev swp1 backup_port vx0" run_cmd "bridge -n $sw2 link set dev swp1 backup_port vx0"
run_cmd "bridge -n sw1 link set dev swp1 backup_nhid 10" run_cmd "bridge -n $sw1 link set dev swp1 backup_nhid 10"
run_cmd "bridge -n sw2 link set dev swp1 backup_nhid 10" run_cmd "bridge -n $sw2 link set dev swp1 backup_nhid 10"
run_cmd "ip -n sw1 link set dev swp1 carrier off" run_cmd "ip -n $sw1 link set dev swp1 carrier off"
run_cmd "ip -n sw2 link set dev swp1 carrier off" run_cmd "ip -n $sw2 link set dev swp1 carrier off"
run_cmd "ip netns exec sw1 ping -i 0.1 -c 10 -w $PING_TIMEOUT 192.0.2.66" run_cmd "ip netns exec $sw1 ping -i 0.1 -c 10 -w $PING_TIMEOUT 192.0.2.66"
log_test $? 0 "Ping with backup nexthop ID" log_test $? 0 "Ping with backup nexthop ID"
# Reset the backup nexthop ID to 0 and check that ping fails. # Reset the backup nexthop ID to 0 and check that ping fails.
run_cmd "bridge -n sw1 link set dev swp1 backup_nhid 0" run_cmd "bridge -n $sw1 link set dev swp1 backup_nhid 0"
run_cmd "bridge -n sw2 link set dev swp1 backup_nhid 0" run_cmd "bridge -n $sw2 link set dev swp1 backup_nhid 0"
run_cmd "ip netns exec sw1 ping -i 0.1 -c 10 -w $PING_TIMEOUT 192.0.2.66" run_cmd "ip netns exec $sw1 ping -i 0.1 -c 10 -w $PING_TIMEOUT 192.0.2.66"
log_test $? 1 "Ping after disabling backup nexthop ID" log_test $? 1 "Ping after disabling backup nexthop ID"
} }
backup_nhid_add_del_loop() backup_nhid_add_del_loop()
{ {
while true; do while true; do
ip -n sw1 nexthop del id 10 ip -n $sw1 nexthop del id 10
ip -n sw1 nexthop replace id 10 group 1/2 fdb ip -n $sw1 nexthop replace id 10 group 1/2 fdb
done >/dev/null 2>&1 done >/dev/null 2>&1
} }
...@@ -648,19 +641,19 @@ backup_nhid_torture() ...@@ -648,19 +641,19 @@ backup_nhid_torture()
# deleting the group. The test is considered successful if nothing # deleting the group. The test is considered successful if nothing
# crashed. # crashed.
run_cmd "ip -n sw1 nexthop replace id 1 via 192.0.2.34 fdb" run_cmd "ip -n $sw1 nexthop replace id 1 via 192.0.2.34 fdb"
run_cmd "ip -n sw1 nexthop replace id 2 via 192.0.2.34 fdb" run_cmd "ip -n $sw1 nexthop replace id 2 via 192.0.2.34 fdb"
run_cmd "ip -n sw1 nexthop replace id 10 group 1/2 fdb" run_cmd "ip -n $sw1 nexthop replace id 10 group 1/2 fdb"
run_cmd "bridge -n sw1 fdb replace $dmac dev swp1 master static vlan 10" run_cmd "bridge -n $sw1 fdb replace $dmac dev swp1 master static vlan 10"
run_cmd "bridge -n sw1 link set dev swp1 backup_port vx0" run_cmd "bridge -n $sw1 link set dev swp1 backup_port vx0"
run_cmd "bridge -n sw1 link set dev swp1 backup_nhid 10" run_cmd "bridge -n $sw1 link set dev swp1 backup_nhid 10"
run_cmd "ip -n sw1 link set dev swp1 carrier off" run_cmd "ip -n $sw1 link set dev swp1 carrier off"
backup_nhid_add_del_loop & backup_nhid_add_del_loop &
pid1=$! pid1=$!
ip netns exec sw1 mausezahn br0.10 -a $smac -b $dmac -A 198.51.100.1 -B 198.51.100.2 -t ip -p 100 -q -c 0 & ip netns exec $sw1 mausezahn br0.10 -a $smac -b $dmac -A 198.51.100.1 -B 198.51.100.2 -t ip -p 100 -q -c 0 &
pid2=$! pid2=$!
sleep 30 sleep 30
......
...@@ -45,9 +45,8 @@ ...@@ -45,9 +45,8 @@
# | sw1 | | sw2 | # | sw1 | | sw2 |
# +------------------------------------+ +------------------------------------+ # +------------------------------------+ +------------------------------------+
source lib.sh
ret=0 ret=0
# Kselftest framework requirement - SKIP code is 4.
ksft_skip=4
# All tests in this script. Can be overridden with -t option. # All tests in this script. Can be overridden with -t option.
TESTS=" TESTS="
...@@ -140,9 +139,6 @@ setup_topo_ns() ...@@ -140,9 +139,6 @@ setup_topo_ns()
{ {
local ns=$1; shift local ns=$1; shift
ip netns add $ns
ip -n $ns link set dev lo up
ip netns exec $ns sysctl -qw net.ipv6.conf.all.keep_addr_on_down=1 ip netns exec $ns sysctl -qw net.ipv6.conf.all.keep_addr_on_down=1
ip netns exec $ns sysctl -qw net.ipv6.conf.default.ignore_routes_with_linkdown=1 ip netns exec $ns sysctl -qw net.ipv6.conf.default.ignore_routes_with_linkdown=1
ip netns exec $ns sysctl -qw net.ipv6.conf.all.accept_dad=0 ip netns exec $ns sysctl -qw net.ipv6.conf.all.accept_dad=0
...@@ -153,21 +149,22 @@ setup_topo() ...@@ -153,21 +149,22 @@ setup_topo()
{ {
local ns local ns
for ns in h1 h2 sw1 sw2; do setup_ns h1 h2 sw1 sw2
for ns in $h1 $h2 $sw1 $sw2; do
setup_topo_ns $ns setup_topo_ns $ns
done done
ip link add name veth0 type veth peer name veth1 ip link add name veth0 type veth peer name veth1
ip link set dev veth0 netns h1 name eth0 ip link set dev veth0 netns $h1 name eth0
ip link set dev veth1 netns sw1 name swp1 ip link set dev veth1 netns $sw1 name swp1
ip link add name veth0 type veth peer name veth1 ip link add name veth0 type veth peer name veth1
ip link set dev veth0 netns sw1 name veth0 ip link set dev veth0 netns $sw1 name veth0
ip link set dev veth1 netns sw2 name veth0 ip link set dev veth1 netns $sw2 name veth0
ip link add name veth0 type veth peer name veth1 ip link add name veth0 type veth peer name veth1
ip link set dev veth0 netns h2 name eth0 ip link set dev veth0 netns $h2 name eth0
ip link set dev veth1 netns sw2 name swp1 ip link set dev veth1 netns $sw2 name swp1
} }
setup_host_common() setup_host_common()
...@@ -190,7 +187,7 @@ setup_host_common() ...@@ -190,7 +187,7 @@ setup_host_common()
setup_h1() setup_h1()
{ {
local ns=h1 local ns=$h1
local v4addr1=192.0.2.1/28 local v4addr1=192.0.2.1/28
local v4addr2=192.0.2.17/28 local v4addr2=192.0.2.17/28
local v6addr1=2001:db8:1::1/64 local v6addr1=2001:db8:1::1/64
...@@ -201,7 +198,7 @@ setup_h1() ...@@ -201,7 +198,7 @@ setup_h1()
setup_h2() setup_h2()
{ {
local ns=h2 local ns=$h2
local v4addr1=192.0.2.2/28 local v4addr1=192.0.2.2/28
local v4addr2=192.0.2.18/28 local v4addr2=192.0.2.18/28
local v6addr1=2001:db8:1::2/64 local v6addr1=2001:db8:1::2/64
...@@ -254,7 +251,7 @@ setup_sw_common() ...@@ -254,7 +251,7 @@ setup_sw_common()
setup_sw1() setup_sw1()
{ {
local ns=sw1 local ns=$sw1
local local_addr=192.0.2.33 local local_addr=192.0.2.33
local remote_addr=192.0.2.34 local remote_addr=192.0.2.34
local veth_addr=192.0.2.49 local veth_addr=192.0.2.49
...@@ -265,7 +262,7 @@ setup_sw1() ...@@ -265,7 +262,7 @@ setup_sw1()
setup_sw2() setup_sw2()
{ {
local ns=sw2 local ns=$sw2
local local_addr=192.0.2.34 local local_addr=192.0.2.34
local remote_addr=192.0.2.33 local remote_addr=192.0.2.33
local veth_addr=192.0.2.50 local veth_addr=192.0.2.50
...@@ -291,11 +288,7 @@ setup() ...@@ -291,11 +288,7 @@ setup()
cleanup() cleanup()
{ {
local ns cleanup_ns $h1 $h2 $sw1 $sw2
for ns in h1 h2 sw1 sw2; do
ip netns del $ns &> /dev/null
done
} }
################################################################################ ################################################################################
...@@ -312,80 +305,80 @@ neigh_suppress_arp_common() ...@@ -312,80 +305,80 @@ neigh_suppress_arp_common()
echo "Per-port ARP suppression - VLAN $vid" echo "Per-port ARP suppression - VLAN $vid"
echo "----------------------------------" echo "----------------------------------"
run_cmd "tc -n sw1 qdisc replace dev vx0 clsact" run_cmd "tc -n $sw1 qdisc replace dev vx0 clsact"
run_cmd "tc -n sw1 filter replace dev vx0 egress pref 1 handle 101 proto 0x0806 flower indev swp1 arp_tip $tip arp_sip $sip arp_op request action pass" run_cmd "tc -n $sw1 filter replace dev vx0 egress pref 1 handle 101 proto 0x0806 flower indev swp1 arp_tip $tip arp_sip $sip arp_op request action pass"
# Initial state - check that ARP requests are not suppressed and that # Initial state - check that ARP requests are not suppressed and that
# ARP replies are received. # ARP replies are received.
run_cmd "ip netns exec h1 arping -q -b -c 1 -w 5 -s $sip -I eth0.$vid $tip" run_cmd "ip netns exec $h1 arping -q -b -c 1 -w 5 -s $sip -I eth0.$vid $tip"
log_test $? 0 "arping" log_test $? 0 "arping"
tc_check_packets sw1 "dev vx0 egress" 101 1 tc_check_packets $sw1 "dev vx0 egress" 101 1
log_test $? 0 "ARP suppression" log_test $? 0 "ARP suppression"
# Enable neighbor suppression and check that nothing changes compared # Enable neighbor suppression and check that nothing changes compared
# to the initial state. # to the initial state.
run_cmd "bridge -n sw1 link set dev vx0 neigh_suppress on" run_cmd "bridge -n $sw1 link set dev vx0 neigh_suppress on"
run_cmd "bridge -n sw1 -d link show dev vx0 | grep \"neigh_suppress on\"" run_cmd "bridge -n $sw1 -d link show dev vx0 | grep \"neigh_suppress on\""
log_test $? 0 "\"neigh_suppress\" is on" log_test $? 0 "\"neigh_suppress\" is on"
run_cmd "ip netns exec h1 arping -q -b -c 1 -w 5 -s $sip -I eth0.$vid $tip" run_cmd "ip netns exec $h1 arping -q -b -c 1 -w 5 -s $sip -I eth0.$vid $tip"
log_test $? 0 "arping" log_test $? 0 "arping"
tc_check_packets sw1 "dev vx0 egress" 101 2 tc_check_packets $sw1 "dev vx0 egress" 101 2
log_test $? 0 "ARP suppression" log_test $? 0 "ARP suppression"
# Install an FDB entry for the remote host and check that nothing # Install an FDB entry for the remote host and check that nothing
# changes compared to the initial state. # changes compared to the initial state.
h2_mac=$(ip -n h2 -j -p link show eth0.$vid | jq -r '.[]["address"]') h2_mac=$(ip -n $h2 -j -p link show eth0.$vid | jq -r '.[]["address"]')
run_cmd "bridge -n sw1 fdb replace $h2_mac dev vx0 master static vlan $vid" run_cmd "bridge -n $sw1 fdb replace $h2_mac dev vx0 master static vlan $vid"
log_test $? 0 "FDB entry installation" log_test $? 0 "FDB entry installation"
run_cmd "ip netns exec h1 arping -q -b -c 1 -w 5 -s $sip -I eth0.$vid $tip" run_cmd "ip netns exec $h1 arping -q -b -c 1 -w 5 -s $sip -I eth0.$vid $tip"
log_test $? 0 "arping" log_test $? 0 "arping"
tc_check_packets sw1 "dev vx0 egress" 101 3 tc_check_packets $sw1 "dev vx0 egress" 101 3
log_test $? 0 "ARP suppression" log_test $? 0 "ARP suppression"
# Install a neighbor on the matching SVI interface and check that ARP # Install a neighbor on the matching SVI interface and check that ARP
# requests are suppressed. # requests are suppressed.
run_cmd "ip -n sw1 neigh replace $tip lladdr $h2_mac nud permanent dev br0.$vid" run_cmd "ip -n $sw1 neigh replace $tip lladdr $h2_mac nud permanent dev br0.$vid"
log_test $? 0 "Neighbor entry installation" log_test $? 0 "Neighbor entry installation"
run_cmd "ip netns exec h1 arping -q -b -c 1 -w 5 -s $sip -I eth0.$vid $tip" run_cmd "ip netns exec $h1 arping -q -b -c 1 -w 5 -s $sip -I eth0.$vid $tip"
log_test $? 0 "arping" log_test $? 0 "arping"
tc_check_packets sw1 "dev vx0 egress" 101 3 tc_check_packets $sw1 "dev vx0 egress" 101 3
log_test $? 0 "ARP suppression" log_test $? 0 "ARP suppression"
# Take the second host down and check that ARP requests are suppressed # Take the second host down and check that ARP requests are suppressed
# and that ARP replies are received. # and that ARP replies are received.
run_cmd "ip -n h2 link set dev eth0.$vid down" run_cmd "ip -n $h2 link set dev eth0.$vid down"
log_test $? 0 "H2 down" log_test $? 0 "H2 down"
run_cmd "ip netns exec h1 arping -q -b -c 1 -w 5 -s $sip -I eth0.$vid $tip" run_cmd "ip netns exec $h1 arping -q -b -c 1 -w 5 -s $sip -I eth0.$vid $tip"
log_test $? 0 "arping" log_test $? 0 "arping"
tc_check_packets sw1 "dev vx0 egress" 101 3 tc_check_packets $sw1 "dev vx0 egress" 101 3
log_test $? 0 "ARP suppression" log_test $? 0 "ARP suppression"
run_cmd "ip -n h2 link set dev eth0.$vid up" run_cmd "ip -n $h2 link set dev eth0.$vid up"
log_test $? 0 "H2 up" log_test $? 0 "H2 up"
# Disable neighbor suppression and check that ARP requests are no # Disable neighbor suppression and check that ARP requests are no
# longer suppressed. # longer suppressed.
run_cmd "bridge -n sw1 link set dev vx0 neigh_suppress off" run_cmd "bridge -n $sw1 link set dev vx0 neigh_suppress off"
run_cmd "bridge -n sw1 -d link show dev vx0 | grep \"neigh_suppress off\"" run_cmd "bridge -n $sw1 -d link show dev vx0 | grep \"neigh_suppress off\""
log_test $? 0 "\"neigh_suppress\" is off" log_test $? 0 "\"neigh_suppress\" is off"
run_cmd "ip netns exec h1 arping -q -b -c 1 -w 5 -s $sip -I eth0.$vid $tip" run_cmd "ip netns exec $h1 arping -q -b -c 1 -w 5 -s $sip -I eth0.$vid $tip"
log_test $? 0 "arping" log_test $? 0 "arping"
tc_check_packets sw1 "dev vx0 egress" 101 4 tc_check_packets $sw1 "dev vx0 egress" 101 4
log_test $? 0 "ARP suppression" log_test $? 0 "ARP suppression"
# Take the second host down and check that ARP requests are not # Take the second host down and check that ARP requests are not
# suppressed and that ARP replies are not received. # suppressed and that ARP replies are not received.
run_cmd "ip -n h2 link set dev eth0.$vid down" run_cmd "ip -n $h2 link set dev eth0.$vid down"
log_test $? 0 "H2 down" log_test $? 0 "H2 down"
run_cmd "ip netns exec h1 arping -q -b -c 1 -w 5 -s $sip -I eth0.$vid $tip" run_cmd "ip netns exec $h1 arping -q -b -c 1 -w 5 -s $sip -I eth0.$vid $tip"
log_test $? 1 "arping" log_test $? 1 "arping"
tc_check_packets sw1 "dev vx0 egress" 101 5 tc_check_packets $sw1 "dev vx0 egress" 101 5
log_test $? 0 "ARP suppression" log_test $? 0 "ARP suppression"
} }
...@@ -415,80 +408,80 @@ neigh_suppress_ns_common() ...@@ -415,80 +408,80 @@ neigh_suppress_ns_common()
echo "Per-port NS suppression - VLAN $vid" echo "Per-port NS suppression - VLAN $vid"
echo "---------------------------------" echo "---------------------------------"
run_cmd "tc -n sw1 qdisc replace dev vx0 clsact" run_cmd "tc -n $sw1 qdisc replace dev vx0 clsact"
run_cmd "tc -n sw1 filter replace dev vx0 egress pref 1 handle 101 proto ipv6 flower indev swp1 ip_proto icmpv6 dst_ip $maddr src_ip $saddr type 135 code 0 action pass" run_cmd "tc -n $sw1 filter replace dev vx0 egress pref 1 handle 101 proto ipv6 flower indev swp1 ip_proto icmpv6 dst_ip $maddr src_ip $saddr type 135 code 0 action pass"
# Initial state - check that NS messages are not suppressed and that ND # Initial state - check that NS messages are not suppressed and that ND
# messages are received. # messages are received.
run_cmd "ip netns exec h1 ndisc6 -q -r 1 -s $saddr -w 5000 $daddr eth0.$vid" run_cmd "ip netns exec $h1 ndisc6 -q -r 1 -s $saddr -w 5000 $daddr eth0.$vid"
log_test $? 0 "ndisc6" log_test $? 0 "ndisc6"
tc_check_packets sw1 "dev vx0 egress" 101 1 tc_check_packets $sw1 "dev vx0 egress" 101 1
log_test $? 0 "NS suppression" log_test $? 0 "NS suppression"
# Enable neighbor suppression and check that nothing changes compared # Enable neighbor suppression and check that nothing changes compared
# to the initial state. # to the initial state.
run_cmd "bridge -n sw1 link set dev vx0 neigh_suppress on" run_cmd "bridge -n $sw1 link set dev vx0 neigh_suppress on"
run_cmd "bridge -n sw1 -d link show dev vx0 | grep \"neigh_suppress on\"" run_cmd "bridge -n $sw1 -d link show dev vx0 | grep \"neigh_suppress on\""
log_test $? 0 "\"neigh_suppress\" is on" log_test $? 0 "\"neigh_suppress\" is on"
run_cmd "ip netns exec h1 ndisc6 -q -r 1 -s $saddr -w 5000 $daddr eth0.$vid" run_cmd "ip netns exec $h1 ndisc6 -q -r 1 -s $saddr -w 5000 $daddr eth0.$vid"
log_test $? 0 "ndisc6" log_test $? 0 "ndisc6"
tc_check_packets sw1 "dev vx0 egress" 101 2 tc_check_packets $sw1 "dev vx0 egress" 101 2
log_test $? 0 "NS suppression" log_test $? 0 "NS suppression"
# Install an FDB entry for the remote host and check that nothing # Install an FDB entry for the remote host and check that nothing
# changes compared to the initial state. # changes compared to the initial state.
h2_mac=$(ip -n h2 -j -p link show eth0.$vid | jq -r '.[]["address"]') h2_mac=$(ip -n $h2 -j -p link show eth0.$vid | jq -r '.[]["address"]')
run_cmd "bridge -n sw1 fdb replace $h2_mac dev vx0 master static vlan $vid" run_cmd "bridge -n $sw1 fdb replace $h2_mac dev vx0 master static vlan $vid"
log_test $? 0 "FDB entry installation" log_test $? 0 "FDB entry installation"
run_cmd "ip netns exec h1 ndisc6 -q -r 1 -s $saddr -w 5000 $daddr eth0.$vid" run_cmd "ip netns exec $h1 ndisc6 -q -r 1 -s $saddr -w 5000 $daddr eth0.$vid"
log_test $? 0 "ndisc6" log_test $? 0 "ndisc6"
tc_check_packets sw1 "dev vx0 egress" 101 3 tc_check_packets $sw1 "dev vx0 egress" 101 3
log_test $? 0 "NS suppression" log_test $? 0 "NS suppression"
# Install a neighbor on the matching SVI interface and check that NS # Install a neighbor on the matching SVI interface and check that NS
# messages are suppressed. # messages are suppressed.
run_cmd "ip -n sw1 neigh replace $daddr lladdr $h2_mac nud permanent dev br0.$vid" run_cmd "ip -n $sw1 neigh replace $daddr lladdr $h2_mac nud permanent dev br0.$vid"
log_test $? 0 "Neighbor entry installation" log_test $? 0 "Neighbor entry installation"
run_cmd "ip netns exec h1 ndisc6 -q -r 1 -s $saddr -w 5000 $daddr eth0.$vid" run_cmd "ip netns exec $h1 ndisc6 -q -r 1 -s $saddr -w 5000 $daddr eth0.$vid"
log_test $? 0 "ndisc6" log_test $? 0 "ndisc6"
tc_check_packets sw1 "dev vx0 egress" 101 3 tc_check_packets $sw1 "dev vx0 egress" 101 3
log_test $? 0 "NS suppression" log_test $? 0 "NS suppression"
# Take the second host down and check that NS messages are suppressed # Take the second host down and check that NS messages are suppressed
# and that ND messages are received. # and that ND messages are received.
run_cmd "ip -n h2 link set dev eth0.$vid down" run_cmd "ip -n $h2 link set dev eth0.$vid down"
log_test $? 0 "H2 down" log_test $? 0 "H2 down"
run_cmd "ip netns exec h1 ndisc6 -q -r 1 -s $saddr -w 5000 $daddr eth0.$vid" run_cmd "ip netns exec $h1 ndisc6 -q -r 1 -s $saddr -w 5000 $daddr eth0.$vid"
log_test $? 0 "ndisc6" log_test $? 0 "ndisc6"
tc_check_packets sw1 "dev vx0 egress" 101 3 tc_check_packets $sw1 "dev vx0 egress" 101 3
log_test $? 0 "NS suppression" log_test $? 0 "NS suppression"
run_cmd "ip -n h2 link set dev eth0.$vid up" run_cmd "ip -n $h2 link set dev eth0.$vid up"
log_test $? 0 "H2 up" log_test $? 0 "H2 up"
# Disable neighbor suppression and check that NS messages are no longer # Disable neighbor suppression and check that NS messages are no longer
# suppressed. # suppressed.
run_cmd "bridge -n sw1 link set dev vx0 neigh_suppress off" run_cmd "bridge -n $sw1 link set dev vx0 neigh_suppress off"
run_cmd "bridge -n sw1 -d link show dev vx0 | grep \"neigh_suppress off\"" run_cmd "bridge -n $sw1 -d link show dev vx0 | grep \"neigh_suppress off\""
log_test $? 0 "\"neigh_suppress\" is off" log_test $? 0 "\"neigh_suppress\" is off"
run_cmd "ip netns exec h1 ndisc6 -q -r 1 -s $saddr -w 5000 $daddr eth0.$vid" run_cmd "ip netns exec $h1 ndisc6 -q -r 1 -s $saddr -w 5000 $daddr eth0.$vid"
log_test $? 0 "ndisc6" log_test $? 0 "ndisc6"
tc_check_packets sw1 "dev vx0 egress" 101 4 tc_check_packets $sw1 "dev vx0 egress" 101 4
log_test $? 0 "NS suppression" log_test $? 0 "NS suppression"
# Take the second host down and check that NS messages are not # Take the second host down and check that NS messages are not
# suppressed and that ND messages are not received. # suppressed and that ND messages are not received.
run_cmd "ip -n h2 link set dev eth0.$vid down" run_cmd "ip -n $h2 link set dev eth0.$vid down"
log_test $? 0 "H2 down" log_test $? 0 "H2 down"
run_cmd "ip netns exec h1 ndisc6 -q -r 1 -s $saddr -w 5000 $daddr eth0.$vid" run_cmd "ip netns exec $h1 ndisc6 -q -r 1 -s $saddr -w 5000 $daddr eth0.$vid"
log_test $? 2 "ndisc6" log_test $? 2 "ndisc6"
tc_check_packets sw1 "dev vx0 egress" 101 5 tc_check_packets $sw1 "dev vx0 egress" 101 5
log_test $? 0 "NS suppression" log_test $? 0 "NS suppression"
} }
...@@ -524,118 +517,118 @@ neigh_vlan_suppress_arp() ...@@ -524,118 +517,118 @@ neigh_vlan_suppress_arp()
echo "Per-{Port, VLAN} ARP suppression" echo "Per-{Port, VLAN} ARP suppression"
echo "--------------------------------" echo "--------------------------------"
run_cmd "tc -n sw1 qdisc replace dev vx0 clsact" run_cmd "tc -n $sw1 qdisc replace dev vx0 clsact"
run_cmd "tc -n sw1 filter replace dev vx0 egress pref 1 handle 101 proto 0x0806 flower indev swp1 arp_tip $tip1 arp_sip $sip1 arp_op request action pass" run_cmd "tc -n $sw1 filter replace dev vx0 egress pref 1 handle 101 proto 0x0806 flower indev swp1 arp_tip $tip1 arp_sip $sip1 arp_op request action pass"
run_cmd "tc -n sw1 filter replace dev vx0 egress pref 1 handle 102 proto 0x0806 flower indev swp1 arp_tip $tip2 arp_sip $sip2 arp_op request action pass" run_cmd "tc -n $sw1 filter replace dev vx0 egress pref 1 handle 102 proto 0x0806 flower indev swp1 arp_tip $tip2 arp_sip $sip2 arp_op request action pass"
h2_mac1=$(ip -n h2 -j -p link show eth0.$vid1 | jq -r '.[]["address"]') h2_mac1=$(ip -n $h2 -j -p link show eth0.$vid1 | jq -r '.[]["address"]')
h2_mac2=$(ip -n h2 -j -p link show eth0.$vid2 | jq -r '.[]["address"]') h2_mac2=$(ip -n $h2 -j -p link show eth0.$vid2 | jq -r '.[]["address"]')
run_cmd "bridge -n sw1 fdb replace $h2_mac1 dev vx0 master static vlan $vid1" run_cmd "bridge -n $sw1 fdb replace $h2_mac1 dev vx0 master static vlan $vid1"
run_cmd "bridge -n sw1 fdb replace $h2_mac2 dev vx0 master static vlan $vid2" run_cmd "bridge -n $sw1 fdb replace $h2_mac2 dev vx0 master static vlan $vid2"
run_cmd "ip -n sw1 neigh replace $tip1 lladdr $h2_mac1 nud permanent dev br0.$vid1" run_cmd "ip -n $sw1 neigh replace $tip1 lladdr $h2_mac1 nud permanent dev br0.$vid1"
run_cmd "ip -n sw1 neigh replace $tip2 lladdr $h2_mac2 nud permanent dev br0.$vid2" run_cmd "ip -n $sw1 neigh replace $tip2 lladdr $h2_mac2 nud permanent dev br0.$vid2"
# Enable per-{Port, VLAN} neighbor suppression and check that ARP # Enable per-{Port, VLAN} neighbor suppression and check that ARP
# requests are not suppressed and that ARP replies are received. # requests are not suppressed and that ARP replies are received.
run_cmd "bridge -n sw1 link set dev vx0 neigh_vlan_suppress on" run_cmd "bridge -n $sw1 link set dev vx0 neigh_vlan_suppress on"
run_cmd "bridge -n sw1 -d link show dev vx0 | grep \"neigh_vlan_suppress on\"" run_cmd "bridge -n $sw1 -d link show dev vx0 | grep \"neigh_vlan_suppress on\""
log_test $? 0 "\"neigh_vlan_suppress\" is on" log_test $? 0 "\"neigh_vlan_suppress\" is on"
run_cmd "ip netns exec h1 arping -q -b -c 1 -w 5 -s $sip1 -I eth0.$vid1 $tip1" run_cmd "ip netns exec $h1 arping -q -b -c 1 -w 5 -s $sip1 -I eth0.$vid1 $tip1"
log_test $? 0 "arping (VLAN $vid1)" log_test $? 0 "arping (VLAN $vid1)"
run_cmd "ip netns exec h1 arping -q -b -c 1 -w 5 -s $sip2 -I eth0.$vid2 $tip2" run_cmd "ip netns exec $h1 arping -q -b -c 1 -w 5 -s $sip2 -I eth0.$vid2 $tip2"
log_test $? 0 "arping (VLAN $vid2)" log_test $? 0 "arping (VLAN $vid2)"
tc_check_packets sw1 "dev vx0 egress" 101 1 tc_check_packets $sw1 "dev vx0 egress" 101 1
log_test $? 0 "ARP suppression (VLAN $vid1)" log_test $? 0 "ARP suppression (VLAN $vid1)"
tc_check_packets sw1 "dev vx0 egress" 102 1 tc_check_packets $sw1 "dev vx0 egress" 102 1
log_test $? 0 "ARP suppression (VLAN $vid2)" log_test $? 0 "ARP suppression (VLAN $vid2)"
# Enable neighbor suppression on VLAN 10 and check that only on this # Enable neighbor suppression on VLAN 10 and check that only on this
# VLAN ARP requests are suppressed. # VLAN ARP requests are suppressed.
run_cmd "bridge -n sw1 vlan set vid $vid1 dev vx0 neigh_suppress on" run_cmd "bridge -n $sw1 vlan set vid $vid1 dev vx0 neigh_suppress on"
run_cmd "bridge -n sw1 -d vlan show dev vx0 vid $vid1 | grep \"neigh_suppress on\"" run_cmd "bridge -n $sw1 -d vlan show dev vx0 vid $vid1 | grep \"neigh_suppress on\""
log_test $? 0 "\"neigh_suppress\" is on (VLAN $vid1)" log_test $? 0 "\"neigh_suppress\" is on (VLAN $vid1)"
run_cmd "bridge -n sw1 -d vlan show dev vx0 vid $vid2 | grep \"neigh_suppress off\"" run_cmd "bridge -n $sw1 -d vlan show dev vx0 vid $vid2 | grep \"neigh_suppress off\""
log_test $? 0 "\"neigh_suppress\" is off (VLAN $vid2)" log_test $? 0 "\"neigh_suppress\" is off (VLAN $vid2)"
run_cmd "ip netns exec h1 arping -q -b -c 1 -w 5 -s $sip1 -I eth0.$vid1 $tip1" run_cmd "ip netns exec $h1 arping -q -b -c 1 -w 5 -s $sip1 -I eth0.$vid1 $tip1"
log_test $? 0 "arping (VLAN $vid1)" log_test $? 0 "arping (VLAN $vid1)"
run_cmd "ip netns exec h1 arping -q -b -c 1 -w 5 -s $sip2 -I eth0.$vid2 $tip2" run_cmd "ip netns exec $h1 arping -q -b -c 1 -w 5 -s $sip2 -I eth0.$vid2 $tip2"
log_test $? 0 "arping (VLAN $vid2)" log_test $? 0 "arping (VLAN $vid2)"
tc_check_packets sw1 "dev vx0 egress" 101 1 tc_check_packets $sw1 "dev vx0 egress" 101 1
log_test $? 0 "ARP suppression (VLAN $vid1)" log_test $? 0 "ARP suppression (VLAN $vid1)"
tc_check_packets sw1 "dev vx0 egress" 102 2 tc_check_packets $sw1 "dev vx0 egress" 102 2
log_test $? 0 "ARP suppression (VLAN $vid2)" log_test $? 0 "ARP suppression (VLAN $vid2)"
# Enable neighbor suppression on the port and check that it has no # Enable neighbor suppression on the port and check that it has no
# effect compared to previous state. # effect compared to previous state.
run_cmd "bridge -n sw1 link set dev vx0 neigh_suppress on" run_cmd "bridge -n $sw1 link set dev vx0 neigh_suppress on"
run_cmd "bridge -n sw1 -d link show dev vx0 | grep \"neigh_suppress on\"" run_cmd "bridge -n $sw1 -d link show dev vx0 | grep \"neigh_suppress on\""
log_test $? 0 "\"neigh_suppress\" is on" log_test $? 0 "\"neigh_suppress\" is on"
run_cmd "ip netns exec h1 arping -q -b -c 1 -w 5 -s $sip1 -I eth0.$vid1 $tip1" run_cmd "ip netns exec $h1 arping -q -b -c 1 -w 5 -s $sip1 -I eth0.$vid1 $tip1"
log_test $? 0 "arping (VLAN $vid1)" log_test $? 0 "arping (VLAN $vid1)"
run_cmd "ip netns exec h1 arping -q -b -c 1 -w 5 -s $sip2 -I eth0.$vid2 $tip2" run_cmd "ip netns exec $h1 arping -q -b -c 1 -w 5 -s $sip2 -I eth0.$vid2 $tip2"
log_test $? 0 "arping (VLAN $vid2)" log_test $? 0 "arping (VLAN $vid2)"
tc_check_packets sw1 "dev vx0 egress" 101 1 tc_check_packets $sw1 "dev vx0 egress" 101 1
log_test $? 0 "ARP suppression (VLAN $vid1)" log_test $? 0 "ARP suppression (VLAN $vid1)"
tc_check_packets sw1 "dev vx0 egress" 102 3 tc_check_packets $sw1 "dev vx0 egress" 102 3
log_test $? 0 "ARP suppression (VLAN $vid2)" log_test $? 0 "ARP suppression (VLAN $vid2)"
# Disable neighbor suppression on the port and check that it has no # Disable neighbor suppression on the port and check that it has no
# effect compared to previous state. # effect compared to previous state.
run_cmd "bridge -n sw1 link set dev vx0 neigh_suppress off" run_cmd "bridge -n $sw1 link set dev vx0 neigh_suppress off"
run_cmd "bridge -n sw1 -d link show dev vx0 | grep \"neigh_suppress off\"" run_cmd "bridge -n $sw1 -d link show dev vx0 | grep \"neigh_suppress off\""
log_test $? 0 "\"neigh_suppress\" is off" log_test $? 0 "\"neigh_suppress\" is off"
run_cmd "ip netns exec h1 arping -q -b -c 1 -w 5 -s $sip1 -I eth0.$vid1 $tip1" run_cmd "ip netns exec $h1 arping -q -b -c 1 -w 5 -s $sip1 -I eth0.$vid1 $tip1"
log_test $? 0 "arping (VLAN $vid1)" log_test $? 0 "arping (VLAN $vid1)"
run_cmd "ip netns exec h1 arping -q -b -c 1 -w 5 -s $sip2 -I eth0.$vid2 $tip2" run_cmd "ip netns exec $h1 arping -q -b -c 1 -w 5 -s $sip2 -I eth0.$vid2 $tip2"
log_test $? 0 "arping (VLAN $vid2)" log_test $? 0 "arping (VLAN $vid2)"
tc_check_packets sw1 "dev vx0 egress" 101 1 tc_check_packets $sw1 "dev vx0 egress" 101 1
log_test $? 0 "ARP suppression (VLAN $vid1)" log_test $? 0 "ARP suppression (VLAN $vid1)"
tc_check_packets sw1 "dev vx0 egress" 102 4 tc_check_packets $sw1 "dev vx0 egress" 102 4
log_test $? 0 "ARP suppression (VLAN $vid2)" log_test $? 0 "ARP suppression (VLAN $vid2)"
# Disable neighbor suppression on VLAN 10 and check that ARP requests # Disable neighbor suppression on VLAN 10 and check that ARP requests
# are no longer suppressed on this VLAN. # are no longer suppressed on this VLAN.
run_cmd "bridge -n sw1 vlan set vid $vid1 dev vx0 neigh_suppress off" run_cmd "bridge -n $sw1 vlan set vid $vid1 dev vx0 neigh_suppress off"
run_cmd "bridge -n sw1 -d vlan show dev vx0 vid $vid1 | grep \"neigh_suppress off\"" run_cmd "bridge -n $sw1 -d vlan show dev vx0 vid $vid1 | grep \"neigh_suppress off\""
log_test $? 0 "\"neigh_suppress\" is off (VLAN $vid1)" log_test $? 0 "\"neigh_suppress\" is off (VLAN $vid1)"
run_cmd "ip netns exec h1 arping -q -b -c 1 -w 5 -s $sip1 -I eth0.$vid1 $tip1" run_cmd "ip netns exec $h1 arping -q -b -c 1 -w 5 -s $sip1 -I eth0.$vid1 $tip1"
log_test $? 0 "arping (VLAN $vid1)" log_test $? 0 "arping (VLAN $vid1)"
run_cmd "ip netns exec h1 arping -q -b -c 1 -w 5 -s $sip2 -I eth0.$vid2 $tip2" run_cmd "ip netns exec $h1 arping -q -b -c 1 -w 5 -s $sip2 -I eth0.$vid2 $tip2"
log_test $? 0 "arping (VLAN $vid2)" log_test $? 0 "arping (VLAN $vid2)"
tc_check_packets sw1 "dev vx0 egress" 101 2 tc_check_packets $sw1 "dev vx0 egress" 101 2
log_test $? 0 "ARP suppression (VLAN $vid1)" log_test $? 0 "ARP suppression (VLAN $vid1)"
tc_check_packets sw1 "dev vx0 egress" 102 5 tc_check_packets $sw1 "dev vx0 egress" 102 5
log_test $? 0 "ARP suppression (VLAN $vid2)" log_test $? 0 "ARP suppression (VLAN $vid2)"
# Disable per-{Port, VLAN} neighbor suppression, enable neighbor # Disable per-{Port, VLAN} neighbor suppression, enable neighbor
# suppression on the port and check that on both VLANs ARP requests are # suppression on the port and check that on both VLANs ARP requests are
# suppressed. # suppressed.
run_cmd "bridge -n sw1 link set dev vx0 neigh_vlan_suppress off" run_cmd "bridge -n $sw1 link set dev vx0 neigh_vlan_suppress off"
run_cmd "bridge -n sw1 -d link show dev vx0 | grep \"neigh_vlan_suppress off\"" run_cmd "bridge -n $sw1 -d link show dev vx0 | grep \"neigh_vlan_suppress off\""
log_test $? 0 "\"neigh_vlan_suppress\" is off" log_test $? 0 "\"neigh_vlan_suppress\" is off"
run_cmd "bridge -n sw1 link set dev vx0 neigh_suppress on" run_cmd "bridge -n $sw1 link set dev vx0 neigh_suppress on"
run_cmd "bridge -n sw1 -d link show dev vx0 | grep \"neigh_suppress on\"" run_cmd "bridge -n $sw1 -d link show dev vx0 | grep \"neigh_suppress on\""
log_test $? 0 "\"neigh_suppress\" is on" log_test $? 0 "\"neigh_suppress\" is on"
run_cmd "ip netns exec h1 arping -q -b -c 1 -w 5 -s $sip1 -I eth0.$vid1 $tip1" run_cmd "ip netns exec $h1 arping -q -b -c 1 -w 5 -s $sip1 -I eth0.$vid1 $tip1"
log_test $? 0 "arping (VLAN $vid1)" log_test $? 0 "arping (VLAN $vid1)"
run_cmd "ip netns exec h1 arping -q -b -c 1 -w 5 -s $sip2 -I eth0.$vid2 $tip2" run_cmd "ip netns exec $h1 arping -q -b -c 1 -w 5 -s $sip2 -I eth0.$vid2 $tip2"
log_test $? 0 "arping (VLAN $vid2)" log_test $? 0 "arping (VLAN $vid2)"
tc_check_packets sw1 "dev vx0 egress" 101 2 tc_check_packets $sw1 "dev vx0 egress" 101 2
log_test $? 0 "ARP suppression (VLAN $vid1)" log_test $? 0 "ARP suppression (VLAN $vid1)"
tc_check_packets sw1 "dev vx0 egress" 102 5 tc_check_packets $sw1 "dev vx0 egress" 102 5
log_test $? 0 "ARP suppression (VLAN $vid2)" log_test $? 0 "ARP suppression (VLAN $vid2)"
} }
...@@ -655,118 +648,118 @@ neigh_vlan_suppress_ns() ...@@ -655,118 +648,118 @@ neigh_vlan_suppress_ns()
echo "Per-{Port, VLAN} NS suppression" echo "Per-{Port, VLAN} NS suppression"
echo "-------------------------------" echo "-------------------------------"
run_cmd "tc -n sw1 qdisc replace dev vx0 clsact" run_cmd "tc -n $sw1 qdisc replace dev vx0 clsact"
run_cmd "tc -n sw1 filter replace dev vx0 egress pref 1 handle 101 proto ipv6 flower indev swp1 ip_proto icmpv6 dst_ip $maddr src_ip $saddr1 type 135 code 0 action pass" run_cmd "tc -n $sw1 filter replace dev vx0 egress pref 1 handle 101 proto ipv6 flower indev swp1 ip_proto icmpv6 dst_ip $maddr src_ip $saddr1 type 135 code 0 action pass"
run_cmd "tc -n sw1 filter replace dev vx0 egress pref 1 handle 102 proto ipv6 flower indev swp1 ip_proto icmpv6 dst_ip $maddr src_ip $saddr2 type 135 code 0 action pass" run_cmd "tc -n $sw1 filter replace dev vx0 egress pref 1 handle 102 proto ipv6 flower indev swp1 ip_proto icmpv6 dst_ip $maddr src_ip $saddr2 type 135 code 0 action pass"
h2_mac1=$(ip -n h2 -j -p link show eth0.$vid1 | jq -r '.[]["address"]') h2_mac1=$(ip -n $h2 -j -p link show eth0.$vid1 | jq -r '.[]["address"]')
h2_mac2=$(ip -n h2 -j -p link show eth0.$vid2 | jq -r '.[]["address"]') h2_mac2=$(ip -n $h2 -j -p link show eth0.$vid2 | jq -r '.[]["address"]')
run_cmd "bridge -n sw1 fdb replace $h2_mac1 dev vx0 master static vlan $vid1" run_cmd "bridge -n $sw1 fdb replace $h2_mac1 dev vx0 master static vlan $vid1"
run_cmd "bridge -n sw1 fdb replace $h2_mac2 dev vx0 master static vlan $vid2" run_cmd "bridge -n $sw1 fdb replace $h2_mac2 dev vx0 master static vlan $vid2"
run_cmd "ip -n sw1 neigh replace $daddr1 lladdr $h2_mac1 nud permanent dev br0.$vid1" run_cmd "ip -n $sw1 neigh replace $daddr1 lladdr $h2_mac1 nud permanent dev br0.$vid1"
run_cmd "ip -n sw1 neigh replace $daddr2 lladdr $h2_mac2 nud permanent dev br0.$vid2" run_cmd "ip -n $sw1 neigh replace $daddr2 lladdr $h2_mac2 nud permanent dev br0.$vid2"
# Enable per-{Port, VLAN} neighbor suppression and check that NS # Enable per-{Port, VLAN} neighbor suppression and check that NS
# messages are not suppressed and that ND messages are received. # messages are not suppressed and that ND messages are received.
run_cmd "bridge -n sw1 link set dev vx0 neigh_vlan_suppress on" run_cmd "bridge -n $sw1 link set dev vx0 neigh_vlan_suppress on"
run_cmd "bridge -n sw1 -d link show dev vx0 | grep \"neigh_vlan_suppress on\"" run_cmd "bridge -n $sw1 -d link show dev vx0 | grep \"neigh_vlan_suppress on\""
log_test $? 0 "\"neigh_vlan_suppress\" is on" log_test $? 0 "\"neigh_vlan_suppress\" is on"
run_cmd "ip netns exec h1 ndisc6 -q -r 1 -s $saddr1 -w 5000 $daddr1 eth0.$vid1" run_cmd "ip netns exec $h1 ndisc6 -q -r 1 -s $saddr1 -w 5000 $daddr1 eth0.$vid1"
log_test $? 0 "ndisc6 (VLAN $vid1)" log_test $? 0 "ndisc6 (VLAN $vid1)"
run_cmd "ip netns exec h1 ndisc6 -q -r 1 -s $saddr2 -w 5000 $daddr2 eth0.$vid2" run_cmd "ip netns exec $h1 ndisc6 -q -r 1 -s $saddr2 -w 5000 $daddr2 eth0.$vid2"
log_test $? 0 "ndisc6 (VLAN $vid2)" log_test $? 0 "ndisc6 (VLAN $vid2)"
tc_check_packets sw1 "dev vx0 egress" 101 1 tc_check_packets $sw1 "dev vx0 egress" 101 1
log_test $? 0 "NS suppression (VLAN $vid1)" log_test $? 0 "NS suppression (VLAN $vid1)"
tc_check_packets sw1 "dev vx0 egress" 102 1 tc_check_packets $sw1 "dev vx0 egress" 102 1
log_test $? 0 "NS suppression (VLAN $vid2)" log_test $? 0 "NS suppression (VLAN $vid2)"
# Enable neighbor suppression on VLAN 10 and check that only on this # Enable neighbor suppression on VLAN 10 and check that only on this
# VLAN NS messages are suppressed. # VLAN NS messages are suppressed.
run_cmd "bridge -n sw1 vlan set vid $vid1 dev vx0 neigh_suppress on" run_cmd "bridge -n $sw1 vlan set vid $vid1 dev vx0 neigh_suppress on"
run_cmd "bridge -n sw1 -d vlan show dev vx0 vid $vid1 | grep \"neigh_suppress on\"" run_cmd "bridge -n $sw1 -d vlan show dev vx0 vid $vid1 | grep \"neigh_suppress on\""
log_test $? 0 "\"neigh_suppress\" is on (VLAN $vid1)" log_test $? 0 "\"neigh_suppress\" is on (VLAN $vid1)"
run_cmd "bridge -n sw1 -d vlan show dev vx0 vid $vid2 | grep \"neigh_suppress off\"" run_cmd "bridge -n $sw1 -d vlan show dev vx0 vid $vid2 | grep \"neigh_suppress off\""
log_test $? 0 "\"neigh_suppress\" is off (VLAN $vid2)" log_test $? 0 "\"neigh_suppress\" is off (VLAN $vid2)"
run_cmd "ip netns exec h1 ndisc6 -q -r 1 -s $saddr1 -w 5000 $daddr1 eth0.$vid1" run_cmd "ip netns exec $h1 ndisc6 -q -r 1 -s $saddr1 -w 5000 $daddr1 eth0.$vid1"
log_test $? 0 "ndisc6 (VLAN $vid1)" log_test $? 0 "ndisc6 (VLAN $vid1)"
run_cmd "ip netns exec h1 ndisc6 -q -r 1 -s $saddr2 -w 5000 $daddr2 eth0.$vid2" run_cmd "ip netns exec $h1 ndisc6 -q -r 1 -s $saddr2 -w 5000 $daddr2 eth0.$vid2"
log_test $? 0 "ndisc6 (VLAN $vid2)" log_test $? 0 "ndisc6 (VLAN $vid2)"
tc_check_packets sw1 "dev vx0 egress" 101 1 tc_check_packets $sw1 "dev vx0 egress" 101 1
log_test $? 0 "NS suppression (VLAN $vid1)" log_test $? 0 "NS suppression (VLAN $vid1)"
tc_check_packets sw1 "dev vx0 egress" 102 2 tc_check_packets $sw1 "dev vx0 egress" 102 2
log_test $? 0 "NS suppression (VLAN $vid2)" log_test $? 0 "NS suppression (VLAN $vid2)"
# Enable neighbor suppression on the port and check that it has no # Enable neighbor suppression on the port and check that it has no
# effect compared to previous state. # effect compared to previous state.
run_cmd "bridge -n sw1 link set dev vx0 neigh_suppress on" run_cmd "bridge -n $sw1 link set dev vx0 neigh_suppress on"
run_cmd "bridge -n sw1 -d link show dev vx0 | grep \"neigh_suppress on\"" run_cmd "bridge -n $sw1 -d link show dev vx0 | grep \"neigh_suppress on\""
log_test $? 0 "\"neigh_suppress\" is on" log_test $? 0 "\"neigh_suppress\" is on"
run_cmd "ip netns exec h1 ndisc6 -q -r 1 -s $saddr1 -w 5000 $daddr1 eth0.$vid1" run_cmd "ip netns exec $h1 ndisc6 -q -r 1 -s $saddr1 -w 5000 $daddr1 eth0.$vid1"
log_test $? 0 "ndisc6 (VLAN $vid1)" log_test $? 0 "ndisc6 (VLAN $vid1)"
run_cmd "ip netns exec h1 ndisc6 -q -r 1 -s $saddr2 -w 5000 $daddr2 eth0.$vid2" run_cmd "ip netns exec $h1 ndisc6 -q -r 1 -s $saddr2 -w 5000 $daddr2 eth0.$vid2"
log_test $? 0 "ndisc6 (VLAN $vid2)" log_test $? 0 "ndisc6 (VLAN $vid2)"
tc_check_packets sw1 "dev vx0 egress" 101 1 tc_check_packets $sw1 "dev vx0 egress" 101 1
log_test $? 0 "NS suppression (VLAN $vid1)" log_test $? 0 "NS suppression (VLAN $vid1)"
tc_check_packets sw1 "dev vx0 egress" 102 3 tc_check_packets $sw1 "dev vx0 egress" 102 3
log_test $? 0 "NS suppression (VLAN $vid2)" log_test $? 0 "NS suppression (VLAN $vid2)"
# Disable neighbor suppression on the port and check that it has no # Disable neighbor suppression on the port and check that it has no
# effect compared to previous state. # effect compared to previous state.
run_cmd "bridge -n sw1 link set dev vx0 neigh_suppress off" run_cmd "bridge -n $sw1 link set dev vx0 neigh_suppress off"
run_cmd "bridge -n sw1 -d link show dev vx0 | grep \"neigh_suppress off\"" run_cmd "bridge -n $sw1 -d link show dev vx0 | grep \"neigh_suppress off\""
log_test $? 0 "\"neigh_suppress\" is off" log_test $? 0 "\"neigh_suppress\" is off"
run_cmd "ip netns exec h1 ndisc6 -q -r 1 -s $saddr1 -w 5000 $daddr1 eth0.$vid1" run_cmd "ip netns exec $h1 ndisc6 -q -r 1 -s $saddr1 -w 5000 $daddr1 eth0.$vid1"
log_test $? 0 "ndisc6 (VLAN $vid1)" log_test $? 0 "ndisc6 (VLAN $vid1)"
run_cmd "ip netns exec h1 ndisc6 -q -r 1 -s $saddr2 -w 5000 $daddr2 eth0.$vid2" run_cmd "ip netns exec $h1 ndisc6 -q -r 1 -s $saddr2 -w 5000 $daddr2 eth0.$vid2"
log_test $? 0 "ndisc6 (VLAN $vid2)" log_test $? 0 "ndisc6 (VLAN $vid2)"
tc_check_packets sw1 "dev vx0 egress" 101 1 tc_check_packets $sw1 "dev vx0 egress" 101 1
log_test $? 0 "NS suppression (VLAN $vid1)" log_test $? 0 "NS suppression (VLAN $vid1)"
tc_check_packets sw1 "dev vx0 egress" 102 4 tc_check_packets $sw1 "dev vx0 egress" 102 4
log_test $? 0 "NS suppression (VLAN $vid2)" log_test $? 0 "NS suppression (VLAN $vid2)"
# Disable neighbor suppression on VLAN 10 and check that NS messages # Disable neighbor suppression on VLAN 10 and check that NS messages
# are no longer suppressed on this VLAN. # are no longer suppressed on this VLAN.
run_cmd "bridge -n sw1 vlan set vid $vid1 dev vx0 neigh_suppress off" run_cmd "bridge -n $sw1 vlan set vid $vid1 dev vx0 neigh_suppress off"
run_cmd "bridge -n sw1 -d vlan show dev vx0 vid $vid1 | grep \"neigh_suppress off\"" run_cmd "bridge -n $sw1 -d vlan show dev vx0 vid $vid1 | grep \"neigh_suppress off\""
log_test $? 0 "\"neigh_suppress\" is off (VLAN $vid1)" log_test $? 0 "\"neigh_suppress\" is off (VLAN $vid1)"
run_cmd "ip netns exec h1 ndisc6 -q -r 1 -s $saddr1 -w 5000 $daddr1 eth0.$vid1" run_cmd "ip netns exec $h1 ndisc6 -q -r 1 -s $saddr1 -w 5000 $daddr1 eth0.$vid1"
log_test $? 0 "ndisc6 (VLAN $vid1)" log_test $? 0 "ndisc6 (VLAN $vid1)"
run_cmd "ip netns exec h1 ndisc6 -q -r 1 -s $saddr2 -w 5000 $daddr2 eth0.$vid2" run_cmd "ip netns exec $h1 ndisc6 -q -r 1 -s $saddr2 -w 5000 $daddr2 eth0.$vid2"
log_test $? 0 "ndisc6 (VLAN $vid2)" log_test $? 0 "ndisc6 (VLAN $vid2)"
tc_check_packets sw1 "dev vx0 egress" 101 2 tc_check_packets $sw1 "dev vx0 egress" 101 2
log_test $? 0 "NS suppression (VLAN $vid1)" log_test $? 0 "NS suppression (VLAN $vid1)"
tc_check_packets sw1 "dev vx0 egress" 102 5 tc_check_packets $sw1 "dev vx0 egress" 102 5
log_test $? 0 "NS suppression (VLAN $vid2)" log_test $? 0 "NS suppression (VLAN $vid2)"
# Disable per-{Port, VLAN} neighbor suppression, enable neighbor # Disable per-{Port, VLAN} neighbor suppression, enable neighbor
# suppression on the port and check that on both VLANs NS messages are # suppression on the port and check that on both VLANs NS messages are
# suppressed. # suppressed.
run_cmd "bridge -n sw1 link set dev vx0 neigh_vlan_suppress off" run_cmd "bridge -n $sw1 link set dev vx0 neigh_vlan_suppress off"
run_cmd "bridge -n sw1 -d link show dev vx0 | grep \"neigh_vlan_suppress off\"" run_cmd "bridge -n $sw1 -d link show dev vx0 | grep \"neigh_vlan_suppress off\""
log_test $? 0 "\"neigh_vlan_suppress\" is off" log_test $? 0 "\"neigh_vlan_suppress\" is off"
run_cmd "bridge -n sw1 link set dev vx0 neigh_suppress on" run_cmd "bridge -n $sw1 link set dev vx0 neigh_suppress on"
run_cmd "bridge -n sw1 -d link show dev vx0 | grep \"neigh_suppress on\"" run_cmd "bridge -n $sw1 -d link show dev vx0 | grep \"neigh_suppress on\""
log_test $? 0 "\"neigh_suppress\" is on" log_test $? 0 "\"neigh_suppress\" is on"
run_cmd "ip netns exec h1 ndisc6 -q -r 1 -s $saddr1 -w 5000 $daddr1 eth0.$vid1" run_cmd "ip netns exec $h1 ndisc6 -q -r 1 -s $saddr1 -w 5000 $daddr1 eth0.$vid1"
log_test $? 0 "ndisc6 (VLAN $vid1)" log_test $? 0 "ndisc6 (VLAN $vid1)"
run_cmd "ip netns exec h1 ndisc6 -q -r 1 -s $saddr2 -w 5000 $daddr2 eth0.$vid2" run_cmd "ip netns exec $h1 ndisc6 -q -r 1 -s $saddr2 -w 5000 $daddr2 eth0.$vid2"
log_test $? 0 "ndisc6 (VLAN $vid2)" log_test $? 0 "ndisc6 (VLAN $vid2)"
tc_check_packets sw1 "dev vx0 egress" 101 2 tc_check_packets $sw1 "dev vx0 egress" 101 2
log_test $? 0 "NS suppression (VLAN $vid1)" log_test $? 0 "NS suppression (VLAN $vid1)"
tc_check_packets sw1 "dev vx0 egress" 102 5 tc_check_packets $sw1 "dev vx0 egress" 102 5
log_test $? 0 "NS suppression (VLAN $vid2)" log_test $? 0 "NS suppression (VLAN $vid2)"
} }
......
...@@ -55,9 +55,8 @@ ...@@ -55,9 +55,8 @@
# | ns2_v4 | | ns2_v6 | # | ns2_v4 | | ns2_v6 |
# +------------------------------------+ +------------------------------------+ # +------------------------------------+ +------------------------------------+
source lib.sh
ret=0 ret=0
# Kselftest framework requirement - SKIP code is 4.
ksft_skip=4
CONTROL_PATH_TESTS=" CONTROL_PATH_TESTS="
basic_star_g_ipv4_ipv4 basic_star_g_ipv4_ipv4
...@@ -260,9 +259,6 @@ setup_common() ...@@ -260,9 +259,6 @@ setup_common()
local local_addr1=$1; shift local local_addr1=$1; shift
local local_addr2=$1; shift local local_addr2=$1; shift
ip netns add $ns1
ip netns add $ns2
ip link add name veth0 type veth peer name veth1 ip link add name veth0 type veth peer name veth1
ip link set dev veth0 netns $ns1 name veth0 ip link set dev veth0 netns $ns1 name veth0
ip link set dev veth1 netns $ns2 name veth0 ip link set dev veth1 netns $ns2 name veth0
...@@ -273,36 +269,36 @@ setup_common() ...@@ -273,36 +269,36 @@ setup_common()
setup_v4() setup_v4()
{ {
setup_common ns1_v4 ns2_v4 192.0.2.1 192.0.2.2 setup_ns ns1_v4 ns2_v4
setup_common $ns1_v4 $ns2_v4 192.0.2.1 192.0.2.2
ip -n ns1_v4 address add 192.0.2.17/28 dev veth0 ip -n $ns1_v4 address add 192.0.2.17/28 dev veth0
ip -n ns2_v4 address add 192.0.2.18/28 dev veth0 ip -n $ns2_v4 address add 192.0.2.18/28 dev veth0
ip -n ns1_v4 route add default via 192.0.2.18 ip -n $ns1_v4 route add default via 192.0.2.18
ip -n ns2_v4 route add default via 192.0.2.17 ip -n $ns2_v4 route add default via 192.0.2.17
} }
cleanup_v4() cleanup_v4()
{ {
ip netns del ns2_v4 cleanup_ns $ns2_v4 $ns1_v4
ip netns del ns1_v4
} }
setup_v6() setup_v6()
{ {
setup_common ns1_v6 ns2_v6 2001:db8:1::1 2001:db8:1::2 setup_ns ns1_v6 ns2_v6
setup_common $ns1_v6 $ns2_v6 2001:db8:1::1 2001:db8:1::2
ip -n ns1_v6 address add 2001:db8:2::1/64 dev veth0 nodad ip -n $ns1_v6 address add 2001:db8:2::1/64 dev veth0 nodad
ip -n ns2_v6 address add 2001:db8:2::2/64 dev veth0 nodad ip -n $ns2_v6 address add 2001:db8:2::2/64 dev veth0 nodad
ip -n ns1_v6 route add default via 2001:db8:2::2 ip -n $ns1_v6 route add default via 2001:db8:2::2
ip -n ns2_v6 route add default via 2001:db8:2::1 ip -n $ns2_v6 route add default via 2001:db8:2::1
} }
cleanup_v6() cleanup_v6()
{ {
ip netns del ns2_v6 cleanup_ns $ns2_v6 $ns1_v6
ip netns del ns1_v6
} }
setup() setup()
...@@ -433,7 +429,7 @@ basic_common() ...@@ -433,7 +429,7 @@ basic_common()
basic_star_g_ipv4_ipv4() basic_star_g_ipv4_ipv4()
{ {
local ns1=ns1_v4 local ns1=$ns1_v4
local grp_key="grp 239.1.1.1" local grp_key="grp 239.1.1.1"
local vtep_ip=198.51.100.100 local vtep_ip=198.51.100.100
...@@ -446,7 +442,7 @@ basic_star_g_ipv4_ipv4() ...@@ -446,7 +442,7 @@ basic_star_g_ipv4_ipv4()
basic_star_g_ipv6_ipv4() basic_star_g_ipv6_ipv4()
{ {
local ns1=ns1_v4 local ns1=$ns1_v4
local grp_key="grp ff0e::1" local grp_key="grp ff0e::1"
local vtep_ip=198.51.100.100 local vtep_ip=198.51.100.100
...@@ -459,7 +455,7 @@ basic_star_g_ipv6_ipv4() ...@@ -459,7 +455,7 @@ basic_star_g_ipv6_ipv4()
basic_star_g_ipv4_ipv6() basic_star_g_ipv4_ipv6()
{ {
local ns1=ns1_v6 local ns1=$ns1_v6
local grp_key="grp 239.1.1.1" local grp_key="grp 239.1.1.1"
local vtep_ip=2001:db8:1000::1 local vtep_ip=2001:db8:1000::1
...@@ -472,7 +468,7 @@ basic_star_g_ipv4_ipv6() ...@@ -472,7 +468,7 @@ basic_star_g_ipv4_ipv6()
basic_star_g_ipv6_ipv6() basic_star_g_ipv6_ipv6()
{ {
local ns1=ns1_v6 local ns1=$ns1_v6
local grp_key="grp ff0e::1" local grp_key="grp ff0e::1"
local vtep_ip=2001:db8:1000::1 local vtep_ip=2001:db8:1000::1
...@@ -485,7 +481,7 @@ basic_star_g_ipv6_ipv6() ...@@ -485,7 +481,7 @@ basic_star_g_ipv6_ipv6()
basic_sg_ipv4_ipv4() basic_sg_ipv4_ipv4()
{ {
local ns1=ns1_v4 local ns1=$ns1_v4
local grp_key="grp 239.1.1.1 src 192.0.2.129" local grp_key="grp 239.1.1.1 src 192.0.2.129"
local vtep_ip=198.51.100.100 local vtep_ip=198.51.100.100
...@@ -498,7 +494,7 @@ basic_sg_ipv4_ipv4() ...@@ -498,7 +494,7 @@ basic_sg_ipv4_ipv4()
basic_sg_ipv6_ipv4() basic_sg_ipv6_ipv4()
{ {
local ns1=ns1_v4 local ns1=$ns1_v4
local grp_key="grp ff0e::1 src 2001:db8:100::1" local grp_key="grp ff0e::1 src 2001:db8:100::1"
local vtep_ip=198.51.100.100 local vtep_ip=198.51.100.100
...@@ -511,7 +507,7 @@ basic_sg_ipv6_ipv4() ...@@ -511,7 +507,7 @@ basic_sg_ipv6_ipv4()
basic_sg_ipv4_ipv6() basic_sg_ipv4_ipv6()
{ {
local ns1=ns1_v6 local ns1=$ns1_v6
local grp_key="grp 239.1.1.1 src 192.0.2.129" local grp_key="grp 239.1.1.1 src 192.0.2.129"
local vtep_ip=2001:db8:1000::1 local vtep_ip=2001:db8:1000::1
...@@ -524,7 +520,7 @@ basic_sg_ipv4_ipv6() ...@@ -524,7 +520,7 @@ basic_sg_ipv4_ipv6()
basic_sg_ipv6_ipv6() basic_sg_ipv6_ipv6()
{ {
local ns1=ns1_v6 local ns1=$ns1_v6
local grp_key="grp ff0e::1 src 2001:db8:100::1" local grp_key="grp ff0e::1 src 2001:db8:100::1"
local vtep_ip=2001:db8:1000::1 local vtep_ip=2001:db8:1000::1
...@@ -694,7 +690,7 @@ star_g_common() ...@@ -694,7 +690,7 @@ star_g_common()
star_g_ipv4_ipv4() star_g_ipv4_ipv4()
{ {
local ns1=ns1_v4 local ns1=$ns1_v4
local grp=239.1.1.1 local grp=239.1.1.1
local src1=192.0.2.129 local src1=192.0.2.129
local src2=192.0.2.130 local src2=192.0.2.130
...@@ -711,7 +707,7 @@ star_g_ipv4_ipv4() ...@@ -711,7 +707,7 @@ star_g_ipv4_ipv4()
star_g_ipv6_ipv4() star_g_ipv6_ipv4()
{ {
local ns1=ns1_v4 local ns1=$ns1_v4
local grp=ff0e::1 local grp=ff0e::1
local src1=2001:db8:100::1 local src1=2001:db8:100::1
local src2=2001:db8:100::2 local src2=2001:db8:100::2
...@@ -728,7 +724,7 @@ star_g_ipv6_ipv4() ...@@ -728,7 +724,7 @@ star_g_ipv6_ipv4()
star_g_ipv4_ipv6() star_g_ipv4_ipv6()
{ {
local ns1=ns1_v6 local ns1=$ns1_v6
local grp=239.1.1.1 local grp=239.1.1.1
local src1=192.0.2.129 local src1=192.0.2.129
local src2=192.0.2.130 local src2=192.0.2.130
...@@ -745,7 +741,7 @@ star_g_ipv4_ipv6() ...@@ -745,7 +741,7 @@ star_g_ipv4_ipv6()
star_g_ipv6_ipv6() star_g_ipv6_ipv6()
{ {
local ns1=ns1_v6 local ns1=$ns1_v6
local grp=ff0e::1 local grp=ff0e::1
local src1=2001:db8:100::1 local src1=2001:db8:100::1
local src2=2001:db8:100::2 local src2=2001:db8:100::2
...@@ -793,7 +789,7 @@ sg_common() ...@@ -793,7 +789,7 @@ sg_common()
sg_ipv4_ipv4() sg_ipv4_ipv4()
{ {
local ns1=ns1_v4 local ns1=$ns1_v4
local grp=239.1.1.1 local grp=239.1.1.1
local src=192.0.2.129 local src=192.0.2.129
local vtep_ip=198.51.100.100 local vtep_ip=198.51.100.100
...@@ -808,7 +804,7 @@ sg_ipv4_ipv4() ...@@ -808,7 +804,7 @@ sg_ipv4_ipv4()
sg_ipv6_ipv4() sg_ipv6_ipv4()
{ {
local ns1=ns1_v4 local ns1=$ns1_v4
local grp=ff0e::1 local grp=ff0e::1
local src=2001:db8:100::1 local src=2001:db8:100::1
local vtep_ip=198.51.100.100 local vtep_ip=198.51.100.100
...@@ -823,7 +819,7 @@ sg_ipv6_ipv4() ...@@ -823,7 +819,7 @@ sg_ipv6_ipv4()
sg_ipv4_ipv6() sg_ipv4_ipv6()
{ {
local ns1=ns1_v6 local ns1=$ns1_v6
local grp=239.1.1.1 local grp=239.1.1.1
local src=192.0.2.129 local src=192.0.2.129
local vtep_ip=2001:db8:1000::1 local vtep_ip=2001:db8:1000::1
...@@ -838,7 +834,7 @@ sg_ipv4_ipv6() ...@@ -838,7 +834,7 @@ sg_ipv4_ipv6()
sg_ipv6_ipv6() sg_ipv6_ipv6()
{ {
local ns1=ns1_v6 local ns1=$ns1_v6
local grp=ff0e::1 local grp=ff0e::1
local src=2001:db8:100::1 local src=2001:db8:100::1
local vtep_ip=2001:db8:1000::1 local vtep_ip=2001:db8:1000::1
...@@ -918,7 +914,7 @@ dump_common() ...@@ -918,7 +914,7 @@ dump_common()
dump_ipv4_ipv4() dump_ipv4_ipv4()
{ {
local ns1=ns1_v4 local ns1=$ns1_v4
local local_addr=192.0.2.1 local local_addr=192.0.2.1
local remote_prefix=198.51.100. local remote_prefix=198.51.100.
local fn=ipv4_grps_get local fn=ipv4_grps_get
...@@ -932,7 +928,7 @@ dump_ipv4_ipv4() ...@@ -932,7 +928,7 @@ dump_ipv4_ipv4()
dump_ipv6_ipv4() dump_ipv6_ipv4()
{ {
local ns1=ns1_v4 local ns1=$ns1_v4
local local_addr=192.0.2.1 local local_addr=192.0.2.1
local remote_prefix=198.51.100. local remote_prefix=198.51.100.
local fn=ipv6_grps_get local fn=ipv6_grps_get
...@@ -946,7 +942,7 @@ dump_ipv6_ipv4() ...@@ -946,7 +942,7 @@ dump_ipv6_ipv4()
dump_ipv4_ipv6() dump_ipv4_ipv6()
{ {
local ns1=ns1_v6 local ns1=$ns1_v6
local local_addr=2001:db8:1::1 local local_addr=2001:db8:1::1
local remote_prefix=2001:db8:1000:: local remote_prefix=2001:db8:1000::
local fn=ipv4_grps_get local fn=ipv4_grps_get
...@@ -960,7 +956,7 @@ dump_ipv4_ipv6() ...@@ -960,7 +956,7 @@ dump_ipv4_ipv6()
dump_ipv6_ipv6() dump_ipv6_ipv6()
{ {
local ns1=ns1_v6 local ns1=$ns1_v6
local local_addr=2001:db8:1::1 local local_addr=2001:db8:1::1
local remote_prefix=2001:db8:1000:: local remote_prefix=2001:db8:1000::
local fn=ipv6_grps_get local fn=ipv6_grps_get
...@@ -1072,8 +1068,8 @@ encap_params_common() ...@@ -1072,8 +1068,8 @@ encap_params_common()
encap_params_ipv4_ipv4() encap_params_ipv4_ipv4()
{ {
local ns1=ns1_v4 local ns1=$ns1_v4
local ns2=ns2_v4 local ns2=$ns2_v4
local vtep1_ip=198.51.100.100 local vtep1_ip=198.51.100.100
local vtep2_ip=198.51.100.200 local vtep2_ip=198.51.100.200
local plen=32 local plen=32
...@@ -1091,8 +1087,8 @@ encap_params_ipv4_ipv4() ...@@ -1091,8 +1087,8 @@ encap_params_ipv4_ipv4()
encap_params_ipv6_ipv4() encap_params_ipv6_ipv4()
{ {
local ns1=ns1_v4 local ns1=$ns1_v4
local ns2=ns2_v4 local ns2=$ns2_v4
local vtep1_ip=198.51.100.100 local vtep1_ip=198.51.100.100
local vtep2_ip=198.51.100.200 local vtep2_ip=198.51.100.200
local plen=32 local plen=32
...@@ -1110,8 +1106,8 @@ encap_params_ipv6_ipv4() ...@@ -1110,8 +1106,8 @@ encap_params_ipv6_ipv4()
encap_params_ipv4_ipv6() encap_params_ipv4_ipv6()
{ {
local ns1=ns1_v6 local ns1=$ns1_v6
local ns2=ns2_v6 local ns2=$ns2_v6
local vtep1_ip=2001:db8:1000::1 local vtep1_ip=2001:db8:1000::1
local vtep2_ip=2001:db8:2000::1 local vtep2_ip=2001:db8:2000::1
local plen=128 local plen=128
...@@ -1129,8 +1125,8 @@ encap_params_ipv4_ipv6() ...@@ -1129,8 +1125,8 @@ encap_params_ipv4_ipv6()
encap_params_ipv6_ipv6() encap_params_ipv6_ipv6()
{ {
local ns1=ns1_v6 local ns1=$ns1_v6
local ns2=ns2_v6 local ns2=$ns2_v6
local vtep1_ip=2001:db8:1000::1 local vtep1_ip=2001:db8:1000::1
local vtep2_ip=2001:db8:2000::1 local vtep2_ip=2001:db8:2000::1
local plen=128 local plen=128
...@@ -1208,8 +1204,8 @@ starg_exclude_ir_common() ...@@ -1208,8 +1204,8 @@ starg_exclude_ir_common()
starg_exclude_ir_ipv4_ipv4() starg_exclude_ir_ipv4_ipv4()
{ {
local ns1=ns1_v4 local ns1=$ns1_v4
local ns2=ns2_v4 local ns2=$ns2_v4
local vtep1_ip=198.51.100.100 local vtep1_ip=198.51.100.100
local vtep2_ip=198.51.100.200 local vtep2_ip=198.51.100.200
local plen=32 local plen=32
...@@ -1227,8 +1223,8 @@ starg_exclude_ir_ipv4_ipv4() ...@@ -1227,8 +1223,8 @@ starg_exclude_ir_ipv4_ipv4()
starg_exclude_ir_ipv6_ipv4() starg_exclude_ir_ipv6_ipv4()
{ {
local ns1=ns1_v4 local ns1=$ns1_v4
local ns2=ns2_v4 local ns2=$ns2_v4
local vtep1_ip=198.51.100.100 local vtep1_ip=198.51.100.100
local vtep2_ip=198.51.100.200 local vtep2_ip=198.51.100.200
local plen=32 local plen=32
...@@ -1246,8 +1242,8 @@ starg_exclude_ir_ipv6_ipv4() ...@@ -1246,8 +1242,8 @@ starg_exclude_ir_ipv6_ipv4()
starg_exclude_ir_ipv4_ipv6() starg_exclude_ir_ipv4_ipv6()
{ {
local ns1=ns1_v6 local ns1=$ns1_v6
local ns2=ns2_v6 local ns2=$ns2_v6
local vtep1_ip=2001:db8:1000::1 local vtep1_ip=2001:db8:1000::1
local vtep2_ip=2001:db8:2000::1 local vtep2_ip=2001:db8:2000::1
local plen=128 local plen=128
...@@ -1265,8 +1261,8 @@ starg_exclude_ir_ipv4_ipv6() ...@@ -1265,8 +1261,8 @@ starg_exclude_ir_ipv4_ipv6()
starg_exclude_ir_ipv6_ipv6() starg_exclude_ir_ipv6_ipv6()
{ {
local ns1=ns1_v6 local ns1=$ns1_v6
local ns2=ns2_v6 local ns2=$ns2_v6
local vtep1_ip=2001:db8:1000::1 local vtep1_ip=2001:db8:1000::1
local vtep2_ip=2001:db8:2000::1 local vtep2_ip=2001:db8:2000::1
local plen=128 local plen=128
...@@ -1344,8 +1340,8 @@ starg_include_ir_common() ...@@ -1344,8 +1340,8 @@ starg_include_ir_common()
starg_include_ir_ipv4_ipv4() starg_include_ir_ipv4_ipv4()
{ {
local ns1=ns1_v4 local ns1=$ns1_v4
local ns2=ns2_v4 local ns2=$ns2_v4
local vtep1_ip=198.51.100.100 local vtep1_ip=198.51.100.100
local vtep2_ip=198.51.100.200 local vtep2_ip=198.51.100.200
local plen=32 local plen=32
...@@ -1363,8 +1359,8 @@ starg_include_ir_ipv4_ipv4() ...@@ -1363,8 +1359,8 @@ starg_include_ir_ipv4_ipv4()
starg_include_ir_ipv6_ipv4() starg_include_ir_ipv6_ipv4()
{ {
local ns1=ns1_v4 local ns1=$ns1_v4
local ns2=ns2_v4 local ns2=$ns2_v4
local vtep1_ip=198.51.100.100 local vtep1_ip=198.51.100.100
local vtep2_ip=198.51.100.200 local vtep2_ip=198.51.100.200
local plen=32 local plen=32
...@@ -1382,8 +1378,8 @@ starg_include_ir_ipv6_ipv4() ...@@ -1382,8 +1378,8 @@ starg_include_ir_ipv6_ipv4()
starg_include_ir_ipv4_ipv6() starg_include_ir_ipv4_ipv6()
{ {
local ns1=ns1_v6 local ns1=$ns1_v6
local ns2=ns2_v6 local ns2=$ns2_v6
local vtep1_ip=2001:db8:1000::1 local vtep1_ip=2001:db8:1000::1
local vtep2_ip=2001:db8:2000::1 local vtep2_ip=2001:db8:2000::1
local plen=128 local plen=128
...@@ -1401,8 +1397,8 @@ starg_include_ir_ipv4_ipv6() ...@@ -1401,8 +1397,8 @@ starg_include_ir_ipv4_ipv6()
starg_include_ir_ipv6_ipv6() starg_include_ir_ipv6_ipv6()
{ {
local ns1=ns1_v6 local ns1=$ns1_v6
local ns2=ns2_v6 local ns2=$ns2_v6
local vtep1_ip=2001:db8:1000::1 local vtep1_ip=2001:db8:1000::1
local vtep2_ip=2001:db8:2000::1 local vtep2_ip=2001:db8:2000::1
local plen=128 local plen=128
...@@ -1462,8 +1458,8 @@ starg_exclude_p2mp_common() ...@@ -1462,8 +1458,8 @@ starg_exclude_p2mp_common()
starg_exclude_p2mp_ipv4_ipv4() starg_exclude_p2mp_ipv4_ipv4()
{ {
local ns1=ns1_v4 local ns1=$ns1_v4
local ns2=ns2_v4 local ns2=$ns2_v4
local mcast_grp=238.1.1.1 local mcast_grp=238.1.1.1
local plen=32 local plen=32
local grp=239.1.1.1 local grp=239.1.1.1
...@@ -1480,8 +1476,8 @@ starg_exclude_p2mp_ipv4_ipv4() ...@@ -1480,8 +1476,8 @@ starg_exclude_p2mp_ipv4_ipv4()
starg_exclude_p2mp_ipv6_ipv4() starg_exclude_p2mp_ipv6_ipv4()
{ {
local ns1=ns1_v4 local ns1=$ns1_v4
local ns2=ns2_v4 local ns2=$ns2_v4
local mcast_grp=238.1.1.1 local mcast_grp=238.1.1.1
local plen=32 local plen=32
local grp=ff0e::1 local grp=ff0e::1
...@@ -1498,8 +1494,8 @@ starg_exclude_p2mp_ipv6_ipv4() ...@@ -1498,8 +1494,8 @@ starg_exclude_p2mp_ipv6_ipv4()
starg_exclude_p2mp_ipv4_ipv6() starg_exclude_p2mp_ipv4_ipv6()
{ {
local ns1=ns1_v6 local ns1=$ns1_v6
local ns2=ns2_v6 local ns2=$ns2_v6
local mcast_grp=ff0e::2 local mcast_grp=ff0e::2
local plen=128 local plen=128
local grp=239.1.1.1 local grp=239.1.1.1
...@@ -1516,8 +1512,8 @@ starg_exclude_p2mp_ipv4_ipv6() ...@@ -1516,8 +1512,8 @@ starg_exclude_p2mp_ipv4_ipv6()
starg_exclude_p2mp_ipv6_ipv6() starg_exclude_p2mp_ipv6_ipv6()
{ {
local ns1=ns1_v6 local ns1=$ns1_v6
local ns2=ns2_v6 local ns2=$ns2_v6
local mcast_grp=ff0e::2 local mcast_grp=ff0e::2
local plen=128 local plen=128
local grp=ff0e::1 local grp=ff0e::1
...@@ -1576,8 +1572,8 @@ starg_include_p2mp_common() ...@@ -1576,8 +1572,8 @@ starg_include_p2mp_common()
starg_include_p2mp_ipv4_ipv4() starg_include_p2mp_ipv4_ipv4()
{ {
local ns1=ns1_v4 local ns1=$ns1_v4
local ns2=ns2_v4 local ns2=$ns2_v4
local mcast_grp=238.1.1.1 local mcast_grp=238.1.1.1
local plen=32 local plen=32
local grp=239.1.1.1 local grp=239.1.1.1
...@@ -1594,8 +1590,8 @@ starg_include_p2mp_ipv4_ipv4() ...@@ -1594,8 +1590,8 @@ starg_include_p2mp_ipv4_ipv4()
starg_include_p2mp_ipv6_ipv4() starg_include_p2mp_ipv6_ipv4()
{ {
local ns1=ns1_v4 local ns1=$ns1_v4
local ns2=ns2_v4 local ns2=$ns2_v4
local mcast_grp=238.1.1.1 local mcast_grp=238.1.1.1
local plen=32 local plen=32
local grp=ff0e::1 local grp=ff0e::1
...@@ -1612,8 +1608,8 @@ starg_include_p2mp_ipv6_ipv4() ...@@ -1612,8 +1608,8 @@ starg_include_p2mp_ipv6_ipv4()
starg_include_p2mp_ipv4_ipv6() starg_include_p2mp_ipv4_ipv6()
{ {
local ns1=ns1_v6 local ns1=$ns1_v6
local ns2=ns2_v6 local ns2=$ns2_v6
local mcast_grp=ff0e::2 local mcast_grp=ff0e::2
local plen=128 local plen=128
local grp=239.1.1.1 local grp=239.1.1.1
...@@ -1630,8 +1626,8 @@ starg_include_p2mp_ipv4_ipv6() ...@@ -1630,8 +1626,8 @@ starg_include_p2mp_ipv4_ipv6()
starg_include_p2mp_ipv6_ipv6() starg_include_p2mp_ipv6_ipv6()
{ {
local ns1=ns1_v6 local ns1=$ns1_v6
local ns2=ns2_v6 local ns2=$ns2_v6
local mcast_grp=ff0e::2 local mcast_grp=ff0e::2
local plen=128 local plen=128
local grp=ff0e::1 local grp=ff0e::1
...@@ -1709,8 +1705,8 @@ egress_vni_translation_common() ...@@ -1709,8 +1705,8 @@ egress_vni_translation_common()
egress_vni_translation_ipv4_ipv4() egress_vni_translation_ipv4_ipv4()
{ {
local ns1=ns1_v4 local ns1=$ns1_v4
local ns2=ns2_v4 local ns2=$ns2_v4
local mcast_grp=238.1.1.1 local mcast_grp=238.1.1.1
local plen=32 local plen=32
local proto="ipv4" local proto="ipv4"
...@@ -1727,8 +1723,8 @@ egress_vni_translation_ipv4_ipv4() ...@@ -1727,8 +1723,8 @@ egress_vni_translation_ipv4_ipv4()
egress_vni_translation_ipv6_ipv4() egress_vni_translation_ipv6_ipv4()
{ {
local ns1=ns1_v4 local ns1=$ns1_v4
local ns2=ns2_v4 local ns2=$ns2_v4
local mcast_grp=238.1.1.1 local mcast_grp=238.1.1.1
local plen=32 local plen=32
local proto="ipv6" local proto="ipv6"
...@@ -1745,8 +1741,8 @@ egress_vni_translation_ipv6_ipv4() ...@@ -1745,8 +1741,8 @@ egress_vni_translation_ipv6_ipv4()
egress_vni_translation_ipv4_ipv6() egress_vni_translation_ipv4_ipv6()
{ {
local ns1=ns1_v6 local ns1=$ns1_v6
local ns2=ns2_v6 local ns2=$ns2_v6
local mcast_grp=ff0e::2 local mcast_grp=ff0e::2
local plen=128 local plen=128
local proto="ipv4" local proto="ipv4"
...@@ -1763,8 +1759,8 @@ egress_vni_translation_ipv4_ipv6() ...@@ -1763,8 +1759,8 @@ egress_vni_translation_ipv4_ipv6()
egress_vni_translation_ipv6_ipv6() egress_vni_translation_ipv6_ipv6()
{ {
local ns1=ns1_v6 local ns1=$ns1_v6
local ns2=ns2_v6 local ns2=$ns2_v6
local mcast_grp=ff0e::2 local mcast_grp=ff0e::2
local plen=128 local plen=128
local proto="ipv6" local proto="ipv6"
...@@ -1929,8 +1925,8 @@ all_zeros_mdb_common() ...@@ -1929,8 +1925,8 @@ all_zeros_mdb_common()
all_zeros_mdb_ipv4() all_zeros_mdb_ipv4()
{ {
local ns1=ns1_v4 local ns1=$ns1_v4
local ns2=ns2_v4 local ns2=$ns2_v4
local vtep1_ip=198.51.100.101 local vtep1_ip=198.51.100.101
local vtep2_ip=198.51.100.102 local vtep2_ip=198.51.100.102
local vtep3_ip=198.51.100.103 local vtep3_ip=198.51.100.103
...@@ -1947,8 +1943,8 @@ all_zeros_mdb_ipv4() ...@@ -1947,8 +1943,8 @@ all_zeros_mdb_ipv4()
all_zeros_mdb_ipv6() all_zeros_mdb_ipv6()
{ {
local ns1=ns1_v6 local ns1=$ns1_v6
local ns2=ns2_v6 local ns2=$ns2_v6
local vtep1_ip=2001:db8:1000::1 local vtep1_ip=2001:db8:1000::1
local vtep2_ip=2001:db8:2000::1 local vtep2_ip=2001:db8:2000::1
local vtep3_ip=2001:db8:3000::1 local vtep3_ip=2001:db8:3000::1
...@@ -2021,8 +2017,8 @@ mdb_fdb_common() ...@@ -2021,8 +2017,8 @@ mdb_fdb_common()
mdb_fdb_ipv4_ipv4() mdb_fdb_ipv4_ipv4()
{ {
local ns1=ns1_v4 local ns1=$ns1_v4
local ns2=ns2_v4 local ns2=$ns2_v4
local vtep1_ip=198.51.100.100 local vtep1_ip=198.51.100.100
local vtep2_ip=198.51.100.200 local vtep2_ip=198.51.100.200
local plen=32 local plen=32
...@@ -2040,8 +2036,8 @@ mdb_fdb_ipv4_ipv4() ...@@ -2040,8 +2036,8 @@ mdb_fdb_ipv4_ipv4()
mdb_fdb_ipv6_ipv4() mdb_fdb_ipv6_ipv4()
{ {
local ns1=ns1_v4 local ns1=$ns1_v4
local ns2=ns2_v4 local ns2=$ns2_v4
local vtep1_ip=198.51.100.100 local vtep1_ip=198.51.100.100
local vtep2_ip=198.51.100.200 local vtep2_ip=198.51.100.200
local plen=32 local plen=32
...@@ -2059,8 +2055,8 @@ mdb_fdb_ipv6_ipv4() ...@@ -2059,8 +2055,8 @@ mdb_fdb_ipv6_ipv4()
mdb_fdb_ipv4_ipv6() mdb_fdb_ipv4_ipv6()
{ {
local ns1=ns1_v6 local ns1=$ns1_v6
local ns2=ns2_v6 local ns2=$ns2_v6
local vtep1_ip=2001:db8:1000::1 local vtep1_ip=2001:db8:1000::1
local vtep2_ip=2001:db8:2000::1 local vtep2_ip=2001:db8:2000::1
local plen=128 local plen=128
...@@ -2078,8 +2074,8 @@ mdb_fdb_ipv4_ipv6() ...@@ -2078,8 +2074,8 @@ mdb_fdb_ipv4_ipv6()
mdb_fdb_ipv6_ipv6() mdb_fdb_ipv6_ipv6()
{ {
local ns1=ns1_v6 local ns1=$ns1_v6
local ns2=ns2_v6 local ns2=$ns2_v6
local vtep1_ip=2001:db8:1000::1 local vtep1_ip=2001:db8:1000::1
local vtep2_ip=2001:db8:2000::1 local vtep2_ip=2001:db8:2000::1
local plen=128 local plen=128
...@@ -2166,7 +2162,7 @@ mdb_torture_common() ...@@ -2166,7 +2162,7 @@ mdb_torture_common()
mdb_torture_ipv4_ipv4() mdb_torture_ipv4_ipv4()
{ {
local ns1=ns1_v4 local ns1=$ns1_v4
local vtep1_ip=198.51.100.100 local vtep1_ip=198.51.100.100
local vtep2_ip=198.51.100.200 local vtep2_ip=198.51.100.200
local grp1=239.1.1.1 local grp1=239.1.1.1
...@@ -2183,7 +2179,7 @@ mdb_torture_ipv4_ipv4() ...@@ -2183,7 +2179,7 @@ mdb_torture_ipv4_ipv4()
mdb_torture_ipv6_ipv4() mdb_torture_ipv6_ipv4()
{ {
local ns1=ns1_v4 local ns1=$ns1_v4
local vtep1_ip=198.51.100.100 local vtep1_ip=198.51.100.100
local vtep2_ip=198.51.100.200 local vtep2_ip=198.51.100.200
local grp1=ff0e::1 local grp1=ff0e::1
...@@ -2200,7 +2196,7 @@ mdb_torture_ipv6_ipv4() ...@@ -2200,7 +2196,7 @@ mdb_torture_ipv6_ipv4()
mdb_torture_ipv4_ipv6() mdb_torture_ipv4_ipv6()
{ {
local ns1=ns1_v6 local ns1=$ns1_v6
local vtep1_ip=2001:db8:1000::1 local vtep1_ip=2001:db8:1000::1
local vtep2_ip=2001:db8:2000::1 local vtep2_ip=2001:db8:2000::1
local grp1=239.1.1.1 local grp1=239.1.1.1
...@@ -2217,7 +2213,7 @@ mdb_torture_ipv4_ipv6() ...@@ -2217,7 +2213,7 @@ mdb_torture_ipv4_ipv6()
mdb_torture_ipv6_ipv6() mdb_torture_ipv6_ipv6()
{ {
local ns1=ns1_v6 local ns1=$ns1_v6
local vtep1_ip=2001:db8:1000::1 local vtep1_ip=2001:db8:1000::1
local vtep2_ip=2001:db8:2000::1 local vtep2_ip=2001:db8:2000::1
local grp1=ff0e::1 local grp1=ff0e::1
......
...@@ -9,9 +9,8 @@ ...@@ -9,9 +9,8 @@
# option and verifies that packets are no longer received by the second VXLAN # option and verifies that packets are no longer received by the second VXLAN
# device. # device.
source lib.sh
ret=0 ret=0
# Kselftest framework requirement - SKIP code is 4.
ksft_skip=4
TESTS=" TESTS="
nolocalbypass nolocalbypass
...@@ -98,20 +97,19 @@ tc_check_packets() ...@@ -98,20 +97,19 @@ tc_check_packets()
setup() setup()
{ {
ip netns add ns1 setup_ns ns1
ip -n ns1 link set dev lo up ip -n $ns1 address add 192.0.2.1/32 dev lo
ip -n ns1 address add 192.0.2.1/32 dev lo ip -n $ns1 address add 198.51.100.1/32 dev lo
ip -n ns1 address add 198.51.100.1/32 dev lo
ip -n ns1 link add name vx0 up type vxlan id 100 local 198.51.100.1 \ ip -n $ns1 link add name vx0 up type vxlan id 100 local 198.51.100.1 \
dstport 4789 nolearning dstport 4789 nolearning
ip -n ns1 link add name vx1 up type vxlan id 100 dstport 4790 ip -n $ns1 link add name vx1 up type vxlan id 100 dstport 4790
} }
cleanup() cleanup()
{ {
ip netns del ns1 &> /dev/null cleanup_ns $ns1
} }
################################################################################ ################################################################################
...@@ -122,40 +120,40 @@ nolocalbypass() ...@@ -122,40 +120,40 @@ nolocalbypass()
local smac=00:01:02:03:04:05 local smac=00:01:02:03:04:05
local dmac=00:0a:0b:0c:0d:0e local dmac=00:0a:0b:0c:0d:0e
run_cmd "bridge -n ns1 fdb add $dmac dev vx0 self static dst 192.0.2.1 port 4790" run_cmd "bridge -n $ns1 fdb add $dmac dev vx0 self static dst 192.0.2.1 port 4790"
run_cmd "tc -n ns1 qdisc add dev vx1 clsact" run_cmd "tc -n $ns1 qdisc add dev vx1 clsact"
run_cmd "tc -n ns1 filter add dev vx1 ingress pref 1 handle 101 proto all flower src_mac $smac dst_mac $dmac action pass" run_cmd "tc -n $ns1 filter add dev vx1 ingress pref 1 handle 101 proto all flower src_mac $smac dst_mac $dmac action pass"
run_cmd "tc -n ns1 qdisc add dev lo clsact" run_cmd "tc -n $ns1 qdisc add dev lo clsact"
run_cmd "tc -n ns1 filter add dev lo ingress pref 1 handle 101 proto ip flower ip_proto udp dst_port 4790 action drop" run_cmd "tc -n $ns1 filter add dev lo ingress pref 1 handle 101 proto ip flower ip_proto udp dst_port 4790 action drop"
run_cmd "ip -n ns1 -d -j link show dev vx0 | jq -e '.[][\"linkinfo\"][\"info_data\"][\"localbypass\"] == true'" run_cmd "ip -n $ns1 -d -j link show dev vx0 | jq -e '.[][\"linkinfo\"][\"info_data\"][\"localbypass\"] == true'"
log_test $? 0 "localbypass enabled" log_test $? 0 "localbypass enabled"
run_cmd "ip netns exec ns1 mausezahn vx0 -a $smac -b $dmac -c 1 -p 100 -q" run_cmd "ip netns exec $ns1 mausezahn vx0 -a $smac -b $dmac -c 1 -p 100 -q"
tc_check_packets "ns1" "dev vx1 ingress" 101 1 tc_check_packets "$ns1" "dev vx1 ingress" 101 1
log_test $? 0 "Packet received by local VXLAN device - localbypass" log_test $? 0 "Packet received by local VXLAN device - localbypass"
run_cmd "ip -n ns1 link set dev vx0 type vxlan nolocalbypass" run_cmd "ip -n $ns1 link set dev vx0 type vxlan nolocalbypass"
run_cmd "ip -n ns1 -d -j link show dev vx0 | jq -e '.[][\"linkinfo\"][\"info_data\"][\"localbypass\"] == false'" run_cmd "ip -n $ns1 -d -j link show dev vx0 | jq -e '.[][\"linkinfo\"][\"info_data\"][\"localbypass\"] == false'"
log_test $? 0 "localbypass disabled" log_test $? 0 "localbypass disabled"
run_cmd "ip netns exec ns1 mausezahn vx0 -a $smac -b $dmac -c 1 -p 100 -q" run_cmd "ip netns exec $ns1 mausezahn vx0 -a $smac -b $dmac -c 1 -p 100 -q"
tc_check_packets "ns1" "dev vx1 ingress" 101 1 tc_check_packets "$ns1" "dev vx1 ingress" 101 1
log_test $? 0 "Packet not received by local VXLAN device - nolocalbypass" log_test $? 0 "Packet not received by local VXLAN device - nolocalbypass"
run_cmd "ip -n ns1 link set dev vx0 type vxlan localbypass" run_cmd "ip -n $ns1 link set dev vx0 type vxlan localbypass"
run_cmd "ip -n ns1 -d -j link show dev vx0 | jq -e '.[][\"linkinfo\"][\"info_data\"][\"localbypass\"] == true'" run_cmd "ip -n $ns1 -d -j link show dev vx0 | jq -e '.[][\"linkinfo\"][\"info_data\"][\"localbypass\"] == true'"
log_test $? 0 "localbypass enabled" log_test $? 0 "localbypass enabled"
run_cmd "ip netns exec ns1 mausezahn vx0 -a $smac -b $dmac -c 1 -p 100 -q" run_cmd "ip netns exec $ns1 mausezahn vx0 -a $smac -b $dmac -c 1 -p 100 -q"
tc_check_packets "ns1" "dev vx1 ingress" 101 2 tc_check_packets "$ns1" "dev vx1 ingress" 101 2
log_test $? 0 "Packet received by local VXLAN device - localbypass" log_test $? 0 "Packet received by local VXLAN device - localbypass"
} }
......
...@@ -43,15 +43,14 @@ ...@@ -43,15 +43,14 @@
# This tests both the connectivity between vm-1 and vm-2, and that the underlay # This tests both the connectivity between vm-1 and vm-2, and that the underlay
# can be moved in and out of the vrf by unsetting and setting veth0's master. # can be moved in and out of the vrf by unsetting and setting veth0's master.
source lib.sh
set -e set -e
cleanup() { cleanup() {
ip link del veth-hv-1 2>/dev/null || true ip link del veth-hv-1 2>/dev/null || true
ip link del veth-tap 2>/dev/null || true ip link del veth-tap 2>/dev/null || true
for ns in hv-1 hv-2 vm-1 vm-2; do cleanup_ns $hv_1 $hv_2 $vm_1 $vm_2
ip netns del $ns 2>/dev/null || true
done
} }
# Clean start # Clean start
...@@ -60,72 +59,75 @@ cleanup &> /dev/null ...@@ -60,72 +59,75 @@ cleanup &> /dev/null
[[ $1 == "clean" ]] && exit 0 [[ $1 == "clean" ]] && exit 0
trap cleanup EXIT trap cleanup EXIT
setup_ns hv_1 hv_2 vm_1 vm_2
hv[1]=$hv_1
hv[2]=$hv_2
vm[1]=$vm_1
vm[2]=$vm_2
# Setup "Hypervisors" simulated with netns # Setup "Hypervisors" simulated with netns
ip link add veth-hv-1 type veth peer name veth-hv-2 ip link add veth-hv-1 type veth peer name veth-hv-2
setup-hv-networking() { setup-hv-networking() {
hv=$1 id=$1
ip netns add hv-$hv ip link set veth-hv-$id netns ${hv[$id]}
ip link set veth-hv-$hv netns hv-$hv ip -netns ${hv[$id]} link set veth-hv-$id name veth0
ip -netns hv-$hv link set veth-hv-$hv name veth0
ip -netns hv-$hv link add vrf-underlay type vrf table 1 ip -netns ${hv[$id]} link add vrf-underlay type vrf table 1
ip -netns hv-$hv link set vrf-underlay up ip -netns ${hv[$id]} link set vrf-underlay up
ip -netns hv-$hv addr add 172.16.0.$hv/24 dev veth0 ip -netns ${hv[$id]} addr add 172.16.0.$id/24 dev veth0
ip -netns hv-$hv link set veth0 up ip -netns ${hv[$id]} link set veth0 up
ip -netns hv-$hv link add br0 type bridge ip -netns ${hv[$id]} link add br0 type bridge
ip -netns hv-$hv link set br0 up ip -netns ${hv[$id]} link set br0 up
ip -netns hv-$hv link add vxlan0 type vxlan id 10 local 172.16.0.$hv dev veth0 dstport 4789 ip -netns ${hv[$id]} link add vxlan0 type vxlan id 10 local 172.16.0.$id dev veth0 dstport 4789
ip -netns hv-$hv link set vxlan0 master br0 ip -netns ${hv[$id]} link set vxlan0 master br0
ip -netns hv-$hv link set vxlan0 up ip -netns ${hv[$id]} link set vxlan0 up
} }
setup-hv-networking 1 setup-hv-networking 1
setup-hv-networking 2 setup-hv-networking 2
# Check connectivity between HVs by pinging hv-2 from hv-1 # Check connectivity between HVs by pinging hv-2 from hv-1
echo -n "Checking HV connectivity " echo -n "Checking HV connectivity "
ip netns exec hv-1 ping -c 1 -W 1 172.16.0.2 &> /dev/null || (echo "[FAIL]"; false) ip netns exec $hv_1 ping -c 1 -W 1 172.16.0.2 &> /dev/null || (echo "[FAIL]"; false)
echo "[ OK ]" echo "[ OK ]"
# Setups a "VM" simulated by a netns an a veth pair # Setups a "VM" simulated by a netns an a veth pair
setup-vm() { setup-vm() {
id=$1 id=$1
ip netns add vm-$id
ip link add veth-tap type veth peer name veth-hv ip link add veth-tap type veth peer name veth-hv
ip link set veth-tap netns hv-$id ip link set veth-tap netns ${hv[$id]}
ip -netns hv-$id link set veth-tap master br0 ip -netns ${hv[$id]} link set veth-tap master br0
ip -netns hv-$id link set veth-tap up ip -netns ${hv[$id]} link set veth-tap up
ip link set veth-hv address 02:1d:8d:dd:0c:6$id ip link set veth-hv address 02:1d:8d:dd:0c:6$id
ip link set veth-hv netns vm-$id ip link set veth-hv netns ${vm[$id]}
ip -netns vm-$id addr add 10.0.0.$id/24 dev veth-hv ip -netns ${vm[$id]} addr add 10.0.0.$id/24 dev veth-hv
ip -netns vm-$id link set veth-hv up ip -netns ${vm[$id]} link set veth-hv up
} }
setup-vm 1 setup-vm 1
setup-vm 2 setup-vm 2
# Setup VTEP routes to make ARP work # Setup VTEP routes to make ARP work
bridge -netns hv-1 fdb add 00:00:00:00:00:00 dev vxlan0 dst 172.16.0.2 self permanent bridge -netns $hv_1 fdb add 00:00:00:00:00:00 dev vxlan0 dst 172.16.0.2 self permanent
bridge -netns hv-2 fdb add 00:00:00:00:00:00 dev vxlan0 dst 172.16.0.1 self permanent bridge -netns $hv_2 fdb add 00:00:00:00:00:00 dev vxlan0 dst 172.16.0.1 self permanent
echo -n "Check VM connectivity through VXLAN (underlay in the default VRF) " echo -n "Check VM connectivity through VXLAN (underlay in the default VRF) "
ip netns exec vm-1 ping -c 1 -W 1 10.0.0.2 &> /dev/null || (echo "[FAIL]"; false) ip netns exec $vm_1 ping -c 1 -W 1 10.0.0.2 &> /dev/null || (echo "[FAIL]"; false)
echo "[ OK ]" echo "[ OK ]"
# Move the underlay to a non-default VRF # Move the underlay to a non-default VRF
ip -netns hv-1 link set veth0 vrf vrf-underlay ip -netns $hv_1 link set veth0 vrf vrf-underlay
ip -netns hv-1 link set vxlan0 down ip -netns $hv_1 link set vxlan0 down
ip -netns hv-1 link set vxlan0 up ip -netns $hv_1 link set vxlan0 up
ip -netns hv-2 link set veth0 vrf vrf-underlay ip -netns $hv_2 link set veth0 vrf vrf-underlay
ip -netns hv-2 link set vxlan0 down ip -netns $hv_2 link set vxlan0 down
ip -netns hv-2 link set vxlan0 up ip -netns $hv_2 link set vxlan0 up
echo -n "Check VM connectivity through VXLAN (underlay in a VRF) " echo -n "Check VM connectivity through VXLAN (underlay in a VRF) "
ip netns exec vm-1 ping -c 1 -W 1 10.0.0.2 &> /dev/null || (echo "[FAIL]"; false) ip netns exec $vm_1 ping -c 1 -W 1 10.0.0.2 &> /dev/null || (echo "[FAIL]"; false)
echo "[ OK ]" echo "[ OK ]"
...@@ -78,10 +78,8 @@ ...@@ -78,10 +78,8 @@
# #
# #
# This test tests the new vxlan vnifiltering api # This test tests the new vxlan vnifiltering api
source lib.sh
ret=0 ret=0
# Kselftest framework requirement - SKIP code is 4.
ksft_skip=4
# all tests in this script. Can be overridden with -t option # all tests in this script. Can be overridden with -t option
TESTS=" TESTS="
...@@ -148,18 +146,18 @@ run_cmd() ...@@ -148,18 +146,18 @@ run_cmd()
} }
check_hv_connectivity() { check_hv_connectivity() {
ip netns exec hv-1 ping -c 1 -W 1 $1 &>/dev/null ip netns exec $hv_1 ping -c 1 -W 1 $1 &>/dev/null
sleep 1 sleep 1
ip netns exec hv-1 ping -c 1 -W 1 $2 &>/dev/null ip netns exec $hv_1 ping -c 1 -W 1 $2 &>/dev/null
return $? return $?
} }
check_vm_connectivity() { check_vm_connectivity() {
run_cmd "ip netns exec vm-11 ping -c 1 -W 1 10.0.10.12" run_cmd "ip netns exec $vm_11 ping -c 1 -W 1 10.0.10.12"
log_test $? 0 "VM connectivity over $1 (ipv4 default rdst)" log_test $? 0 "VM connectivity over $1 (ipv4 default rdst)"
run_cmd "ip netns exec vm-21 ping -c 1 -W 1 10.0.10.22" run_cmd "ip netns exec $vm_21 ping -c 1 -W 1 10.0.10.22"
log_test $? 0 "VM connectivity over $1 (ipv6 default rdst)" log_test $? 0 "VM connectivity over $1 (ipv6 default rdst)"
} }
...@@ -167,26 +165,23 @@ cleanup() { ...@@ -167,26 +165,23 @@ cleanup() {
ip link del veth-hv-1 2>/dev/null || true ip link del veth-hv-1 2>/dev/null || true
ip link del vethhv-11 vethhv-12 vethhv-21 vethhv-22 2>/dev/null || true ip link del vethhv-11 vethhv-12 vethhv-21 vethhv-22 2>/dev/null || true
for ns in hv-1 hv-2 vm-11 vm-21 vm-12 vm-22 vm-31 vm-32; do cleanup_ns $hv_1 $hv_2 $vm_11 $vm_21 $vm_12 $vm_22 $vm_31 $vm_32
ip netns del $ns 2>/dev/null || true
done
} }
trap cleanup EXIT trap cleanup EXIT
setup-hv-networking() { setup-hv-networking() {
hv=$1 id=$1
local1=$2 local1=$2
mask1=$3 mask1=$3
local2=$4 local2=$4
mask2=$5 mask2=$5
ip netns add hv-$hv ip link set veth-hv-$id netns ${hv[$id]}
ip link set veth-hv-$hv netns hv-$hv ip -netns ${hv[$id]} link set veth-hv-$id name veth0
ip -netns hv-$hv link set veth-hv-$hv name veth0 ip -netns ${hv[$id]} addr add $local1/$mask1 dev veth0
ip -netns hv-$hv addr add $local1/$mask1 dev veth0 ip -netns ${hv[$id]} addr add $local2/$mask2 dev veth0
ip -netns hv-$hv addr add $local2/$mask2 dev veth0 ip -netns ${hv[$id]} link set veth0 up
ip -netns hv-$hv link set veth0 up
} }
# Setups a "VM" simulated by a netns an a veth pair # Setups a "VM" simulated by a netns an a veth pair
...@@ -208,21 +203,20 @@ setup-vm() { ...@@ -208,21 +203,20 @@ setup-vm() {
lastvxlandev="" lastvxlandev=""
# create bridge # create bridge
ip -netns hv-$hvid link add br$brid type bridge vlan_filtering 1 vlan_default_pvid 0 \ ip -netns ${hv[$hvid]} link add br$brid type bridge vlan_filtering 1 vlan_default_pvid 0 \
mcast_snooping 0 mcast_snooping 0
ip -netns hv-$hvid link set br$brid up ip -netns ${hv[$hvid]} link set br$brid up
# create vm namespace and interfaces and connect to hypervisor # create vm namespace and interfaces and connect to hypervisor
# namespace # namespace
ip netns add vm-$vmid
hvvethif="vethhv-$vmid" hvvethif="vethhv-$vmid"
vmvethif="veth-$vmid" vmvethif="veth-$vmid"
ip link add $hvvethif type veth peer name $vmvethif ip link add $hvvethif type veth peer name $vmvethif
ip link set $hvvethif netns hv-$hvid ip link set $hvvethif netns ${hv[$hvid]}
ip link set $vmvethif netns vm-$vmid ip link set $vmvethif netns ${vm[$vmid]}
ip -netns hv-$hvid link set $hvvethif up ip -netns ${hv[$hvid]} link set $hvvethif up
ip -netns vm-$vmid link set $vmvethif up ip -netns ${vm[$vmid]} link set $vmvethif up
ip -netns hv-$hvid link set $hvvethif master br$brid ip -netns ${hv[$hvid]} link set $hvvethif master br$brid
# configure VM vlan/vni filtering on hypervisor # configure VM vlan/vni filtering on hypervisor
for vmap in $(echo $vattrs | cut -d "," -f1- --output-delimiter=' ') for vmap in $(echo $vattrs | cut -d "," -f1- --output-delimiter=' ')
...@@ -234,9 +228,9 @@ setup-vm() { ...@@ -234,9 +228,9 @@ setup-vm() {
local vtype=$(echo $vmap | awk -F'-' '{print ($5)}') local vtype=$(echo $vmap | awk -F'-' '{print ($5)}')
local port=$(echo $vmap | awk -F'-' '{print ($6)}') local port=$(echo $vmap | awk -F'-' '{print ($6)}')
ip -netns vm-$vmid link add name $vmvethif.$vid link $vmvethif type vlan id $vid ip -netns ${vm[$vmid]} link add name $vmvethif.$vid link $vmvethif type vlan id $vid
ip -netns vm-$vmid addr add 10.0.$vid.$vmid/24 dev $vmvethif.$vid ip -netns ${vm[$vmid]} addr add 10.0.$vid.$vmid/24 dev $vmvethif.$vid
ip -netns vm-$vmid link set $vmvethif.$vid up ip -netns ${vm[$vmid]} link set $vmvethif.$vid up
tid=$vid tid=$vid
vxlandev="vxlan$brid" vxlandev="vxlan$brid"
...@@ -268,35 +262,35 @@ setup-vm() { ...@@ -268,35 +262,35 @@ setup-vm() {
# create vxlan device # create vxlan device
if [ "$vxlandev" != "$lastvxlandev" ]; then if [ "$vxlandev" != "$lastvxlandev" ]; then
ip -netns hv-$hvid link add $vxlandev type vxlan local $localip $vxlandevflags dev veth0 2>/dev/null ip -netns ${hv[$hvid]} link add $vxlandev type vxlan local $localip $vxlandevflags dev veth0 2>/dev/null
ip -netns hv-$hvid link set $vxlandev master br$brid ip -netns ${hv[$hvid]} link set $vxlandev master br$brid
ip -netns hv-$hvid link set $vxlandev up ip -netns ${hv[$hvid]} link set $vxlandev up
lastvxlandev=$vxlandev lastvxlandev=$vxlandev
fi fi
# add vlan # add vlan
bridge -netns hv-$hvid vlan add vid $vid dev $hvvethif bridge -netns ${hv[$hvid]} vlan add vid $vid dev $hvvethif
bridge -netns hv-$hvid vlan add vid $vid pvid dev $vxlandev bridge -netns ${hv[$hvid]} vlan add vid $vid pvid dev $vxlandev
# Add bridge vni filter for tx # Add bridge vni filter for tx
if [[ -n $vtype && $vtype == "metadata" || $vtype == "vnifilter" || $vtype == "vnifilterg" ]]; then if [[ -n $vtype && $vtype == "metadata" || $vtype == "vnifilter" || $vtype == "vnifilterg" ]]; then
bridge -netns hv-$hvid link set dev $vxlandev vlan_tunnel on bridge -netns ${hv[$hvid]} link set dev $vxlandev vlan_tunnel on
bridge -netns hv-$hvid vlan add dev $vxlandev vid $vid tunnel_info id $tid bridge -netns ${hv[$hvid]} vlan add dev $vxlandev vid $vid tunnel_info id $tid
fi fi
if [[ -n $vtype && $vtype == "metadata" ]]; then if [[ -n $vtype && $vtype == "metadata" ]]; then
bridge -netns hv-$hvid fdb add 00:00:00:00:00:00 dev $vxlandev \ bridge -netns ${hv[$hvid]} fdb add 00:00:00:00:00:00 dev $vxlandev \
src_vni $tid vni $tid dst $group self src_vni $tid vni $tid dst $group self
elif [[ -n $vtype && $vtype == "vnifilter" ]]; then elif [[ -n $vtype && $vtype == "vnifilter" ]]; then
# Add per vni rx filter with 'bridge vni' api # Add per vni rx filter with 'bridge vni' api
bridge -netns hv-$hvid vni add dev $vxlandev vni $tid bridge -netns ${hv[$hvid]} vni add dev $vxlandev vni $tid
elif [[ -n $vtype && $vtype == "vnifilterg" ]]; then elif [[ -n $vtype && $vtype == "vnifilterg" ]]; then
# Add per vni group config with 'bridge vni' api # Add per vni group config with 'bridge vni' api
if [ -n "$group" ]; then if [ -n "$group" ]; then
if [ $mcast -eq 1 ]; then if [ $mcast -eq 1 ]; then
bridge -netns hv-$hvid vni add dev $vxlandev vni $tid group $group bridge -netns ${hv[$hvid]} vni add dev $vxlandev vni $tid group $group
else else
bridge -netns hv-$hvid vni add dev $vxlandev vni $tid remote $group bridge -netns ${hv[$hvid]} vni add dev $vxlandev vni $tid remote $group
fi fi
fi fi
fi fi
...@@ -306,14 +300,14 @@ setup-vm() { ...@@ -306,14 +300,14 @@ setup-vm() {
setup_vnifilter_api() setup_vnifilter_api()
{ {
ip link add veth-host type veth peer name veth-testns ip link add veth-host type veth peer name veth-testns
ip netns add testns setup_ns testns
ip link set veth-testns netns testns ip link set veth-testns netns $testns
} }
cleanup_vnifilter_api() cleanup_vnifilter_api()
{ {
ip link del veth-host 2>/dev/null || true ip link del veth-host 2>/dev/null || true
ip netns del testns 2>/dev/null || true ip netns del $testns 2>/dev/null || true
} }
# tests vxlan filtering api # tests vxlan filtering api
...@@ -331,52 +325,52 @@ vxlan_vnifilter_api() ...@@ -331,52 +325,52 @@ vxlan_vnifilter_api()
# Duplicate vni test # Duplicate vni test
# create non-vnifiltering traditional vni device # create non-vnifiltering traditional vni device
run_cmd "ip -netns testns link add vxlan100 type vxlan id 100 local $localip dev veth-testns dstport 4789" run_cmd "ip -netns $testns link add vxlan100 type vxlan id 100 local $localip dev veth-testns dstport 4789"
log_test $? 0 "Create traditional vxlan device" log_test $? 0 "Create traditional vxlan device"
# create vni filtering device # create vni filtering device
run_cmd "ip -netns testns link add vxlan-ext1 type vxlan vnifilter local $localip dev veth-testns dstport 4789" run_cmd "ip -netns $testns link add vxlan-ext1 type vxlan vnifilter local $localip dev veth-testns dstport 4789"
log_test $? 1 "Cannot create vnifilter device without external flag" log_test $? 1 "Cannot create vnifilter device without external flag"
run_cmd "ip -netns testns link add vxlan-ext1 type vxlan external vnifilter local $localip dev veth-testns dstport 4789" run_cmd "ip -netns $testns link add vxlan-ext1 type vxlan external vnifilter local $localip dev veth-testns dstport 4789"
log_test $? 0 "Creating external vxlan device with vnifilter flag" log_test $? 0 "Creating external vxlan device with vnifilter flag"
run_cmd "bridge -netns testns vni add dev vxlan-ext1 vni 100" run_cmd "bridge -netns $testns vni add dev vxlan-ext1 vni 100"
log_test $? 0 "Cannot set in-use vni id on vnifiltering device" log_test $? 0 "Cannot set in-use vni id on vnifiltering device"
run_cmd "bridge -netns testns vni add dev vxlan-ext1 vni 200" run_cmd "bridge -netns $testns vni add dev vxlan-ext1 vni 200"
log_test $? 0 "Set new vni id on vnifiltering device" log_test $? 0 "Set new vni id on vnifiltering device"
run_cmd "ip -netns testns link add vxlan-ext2 type vxlan external vnifilter local $localip dev veth-testns dstport 4789" run_cmd "ip -netns $testns link add vxlan-ext2 type vxlan external vnifilter local $localip dev veth-testns dstport 4789"
log_test $? 0 "Create second external vxlan device with vnifilter flag" log_test $? 0 "Create second external vxlan device with vnifilter flag"
run_cmd "bridge -netns testns vni add dev vxlan-ext2 vni 200" run_cmd "bridge -netns $testns vni add dev vxlan-ext2 vni 200"
log_test $? 255 "Cannot set in-use vni id on vnifiltering device" log_test $? 255 "Cannot set in-use vni id on vnifiltering device"
run_cmd "bridge -netns testns vni add dev vxlan-ext2 vni 300" run_cmd "bridge -netns $testns vni add dev vxlan-ext2 vni 300"
log_test $? 0 "Set new vni id on vnifiltering device" log_test $? 0 "Set new vni id on vnifiltering device"
# check in bridge vni show # check in bridge vni show
run_cmd "bridge -netns testns vni add dev vxlan-ext2 vni 300" run_cmd "bridge -netns $testns vni add dev vxlan-ext2 vni 300"
log_test $? 0 "Update vni id on vnifiltering device" log_test $? 0 "Update vni id on vnifiltering device"
run_cmd "bridge -netns testns vni add dev vxlan-ext2 vni 400" run_cmd "bridge -netns $testns vni add dev vxlan-ext2 vni 400"
log_test $? 0 "Add new vni id on vnifiltering device" log_test $? 0 "Add new vni id on vnifiltering device"
# add multicast group per vni # add multicast group per vni
run_cmd "bridge -netns testns vni add dev vxlan-ext1 vni 200 group $group" run_cmd "bridge -netns $testns vni add dev vxlan-ext1 vni 200 group $group"
log_test $? 0 "Set multicast group on existing vni" log_test $? 0 "Set multicast group on existing vni"
# add multicast group per vni # add multicast group per vni
run_cmd "bridge -netns testns vni add dev vxlan-ext2 vni 300 group $group" run_cmd "bridge -netns $testns vni add dev vxlan-ext2 vni 300 group $group"
log_test $? 0 "Set multicast group on existing vni" log_test $? 0 "Set multicast group on existing vni"
# set vnifilter on an existing external vxlan device # set vnifilter on an existing external vxlan device
run_cmd "ip -netns testns link set dev vxlan-ext1 type vxlan external vnifilter" run_cmd "ip -netns $testns link set dev vxlan-ext1 type vxlan external vnifilter"
log_test $? 2 "Cannot set vnifilter flag on a device" log_test $? 2 "Cannot set vnifilter flag on a device"
# change vxlan vnifilter flag # change vxlan vnifilter flag
run_cmd "ip -netns testns link set dev vxlan-ext1 type vxlan external novnifilter" run_cmd "ip -netns $testns link set dev vxlan-ext1 type vxlan external novnifilter"
log_test $? 2 "Cannot unset vnifilter flag on a device" log_test $? 2 "Cannot unset vnifilter flag on a device"
} }
...@@ -390,12 +384,20 @@ vxlan_vnifilter_datapath() ...@@ -390,12 +384,20 @@ vxlan_vnifilter_datapath()
hv1addr2="2002:fee1::1" hv1addr2="2002:fee1::1"
hv2addr2="2002:fee1::2" hv2addr2="2002:fee1::2"
setup_ns hv_1 hv_2
hv[1]=$hv_1
hv[2]=$hv_2
ip link add veth-hv-1 type veth peer name veth-hv-2 ip link add veth-hv-1 type veth peer name veth-hv-2
setup-hv-networking 1 $hv1addr1 24 $hv1addr2 64 $hv2addr1 $hv2addr2 setup-hv-networking 1 $hv1addr1 24 $hv1addr2 64 $hv2addr1 $hv2addr2
setup-hv-networking 2 $hv2addr1 24 $hv2addr2 64 $hv1addr1 $hv1addr2 setup-hv-networking 2 $hv2addr1 24 $hv2addr2 64 $hv1addr1 $hv1addr2
check_hv_connectivity hv2addr1 hv2addr2 check_hv_connectivity hv2addr1 hv2addr2
setup_ns vm_11 vm_21 vm_12 vm_22
vm[11]=$vm_11
vm[21]=$vm_21
vm[12]=$vm_12
vm[22]=$vm_22
setup-vm 1 11 1 10-v4-$hv1addr1-$hv2addr1-vnifilter,20-v4-$hv1addr1-$hv2addr1-vnifilter 0 setup-vm 1 11 1 10-v4-$hv1addr1-$hv2addr1-vnifilter,20-v4-$hv1addr1-$hv2addr1-vnifilter 0
setup-vm 1 21 2 10-v6-$hv1addr2-$hv2addr2-vnifilter,20-v6-$hv1addr2-$hv2addr2-vnifilter 0 setup-vm 1 21 2 10-v6-$hv1addr2-$hv2addr2-vnifilter,20-v6-$hv1addr2-$hv2addr2-vnifilter 0
...@@ -415,12 +417,20 @@ vxlan_vnifilter_datapath_pervni() ...@@ -415,12 +417,20 @@ vxlan_vnifilter_datapath_pervni()
hv1addr2="2002:fee1::1" hv1addr2="2002:fee1::1"
hv2addr2="2002:fee1::2" hv2addr2="2002:fee1::2"
setup_ns hv_1 hv_2
hv[1]=$hv_1
hv[2]=$hv_2
ip link add veth-hv-1 type veth peer name veth-hv-2 ip link add veth-hv-1 type veth peer name veth-hv-2
setup-hv-networking 1 $hv1addr1 24 $hv1addr2 64 setup-hv-networking 1 $hv1addr1 24 $hv1addr2 64
setup-hv-networking 2 $hv2addr1 24 $hv2addr2 64 setup-hv-networking 2 $hv2addr1 24 $hv2addr2 64
check_hv_connectivity hv2addr1 hv2addr2 check_hv_connectivity hv2addr1 hv2addr2
setup_ns vm_11 vm_21 vm_12 vm_22
vm[11]=$vm_11
vm[21]=$vm_21
vm[12]=$vm_12
vm[22]=$vm_22
setup-vm 1 11 1 10-v4-$hv1addr1-$hv2addr1-vnifilterg,20-v4-$hv1addr1-$hv2addr1-vnifilterg 0 setup-vm 1 11 1 10-v4-$hv1addr1-$hv2addr1-vnifilterg,20-v4-$hv1addr1-$hv2addr1-vnifilterg 0
setup-vm 1 21 2 10-v6-$hv1addr2-$hv2addr2-vnifilterg,20-v6-$hv1addr2-$hv2addr2-vnifilterg 0 setup-vm 1 21 2 10-v6-$hv1addr2-$hv2addr2-vnifilterg,20-v6-$hv1addr2-$hv2addr2-vnifilterg 0
...@@ -440,12 +450,20 @@ vxlan_vnifilter_datapath_mgroup() ...@@ -440,12 +450,20 @@ vxlan_vnifilter_datapath_mgroup()
group="239.1.1.100" group="239.1.1.100"
group6="ff07::1" group6="ff07::1"
setup_ns hv_1 hv_2
hv[1]=$hv_1
hv[2]=$hv_2
ip link add veth-hv-1 type veth peer name veth-hv-2 ip link add veth-hv-1 type veth peer name veth-hv-2
setup-hv-networking 1 $hv1addr1 24 $hv1addr2 64 setup-hv-networking 1 $hv1addr1 24 $hv1addr2 64
setup-hv-networking 2 $hv2addr1 24 $hv2addr2 64 setup-hv-networking 2 $hv2addr1 24 $hv2addr2 64
check_hv_connectivity hv2addr1 hv2addr2 check_hv_connectivity hv2addr1 hv2addr2
setup_ns vm_11 vm_21 vm_12 vm_22
vm[11]=$vm_11
vm[21]=$vm_21
vm[12]=$vm_12
vm[22]=$vm_22
setup-vm 1 11 1 10-v4-$hv1addr1-$group-vnifilter,20-v4-$hv1addr1-$group-vnifilter 1 setup-vm 1 11 1 10-v4-$hv1addr1-$group-vnifilter,20-v4-$hv1addr1-$group-vnifilter 1
setup-vm 1 21 2 "10-v6-$hv1addr2-$group6-vnifilter,20-v6-$hv1addr2-$group6-vnifilter" 1 setup-vm 1 21 2 "10-v6-$hv1addr2-$group6-vnifilter,20-v6-$hv1addr2-$group6-vnifilter" 1
...@@ -464,12 +482,20 @@ vxlan_vnifilter_datapath_mgroup_pervni() ...@@ -464,12 +482,20 @@ vxlan_vnifilter_datapath_mgroup_pervni()
group="239.1.1.100" group="239.1.1.100"
group6="ff07::1" group6="ff07::1"
setup_ns hv_1 hv_2
hv[1]=$hv_1
hv[2]=$hv_2
ip link add veth-hv-1 type veth peer name veth-hv-2 ip link add veth-hv-1 type veth peer name veth-hv-2
setup-hv-networking 1 $hv1addr1 24 $hv1addr2 64 setup-hv-networking 1 $hv1addr1 24 $hv1addr2 64
setup-hv-networking 2 $hv2addr1 24 $hv2addr2 64 setup-hv-networking 2 $hv2addr1 24 $hv2addr2 64
check_hv_connectivity hv2addr1 hv2addr2 check_hv_connectivity hv2addr1 hv2addr2
setup_ns vm_11 vm_21 vm_12 vm_22
vm[11]=$vm_11
vm[21]=$vm_21
vm[12]=$vm_12
vm[22]=$vm_22
setup-vm 1 11 1 10-v4-$hv1addr1-$group-vnifilterg,20-v4-$hv1addr1-$group-vnifilterg 1 setup-vm 1 11 1 10-v4-$hv1addr1-$group-vnifilterg,20-v4-$hv1addr1-$group-vnifilterg 1
setup-vm 1 21 2 10-v6-$hv1addr2-$group6-vnifilterg,20-v6-$hv1addr2-$group6-vnifilterg 1 setup-vm 1 21 2 10-v6-$hv1addr2-$group6-vnifilterg,20-v6-$hv1addr2-$group6-vnifilterg 1
...@@ -486,12 +512,22 @@ vxlan_vnifilter_metadata_and_traditional_mix() ...@@ -486,12 +512,22 @@ vxlan_vnifilter_metadata_and_traditional_mix()
hv1addr2="2002:fee1::1" hv1addr2="2002:fee1::1"
hv2addr2="2002:fee1::2" hv2addr2="2002:fee1::2"
setup_ns hv_1 hv_2
hv[1]=$hv_1
hv[2]=$hv_2
ip link add veth-hv-1 type veth peer name veth-hv-2 ip link add veth-hv-1 type veth peer name veth-hv-2
setup-hv-networking 1 $hv1addr1 24 $hv1addr2 64 setup-hv-networking 1 $hv1addr1 24 $hv1addr2 64
setup-hv-networking 2 $hv2addr1 24 $hv2addr2 64 setup-hv-networking 2 $hv2addr1 24 $hv2addr2 64
check_hv_connectivity hv2addr1 hv2addr2 check_hv_connectivity hv2addr1 hv2addr2
setup_ns vm_11 vm_21 vm_31 vm_12 vm_22 vm_32
vm[11]=$vm_11
vm[21]=$vm_21
vm[31]=$vm_31
vm[12]=$vm_12
vm[22]=$vm_22
vm[32]=$vm_32
setup-vm 1 11 1 10-v4-$hv1addr1-$hv2addr1-vnifilter,20-v4-$hv1addr1-$hv2addr1-vnifilter 0 setup-vm 1 11 1 10-v4-$hv1addr1-$hv2addr1-vnifilter,20-v4-$hv1addr1-$hv2addr1-vnifilter 0
setup-vm 1 21 2 10-v6-$hv1addr2-$hv2addr2-vnifilter,20-v6-$hv1addr2-$hv2addr2-vnifilter 0 setup-vm 1 21 2 10-v6-$hv1addr2-$hv2addr2-vnifilter,20-v6-$hv1addr2-$hv2addr2-vnifilter 0
setup-vm 1 31 3 30-v4-$hv1addr1-$hv2addr1-default-4790,40-v6-$hv1addr2-$hv2addr2-default-4790,50-v4-$hv1addr1-$hv2addr1-metadata-4791 0 setup-vm 1 31 3 30-v4-$hv1addr1-$hv2addr1-default-4790,40-v6-$hv1addr2-$hv2addr2-default-4790,50-v4-$hv1addr1-$hv2addr1-metadata-4791 0
...@@ -504,13 +540,13 @@ vxlan_vnifilter_metadata_and_traditional_mix() ...@@ -504,13 +540,13 @@ vxlan_vnifilter_metadata_and_traditional_mix()
check_vm_connectivity "vnifiltering vxlan pervni remote mix" check_vm_connectivity "vnifiltering vxlan pervni remote mix"
# check VM connectivity over traditional/non-vxlan filtering vxlan devices # check VM connectivity over traditional/non-vxlan filtering vxlan devices
run_cmd "ip netns exec vm-31 ping -c 1 -W 1 10.0.30.32" run_cmd "ip netns exec $vm_31 ping -c 1 -W 1 10.0.30.32"
log_test $? 0 "VM connectivity over traditional vxlan (ipv4 default rdst)" log_test $? 0 "VM connectivity over traditional vxlan (ipv4 default rdst)"
run_cmd "ip netns exec vm-31 ping -c 1 -W 1 10.0.40.32" run_cmd "ip netns exec $vm_31 ping -c 1 -W 1 10.0.40.32"
log_test $? 0 "VM connectivity over traditional vxlan (ipv6 default rdst)" log_test $? 0 "VM connectivity over traditional vxlan (ipv6 default rdst)"
run_cmd "ip netns exec vm-31 ping -c 1 -W 1 10.0.50.32" run_cmd "ip netns exec $vm_31 ping -c 1 -W 1 10.0.50.32"
log_test $? 0 "VM connectivity over metadata nonfiltering vxlan (ipv4 default rdst)" log_test $? 0 "VM connectivity over metadata nonfiltering vxlan (ipv4 default rdst)"
} }
......
...@@ -3,9 +3,7 @@ ...@@ -3,9 +3,7 @@
# #
# Various combinations of VRF with xfrms and qdisc. # Various combinations of VRF with xfrms and qdisc.
# Kselftest framework requirement - SKIP code is 4. source lib.sh
ksft_skip=4
PAUSE_ON_FAIL=no PAUSE_ON_FAIL=no
VERBOSE=0 VERBOSE=0
ret=0 ret=0
...@@ -67,7 +65,7 @@ run_cmd_host1() ...@@ -67,7 +65,7 @@ run_cmd_host1()
printf " COMMAND: $cmd\n" printf " COMMAND: $cmd\n"
fi fi
out=$(eval ip netns exec host1 $cmd 2>&1) out=$(eval ip netns exec $host1 $cmd 2>&1)
rc=$? rc=$?
if [ "$VERBOSE" = "1" ]; then if [ "$VERBOSE" = "1" ]; then
if [ -n "$out" ]; then if [ -n "$out" ]; then
...@@ -116,9 +114,6 @@ create_ns() ...@@ -116,9 +114,6 @@ create_ns()
[ -z "${addr}" ] && addr="-" [ -z "${addr}" ] && addr="-"
[ -z "${addr6}" ] && addr6="-" [ -z "${addr6}" ] && addr6="-"
ip netns add ${ns}
ip -netns ${ns} link set lo up
if [ "${addr}" != "-" ]; then if [ "${addr}" != "-" ]; then
ip -netns ${ns} addr add dev lo ${addr} ip -netns ${ns} addr add dev lo ${addr}
fi fi
...@@ -177,25 +172,25 @@ connect_ns() ...@@ -177,25 +172,25 @@ connect_ns()
cleanup() cleanup()
{ {
ip netns del host1 cleanup_ns $host1 $host2
ip netns del host2
} }
setup() setup()
{ {
create_ns "host1" setup_ns host1 host2
create_ns "host2" create_ns "$host1"
create_ns "$host2"
connect_ns "host1" eth0 ${HOST1_4}/24 ${HOST1_6}/64 \ connect_ns "$host1" eth0 ${HOST1_4}/24 ${HOST1_6}/64 \
"host2" eth0 ${HOST2_4}/24 ${HOST2_6}/64 "$host2" eth0 ${HOST2_4}/24 ${HOST2_6}/64
create_vrf "host1" ${VRF} ${TABLE} create_vrf "$host1" ${VRF} ${TABLE}
ip -netns host1 link set dev eth0 master ${VRF} ip -netns $host1 link set dev eth0 master ${VRF}
} }
cleanup_xfrm() cleanup_xfrm()
{ {
for ns in host1 host2 for ns in $host1 $host2
do do
for x in state policy for x in state policy
do do
...@@ -218,57 +213,57 @@ setup_xfrm() ...@@ -218,57 +213,57 @@ setup_xfrm()
# #
# host1 - IPv4 out # host1 - IPv4 out
ip -netns host1 xfrm policy add \ ip -netns $host1 xfrm policy add \
src ${h1_4} dst ${h2_4} ${devarg} dir out \ src ${h1_4} dst ${h2_4} ${devarg} dir out \
tmpl src ${HOST1_4} dst ${HOST2_4} proto esp mode tunnel tmpl src ${HOST1_4} dst ${HOST2_4} proto esp mode tunnel
# host2 - IPv4 in # host2 - IPv4 in
ip -netns host2 xfrm policy add \ ip -netns $host2 xfrm policy add \
src ${h1_4} dst ${h2_4} dir in \ src ${h1_4} dst ${h2_4} dir in \
tmpl src ${HOST1_4} dst ${HOST2_4} proto esp mode tunnel tmpl src ${HOST1_4} dst ${HOST2_4} proto esp mode tunnel
# host1 - IPv4 in # host1 - IPv4 in
ip -netns host1 xfrm policy add \ ip -netns $host1 xfrm policy add \
src ${h2_4} dst ${h1_4} ${devarg} dir in \ src ${h2_4} dst ${h1_4} ${devarg} dir in \
tmpl src ${HOST2_4} dst ${HOST1_4} proto esp mode tunnel tmpl src ${HOST2_4} dst ${HOST1_4} proto esp mode tunnel
# host2 - IPv4 out # host2 - IPv4 out
ip -netns host2 xfrm policy add \ ip -netns $host2 xfrm policy add \
src ${h2_4} dst ${h1_4} dir out \ src ${h2_4} dst ${h1_4} dir out \
tmpl src ${HOST2_4} dst ${HOST1_4} proto esp mode tunnel tmpl src ${HOST2_4} dst ${HOST1_4} proto esp mode tunnel
# host1 - IPv6 out # host1 - IPv6 out
ip -6 -netns host1 xfrm policy add \ ip -6 -netns $host1 xfrm policy add \
src ${h1_6} dst ${h2_6} ${devarg} dir out \ src ${h1_6} dst ${h2_6} ${devarg} dir out \
tmpl src ${HOST1_6} dst ${HOST2_6} proto esp mode tunnel tmpl src ${HOST1_6} dst ${HOST2_6} proto esp mode tunnel
# host2 - IPv6 in # host2 - IPv6 in
ip -6 -netns host2 xfrm policy add \ ip -6 -netns $host2 xfrm policy add \
src ${h1_6} dst ${h2_6} dir in \ src ${h1_6} dst ${h2_6} dir in \
tmpl src ${HOST1_6} dst ${HOST2_6} proto esp mode tunnel tmpl src ${HOST1_6} dst ${HOST2_6} proto esp mode tunnel
# host1 - IPv6 in # host1 - IPv6 in
ip -6 -netns host1 xfrm policy add \ ip -6 -netns $host1 xfrm policy add \
src ${h2_6} dst ${h1_6} ${devarg} dir in \ src ${h2_6} dst ${h1_6} ${devarg} dir in \
tmpl src ${HOST2_6} dst ${HOST1_6} proto esp mode tunnel tmpl src ${HOST2_6} dst ${HOST1_6} proto esp mode tunnel
# host2 - IPv6 out # host2 - IPv6 out
ip -6 -netns host2 xfrm policy add \ ip -6 -netns $host2 xfrm policy add \
src ${h2_6} dst ${h1_6} dir out \ src ${h2_6} dst ${h1_6} dir out \
tmpl src ${HOST2_6} dst ${HOST1_6} proto esp mode tunnel tmpl src ${HOST2_6} dst ${HOST1_6} proto esp mode tunnel
# #
# state # state
# #
ip -netns host1 xfrm state add src ${HOST1_4} dst ${HOST2_4} \ ip -netns $host1 xfrm state add src ${HOST1_4} dst ${HOST2_4} \
proto esp spi ${SPI_1} reqid 0 mode tunnel \ proto esp spi ${SPI_1} reqid 0 mode tunnel \
replay-window 4 replay-oseq 0x4 \ replay-window 4 replay-oseq 0x4 \
auth-trunc 'hmac(sha1)' ${AUTH_1} 96 \ auth-trunc 'hmac(sha1)' ${AUTH_1} 96 \
enc 'cbc(aes)' ${ENC_1} \ enc 'cbc(aes)' ${ENC_1} \
sel src ${h1_4} dst ${h2_4} ${devarg} sel src ${h1_4} dst ${h2_4} ${devarg}
ip -netns host2 xfrm state add src ${HOST1_4} dst ${HOST2_4} \ ip -netns $host2 xfrm state add src ${HOST1_4} dst ${HOST2_4} \
proto esp spi ${SPI_1} reqid 0 mode tunnel \ proto esp spi ${SPI_1} reqid 0 mode tunnel \
replay-window 4 replay-oseq 0x4 \ replay-window 4 replay-oseq 0x4 \
auth-trunc 'hmac(sha1)' ${AUTH_1} 96 \ auth-trunc 'hmac(sha1)' ${AUTH_1} 96 \
...@@ -276,14 +271,14 @@ setup_xfrm() ...@@ -276,14 +271,14 @@ setup_xfrm()
sel src ${h1_4} dst ${h2_4} sel src ${h1_4} dst ${h2_4}
ip -netns host1 xfrm state add src ${HOST2_4} dst ${HOST1_4} \ ip -netns $host1 xfrm state add src ${HOST2_4} dst ${HOST1_4} \
proto esp spi ${SPI_2} reqid 0 mode tunnel \ proto esp spi ${SPI_2} reqid 0 mode tunnel \
replay-window 4 replay-oseq 0x4 \ replay-window 4 replay-oseq 0x4 \
auth-trunc 'hmac(sha1)' ${AUTH_2} 96 \ auth-trunc 'hmac(sha1)' ${AUTH_2} 96 \
enc 'cbc(aes)' ${ENC_2} \ enc 'cbc(aes)' ${ENC_2} \
sel src ${h2_4} dst ${h1_4} ${devarg} sel src ${h2_4} dst ${h1_4} ${devarg}
ip -netns host2 xfrm state add src ${HOST2_4} dst ${HOST1_4} \ ip -netns $host2 xfrm state add src ${HOST2_4} dst ${HOST1_4} \
proto esp spi ${SPI_2} reqid 0 mode tunnel \ proto esp spi ${SPI_2} reqid 0 mode tunnel \
replay-window 4 replay-oseq 0x4 \ replay-window 4 replay-oseq 0x4 \
auth-trunc 'hmac(sha1)' ${AUTH_2} 96 \ auth-trunc 'hmac(sha1)' ${AUTH_2} 96 \
...@@ -291,14 +286,14 @@ setup_xfrm() ...@@ -291,14 +286,14 @@ setup_xfrm()
sel src ${h2_4} dst ${h1_4} sel src ${h2_4} dst ${h1_4}
ip -6 -netns host1 xfrm state add src ${HOST1_6} dst ${HOST2_6} \ ip -6 -netns $host1 xfrm state add src ${HOST1_6} dst ${HOST2_6} \
proto esp spi ${SPI_1} reqid 0 mode tunnel \ proto esp spi ${SPI_1} reqid 0 mode tunnel \
replay-window 4 replay-oseq 0x4 \ replay-window 4 replay-oseq 0x4 \
auth-trunc 'hmac(sha1)' ${AUTH_1} 96 \ auth-trunc 'hmac(sha1)' ${AUTH_1} 96 \
enc 'cbc(aes)' ${ENC_1} \ enc 'cbc(aes)' ${ENC_1} \
sel src ${h1_6} dst ${h2_6} ${devarg} sel src ${h1_6} dst ${h2_6} ${devarg}
ip -6 -netns host2 xfrm state add src ${HOST1_6} dst ${HOST2_6} \ ip -6 -netns $host2 xfrm state add src ${HOST1_6} dst ${HOST2_6} \
proto esp spi ${SPI_1} reqid 0 mode tunnel \ proto esp spi ${SPI_1} reqid 0 mode tunnel \
replay-window 4 replay-oseq 0x4 \ replay-window 4 replay-oseq 0x4 \
auth-trunc 'hmac(sha1)' ${AUTH_1} 96 \ auth-trunc 'hmac(sha1)' ${AUTH_1} 96 \
...@@ -306,14 +301,14 @@ setup_xfrm() ...@@ -306,14 +301,14 @@ setup_xfrm()
sel src ${h1_6} dst ${h2_6} sel src ${h1_6} dst ${h2_6}
ip -6 -netns host1 xfrm state add src ${HOST2_6} dst ${HOST1_6} \ ip -6 -netns $host1 xfrm state add src ${HOST2_6} dst ${HOST1_6} \
proto esp spi ${SPI_2} reqid 0 mode tunnel \ proto esp spi ${SPI_2} reqid 0 mode tunnel \
replay-window 4 replay-oseq 0x4 \ replay-window 4 replay-oseq 0x4 \
auth-trunc 'hmac(sha1)' ${AUTH_2} 96 \ auth-trunc 'hmac(sha1)' ${AUTH_2} 96 \
enc 'cbc(aes)' ${ENC_2} \ enc 'cbc(aes)' ${ENC_2} \
sel src ${h2_6} dst ${h1_6} ${devarg} sel src ${h2_6} dst ${h1_6} ${devarg}
ip -6 -netns host2 xfrm state add src ${HOST2_6} dst ${HOST1_6} \ ip -6 -netns $host2 xfrm state add src ${HOST2_6} dst ${HOST1_6} \
proto esp spi ${SPI_2} reqid 0 mode tunnel \ proto esp spi ${SPI_2} reqid 0 mode tunnel \
replay-window 4 replay-oseq 0x4 \ replay-window 4 replay-oseq 0x4 \
auth-trunc 'hmac(sha1)' ${AUTH_2} 96 \ auth-trunc 'hmac(sha1)' ${AUTH_2} 96 \
...@@ -323,22 +318,22 @@ setup_xfrm() ...@@ -323,22 +318,22 @@ setup_xfrm()
cleanup_xfrm_dev() cleanup_xfrm_dev()
{ {
ip -netns host1 li del xfrm0 ip -netns $host1 li del xfrm0
ip -netns host2 addr del ${XFRM2_4}/24 dev eth0 ip -netns $host2 addr del ${XFRM2_4}/24 dev eth0
ip -netns host2 addr del ${XFRM2_6}/64 dev eth0 ip -netns $host2 addr del ${XFRM2_6}/64 dev eth0
} }
setup_xfrm_dev() setup_xfrm_dev()
{ {
local vrfarg="vrf ${VRF}" local vrfarg="vrf ${VRF}"
ip -netns host1 li add type xfrm dev eth0 if_id ${IF_ID} ip -netns $host1 li add type xfrm dev eth0 if_id ${IF_ID}
ip -netns host1 li set xfrm0 ${vrfarg} up ip -netns $host1 li set xfrm0 ${vrfarg} up
ip -netns host1 addr add ${XFRM1_4}/24 dev xfrm0 ip -netns $host1 addr add ${XFRM1_4}/24 dev xfrm0
ip -netns host1 addr add ${XFRM1_6}/64 dev xfrm0 ip -netns $host1 addr add ${XFRM1_6}/64 dev xfrm0
ip -netns host2 addr add ${XFRM2_4}/24 dev eth0 ip -netns $host2 addr add ${XFRM2_4}/24 dev eth0
ip -netns host2 addr add ${XFRM2_6}/64 dev eth0 ip -netns $host2 addr add ${XFRM2_6}/64 dev eth0
setup_xfrm ${XFRM1_4} ${XFRM2_4} ${XFRM1_6} ${XFRM2_6} "if_id ${IF_ID}" setup_xfrm ${XFRM1_4} ${XFRM2_4} ${XFRM1_6} ${XFRM2_6} "if_id ${IF_ID}"
} }
......
...@@ -58,6 +58,7 @@ ...@@ -58,6 +58,7 @@
# to send an ICMP error back to the source when the ttl of a packet reaches 1 # to send an ICMP error back to the source when the ttl of a packet reaches 1
# while it is forwarded between different vrfs. # while it is forwarded between different vrfs.
source lib.sh
VERBOSE=0 VERBOSE=0
PAUSE_ON_FAIL=no PAUSE_ON_FAIL=no
DEFAULT_TTYPE=sym DEFAULT_TTYPE=sym
...@@ -171,11 +172,7 @@ run_cmd_grep() ...@@ -171,11 +172,7 @@ run_cmd_grep()
cleanup() cleanup()
{ {
local ns cleanup_ns $h1 $h2 $r1 $r2
for ns in h1 h2 r1 r2; do
ip netns del $ns 2>/dev/null
done
} }
setup_vrf() setup_vrf()
...@@ -212,72 +209,69 @@ setup_sym() ...@@ -212,72 +209,69 @@ setup_sym()
# #
# create nodes as namespaces # create nodes as namespaces
# setup_ns h1 h2 r1
for ns in h1 h2 r1; do for ns in $h1 $h2 $r1; do
ip netns add $ns if echo $ns | grep -q h[12]-; then
ip -netns $ns link set lo up ip netns exec $ns sysctl -q -w net.ipv6.conf.all.forwarding=0
case "${ns}" in
h[12]) ip netns exec $ns sysctl -q -w net.ipv6.conf.all.forwarding=0
ip netns exec $ns sysctl -q -w net.ipv6.conf.all.keep_addr_on_down=1 ip netns exec $ns sysctl -q -w net.ipv6.conf.all.keep_addr_on_down=1
;; else
r1) ip netns exec $ns sysctl -q -w net.ipv4.ip_forward=1 ip netns exec $ns sysctl -q -w net.ipv4.ip_forward=1
ip netns exec $ns sysctl -q -w net.ipv6.conf.all.forwarding=1 ip netns exec $ns sysctl -q -w net.ipv6.conf.all.forwarding=1
esac fi
done done
# #
# create interconnects # create interconnects
# #
ip -netns h1 link add eth0 type veth peer name r1h1 ip -netns $h1 link add eth0 type veth peer name r1h1
ip -netns h1 link set r1h1 netns r1 name eth0 up ip -netns $h1 link set r1h1 netns $r1 name eth0 up
ip -netns h2 link add eth0 type veth peer name r1h2 ip -netns $h2 link add eth0 type veth peer name r1h2
ip -netns h2 link set r1h2 netns r1 name eth1 up ip -netns $h2 link set r1h2 netns $r1 name eth1 up
# #
# h1 # h1
# #
ip -netns h1 addr add dev eth0 ${H1_N1_IP}/24 ip -netns $h1 addr add dev eth0 ${H1_N1_IP}/24
ip -netns h1 -6 addr add dev eth0 ${H1_N1_IP6}/64 nodad ip -netns $h1 -6 addr add dev eth0 ${H1_N1_IP6}/64 nodad
ip -netns h1 link set eth0 up ip -netns $h1 link set eth0 up
# h1 to h2 via r1 # h1 to h2 via r1
ip -netns h1 route add ${H2_N2} via ${R1_N1_IP} dev eth0 ip -netns $h1 route add ${H2_N2} via ${R1_N1_IP} dev eth0
ip -netns h1 -6 route add ${H2_N2_6} via "${R1_N1_IP6}" dev eth0 ip -netns $h1 -6 route add ${H2_N2_6} via "${R1_N1_IP6}" dev eth0
# #
# h2 # h2
# #
ip -netns h2 addr add dev eth0 ${H2_N2_IP}/24 ip -netns $h2 addr add dev eth0 ${H2_N2_IP}/24
ip -netns h2 -6 addr add dev eth0 ${H2_N2_IP6}/64 nodad ip -netns $h2 -6 addr add dev eth0 ${H2_N2_IP6}/64 nodad
ip -netns h2 link set eth0 up ip -netns $h2 link set eth0 up
# h2 to h1 via r1 # h2 to h1 via r1
ip -netns h2 route add default via ${R1_N2_IP} dev eth0 ip -netns $h2 route add default via ${R1_N2_IP} dev eth0
ip -netns h2 -6 route add default via ${R1_N2_IP6} dev eth0 ip -netns $h2 -6 route add default via ${R1_N2_IP6} dev eth0
# #
# r1 # r1
# #
setup_vrf r1 setup_vrf $r1
create_vrf r1 blue 1101 create_vrf $r1 blue 1101
create_vrf r1 red 1102 create_vrf $r1 red 1102
ip -netns r1 link set mtu 1400 dev eth1 ip -netns $r1 link set mtu 1400 dev eth1
ip -netns r1 link set eth0 vrf blue up ip -netns $r1 link set eth0 vrf blue up
ip -netns r1 link set eth1 vrf red up ip -netns $r1 link set eth1 vrf red up
ip -netns r1 addr add dev eth0 ${R1_N1_IP}/24 ip -netns $r1 addr add dev eth0 ${R1_N1_IP}/24
ip -netns r1 -6 addr add dev eth0 ${R1_N1_IP6}/64 nodad ip -netns $r1 -6 addr add dev eth0 ${R1_N1_IP6}/64 nodad
ip -netns r1 addr add dev eth1 ${R1_N2_IP}/24 ip -netns $r1 addr add dev eth1 ${R1_N2_IP}/24
ip -netns r1 -6 addr add dev eth1 ${R1_N2_IP6}/64 nodad ip -netns $r1 -6 addr add dev eth1 ${R1_N2_IP6}/64 nodad
# Route leak from blue to red # Route leak from blue to red
ip -netns r1 route add vrf blue ${H2_N2} dev red ip -netns $r1 route add vrf blue ${H2_N2} dev red
ip -netns r1 -6 route add vrf blue ${H2_N2_6} dev red ip -netns $r1 -6 route add vrf blue ${H2_N2_6} dev red
# Route leak from red to blue # Route leak from red to blue
ip -netns r1 route add vrf red ${H1_N1} dev blue ip -netns $r1 route add vrf red ${H1_N1} dev blue
ip -netns r1 -6 route add vrf red ${H1_N1_6} dev blue ip -netns $r1 -6 route add vrf red ${H1_N1_6} dev blue
# Wait for ip config to settle # Wait for ip config to settle
...@@ -293,90 +287,87 @@ setup_asym() ...@@ -293,90 +287,87 @@ setup_asym()
# #
# create nodes as namespaces # create nodes as namespaces
# setup_ns h1 h2 r1 r2
for ns in h1 h2 r1 r2; do for ns in $h1 $h2 $r1 $r2; do
ip netns add $ns if echo $ns | grep -q h[12]-; then
ip -netns $ns link set lo up ip netns exec $ns sysctl -q -w net.ipv6.conf.all.forwarding=0
case "${ns}" in
h[12]) ip netns exec $ns sysctl -q -w net.ipv6.conf.all.forwarding=0
ip netns exec $ns sysctl -q -w net.ipv6.conf.all.keep_addr_on_down=1 ip netns exec $ns sysctl -q -w net.ipv6.conf.all.keep_addr_on_down=1
;; else
r[12]) ip netns exec $ns sysctl -q -w net.ipv4.ip_forward=1 ip netns exec $ns sysctl -q -w net.ipv4.ip_forward=1
ip netns exec $ns sysctl -q -w net.ipv6.conf.all.forwarding=1 ip netns exec $ns sysctl -q -w net.ipv6.conf.all.forwarding=1
esac fi
done done
# #
# create interconnects # create interconnects
# #
ip -netns h1 link add eth0 type veth peer name r1h1 ip -netns $h1 link add eth0 type veth peer name r1h1
ip -netns h1 link set r1h1 netns r1 name eth0 up ip -netns $h1 link set r1h1 netns $r1 name eth0 up
ip -netns h1 link add eth1 type veth peer name r2h1 ip -netns $h1 link add eth1 type veth peer name r2h1
ip -netns h1 link set r2h1 netns r2 name eth0 up ip -netns $h1 link set r2h1 netns $r2 name eth0 up
ip -netns h2 link add eth0 type veth peer name r1h2 ip -netns $h2 link add eth0 type veth peer name r1h2
ip -netns h2 link set r1h2 netns r1 name eth1 up ip -netns $h2 link set r1h2 netns $r1 name eth1 up
ip -netns h2 link add eth1 type veth peer name r2h2 ip -netns $h2 link add eth1 type veth peer name r2h2
ip -netns h2 link set r2h2 netns r2 name eth1 up ip -netns $h2 link set r2h2 netns $r2 name eth1 up
# #
# h1 # h1
# #
ip -netns h1 link add br0 type bridge ip -netns $h1 link add br0 type bridge
ip -netns h1 link set br0 up ip -netns $h1 link set br0 up
ip -netns h1 addr add dev br0 ${H1_N1_IP}/24 ip -netns $h1 addr add dev br0 ${H1_N1_IP}/24
ip -netns h1 -6 addr add dev br0 ${H1_N1_IP6}/64 nodad ip -netns $h1 -6 addr add dev br0 ${H1_N1_IP6}/64 nodad
ip -netns h1 link set eth0 master br0 up ip -netns $h1 link set eth0 master br0 up
ip -netns h1 link set eth1 master br0 up ip -netns $h1 link set eth1 master br0 up
# h1 to h2 via r1 # h1 to h2 via r1
ip -netns h1 route add ${H2_N2} via ${R1_N1_IP} dev br0 ip -netns $h1 route add ${H2_N2} via ${R1_N1_IP} dev br0
ip -netns h1 -6 route add ${H2_N2_6} via "${R1_N1_IP6}" dev br0 ip -netns $h1 -6 route add ${H2_N2_6} via "${R1_N1_IP6}" dev br0
# #
# h2 # h2
# #
ip -netns h2 link add br0 type bridge ip -netns $h2 link add br0 type bridge
ip -netns h2 link set br0 up ip -netns $h2 link set br0 up
ip -netns h2 addr add dev br0 ${H2_N2_IP}/24 ip -netns $h2 addr add dev br0 ${H2_N2_IP}/24
ip -netns h2 -6 addr add dev br0 ${H2_N2_IP6}/64 nodad ip -netns $h2 -6 addr add dev br0 ${H2_N2_IP6}/64 nodad
ip -netns h2 link set eth0 master br0 up ip -netns $h2 link set eth0 master br0 up
ip -netns h2 link set eth1 master br0 up ip -netns $h2 link set eth1 master br0 up
# h2 to h1 via r2 # h2 to h1 via r2
ip -netns h2 route add default via ${R2_N2_IP} dev br0 ip -netns $h2 route add default via ${R2_N2_IP} dev br0
ip -netns h2 -6 route add default via ${R2_N2_IP6} dev br0 ip -netns $h2 -6 route add default via ${R2_N2_IP6} dev br0
# #
# r1 # r1
# #
setup_vrf r1 setup_vrf $r1
create_vrf r1 blue 1101 create_vrf $r1 blue 1101
create_vrf r1 red 1102 create_vrf $r1 red 1102
ip -netns r1 link set mtu 1400 dev eth1 ip -netns $r1 link set mtu 1400 dev eth1
ip -netns r1 link set eth0 vrf blue up ip -netns $r1 link set eth0 vrf blue up
ip -netns r1 link set eth1 vrf red up ip -netns $r1 link set eth1 vrf red up
ip -netns r1 addr add dev eth0 ${R1_N1_IP}/24 ip -netns $r1 addr add dev eth0 ${R1_N1_IP}/24
ip -netns r1 -6 addr add dev eth0 ${R1_N1_IP6}/64 nodad ip -netns $r1 -6 addr add dev eth0 ${R1_N1_IP6}/64 nodad
ip -netns r1 addr add dev eth1 ${R1_N2_IP}/24 ip -netns $r1 addr add dev eth1 ${R1_N2_IP}/24
ip -netns r1 -6 addr add dev eth1 ${R1_N2_IP6}/64 nodad ip -netns $r1 -6 addr add dev eth1 ${R1_N2_IP6}/64 nodad
# Route leak from blue to red # Route leak from blue to red
ip -netns r1 route add vrf blue ${H2_N2} dev red ip -netns $r1 route add vrf blue ${H2_N2} dev red
ip -netns r1 -6 route add vrf blue ${H2_N2_6} dev red ip -netns $r1 -6 route add vrf blue ${H2_N2_6} dev red
# No route leak from red to blue # No route leak from red to blue
# #
# r2 # r2
# #
ip -netns r2 addr add dev eth0 ${R2_N1_IP}/24 ip -netns $r2 addr add dev eth0 ${R2_N1_IP}/24
ip -netns r2 -6 addr add dev eth0 ${R2_N1_IP6}/64 nodad ip -netns $r2 -6 addr add dev eth0 ${R2_N1_IP6}/64 nodad
ip -netns r2 addr add dev eth1 ${R2_N2_IP}/24 ip -netns $r2 addr add dev eth1 ${R2_N2_IP}/24
ip -netns r2 -6 addr add dev eth1 ${R2_N2_IP6}/64 nodad ip -netns $r2 -6 addr add dev eth1 ${R2_N2_IP6}/64 nodad
# Wait for ip config to settle # Wait for ip config to settle
sleep 2 sleep 2
...@@ -384,14 +375,14 @@ setup_asym() ...@@ -384,14 +375,14 @@ setup_asym()
check_connectivity() check_connectivity()
{ {
ip netns exec h1 ping -c1 -w1 ${H2_N2_IP} >/dev/null 2>&1 ip netns exec $h1 ping -c1 -w1 ${H2_N2_IP} >/dev/null 2>&1
log_test $? 0 "Basic IPv4 connectivity" log_test $? 0 "Basic IPv4 connectivity"
return $? return $?
} }
check_connectivity6() check_connectivity6()
{ {
ip netns exec h1 "${ping6}" -c1 -w1 ${H2_N2_IP6} >/dev/null 2>&1 ip netns exec $h1 "${ping6}" -c1 -w1 ${H2_N2_IP6} >/dev/null 2>&1
log_test $? 0 "Basic IPv6 connectivity" log_test $? 0 "Basic IPv6 connectivity"
return $? return $?
} }
...@@ -426,7 +417,7 @@ ipv4_traceroute() ...@@ -426,7 +417,7 @@ ipv4_traceroute()
check_connectivity || return check_connectivity || return
run_cmd_grep "${R1_N1_IP}" ip netns exec h1 traceroute ${H2_N2_IP} run_cmd_grep "${R1_N1_IP}" ip netns exec $h1 traceroute ${H2_N2_IP}
log_test $? 0 "Traceroute reports a hop on r1" log_test $? 0 "Traceroute reports a hop on r1"
} }
...@@ -449,7 +440,7 @@ ipv6_traceroute() ...@@ -449,7 +440,7 @@ ipv6_traceroute()
check_connectivity6 || return check_connectivity6 || return
run_cmd_grep "${R1_N1_IP6}" ip netns exec h1 traceroute6 ${H2_N2_IP6} run_cmd_grep "${R1_N1_IP6}" ip netns exec $h1 traceroute6 ${H2_N2_IP6}
log_test $? 0 "Traceroute6 reports a hop on r1" log_test $? 0 "Traceroute6 reports a hop on r1"
} }
...@@ -470,7 +461,7 @@ ipv4_ping_ttl() ...@@ -470,7 +461,7 @@ ipv4_ping_ttl()
check_connectivity || return check_connectivity || return
run_cmd_grep "Time to live exceeded" ip netns exec h1 ping -t1 -c1 -W2 ${H2_N2_IP} run_cmd_grep "Time to live exceeded" ip netns exec $h1 ping -t1 -c1 -W2 ${H2_N2_IP}
log_test $? 0 "Ping received ICMP ttl exceeded" log_test $? 0 "Ping received ICMP ttl exceeded"
} }
...@@ -491,7 +482,7 @@ ipv4_ping_frag() ...@@ -491,7 +482,7 @@ ipv4_ping_frag()
check_connectivity || return check_connectivity || return
run_cmd_grep "Frag needed" ip netns exec h1 ping -s 1450 -Mdo -c1 -W2 ${H2_N2_IP} run_cmd_grep "Frag needed" ip netns exec $h1 ping -s 1450 -Mdo -c1 -W2 ${H2_N2_IP}
log_test $? 0 "Ping received ICMP Frag needed" log_test $? 0 "Ping received ICMP Frag needed"
} }
...@@ -512,7 +503,7 @@ ipv6_ping_ttl() ...@@ -512,7 +503,7 @@ ipv6_ping_ttl()
check_connectivity6 || return check_connectivity6 || return
run_cmd_grep "Time exceeded: Hop limit" ip netns exec h1 "${ping6}" -t1 -c1 -W2 ${H2_N2_IP6} run_cmd_grep "Time exceeded: Hop limit" ip netns exec $h1 "${ping6}" -t1 -c1 -W2 ${H2_N2_IP6}
log_test $? 0 "Ping received ICMP Hop limit" log_test $? 0 "Ping received ICMP Hop limit"
} }
...@@ -533,7 +524,7 @@ ipv6_ping_frag() ...@@ -533,7 +524,7 @@ ipv6_ping_frag()
check_connectivity6 || return check_connectivity6 || return
run_cmd_grep "Packet too big" ip netns exec h1 "${ping6}" -s 1450 -Mdo -c1 -W2 ${H2_N2_IP6} run_cmd_grep "Packet too big" ip netns exec $h1 "${ping6}" -s 1450 -Mdo -c1 -W2 ${H2_N2_IP6}
log_test $? 0 "Ping received ICMP Packet too big" log_test $? 0 "Ping received ICMP Packet too big"
} }
......
...@@ -3,9 +3,7 @@ ...@@ -3,9 +3,7 @@
# This test is designed for testing the new VRF strict_mode functionality. # This test is designed for testing the new VRF strict_mode functionality.
# Kselftest framework requirement - SKIP code is 4. source lib.sh
ksft_skip=4
ret=0 ret=0
# identifies the "init" network namespace which is often called root network # identifies the "init" network namespace which is often called root network
...@@ -247,13 +245,12 @@ setup() ...@@ -247,13 +245,12 @@ setup()
{ {
modprobe vrf modprobe vrf
ip netns add testns setup_ns testns
ip netns exec testns ip link set lo up
} }
cleanup() cleanup()
{ {
ip netns del testns 2>/dev/null ip netns del $testns 2>/dev/null
ip link del vrf100 2>/dev/null ip link del vrf100 2>/dev/null
ip link del vrf101 2>/dev/null ip link del vrf101 2>/dev/null
...@@ -298,28 +295,28 @@ vrf_strict_mode_tests_testns() ...@@ -298,28 +295,28 @@ vrf_strict_mode_tests_testns()
{ {
log_section "VRF strict_mode test on testns network namespace" log_section "VRF strict_mode test on testns network namespace"
vrf_strict_mode_check_support testns vrf_strict_mode_check_support $testns
strict_mode_check_default testns strict_mode_check_default $testns
enable_strict_mode_and_check testns enable_strict_mode_and_check $testns
add_vrf_and_check testns vrf100 100 add_vrf_and_check $testns vrf100 100
config_vrf_and_check testns 10.0.100.1/24 vrf100 config_vrf_and_check $testns 10.0.100.1/24 vrf100
add_vrf_and_check_fail testns vrf101 100 add_vrf_and_check_fail $testns vrf101 100
add_vrf_and_check_fail testns vrf102 100 add_vrf_and_check_fail $testns vrf102 100
add_vrf_and_check testns vrf200 200 add_vrf_and_check $testns vrf200 200
disable_strict_mode_and_check testns disable_strict_mode_and_check $testns
add_vrf_and_check testns vrf101 100 add_vrf_and_check $testns vrf101 100
add_vrf_and_check testns vrf102 100 add_vrf_and_check $testns vrf102 100
#the strict_mode is disabled in the testns #the strict_mode is disabled in the $testns
} }
vrf_strict_mode_tests_mix() vrf_strict_mode_tests_mix()
...@@ -328,25 +325,25 @@ vrf_strict_mode_tests_mix() ...@@ -328,25 +325,25 @@ vrf_strict_mode_tests_mix()
read_strict_mode_compare_and_check init 1 read_strict_mode_compare_and_check init 1
read_strict_mode_compare_and_check testns 0 read_strict_mode_compare_and_check $testns 0
del_vrf_and_check testns vrf101 del_vrf_and_check $testns vrf101
del_vrf_and_check testns vrf102 del_vrf_and_check $testns vrf102
disable_strict_mode_and_check init disable_strict_mode_and_check init
enable_strict_mode_and_check testns enable_strict_mode_and_check $testns
enable_strict_mode_and_check init enable_strict_mode_and_check init
enable_strict_mode_and_check init enable_strict_mode_and_check init
disable_strict_mode_and_check testns disable_strict_mode_and_check $testns
disable_strict_mode_and_check testns disable_strict_mode_and_check $testns
read_strict_mode_compare_and_check init 1 read_strict_mode_compare_and_check init 1
read_strict_mode_compare_and_check testns 0 read_strict_mode_compare_and_check $testns 0
} }
################################################################################ ################################################################################
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment