X-Git-Url: https://git.rohieb.name/openwrt.git/blobdiff_plain/cf496205a8d92c574137aad7266207c3e23563d7..1c2ebc22c18d08f0f9c6055a518d2b8465c4db27:/package/base-files/default/lib/network/config.sh?ds=sidebyside diff --git a/package/base-files/default/lib/network/config.sh b/package/base-files/default/lib/network/config.sh index 3e18db1b4..a66c92bc0 100755 --- a/package/base-files/default/lib/network/config.sh +++ b/package/base-files/default/lib/network/config.sh @@ -33,9 +33,10 @@ scan_interfaces() { config_get proto "$CONFIG_SECTION" proto append interfaces "$CONFIG_SECTION" config_get iftype "$CONFIG_SECTION" type + config_get ifname "$CONFIG_SECTION" ifname + config_set "$CONFIG_SECTION" device "$ifname" case "$iftype" in bridge) - config_get ifname "$CONFIG_SECTION" ifname config_set "$CONFIG_SECTION" ifnames "$ifname" config_set "$CONFIG_SECTION" ifname br-"$CONFIG_SECTION" ;; @@ -69,6 +70,11 @@ setup_interface() { proto="${3:-$(config_get "$config" proto)}" config_get iftype "$config" type + ifconfig "$iface" 2>/dev/null >/dev/null && { + # make sure the interface is removed from any existing bridge + unbridge "$iface" + } + # Setup VLAN interfaces add_vlan "$iface" @@ -140,3 +146,15 @@ setup_interface() { esac } +unbridge() { + local dev="$1" + local brdev + + brctl show | grep "$dev" >/dev/null && { + # interface is still part of a bridge, correct that + + for brdev in $(brctl show | awk '$2 ~ /^[0-9].*\./ { print $1 }'); do + brctl delif "$brdev" "$dev" 2>/dev/null >/dev/null + done + } +}