xref: /linux/tools/testing/selftests/drivers/net/bonding/bond_macvlan_ipvlan.sh (revision d30c1683aaecb93d2ab95685dc4300a33d3cea7a)
1#!/bin/bash
2# SPDX-License-Identifier: GPL-2.0
3#
4# Test macvlan/ipvlan over bond
5
6lib_dir=$(dirname "$0")
7source ${lib_dir}/bond_topo_2d1c.sh
8
9xvlan1_ns="xvlan1-$(mktemp -u XXXXXX)"
10xvlan2_ns="xvlan2-$(mktemp -u XXXXXX)"
11xvlan1_ip4="192.0.2.11"
12xvlan1_ip6="2001:db8::11"
13xvlan2_ip4="192.0.2.12"
14xvlan2_ip6="2001:db8::12"
15
16cleanup()
17{
18	client_destroy
19	server_destroy
20	gateway_destroy
21
22	ip netns del ${xvlan1_ns}
23	ip netns del ${xvlan2_ns}
24}
25
26check_connection()
27{
28	local ns=${1}
29	local target=${2}
30	local message=${3}
31	RET=0
32
33	sleep 0.25
34	ip netns exec ${ns} ping ${target} -c 4 -i 0.1 &>/dev/null
35	check_err $? "ping failed"
36	log_test "${bond_mode}/${xvlan_type}_${xvlan_mode}: ${message}"
37}
38
39xvlan_over_bond()
40{
41	local param="$1"
42	local xvlan_type="$2"
43	local xvlan_mode="$3"
44	RET=0
45
46	# setup new bond mode
47	bond_reset "${param}"
48
49	ip -n ${s_ns} link add link bond0 name ${xvlan_type}0 type ${xvlan_type} mode ${xvlan_mode}
50	ip -n ${s_ns} link set ${xvlan_type}0 netns ${xvlan1_ns}
51	ip -n ${xvlan1_ns} link set dev ${xvlan_type}0 up
52	ip -n ${xvlan1_ns} addr add ${xvlan1_ip4}/24 dev ${xvlan_type}0
53	ip -n ${xvlan1_ns} addr add ${xvlan1_ip6}/24 dev ${xvlan_type}0
54
55	ip -n ${s_ns} link add link bond0 name ${xvlan_type}0 type ${xvlan_type} mode ${xvlan_mode}
56	ip -n ${s_ns} link set ${xvlan_type}0 netns ${xvlan2_ns}
57	ip -n ${xvlan2_ns} link set dev ${xvlan_type}0 up
58	ip -n ${xvlan2_ns} addr add ${xvlan2_ip4}/24 dev ${xvlan_type}0
59	ip -n ${xvlan2_ns} addr add ${xvlan2_ip6}/24 dev ${xvlan_type}0
60
61	sleep 2
62
63	check_connection "${c_ns}" "${s_ip4}" "IPv4: client->server"
64	check_connection "${c_ns}" "${s_ip6}" "IPv6: client->server"
65	check_connection "${c_ns}" "${xvlan1_ip4}" "IPv4: client->${xvlan_type}_1"
66	check_connection "${c_ns}" "${xvlan1_ip6}" "IPv6: client->${xvlan_type}_1"
67	check_connection "${c_ns}" "${xvlan2_ip4}" "IPv4: client->${xvlan_type}_2"
68	check_connection "${c_ns}" "${xvlan2_ip6}" "IPv6: client->${xvlan_type}_2"
69	check_connection "${xvlan1_ns}" "${xvlan2_ip4}" "IPv4: ${xvlan_type}_1->${xvlan_type}_2"
70	check_connection "${xvlan1_ns}" "${xvlan2_ip6}" "IPv6: ${xvlan_type}_1->${xvlan_type}_2"
71
72	check_connection "${s_ns}" "${c_ip4}" "IPv4: server->client"
73	check_connection "${s_ns}" "${c_ip6}" "IPv6: server->client"
74	check_connection "${xvlan1_ns}" "${c_ip4}" "IPv4: ${xvlan_type}_1->client"
75	check_connection "${xvlan1_ns}" "${c_ip6}" "IPv6: ${xvlan_type}_1->client"
76	check_connection "${xvlan2_ns}" "${c_ip4}" "IPv4: ${xvlan_type}_2->client"
77	check_connection "${xvlan2_ns}" "${c_ip6}" "IPv6: ${xvlan_type}_2->client"
78	check_connection "${xvlan2_ns}" "${xvlan1_ip4}" "IPv4: ${xvlan_type}_2->${xvlan_type}_1"
79	check_connection "${xvlan2_ns}" "${xvlan1_ip6}" "IPv6: ${xvlan_type}_2->${xvlan_type}_1"
80
81	ip -n ${c_ns} neigh flush dev eth0
82}
83
84trap cleanup EXIT
85
86setup_prepare
87ip netns add ${xvlan1_ns}
88ip netns add ${xvlan2_ns}
89
90bond_modes="active-backup balance-tlb balance-alb"
91
92for bond_mode in ${bond_modes}; do
93	xvlan_over_bond "mode ${bond_mode}" macvlan bridge
94	xvlan_over_bond "mode ${bond_mode}" ipvlan  l2
95done
96
97exit $EXIT_STATUS
98