summary refs log tree commit diff
path: root/contrib/scripts/test-create-many-device-setup.sh
diff options
context:
space:
mode:
authorMichael Biebl <biebl@debian.org>2024-05-05 00:07:30 +0200
committerMichael Biebl <biebl@debian.org>2024-05-05 00:07:30 +0200
commit34bb501be08aa2b313d88e67d6e0a7e0a3f9cfa6 (patch)
tree4e6220877828be4c6f261de09ec0cb2d80e32389 /contrib/scripts/test-create-many-device-setup.sh
parentbba2e4b4de668db525cbfdfc35292e5a0b51671a (diff)
New upstream version 1.47.90 upstream/1.47.90
Diffstat (limited to 'contrib/scripts/test-create-many-device-setup.sh')
-rwxr-xr-xcontrib/scripts/test-create-many-device-setup.sh136
1 files changed, 136 insertions, 0 deletions
diff --git a/contrib/scripts/test-create-many-device-setup.sh b/contrib/scripts/test-create-many-device-setup.sh
new file mode 100755
index 00000000..55f2a1c6
--- /dev/null
+++ b/contrib/scripts/test-create-many-device-setup.sh
@@ -0,0 +1,136 @@
+#!/bin/bash
+
+set -x
+
+die() {
+    printf '%s\n' "$*" >&1
+    exit 1
+}
+
+ARG_OP="$1"
+shift
+test -n "$ARG_OP" || die "specify the operation (setup, cleanup)"
+
+test "$USER" = root || die "must run as root"
+
+NUM_DEVS="${NUM_DEVS:-50}"
+NUM_VLAN_DEVS="${NUM_VLAN_DEVS:-0}"
+
+
+DNSMASQ_PIDFILE="/tmp/nm-test-create-many-device-setup.dnsmasq.pid"
+NM_TEST_CONF="/etc/NetworkManager/conf.d/99-my-test.conf"
+TEST_NETNS="T"
+
+
+_do_service() {
+    test "$DO_SERVICE" = 1 || return 0
+    "$@"
+}
+
+_dnsmasq_kill() {
+    pkill -F "$DNSMASQ_PIDFILE"
+    rm -rf "$DNSMASQ_PIDFILE"
+}
+
+_link_delete_all() {
+    ip link | sed -n 's/^[0-9]\+:.*\(t-[^@:]\+\)@.*/\1/p' | xargs -n 1 ip link delete
+}
+
+cleanup_base() {
+    ip netns delete "$TEST_NETNS"
+    _dnsmasq_kill
+    _link_delete_all
+    rm -rf "$NM_TEST_CONF"
+    rm -rf /run/NetworkManager/system-connections/c-*.nmconnection
+}
+
+cmd_cleanup() {
+    _do_service systemctl stop NetworkManager
+    cleanup_base
+    systemctl unmask NetworkManager-dispatcher
+    systemctl enable NetworkManager-dispatcher
+    _do_service systemctl start NetworkManager
+}
+
+cmd_setup() {
+
+    _do_service systemctl stop NetworkManager
+    systemctl mask NetworkManager-dispatcher
+    systemctl stop NetworkManager-dispatcher
+
+    cleanup_base
+
+    ip netns add "$TEST_NETNS"
+    ip --netns "$TEST_NETNS" link add t-br0 type bridge
+    ip --netns "$TEST_NETNS" link set t-br0 type bridge stp_state 0
+    ip --netns "$TEST_NETNS" link set t-br0 up
+    ip --netns "$TEST_NETNS" addr add 172.16.0.1/16 dev t-br0
+    ip netns exec "$TEST_NETNS" \
+        dnsmasq \
+            --conf-file=/dev/null \
+            --pid-file="$DNSMASQ_PIDFILE" \
+            --no-hosts \
+            --keep-in-foreground \
+            --bind-interfaces \
+            --except-interface=lo \
+            --clear-on-reload \
+            --listen-address=172.16.0.1 \
+            --dhcp-range=172.16.1.1,172.16.20.1,60 \
+            --no-ping \
+            &
+    disown
+    for i in `seq "$NUM_DEVS"`; do
+        ip --netns "$TEST_NETNS" link add t-a$i type veth peer t-b$i
+        ip --netns "$TEST_NETNS" link set t-a$i up
+        ip --netns "$TEST_NETNS" link set t-b$i up master t-br0
+    done
+    for i in `seq "$NUM_VLAN_DEVS"`; do
+        ip --netns "$TEST_NETNS" link add link t-b1 name t-b1.$i type vlan id $i
+        ip --netns "$TEST_NETNS" link set t-b1.$i up master t-br0
+    done
+
+    cat <<EOF > "$NM_TEST_CONF"
+[main]
+dhcp=internal
+no-auto-default=interface-name:t-a*
+[device-99-my-test]
+match-device=interface-name:t-a*
+managed=1
+[logging]
+level=INFO
+[connectivity]
+enabled=0
+EOF
+
+    _do_service systemctl start NetworkManager
+
+    for i in `seq "$NUM_DEVS"`; do
+      ip --netns "$TEST_NETNS" link set t-a$i netns $$
+    done
+
+    if [ "$DO_ADD_CON" = 1 ]; then
+        for i in `seq "$NUM_DEVS"`; do
+            nmcli connection add save no type ethernet con-name c-a$i ifname t-a$i autoconnect no ipv4.method auto ipv6.method auto
+        done
+    fi
+
+    if [ "$DO_ADD_VLAN_CON" = 1 ]; then
+        for i in `seq "$NUM_VLAN_DEVS"`; do
+            nmcli connection add save no type bridge con-name c-a1.$i-br ifname t-a1.$i.br autoconnect no ipv4.method auto ipv6.method auto bridge.stp 0
+            nmcli connection add save no type vlan   con-name c-a1.$i-po ifname t-a1.$i.po autoconnect no vlan.id $i vlan.parent t-a1 master c-a1.$i-br slave-type bridge
+        done
+    fi
+}
+
+
+case "$ARG_OP" in
+    "setup")
+        cmd_setup
+        ;;
+    "cleanup")
+        cmd_cleanup
+        ;;
+    *)
+        die "Unknown command \"$ARG_OP\""
+        ;;
+esac