1#!/bin/bash 2# SPDX-License-Identifier: GPL-2.0 3# 4# Topology for Bond mode 1,5,6 testing 5# 6# +-------------------------------------+ 7# | bond0 | 8# | + | Server 9# | eth0 | eth1 eth2 | 192.0.2.1/24 10# | +-------------------+ | 2001:db8::1/24 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 28s_ns="s-$(mktemp -u XXXXXX)" 29c_ns="c-$(mktemp -u XXXXXX)" 30g_ns="g-$(mktemp -u XXXXXX)" 31s_ip4="192.0.2.1" 32c_ip4="192.0.2.10" 33g_ip4="192.0.2.254" 34s_ip6="2001:db8::1" 35c_ip6="2001:db8::10" 36g_ip6="2001:db8::254" 37 38gateway_create() 39{ 40 ip netns add ${g_ns} 41 ip -n ${g_ns} link add br0 type bridge 42 ip -n ${g_ns} link set br0 up 43 ip -n ${g_ns} addr add ${g_ip4}/24 dev br0 44 ip -n ${g_ns} addr add ${g_ip6}/24 dev br0 45} 46 47gateway_destroy() 48{ 49 ip -n ${g_ns} link del br0 50 ip netns del ${g_ns} 51} 52 53server_create() 54{ 55 ip netns add ${s_ns} 56 ip -n ${s_ns} link add bond0 type bond mode active-backup miimon 100 57 58 for i in $(seq 0 2); do 59 ip -n ${s_ns} link add eth${i} type veth peer name s${i} netns ${g_ns} 60 61 ip -n ${g_ns} link set s${i} up 62 ip -n ${g_ns} link set s${i} master br0 63 ip -n ${s_ns} link set eth${i} master bond0 64 done 65 66 ip -n ${s_ns} link set bond0 up 67 ip -n ${s_ns} addr add ${s_ip4}/24 dev bond0 68 ip -n ${s_ns} addr add ${s_ip6}/24 dev bond0 69 sleep 2 70} 71 72# Reset bond with new mode and options 73bond_reset() 74{ 75 local param="$1" 76 77 ip -n ${s_ns} link set bond0 down 78 ip -n ${s_ns} link del bond0 79 80 ip -n ${s_ns} link add bond0 type bond $param 81 for i in $(seq 0 2); do 82 ip -n ${s_ns} link set eth$i master bond0 83 done 84 85 ip -n ${s_ns} link set bond0 up 86 ip -n ${s_ns} addr add ${s_ip4}/24 dev bond0 87 ip -n ${s_ns} addr add ${s_ip6}/24 dev bond0 88 sleep 2 89} 90 91server_destroy() 92{ 93 for i in $(seq 0 2); do 94 ip -n ${s_ns} link del eth${i} 95 done 96 ip netns del ${s_ns} 97} 98 99client_create() 100{ 101 ip netns add ${c_ns} 102 ip -n ${c_ns} link add eth0 type veth peer name c0 netns ${g_ns} 103 104 ip -n ${g_ns} link set c0 up 105 ip -n ${g_ns} link set c0 master br0 106 107 ip -n ${c_ns} link set eth0 up 108 ip -n ${c_ns} addr add ${c_ip4}/24 dev eth0 109 ip -n ${c_ns} addr add ${c_ip6}/24 dev eth0 110} 111 112client_destroy() 113{ 114 ip -n ${c_ns} link del eth0 115 ip netns del ${c_ns} 116} 117 118setup_prepare() 119{ 120 gateway_create 121 server_create 122 client_create 123} 124 125cleanup() 126{ 127 pre_cleanup 128 129 client_destroy 130 server_destroy 131 gateway_destroy 132} 133 134bond_check_connection() 135{ 136 local msg=${1:-"check connection"} 137 138 sleep 2 139 ip netns exec ${s_ns} ping ${c_ip4} -c5 -i 0.1 &>/dev/null 140 check_err $? "${msg}: ping failed" 141 ip netns exec ${s_ns} ping6 ${c_ip6} -c5 -i 0.1 &>/dev/null 142 check_err $? "${msg}: ping6 failed" 143} 144