Linux kernel mirror (for testing)
git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel
os
linux
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}