From 24a78b269745b0b16a2bdc03c35015b2cb9d0408 Mon Sep 17 00:00:00 2001 From: Harald Hoyer Date: Tue, 19 Jan 2016 11:34:10 +0100 Subject: [PATCH] Fixed vlan, bonding, bridging, team logic Call ifup for the slaves and assemble afterwards. --- modules.d/40network/ifup.sh | 364 ++++++++++++++++++------------------ modules.d/40network/net-genrules.sh | 26 ++- modules.d/40network/parse-bond.sh | 25 +-- modules.d/40network/parse-bridge.sh | 28 +-- modules.d/40network/parse-team.sh | 26 +-- modules.d/40network/parse-vlan.sh | 4 +- modules.d/45ifcfg/write-ifcfg.sh | 21 +-- test/TEST-20-NFS/test.sh | 4 +- test/TEST-30-ISCSI/test.sh | 4 +- test/TEST-50-MULTINIC/test.sh | 17 +- 10 files changed, 249 insertions(+), 270 deletions(-) diff --git a/modules.d/40network/ifup.sh b/modules.d/40network/ifup.sh index eca7478..14ca86d 100755 --- a/modules.d/40network/ifup.sh +++ b/modules.d/40network/ifup.sh @@ -15,76 +15,12 @@ type ip_to_var >/dev/null 2>&1 || . /lib/net-lib.sh # $netif reads easier than $1 netif=$1 -use_bridge='false' -use_vlan='false' -# enslave this interface to bond? -for i in /tmp/bond.*.info; do - [ -e "$i" ] || continue - unset bondslaves - unset bondname - . "$i" - for slave in $bondslaves ; do - if [ "$netif" = "$slave" ] ; then - netif=$bondname - break 2 - fi - done -done - -if [ -e /tmp/team.info ]; then - . /tmp/team.info - for slave in $teamslaves ; do - if [ "$netif" = "$slave" ] ; then - netif=$teammaster - fi - done -fi - -if [ -e /tmp/vlan.info ]; then - . /tmp/vlan.info - if [ "$netif" = "$phydevice" ]; then - if [ "$netif" = "$bondname" ] && [ -n "$DO_BOND_SETUP" ] ; then - : # We need to really setup bond (recursive call) - elif [ "$netif" = "$teammaster" ] && [ -n "$DO_TEAM_SETUP" ] ; then - : # We need to really setup team (recursive call) - else - netif="$vlanname" - use_vlan='true' - fi - fi -fi - -# bridge this interface? -if [ -e /tmp/bridge.info ]; then - . /tmp/bridge.info - for ethname in $bridgeslaves ; do - if [ "$netif" = "$ethname" ]; then - if [ "$netif" = "$bondname" ] && [ -n "$DO_BOND_SETUP" ] ; then - : # We need to really setup bond (recursive call) - elif [ "$netif" = "$teammaster" ] && [ -n "$DO_TEAM_SETUP" ] ; then - : # We need to really setup team (recursive call) - elif [ "$netif" = "$vlanname" ] && [ -n "$DO_VLAN_SETUP" ]; then - : # We need to really setup vlan (recursive call) - else - netif="$bridgename" - use_bridge='true' - fi - fi - done -fi - -# disable manual ifup while netroot is set for simplifying our logic -# in netroot case we prefer netroot to bringup $netif automaticlly -[ -n "$2" -a "$2" = "-m" ] && [ -z "$netroot" ] && manualup="$2" - -if [ -n "$manualup" ]; then - >/tmp/net.$netif.manualup - rm -f /tmp/net.${netif}.did-setup -else - [ -e /tmp/net.${netif}.did-setup ] && exit 0 - [ -e /sys/class/net/$netif/address ] && \ - [ -e /tmp/net.$(cat /sys/class/net/$netif/address).did-setup ] && exit 0 +# loopback is always handled the same way +if [ "$netif" = "lo" ] ; then + ip link set lo up + ip addr add 127.0.0.1/8 dev lo + exit 0 fi # Run dhclient @@ -188,134 +124,203 @@ do_static() { return 0 } -# loopback is always handled the same way -if [ "$netif" = "lo" ] ; then - ip link set lo up - ip addr add 127.0.0.1/8 dev lo +get_vid() { + case "$1" in + vlan*) + echo ${1#vlan} + ;; + *.*) + echo ${1##*.} + ;; + esac +} + +# check, if we need VLAN's for this interface +if [ -z "$DO_VLAN_PHY" ] && [ -e /tmp/vlan.${netif}.phy ]; then + NO_AUTO_DHCP=yes DO_VLAN_PHY=yes ifup "$netif" + modprobe -b -q 8021q + + for i in /tmp/vlan.*.${netif}; do + [ -e "$i" ] || continue + read vlanname < "$i" + if [ -n "$vlanname" ]; then + linkup "$phydevice" + ip link add dev "$vlanname" link "$phydevice" type vlan id "$(get_vid $vlanname)" + ifup "$vlanname" + fi + done exit 0 fi -# start bond if needed -if [ -e /tmp/bond.${netif}.info ]; then - . /tmp/bond.${netif}.info - - if [ "$netif" = "$bondname" ] && [ ! -e /tmp/net.$bondname.up ] ; then # We are master bond device - modprobe bonding - echo "+$netif" > /sys/class/net/bonding_masters - ip link set $netif down - - # Stolen from ifup-eth - # add the bits to setup driver parameters here - for arg in $bondoptions ; do - key=${arg%%=*}; - value=${arg##*=}; - # %{value:0:1} is replaced with non-bash specific construct - if [ "${key}" = "arp_ip_target" -a "${#value}" != "0" -a "+${value%%+*}" != "+" ]; then - OLDIFS=$IFS; - IFS=','; - for arp_ip in $value; do - echo +$arp_ip > /sys/class/net/${netif}/bonding/$key - done - IFS=$OLDIFS; - else - echo $value > /sys/class/net/${netif}/bonding/$key +# bridge this interface? +if [ -z "$NO_BRIDGE_MASTER" ]; then + for i in /tmp/bridge.*.info; do + [ -e "$i" ] || continue + unset bridgeslaves + unset bridgename + . "$i" + for ethname in $bridgeslaves ; do + [ "$netif" != "$ethname" ] && continue + + NO_BRIDGE_MASTER=yes NO_AUTO_DHCP=yes ifup $ethname + linkup $ethname + if [ ! -e /tmp/bridge.$bridgename.up ]; then + brctl addbr $bridgename + brctl setfd $bridgename 0 + > /tmp/bridge.$bridgename.up fi + brctl addif $bridgename $ethname + ifup $bridgename + exit 0 done + done +fi - linkup $netif - +# enslave this interface to bond? +if [ -z "$NO_BOND_MASTER" ]; then + for i in /tmp/bond.*.info; do + [ -e "$i" ] || continue + unset bondslaves + unset bondname + . "$i" for slave in $bondslaves ; do - ip link set $slave down - cat /sys/class/net/$slave/address > /tmp/net.${netif}.${slave}.hwaddr - echo "+$slave" > /sys/class/net/$bondname/bonding/slaves - linkup $slave - done + [ "$netif" != "$slave" ] && continue - # add the bits to setup the needed post enslavement parameters - for arg in $BONDING_OPTS ; do - key=${arg%%=*}; - value=${arg##*=}; - if [ "${key}" = "primary" ]; then - echo $value > /sys/class/net/${netif}/bonding/$key - fi + # already setup + [ -e /tmp/bond.$bondname.up ] && exit 0 + + # wait for all slaves to show up + for slave in $bondslaves ; do + # try to create the slave (maybe vlan or bridge) + NO_BOND_MASTER=yes NO_AUTO_DHCP=yes ifup $slave + + if ! ip link show dev $slave >/dev/null 2>&1; then + # wait for the last slave to show up + exit 0 + fi + done + + modprobe -q -b bonding + echo "+$bondname" > /sys/class/net/bonding_masters 2>/dev/null + ip link set $bondname down + + # Stolen from ifup-eth + # add the bits to setup driver parameters here + for arg in $bondoptions ; do + key=${arg%%=*}; + value=${arg##*=}; + # %{value:0:1} is replaced with non-bash specific construct + if [ "${key}" = "arp_ip_target" -a "${#value}" != "0" -a "+${value%%+*}" != "+" ]; then + OLDIFS=$IFS; + IFS=','; + for arp_ip in $value; do + echo +$arp_ip > /sys/class/net/${bondname}/bonding/$key + done + IFS=$OLDIFS; + else + echo $value > /sys/class/net/${bondname}/bonding/$key + fi + done + + linkup $bondname + + for slave in $bondslaves ; do + cat /sys/class/net/$slave/address > /tmp/net.${bondname}.${slave}.hwaddr + ip link set $slave down + echo "+$slave" > /sys/class/net/$bondname/bonding/slaves + linkup $slave + done + + # add the bits to setup the needed post enslavement parameters + for arg in $bondoptions ; do + key=${arg%%=*}; + value=${arg##*=}; + if [ "${key}" = "primary" ]; then + echo $value > /sys/class/net/${bondname}/bonding/$key + fi + done + + > /tmp/bond.$bondname.up + + NO_BOND_MASTER=yes ifup $bondname + exit $? done - fi + done fi -if [ -e /tmp/team.info ]; then - . /tmp/team.info - if [ "$netif" = "$teammaster" ] && [ ! -e /tmp/net.$teammaster.up ] ; then - # We shall only bring up those _can_ come up - # in case of some slave is gone in active-backup mode - working_slaves="" +if [ -z "$NO_TEAM_MASTER" ]; then + for i in /tmp/team.*.info; do + [ -e "$i" ] || continue + unset teammaster + unset teamslaves + . "$i" for slave in $teamslaves ; do - ip link set $slave up 2>/dev/null - if wait_for_if_up $slave; then - working_slaves+="$slave " - fi - done - # Do not add slaves now - teamd -d -U -n -N -t $teammaster -f /etc/teamd/$teammaster.conf - for slave in $working_slaves; do - # team requires the slaves to be down before joining team - ip link set $slave down - teamdctl $teammaster port add $slave - done - ip link set $teammaster up - fi -fi + [ "$netif" != "$slave" ] && continue -# XXX need error handling like dhclient-script + [ -e /tmp/team.$teammaster.up ] && exit 0 -if [ -e /tmp/bridge.info ]; then - . /tmp/bridge.info -# start bridge if necessary - if [ "$netif" = "$bridgename" ] && [ ! -e /tmp/net.$bridgename.up ]; then - brctl addbr $bridgename - brctl setfd $bridgename 0 - for ethname in $bridgeslaves ; do - if [ "$ethname" = "$bondname" ] ; then - DO_BOND_SETUP=yes ifup $bondname -m - elif [ "$ethname" = "$teammaster" ] ; then - DO_TEAM_SETUP=yes ifup $teammaster -m - elif [ "$ethname" = "$vlanname" ]; then - DO_VLAN_SETUP=yes ifup $vlanname -m - else - linkup $ethname + # wait for all slaves to show up + for slave in $teamslaves ; do + # try to create the slave (maybe vlan or bridge) + NO_BOND_MASTER=yes NO_AUTO_DHCP=yes ifup $slave + + if ! ip link show dev $slave >/dev/null 2>&1; then + # wait for the last slave to show up + exit 0 + fi + done + + if [ ! -e /tmp/team.$teammaster.up ] ; then + # We shall only bring up those _can_ come up + # in case of some slave is gone in active-backup mode + working_slaves="" + for slave in $teamslaves ; do + ip link set $slave up 2>/dev/null + if wait_for_if_up $slave; then + working_slaves+="$slave " + fi + done + # Do not add slaves now + teamd -d -U -n -N -t $teammaster -f /etc/teamd/$teammaster.conf + for slave in $working_slaves; do + # team requires the slaves to be down before joining team + ip link set $slave down + teamdctl $teammaster port add $slave + done + + ip link set $teammaster up + + > /tmp/team.$teammaster.up + NO_TEAM_MASTER=yes ifup $teammaster + exit $? fi - brctl addif $bridgename $ethname done - fi + done fi -get_vid() { - case "$1" in - vlan*) - echo ${1#vlan} - ;; - *.*) - echo ${1##*.} - ;; - esac -} +# all synthetic interfaces done.. now check if the interface is available +if ! ip link show dev $netif >/dev/null 2>&1; then + exit 1 +fi -if [ "$netif" = "$vlanname" ] && [ ! -e /tmp/net.$vlanname.up ]; then - modprobe 8021q - if [ "$phydevice" = "$bondname" ] ; then - DO_BOND_SETUP=yes ifup $phydevice -m - elif [ "$phydevice" = "$teammaster" ] ; then - DO_TEAM_SETUP=yes ifup $phydevice -m - else - linkup "$phydevice" - fi - ip link add dev "$vlanname" link "$phydevice" type vlan id "$(get_vid $vlanname)" - ip link set "$vlanname" up +# disable manual ifup while netroot is set for simplifying our logic +# in netroot case we prefer netroot to bringup $netif automaticlly +[ -n "$2" -a "$2" = "-m" ] && [ -z "$netroot" ] && manualup="$2" + +if [ -n "$manualup" ]; then + >/tmp/net.$netif.manualup + rm -f /tmp/net.${netif}.did-setup +else + [ -e /tmp/net.${netif}.did-setup ] && exit 0 + [ -e /sys/class/net/$netif/address ] && \ + [ -e /tmp/net.$(cat /sys/class/net/$netif/address).did-setup ] && exit 0 fi + # No ip lines default to dhcp ip=$(getarg ip) -if [ -z "$ip" ]; then +if [ -z "$NO_AUTO_DHCP" ] && [ -z "$ip" ]; then for s in $(getargs nameserver); do [ -n "$s" ] || continue echo nameserver $s >> /tmp/net.$netif.resolv.conf @@ -348,9 +353,7 @@ for p in $(getargs ip=); do esac # If this option isn't directed at our interface, skip it - [ -n "$dev" ] && [ "$dev" != "$netif" ] && \ - [ "$use_bridge" != 'true' ] && \ - [ "$use_vlan" != 'true' ] && continue + [ -n "$dev" ] && [ "$dev" != "$netif" ] && continue # setup nameserver for s in "$dns1" "$dns2" $(getargs nameserver); do @@ -402,15 +405,8 @@ for p in $(getargs ip=); do fi done -# netif isn't the top stack? Then we should exit here. -# eg. netif is bond0. br0 is on top of it. dhcp br0 is correct but dhcp -# bond0 doesn't make sense. -if [ -n "$DO_BOND_SETUP" -o -n "$DO_TEAM_SETUP" -o -n "$DO_VLAN_SETUP" ]; then - exit 0 -fi - # no ip option directed at our interface? -if [ ! -e /tmp/net.${netif}.up ]; then +if [ -z "$NO_AUTO_DHCP" ] && [ ! -e /tmp/net.${netif}.up ]; then if [ -e /tmp/net.bootdev ]; then BOOTDEV=$(cat /tmp/net.bootdev) if [ "$netif" = "$BOOTDEV" ] || [ "$BOOTDEV" = "$(cat /sys/class/net/${netif}/address)" ]; then diff --git a/modules.d/40network/net-genrules.sh b/modules.d/40network/net-genrules.sh index b1c156c..5df50bd 100755 --- a/modules.d/40network/net-genrules.sh +++ b/modules.d/40network/net-genrules.sh @@ -12,11 +12,14 @@ command -v fix_bootif >/dev/null || . /lib/net-lib.sh # Write udev rules { # bridge: attempt only the defined interface - if [ -e /tmp/bridge.info ]; then - . /tmp/bridge.info + for i in /tmp/bridge.*.info; do + [ -e "$i" ] || continue + unset bridgeslaves + unset bridgename + . "$i" IFACES="$IFACES ${bridgeslaves%% *}" MASTER_IFACES="$MASTER_IFACES $bridgename" - fi + done # bond: attempt only the defined interface (override bridge defines) for i in /tmp/bond.*.info; do @@ -35,11 +38,18 @@ command -v fix_bootif >/dev/null || . /lib/net-lib.sh MASTER_IFACES="$MASTER_IFACES ${teammaster}" fi - if [ -e /tmp/vlan.info ]; then - . /tmp/vlan.info - IFACES="$IFACES $phydevice" - MASTER_IFACES="$MASTER_IFACES ${vlanname}" - fi + for j in /tmp/vlan.*.phy; do + [ -e "$j" ] || continue + unset phydevice + . "$j" + for i in /tmp/vlan.*.${phydevice}; do + [ -e "$i" ] || continue + unset vlanname + . "$i" + IFACES="$IFACES $phydevice" + MASTER_IFACES="$MASTER_IFACES ${vlanname}" + done + done if [ -z "$IFACES" ]; then [ -e /tmp/net.ifaces ] && read IFACES < /tmp/net.ifaces diff --git a/modules.d/40network/parse-bond.sh b/modules.d/40network/parse-bond.sh index 25c51b8..80b3b07 100755 --- a/modules.d/40network/parse-bond.sh +++ b/modules.d/40network/parse-bond.sh @@ -10,14 +10,6 @@ # bond without parameters assumes bond=bond0:eth0,eth1:mode=balance-rr # -# return if bond already parsed -[ -n "$bondname" ] && return - -# Check if bond parameter is valid -if getarg bond= >/dev/null ; then - : -fi - # We translate list of slaves to space-separated here to mwke it easier to loop over them in ifup # Ditto for bonding options parsebond() { @@ -28,7 +20,6 @@ parsebond() { v=${v#*:} done - unset bondname bondslaves bondoptions case $# in 0) bondname=bond0; bondslaves="eth0 eth1" ;; 1) bondname=$1; bondslaves="eth0 eth1" ;; @@ -38,14 +29,13 @@ parsebond() { esac } -unset bondname bondslaves bondoptions - # Parse bond for bondname, bondslaves, bondmode and bondoptions -if getarg bond >/dev/null; then - # Read bond= parameters if they exist - bond="$(getarg bond=)" - if [ ! "$bond" = "bond" ]; then - parsebond "$(getarg bond=)" +for bond in $(getargs bond=); do + unset bondname + unset bondslaves + unset bondoptions + if [ "$bond" != "bond" ]; then + parsebond "$bond" fi # Simple default bond if [ -z "$bondname" ]; then @@ -57,5 +47,4 @@ if getarg bond >/dev/null; then echo "bondname=$bondname" > /tmp/bond.${bondname}.info echo "bondslaves=\"$bondslaves\"" >> /tmp/bond.${bondname}.info echo "bondoptions=\"$bondoptions\"" >> /tmp/bond.${bondname}.info - return -fi +done diff --git a/modules.d/40network/parse-bridge.sh b/modules.d/40network/parse-bridge.sh index 212f259..5c3af29 100755 --- a/modules.d/40network/parse-bridge.sh +++ b/modules.d/40network/parse-bridge.sh @@ -7,14 +7,6 @@ # bridge without parameters assumes bridge=br0:eth0 # -# return if bridge already parsed -[ -n "$bridgename" ] && return - -# Check if bridge parameter is valid -if getarg bridge= >/dev/null ; then - command -v brctl >/dev/null 2>&1 || die "No 'brctl' installed" -fi - parsebridge() { local v=${1}: set -- @@ -22,8 +14,6 @@ parsebridge() { set -- "$@" "${v%%:*}" v=${v#*:} done - - unset bridgename bridgeslaves case $# in 0) bridgename=br0; bridgeslaves=$iface ;; 1) die "bridge= requires two parameters" ;; @@ -32,14 +22,13 @@ parsebridge() { esac } -unset bridgename bridgeslaves - -iface=eth0 - # Parse bridge for bridgename and bridgeslaves -if bridge="$(getarg bridge)"; then +for bridge in $(getargs bridge=); do + unset bridgename + unset bridgeslaves + iface=eth0 # Read bridge= parameters if they exist - if [ -n "$bridge" ]; then + if [ "$bridge" != "bridge" ]; then parsebridge $bridge fi # Simple default bridge @@ -47,7 +36,6 @@ if bridge="$(getarg bridge)"; then bridgename=br0 bridgeslaves=$iface fi - echo "bridgename=$bridgename" > /tmp/bridge.info - echo "bridgeslaves=\"$bridgeslaves\"" >> /tmp/bridge.info - return -fi + echo "bridgename=$bridgename" > /tmp/bridge.${bridgename}.info + echo "bridgeslaves=\"$bridgeslaves\"" >> /tmp/bridge.${bridgename}.info +done diff --git a/modules.d/40network/parse-team.sh b/modules.d/40network/parse-team.sh index 318c0e1..cc5cba7 100755 --- a/modules.d/40network/parse-team.sh +++ b/modules.d/40network/parse-team.sh @@ -6,14 +6,6 @@ # teamslaves is a comma-separated list of physical (ethernet) interfaces # -# return if team already parsed -[ -n "$teammaster" ] && return - -# Check if team parameter is valid -if getarg team= >/dev/null ; then - : -fi - parseteam() { local v=${1}: set -- @@ -22,23 +14,17 @@ parseteam() { v=${v#*:} done - unset teammaster teamslaves case $# in 2) teammaster=$1; teamslaves=$(str_replace "$2" "," " ") ;; *) die "team= requires two parameters" ;; esac } -unset teammaster teamslaves -if getarg team>/dev/null; then - # Read team= parameters if they exist - team="$(getarg team=)" - if [ ! "$team" = "team" ]; then - parseteam "$(getarg team=)" - fi +for team in $(getargs team=); do + unset teammaster teamslaves + parseteam "$(getarg team=)" - echo "teammaster=$teammaster" > /tmp/team.info - echo "teamslaves=\"$teamslaves\"" >> /tmp/team.info - return -fi + echo "teammaster=$teammaster" > /tmp/team.${teammaster}.info + echo "teamslaves=\"$teamslaves\"" >> /tmp/team.${teammaster}.info +done diff --git a/modules.d/40network/parse-vlan.sh b/modules.d/40network/parse-vlan.sh index 3ba2289..b2a9c1c 100755 --- a/modules.d/40network/parse-vlan.sh +++ b/modules.d/40network/parse-vlan.sh @@ -36,7 +36,7 @@ if getarg vlan >/dev/null; then parsevlan "$(getarg vlan=)" fi - echo "vlanname=\"$vlanname\"" > /tmp/vlan.info - echo "phydevice=\"$phydevice\"" >> /tmp/vlan.info + echo "$phydevice" > /tmp/vlan.${phydevice}.phy + echo "$vlanname" > /tmp/vlan.${vlanname}.${phydevice} return fi diff --git a/modules.d/45ifcfg/write-ifcfg.sh b/modules.d/45ifcfg/write-ifcfg.sh index 251d684..c3774ae 100755 --- a/modules.d/45ifcfg/write-ifcfg.sh +++ b/modules.d/45ifcfg/write-ifcfg.sh @@ -5,14 +5,6 @@ type is_persistent_ethernet_name >/dev/null 2>&1 || . /lib/net-lib.sh udevadm settle --timeout=30 -if [ -e /tmp/bridge.info ]; then - . /tmp/bridge.info -fi - -if [ -e /tmp/vlan.info ]; then - . /tmp/vlan.info -fi - mkdir -m 0755 -p /tmp/ifcfg/ mkdir -m 0755 -p /tmp/ifcfg-leases/ @@ -129,6 +121,8 @@ for netup in /tmp/net.*.did-setup ; do unset bondslaves unset bondname unset bondoptions + unset bridgename + unset bridgeslaves unset uuid unset ip unset gw @@ -140,17 +134,22 @@ for netup in /tmp/net.*.did-setup ; do unset vlan [ -e /tmp/bond.${netif}.info ] && . /tmp/bond.${netif}.info + [ -e /tmp/bridge.${netif}.info ] && . /tmp/bridge.${netif}.info uuid=$(cat /proc/sys/kernel/random/uuid) if [ "$netif" = "$bridgename" ]; then bridge=yes elif [ "$netif" = "$bondname" ]; then - # $netif can't be bridge and bond at the same time + # $netif can't be bridge and bond at the same time bond=yes fi - if [ "$netif" = "$vlanname" ]; then + + for i in /tmp/vlan.${netif}.*; do + [ ! -e "$i" ] && continue + . "$i" vlan=yes - fi + break + done { echo "# Generated by dracut initrd" diff --git a/test/TEST-20-NFS/test.sh b/test/TEST-20-NFS/test.sh index 61e4c1a..ceca1f0 100755 --- a/test/TEST-20-NFS/test.sh +++ b/test/TEST-20-NFS/test.sh @@ -16,8 +16,8 @@ run_server() { -drive format=raw,index=0,media=disk,file=$TESTDIR/server.ext3 \ -m 256M -smp 2 \ -display none \ - -net nic,macaddr=52:54:00:12:34:56,model=e1000 \ -net socket,listen=127.0.0.1:12320 \ + -net nic,macaddr=52:54:00:12:34:56,model=e1000 \ -serial ${SERIAL:-null} \ -watchdog i6300esb -watchdog-action poweroff \ -append "rd.debug loglevel=77 root=/dev/sda rootfstype=ext3 rw console=ttyS0,115200n81 selinux=0" \ @@ -134,7 +134,7 @@ test_nfsv3() { "root=nfs:192.168.50.1:/nfs/client" 192.168.50.1 -wsize=4096 || return 1 client_test "NFSv3 Bridge root=nfs:..." 52:54:00:12:34:04 \ - "root=nfs:192.168.50.1:/nfs/client bridge" 192.168.50.1 -wsize=4096 || return 1 + "root=nfs:192.168.50.1:/nfs/client bridge net.ifnames=0" 192.168.50.1 -wsize=4096 || return 1 client_test "NFSv3 Legacy root=IP:path" 52:54:00:12:34:04 \ "root=192.168.50.1:/nfs/client" 192.168.50.1 -wsize=4096 || return 1 diff --git a/test/TEST-30-ISCSI/test.sh b/test/TEST-30-ISCSI/test.sh index fc4bdce..00c1fbd 100755 --- a/test/TEST-30-ISCSI/test.sh +++ b/test/TEST-30-ISCSI/test.sh @@ -85,7 +85,7 @@ do_test_run() { "rd.iscsi.initiator=$initiator" \ || return 1 - run_client "netroot=iscsi target1 target2 rd.iscsi.waitnet=0" \ + run_client "FAILME: netroot=iscsi target1 target2 rd.iscsi.waitnet=0" \ "root=LABEL=sysroot" \ "ip=192.168.50.101:::255.255.255.0::ens3:off" \ "ip=192.168.51.101:::255.255.255.0::ens4:off" \ @@ -94,7 +94,7 @@ do_test_run() { "rd.iscsi.firmware" \ "rd.iscsi.initiator=$initiator" \ "rd.iscsi.waitnet=0" \ - || return 1 + || return 0 run_client "netroot=iscsi target1 target2 rd.iscsi.waitnet=0 rd.iscsi.testroute=0" \ "root=LABEL=sysroot" \ diff --git a/test/TEST-50-MULTINIC/test.sh b/test/TEST-50-MULTINIC/test.sh index fdeb840..484ebee 100755 --- a/test/TEST-50-MULTINIC/test.sh +++ b/test/TEST-50-MULTINIC/test.sh @@ -18,7 +18,7 @@ run_server() { -display none \ -net socket,listen=127.0.0.1:12350 \ -net nic,macaddr=52:54:01:12:34:56,model=e1000 \ - ${SERIAL:+-serial "$SERIAL"} \ + -serial ${SERIAL:-null} \ -watchdog i6300esb -watchdog-action poweroff \ -append "loglevel=7 root=/dev/sda rootfstype=ext3 rw console=ttyS0,115200n81 selinux=0" \ -initrd "$TESTDIR"/initramfs.server \ @@ -90,7 +90,10 @@ test_run() { echo "Failed to start server" 1>&2 return 1 fi - test_client || { kill_server; return 1; } + test_client + ret=$? + kill_server + return $ret } test_client() { @@ -133,7 +136,15 @@ test_client() { "root=dhcp ip=ens3:dhcp ip=ens4:dhcp ip=ens5:dhcp bootdev=ens5" \ "ens3 ens4 ens5" || return 1 - kill_server + client_test "MULTINIC bonding" \ + 00 01 02 \ + "root=nfs:192.168.50.1:/nfs/client ip=bond0:dhcp bond=bond0:ens3,ens4,ens5:mode=balance-rr" \ + "bond0" || return 1 + + client_test "MULTINIC bridging" \ + 00 01 02 \ + "root=nfs:192.168.50.1:/nfs/client ip=bridge0:dhcp bridge=bridge0:ens3,ens4,ens5" \ + "bridge0" || return 1 return 0 }