diff options
Diffstat (limited to 'rc.inet1')
-rw-r--r-- | rc.inet1 | 41 |
1 files changed, 26 insertions, 15 deletions
@@ -154,12 +154,12 @@ br_open() { debug_log "/sbin/ip link set dev $BRIF up" /sbin/ip link set dev $BRIF up done - while read -r -d \| BROPT; do - if [ -n "$BROPT" ]; then - debug_log "/sbin/ip link set dev ${IFNAME[$1]} type bridge $BROPT" - /sbin/ip link set dev ${IFNAME[$1]} type bridge $BROPT + while read -r -d \| IFOPT; do + if [ -n "$IFOPT" ]; then + debug_log "/sbin/ip link set dev ${IFNAME[$1]} type bridge $IFOPT" + /sbin/ip link set dev ${IFNAME[$1]} type bridge $IFOPT fi - done <<<"${BROPTS[$i]}|" # The | on the end is required. + done <<<"${IFOPTS[$i]}|" # The | on the end is required. debug_log "/sbin/ip link set dev ${IFNAME[$1]} up" /sbin/ip link set dev ${IFNAME[$1]} up } @@ -199,12 +199,14 @@ bond_create() { debug_log "/sbin/ip link set dev $BONDIF up" /sbin/ip link set dev $BONDIF up done - while read -r -d \| BONDOPT; do - if [ -n "$BONDOPT" ]; then - debug_log "/sbin/ip link set dev ${IFNAME[$1]} type bond $BONDOPT" - /sbin/ip link set dev ${IFNAME[$1]} type bond $BONDOPT + # This has to be done *after* the interface is brought up because the + # 'primary <interface>' option has to occur after the interface is active. + while read -r -d \| IFOPT; do + if [ -n "$IFOPT" ]; then + debug_log "/sbin/ip link set dev ${IFNAME[$1]} type bond $IFOPT" + /sbin/ip link set dev ${IFNAME[$1]} type bond $IFOPT fi - done <<<"${BONDOPTS[$1]}|" # The | on the end is required. + done <<<"${IFOPTS[$1]}|" # The | on the end is required. } # Function to destroy a bond. @@ -277,12 +279,21 @@ if_up() { ((IF_UP == 1)) && /sbin/ip link set dev $IFACE down return fi - while read -r -d \| VLANOPT; do - if [ -n "$VLANOPT" ]; then - debug_log "/sbin/ip link set dev ${1} type vlan $VLANOPT" - /sbin/ip link set dev ${1} type vlan $VLANOPT + while read -r -d \| IFOPT; do + if [ -n "$IFOPT" ]; then + debug_log "/sbin/ip link set dev ${1} type vlan $IFOPT" + /sbin/ip link set dev ${1} type vlan $IFOPT fi - done <<<"${VLANOPTS[$i]}|" # The | on the end is required. + done <<<"${IFOPTS[$i]}|" # The | on the end is required. + elif [ -z "${BONDNICS[$i]}" ] && [ -z "${BRNICS[$i]}" ]; then + # Only apply IFOPTS for a physical interface if it's not been handled + # by a higher level interface. + while read -r -d \| IFOPT; do + if [ -n "$IFOPT" ]; then + debug_log "/sbin/ip link set dev ${1} $IFOPT" + /sbin/ip link set dev ${1} $IFOPT + fi + done <<<"${IFOPTS[$i]}|" # The | on the end is required. fi # Set hardware address: if [ -n "${HWADDR[$i]}" ]; then |