summaryrefslogtreecommitdiffstats
path: root/core/modules/dhcpc-busybox/data/opt/openslx/scripts/systemd-bridge_additional_nics
diff options
context:
space:
mode:
Diffstat (limited to 'core/modules/dhcpc-busybox/data/opt/openslx/scripts/systemd-bridge_additional_nics')
-rwxr-xr-xcore/modules/dhcpc-busybox/data/opt/openslx/scripts/systemd-bridge_additional_nics48
1 files changed, 48 insertions, 0 deletions
diff --git a/core/modules/dhcpc-busybox/data/opt/openslx/scripts/systemd-bridge_additional_nics b/core/modules/dhcpc-busybox/data/opt/openslx/scripts/systemd-bridge_additional_nics
new file mode 100755
index 00000000..fd820909
--- /dev/null
+++ b/core/modules/dhcpc-busybox/data/opt/openslx/scripts/systemd-bridge_additional_nics
@@ -0,0 +1,48 @@
+#!/bin/bash
+#
+# Small script scanning sysfs for physical network interfaces
+# and creating additional network bridges 'br-nic-[0-9]'.
+
+. /opt/openslx/config
+
+# do nothing if not netbooted
+[ -z "$SLX_PXE_NETIF" ] && exit 1
+
+declare -g id=1
+for nic in /sys/class/net/*; do
+ # The presence of this symlink pointing to the physical device
+ # seems to be the better way to detect them.
+ [ -h "${nic}/device" ] || continue
+
+ # do not handle the primary interface
+ [ "$SLX_PXE_NETIF" = "${nic##*/}" ] && continue
+
+ # physical nic found, create a bridge with the same MAC
+ bridge="br-nic-${id}"
+ mac="$(cat "${nic}/address")"
+ if ! [[ $mac =~ ^([0-9a-f]{2}:){5}[0-9a-f]{2}$ ]]; then
+ echo "'$mac' does not seems like a valid MAC address."
+ continue
+ fi
+
+ (
+ set -e
+ brctl addbr "$bridge"
+ brctl stp "$bridge" 0
+ ip link set addr "$mac" "$bridge"
+ ip link set dev "${nic##*/}" up
+ brctl addif "$bridge" "${nic##*/}"
+ ip link set dev "$bridge" up
+ )
+ ret=$?
+ if [ "$ret" != 0 ]; then
+ echo "Failed to setup additional bridge '$bridge' for '$nic'."
+ brctl delbr "$bridge"
+ continue
+ fi
+
+ # all fine, increase counter and continue
+ (( id++ ))
+done
+
+exit 0