159 lines · bash
1#!/bin/bash2# SPDX-License-Identifier: GPL-2.03#4# Topology for Bond mode 1,5,6 testing5#6# +-------------------------+7# | bond0 | Server8# | + | 192.0.2.1/249# | eth0 | eth1 | 2001:db8::1/2410# | +---+---+ |11# | | | |12# +-------------------------+13# | |14# +-------------------------+15# | | | |16# | +---+-------+---+ | Gateway17# | | br0 | | 192.0.2.254/2418# | +-------+-------+ | 2001:db8::254/2419# | | |20# +-------------------------+21# |22# +-------------------------+23# | | | Client24# | + | 192.0.2.10/2425# | eth0 | 2001:db8::10/2426# +-------------------------+27 28REQUIRE_MZ=no29NUM_NETIFS=030lib_dir=$(dirname "$0")31source "$lib_dir"/../../../net/forwarding/lib.sh32 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"42 43gateway_create()44{45 ip netns add ${g_ns}46 ip -n ${g_ns} link add br0 type bridge47 ip -n ${g_ns} link set br0 up48 ip -n ${g_ns} addr add ${g_ip4}/24 dev br049 ip -n ${g_ns} addr add ${g_ip6}/24 dev br050}51 52gateway_destroy()53{54 ip -n ${g_ns} link del br055 ip netns del ${g_ns}56}57 58server_create()59{60 ip netns add ${s_ns}61 ip -n ${s_ns} link add bond0 type bond mode active-backup miimon 10062 63 for i in $(seq 0 1); do64 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} up67 ip -n ${g_ns} link set s${i} master br068 ip -n ${s_ns} link set eth${i} master bond069 70 tc -n ${g_ns} qdisc add dev s${i} clsact71 done72 73 ip -n ${s_ns} link set bond0 up74 ip -n ${s_ns} addr add ${s_ip4}/24 dev bond075 ip -n ${s_ns} addr add ${s_ip6}/24 dev bond076}77 78# Reset bond with new mode and options79bond_reset()80{81 # Count the eth link number in real-time as this function82 # 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 down88 ip -n ${s_ns} link del bond089 90 ip -n ${s_ns} link add bond0 type bond $param91 for i in $(seq 0 ${link_num}); do92 ip -n ${s_ns} link set eth$i master bond093 done94 95 ip -n ${s_ns} link set bond0 up96 ip -n ${s_ns} addr add ${s_ip4}/24 dev bond097 ip -n ${s_ns} addr add ${s_ip6}/24 dev bond098 # Wait for IPv6 address ready as it needs DAD99 slowwait 2 ip netns exec ${s_ns} ping6 ${c_ip6} -c 1 -W 0.1 &> /dev/null100}101 102server_destroy()103{104 # Count the eth link number in real-time as this function105 # 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}); do109 ip -n ${s_ns} link del eth${i}110 done111 ip netns del ${s_ns}112}113 114client_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 up120 ip -n ${g_ns} link set c0 master br0121 122 ip -n ${c_ns} link set eth0 up123 ip -n ${c_ns} addr add ${c_ip4}/24 dev eth0124 ip -n ${c_ns} addr add ${c_ip6}/24 dev eth0125}126 127client_destroy()128{129 ip -n ${c_ns} link del eth0130 ip netns del ${c_ns}131}132 133setup_prepare()134{135 gateway_create136 server_create137 client_create138}139 140cleanup()141{142 pre_cleanup143 144 client_destroy145 server_destroy146 gateway_destroy147}148 149bond_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/null154 ip netns exec ${s_ns} ping ${c_ip4} -c5 -i 0.1 &>/dev/null155 check_err $? "${msg}: ping failed"156 ip netns exec ${s_ns} ping6 ${c_ip6} -c5 -i 0.1 &>/dev/null157 check_err $? "${msg}: ping6 failed"158}159