#!/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