File Index
Files and directories
Sign in
FILE

bond_topo_2d1c.sh

File preview with syntax highlighting.

linux-6.19.14/tools/testing/selftests/drivers/net/bonding/bond_topo_2d1c.sh BASH
  1#!/bin/bash
  2# SPDX-License-Identifier: GPL-2.0
  3#
  4# Topology for Bond mode 1,5,6 testing
  5#
  6#  +-------------------------+
  7#  |          bond0          |  Server
  8#  |            +            |  192.0.2.1/24
  9#  |      eth0  |  eth1      |  2001:db8::1/24
 10#  |        +---+---+        |
 11#  |        |       |        |
 12#  +-------------------------+
 13#           |       |
 14#  +-------------------------+
 15#  |        |       |        |
 16#  |    +---+-------+---+    |  Gateway
 17#  |    |      br0      |    |  192.0.2.254/24
 18#  |    +-------+-------+    |  2001:db8::254/24
 19#  |            |            |
 20#  +-------------------------+
 21#               |
 22#  +-------------------------+
 23#  |            |            |  Client
 24#  |            +            |  192.0.2.10/24
 25#  |          eth0           |  2001:db8::10/24
 26#  +-------------------------+
 27
 28REQUIRE_MZ=no
 29NUM_NETIFS=0
 30lib_dir=$(dirname "$0")
 31source "$lib_dir"/../../../net/forwarding/lib.sh
 32
 33s_ns="s-$(mktemp -u XXXXXX)"
 34c_ns="c-$(mktemp -u XXXXXX)"
 35g_ns="g-$(mktemp -u XXXXXX)"
 36s_ip4="192.0.2.1"
 37c_ip4="192.0.2.10"
 38g_ip4="192.0.2.254"
 39s_ip6="2001:db8::1"
 40c_ip6="2001:db8::10"
 41g_ip6="2001:db8::254"
 42mac[0]="00:0a:0b:0c:0d:01"
 43mac[1]="00:0a:0b:0c:0d:02"
 44
 45gateway_create()
 46{
 47	ip netns add ${g_ns}
 48	ip -n ${g_ns} link add br0 type bridge
 49	ip -n ${g_ns} link set br0 up
 50	ip -n ${g_ns} addr add ${g_ip4}/24 dev br0
 51	ip -n ${g_ns} addr add ${g_ip6}/24 dev br0
 52}
 53
 54gateway_destroy()
 55{
 56	ip -n ${g_ns} link del br0
 57	ip netns del ${g_ns}
 58}
 59
 60server_create()
 61{
 62	ip netns add ${s_ns}
 63	ip -n ${s_ns} link add bond0 type bond mode active-backup miimon 100
 64
 65	for i in $(seq 0 1); do
 66		ip -n ${s_ns} link add eth${i} type veth peer name s${i} netns ${g_ns}
 67		ip -n "${s_ns}" link set "eth${i}" addr "${mac[$i]}"
 68
 69		ip -n ${g_ns} link set s${i} up
 70		ip -n ${g_ns} link set s${i} master br0
 71		ip -n ${s_ns} link set eth${i} master bond0
 72
 73		tc -n ${g_ns} qdisc add dev s${i} clsact
 74	done
 75
 76	ip -n ${s_ns} link set bond0 up
 77	ip -n ${s_ns} addr add ${s_ip4}/24 dev bond0
 78	ip -n ${s_ns} addr add ${s_ip6}/24 dev bond0
 79}
 80
 81# Reset bond with new mode and options
 82bond_reset()
 83{
 84	# Count the eth link number in real-time as this function
 85	# maybe called from other topologies.
 86	local link_num=$(ip -n ${s_ns} -br link show | grep -c "^eth")
 87	local param="$1"
 88	link_num=$((link_num -1))
 89
 90	ip -n ${s_ns} link set bond0 down
 91	ip -n ${s_ns} link del bond0
 92
 93	ip -n ${s_ns} link add bond0 type bond $param
 94	for i in $(seq 0 ${link_num}); do
 95		ip -n ${s_ns} link set eth$i master bond0
 96	done
 97
 98	ip -n ${s_ns} link set bond0 up
 99	ip -n ${s_ns} addr add ${s_ip4}/24 dev bond0
100	ip -n ${s_ns} addr add ${s_ip6}/24 dev bond0
101	# Wait for IPv6 address ready as it needs DAD
102	slowwait 2 ip netns exec ${s_ns} ping6 ${c_ip6} -c 1 -W 0.1 &> /dev/null
103}
104
105server_destroy()
106{
107	# Count the eth link number in real-time as this function
108	# maybe called from other topologies.
109	local link_num=$(ip -n ${s_ns} -br link show | grep -c "^eth")
110	link_num=$((link_num -1))
111	for i in $(seq 0 ${link_num}); do
112		ip -n ${s_ns} link del eth${i}
113	done
114	ip netns del ${s_ns}
115}
116
117client_create()
118{
119	ip netns add ${c_ns}
120	ip -n ${c_ns} link add eth0 type veth peer name c0 netns ${g_ns}
121
122	ip -n ${g_ns} link set c0 up
123	ip -n ${g_ns} link set c0 master br0
124
125	ip -n ${c_ns} link set eth0 up
126	ip -n ${c_ns} addr add ${c_ip4}/24 dev eth0
127	ip -n ${c_ns} addr add ${c_ip6}/24 dev eth0
128}
129
130client_destroy()
131{
132	ip -n ${c_ns} link del eth0
133	ip netns del ${c_ns}
134}
135
136setup_prepare()
137{
138	gateway_create
139	server_create
140	client_create
141}
142
143cleanup()
144{
145	pre_cleanup
146
147	client_destroy
148	server_destroy
149	gateway_destroy
150}
151
152bond_check_connection()
153{
154	local msg=${1:-"check connection"}
155
156	slowwait 2 ip netns exec ${s_ns} ping ${c_ip4} -c 1 -W 0.1 &> /dev/null
157	ip netns exec ${s_ns} ping ${c_ip4} -c5 -i 0.1 &>/dev/null
158	check_err $? "${msg}: ping failed"
159	ip netns exec ${s_ns} ping6 ${c_ip6} -c5 -i 0.1 &>/dev/null
160	check_err $? "${msg}: ping6 failed"
161}
~/ Read-only file preview.