mirror of
https://github.com/kernelkit/infix.git
synced 2026-07-30 04:33:00 +02:00
src/net: new test, basic bridge
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
This commit is contained in:
committed by
Tobias Waldekranz
parent
a26dd9c19f
commit
e6834c5db6
@@ -4,5 +4,6 @@ pkgdata_DATA = $(EXTRA_DIST)
|
||||
TEST_EXTENSIONS = .sh
|
||||
TESTS_ENVIRONMENT = unshare -mrun
|
||||
TESTS = three-independent.sh
|
||||
TESTS += bridge.sh
|
||||
|
||||
CLEANFILES = *~ *.trs *.log
|
||||
|
||||
Executable
+49
@@ -0,0 +1,49 @@
|
||||
#!/bin/sh
|
||||
# - Basic bridge with three bridge ports
|
||||
# - Add another port
|
||||
# - Remove a port
|
||||
|
||||
TEST_DIR=$(dirname "$0")
|
||||
. "$TEST_DIR/lib.sh"
|
||||
|
||||
################################################
|
||||
say "Verify bringup of basic bridge with three ports"
|
||||
create_iface eth0
|
||||
create_iface eth1
|
||||
create_iface eth2
|
||||
create_bridge br0 eth0 eth1 eth2
|
||||
|
||||
netdo
|
||||
|
||||
assert_bridge_ports br0 true eth0 eth1 eth2
|
||||
assert_iface br0
|
||||
|
||||
################################################
|
||||
sep
|
||||
say "Verify add another bridge port"
|
||||
create_ng
|
||||
|
||||
create_iface br0
|
||||
create_iface eth3
|
||||
add_brport br0 eth3
|
||||
|
||||
netdo
|
||||
|
||||
assert_bridge_ports br0 true eth0 eth1 eth2 eth3
|
||||
assert_iface br0
|
||||
|
||||
################################################
|
||||
sep
|
||||
say "Verify delete a bridge port"
|
||||
del_brport br0 eth1
|
||||
create_ng
|
||||
|
||||
create_iface br0
|
||||
create_iface eth1
|
||||
|
||||
netdo
|
||||
|
||||
bridge link
|
||||
assert_bridge_ports br0 true eth0 eth2 eth3
|
||||
assert_bridge_ports br0 false eth1
|
||||
assert_iface br0
|
||||
+94
-2
@@ -20,6 +20,12 @@ export NET_DIR
|
||||
gen=-1
|
||||
|
||||
NET=$(command -v net)
|
||||
if [ -n "$NET" ]; then
|
||||
# Verify we didn't find Samba net command, our net live in sbin
|
||||
if [ "$(dirname "$NET")" = "/usr/bin" ]; then
|
||||
NET=""
|
||||
fi
|
||||
fi
|
||||
[ -n "$NET" ] || NET=../src/net
|
||||
|
||||
# Exit immediately on error, treat unset variables as error
|
||||
@@ -175,6 +181,61 @@ create_iface()
|
||||
echo "up" > "$ifdir/admin-state"
|
||||
}
|
||||
|
||||
add_brport()
|
||||
{
|
||||
brname=$1
|
||||
brdir="$NET_DIR/$gen/$brname"
|
||||
shift
|
||||
# shellcheck disable=SC2124
|
||||
brports=$@
|
||||
|
||||
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
|
||||
link set $port master $brname
|
||||
link set $port up
|
||||
EOF
|
||||
done
|
||||
}
|
||||
|
||||
del_brport()
|
||||
{
|
||||
brname=$1
|
||||
brdir="$NET_DIR/$gen/$brname"
|
||||
shift
|
||||
# shellcheck disable=SC2124
|
||||
brports=$@
|
||||
|
||||
for port in $brports; do
|
||||
cat <<-EOF >"$pdir/exit.ip"
|
||||
link set $port nomaster
|
||||
EOF
|
||||
done
|
||||
}
|
||||
|
||||
create_bridge()
|
||||
{
|
||||
brname=$1
|
||||
brdir="$NET_DIR/$gen/$brname"
|
||||
shift
|
||||
# shellcheck disable=SC2124
|
||||
brports=$@
|
||||
|
||||
create_iface "$brname"
|
||||
cat <<-EOF > "$brdir/init.ip"
|
||||
link add $brname type bridge
|
||||
link set $brname up
|
||||
EOF
|
||||
|
||||
# shellcheck disable=SC2086
|
||||
add_brport "$brname" $brports
|
||||
}
|
||||
|
||||
remove_iface()
|
||||
{
|
||||
ifname=$1
|
||||
@@ -187,7 +248,11 @@ EOF
|
||||
assert_iface()
|
||||
{
|
||||
ifname=$1
|
||||
address=$2
|
||||
if [ $# -gt 1 ]; then
|
||||
address=$2
|
||||
else
|
||||
address=""
|
||||
fi
|
||||
state=$(tr '[:lower:]' '[:upper:]' < "$NET_DIR/$gen/$ifname/admin-state")
|
||||
|
||||
addr=$(ip -br -j addr show "$ifname" | jq -r '.[] | .addr_info[0].local')
|
||||
@@ -197,7 +262,9 @@ assert_iface()
|
||||
|
||||
# echo "$state => $ifname: $updn $addr"
|
||||
assert "Verify $ifname state $state" "$state" = "$updn"
|
||||
assert "Verify $ifname address $address" "$address" = "$addr"
|
||||
if [ -n "$address" ]; then
|
||||
assert "Verify $ifname address $address" "$address" = "$addr"
|
||||
fi
|
||||
}
|
||||
|
||||
assert_noiface()
|
||||
@@ -234,4 +301,29 @@ assert_iface_flag()
|
||||
assert "$msg" "$found" = "$val"
|
||||
}
|
||||
|
||||
assert_bridge_ports()
|
||||
{
|
||||
br="$1"
|
||||
val="$2"
|
||||
shift 2
|
||||
# shellcheck disable=SC2124
|
||||
ports=$@
|
||||
|
||||
for port in $ports; do
|
||||
found=false
|
||||
for brport in $(bridge -j link |jq -r --arg br "$br" '.[] | select(.master == $br).ifname'); do
|
||||
if [ "$port" = "$brport" ]; then
|
||||
found=true
|
||||
break;
|
||||
fi
|
||||
done
|
||||
if [ "$val" = "false" ]; then
|
||||
not="NOT "
|
||||
else
|
||||
not=""
|
||||
fi
|
||||
assert "Port $port is ${not}a $br bridge port" "$found" = "$val"
|
||||
done
|
||||
}
|
||||
|
||||
setup
|
||||
|
||||
Reference in New Issue
Block a user