From 7945207989f961568b72ed4fb68a23778324fa71 Mon Sep 17 00:00:00 2001 From: Joachim Wiberg Date: Wed, 19 Apr 2023 11:35:25 +0200 Subject: [PATCH] src/net: fix interface creation/attach order in generation generator The net tool traverses the graph and executes the scripts et al in postorder, i.e., all leaves are evaluated first before the parent's script is run. Hence, attaching ports to a bridge or link aggregate is the responsibility of the parent, not the leaves. Signed-off-by: Joachim Wiberg --- src/net/test/lib.sh | 41 +++++++++++++++++++++++------------------ 1 file changed, 23 insertions(+), 18 deletions(-) diff --git a/src/net/test/lib.sh b/src/net/test/lib.sh index 30b8f24b..9f7a6c06 100755 --- a/src/net/test/lib.sh +++ b/src/net/test/lib.sh @@ -170,10 +170,11 @@ create_iface() fi mkdir -p "$ifdir/deps" - touch "$ifdir/init.ip" + if [ ! -f "$ifdir/init.ip" ]; then + echo "link add $ifname type dummy" > "$ifdir/init.ip" + fi if [ -n "$address" ]; then - cat <<-EOF >"$ifdir/init.ip" - link add $ifname type dummy + cat <<-EOF >>"$ifdir/init.ip" addr add $address dev $ifname link set $ifname up EOF @@ -181,59 +182,63 @@ create_iface() echo "up" > "$ifdir/admin-state" } +# shellcheck disable=SC2124 add_brport() { brname=$1 - brdir="$NET_DIR/$gen/$brname" shift - # shellcheck disable=SC2124 brports=$@ + brdir="$NET_DIR/$gen/$brname" mkdir -p "$brdir/deps" for port in $brports; do - pdir="$NET_DIR/$gen/$port" ln -s "../../$port" "$brdir/deps/$port" create_iface "$port" - cat <<-EOF >"$pdir/init.ip" - link add $port type dummy + cat <<-EOF >> "$brdir/init.ip" + # Attaching port $port to bridge $brname link set $port master $brname link set $port up EOF done } +# shellcheck disable=SC2124 del_brport() { brname=$1 - brdir="$NET_DIR/$gen/$brname" shift - # shellcheck disable=SC2124 brports=$@ + brdir="$NET_DIR/$gen/$brname" for port in $brports; do - cat <<-EOF >"$pdir/exit.ip" + cat <<-EOF >"$brdir/exit.ip" link set $port nomaster EOF done } +# shellcheck disable=SC2124,SC2086 create_bridge() { brname=$1 - brdir="$NET_DIR/$gen/$brname" - shift - # shellcheck disable=SC2124 + bropts=$2 + shift 2 brports=$@ + brdir="$NET_DIR/$gen/$brname" - create_iface "$brname" + mkdir -p "$brdir/deps" cat <<-EOF > "$brdir/init.ip" - link add $brname type bridge + link add $brname type bridge $bropts + EOF + + add_brport "$brname" $brports + cat <<-EOF >> "$brdir/init.ip" link set $brname up EOF - # shellcheck disable=SC2086 - add_brport "$brname" $brports + echo "up" > "$brdir/admin-state" +} } remove_iface()