From 6e91413a4050f93d2d668e62ddf10e538f906883 Mon Sep 17 00:00:00 2001 From: Keir Fraser Date: Fri, 5 Oct 2007 10:31:25 +0100 Subject: [PATCH] [NW scripts] Choose alternative interface if NFSroot is used. Allow the network bridging setup script to choose an alternative network interface if it is determined that the root is mounted using NFS, which is assumed to be done over the NIC serving the default gw. In this case the prefix of the device is used to find other devices, i.e., if eth0 is the default device an alternative device may be an other ones starting with 'eth'. Signed-off-by: Stefan Berger --- tools/examples/network-bridge | 36 +++++++++++++++++++++++------------ 1 file changed, 24 insertions(+), 12 deletions(-) diff --git a/tools/examples/network-bridge b/tools/examples/network-bridge index 5440f51c1e..c287760328 100755 --- a/tools/examples/network-bridge +++ b/tools/examples/network-bridge @@ -56,8 +56,32 @@ dir=$(dirname "$0") findCommand "$@" evalVariables "$@" +is_network_root () { + local rootfs=$(awk '{ if ($1 !~ /^[ \t]*#/ && $2 == "/") { print $3; }}' /etc/mtab) + local rootopts=$(awk '{ if ($1 !~ /^[ \t]*#/ && $2 == "/") { print $4; }}' /etc/mtab) + + [[ "$rootfs" =~ "^nfs" ]] || [[ "$rootopts" =~ "_netdev" ]] && return 0 || return 1 +} + +find_alt_device () { + local interf=$1 + local prefix=${interf%[[:digit:]]} + local ifs=$(ip link show | grep " $prefix" |\ + gawk '{ printf ("%s",substr($2,1,length($2)-1)) }' |\ + sed s/$interf//) + echo "$ifs" +} + netdev=${netdev:-$(ip route list | awk '/^default / { print $NF }' | sed 's/.* dev //')} +if is_network_root ; then + altdevs=$(find_alt_device $netdev) + for netdev in $altdevs; do break; done + if [ -z "$netdev" ]; then + [ -x /usr/bin/logger ] && /usr/bin/logger "network-bridge: bridging not supported on network root; not starting" + exit + fi +fi netdev=${netdev:-eth0} bridge=${bridge:-${netdev}} antispoof=${antispoof:-no} @@ -173,23 +197,11 @@ show_status () { echo '============================================================' } -is_network_root () { - local rootfs=$(awk '{ if ($1 !~ /^[ \t]*#/ && $2 == "/") { print $3; }}' /etc/mtab) - local rootopts=$(awk '{ if ($1 !~ /^[ \t]*#/ && $2 == "/") { print $4; }}' /etc/mtab) - - [[ "$rootfs" =~ "^nfs" ]] || [[ "$rootopts" =~ "_netdev" ]] && return 0 || return 1 -} - op_start () { if [ "${bridge}" = "null" ] ; then return fi - if is_network_root ; then - [ -x /usr/bin/logger ] && /usr/bin/logger "network-bridge: bridging not supported on network root; not starting" - return - fi - if link_exists "$pdev"; then # The device is already up. return -- 2.30.2