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 28 REQUIRE_MZ=no 29 NUM_NETIFS=0 30 lib_dir=$(dirname "$0") 31 source "$lib_dir"/../../../net/forwarding/lib.sh 32 33 s_ns="s-$(mktemp -u XXXXXX)" 34 c_ns="c-$(mktemp -u XXXXXX)" 35 g_ns="g-$(mktemp -u XXXXXX)" 36 s_ip4="192.0.2.1" 37 c_ip4="192.0.2.10" 38 g_ip4="192.0.2.254" 39 s_ip6="2001:db8::1" 40 c_ip6="2001:db8::10" 41 g_ip6="2001:db8::254" 42 43 gateway_create() 44 { 45 ip netns add ${g_ns} 46 ip -n ${g_ns} link add br0 type bridge 47 ip -n ${g_ns} link set br0 up 48 ip -n ${g_ns} addr add ${g_ip4}/24 dev br0 49 ip -n ${g_ns} addr add ${g_ip6}/24 dev br0 50 } 51 52 gateway_destroy() 53 { 54 ip -n ${g_ns} link del br0 55 ip netns del ${g_ns} 56 } 57 58 server_create() 59 { 60 ip netns add ${s_ns} 61 ip -n ${s_ns} link add bond0 type bond mode active-backup miimon 100 62 63 for i in $(seq 0 1); do 64 ip -n ${s_ns} link add eth${i} type veth peer name s${i} netns ${g_ns} 65 66 ip -n ${g_ns} link set s${i} up 67 ip -n ${g_ns} link set s${i} master br0 68 ip -n ${s_ns} link set eth${i} master bond0 69 70 tc -n ${g_ns} qdisc add dev s${i} clsact 71 done 72 73 ip -n ${s_ns} link set bond0 up 74 ip -n ${s_ns} addr add ${s_ip4}/24 dev bond0 75 ip -n ${s_ns} addr add ${s_ip6}/24 dev bond0 76 } 77 78 # Reset bond with new mode and options 79 bond_reset() 80 { 81 # Count the eth link number in real-time as this function 82 # maybe called from other topologies. 83 local link_num=$(ip -n ${s_ns} -br link show | grep -c "^eth") 84 local param="$1" 85 link_num=$((link_num -1)) 86 87 ip -n ${s_ns} link set bond0 down 88 ip -n ${s_ns} link del bond0 89 90 ip -n ${s_ns} link add bond0 type bond $param 91 for i in $(seq 0 ${link_num}); do 92 ip -n ${s_ns} link set eth$i master bond0 93 done 94 95 ip -n ${s_ns} link set bond0 up 96 ip -n ${s_ns} addr add ${s_ip4}/24 dev bond0 97 ip -n ${s_ns} addr add ${s_ip6}/24 dev bond0 98 # Wait for IPv6 address ready as it needs DAD 99 slowwait 2 ip netns exec ${s_ns} ping6 ${c_ip6} -c 1 -W 0.1 &> /dev/null 100 } 101 102 server_destroy() 103 { 104 # Count the eth link number in real-time as this function 105 # maybe called from other topologies. 106 local link_num=$(ip -n ${s_ns} -br link show | grep -c "^eth") 107 link_num=$((link_num -1)) 108 for i in $(seq 0 ${link_num}); do 109 ip -n ${s_ns} link del eth${i} 110 done 111 ip netns del ${s_ns} 112 } 113 114 client_create() 115 { 116 ip netns add ${c_ns} 117 ip -n ${c_ns} link add eth0 type veth peer name c0 netns ${g_ns} 118 119 ip -n ${g_ns} link set c0 up 120 ip -n ${g_ns} link set c0 master br0 121 122 ip -n ${c_ns} link set eth0 up 123 ip -n ${c_ns} addr add ${c_ip4}/24 dev eth0 124 ip -n ${c_ns} addr add ${c_ip6}/24 dev eth0 125 } 126 127 client_destroy() 128 { 129 ip -n ${c_ns} link del eth0 130 ip netns del ${c_ns} 131 } 132 133 setup_prepare() 134 { 135 gateway_create 136 server_create 137 client_create 138 } 139 140 cleanup() 141 { 142 pre_cleanup 143 144 client_destroy 145 server_destroy 146 gateway_destroy 147 } 148 149 bond_check_connection() 150 { 151 local msg=${1:-"check connection"} 152 153 slowwait 2 ip netns exec ${s_ns} ping ${c_ip4} -c 1 -W 0.1 &> /dev/null 154 ip netns exec ${s_ns} ping ${c_ip4} -c5 -i 0.1 &>/dev/null 155 check_err $? "${msg}: ping failed" 156 ip netns exec ${s_ns} ping6 ${c_ip6} -c5 -i 0.1 &>/dev/null 157 check_err $? "${msg}: ping6 failed" 158 }
Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.