From 13dbfe19e521b9821dba0fee36a9e0ed8ab07fb6 Mon Sep 17 00:00:00 2001 From: Darren 'Tadgy' Austin Date: Wed, 13 Nov 2019 22:10:37 +0000 Subject: Remove BONDOPTS, VLANOPTS and BROPTS and replace with generic IFOPTS. Previously we had an xOPTS variable for each type of interface that could be configured. I've replaced this with a generic IFOPTS option which can be used to supply interface type specific options to 'ip'. As the option is now generic, it can be applied to physical interfaces too; so interfaces such as eth0 can have options applied just like a virtual interface. --- rc.inet1 | 41 ++++++++++++++++++++++++++--------------- rc.inet1.conf | 33 +++++++++++++++++++-------------- 2 files changed, 45 insertions(+), 29 deletions(-) diff --git a/rc.inet1 b/rc.inet1 index 5e31c08..b9374ce 100644 --- a/rc.inet1 +++ b/rc.inet1 @@ -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 ' 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 diff --git a/rc.inet1.conf b/rc.inet1.conf index cdb66ba..8ac6c8d 100644 --- a/rc.inet1.conf +++ b/rc.inet1.conf @@ -68,23 +68,12 @@ GATEWAY6="" # ============================================================================= -# Change this to "yes" for debugging output to syslog (if available, stdout if -# not). -DEBUG_ETH_UP="no" - -# MAXNICS is the maximum number of interfaces that will be configured. -# You may need to increase the MAXNICS value if you have many interfaces, or -# you use multiple VLANs and/or bridges. The default is 6. -#MAXNICS="6" - -# ============================================================================= - # Example of how to configure a bond (link aggrigation) interface. #IFNAME[0]="bond0" #BONDNICS[0]="eth0 eth1" #BONDMODE[0]="balance-rr" -#BONDOPTS[0]="xmit_hash_policy layer2+3 | miimon 100" +#IFOPTS[0]="xmit_hash_policy layer2+3 | miimon 100" #IPADDR[0]="192.168.0.1" #NETMASK[0]="24" #IPALIASES[0]="" @@ -104,7 +93,7 @@ DEBUG_ETH_UP="no" # Support") for details of the options available. This option is not required # for a standard VLAN to be configured. #IFNAME[0]="eth0.10" -#VLANOPTS[0]="" +#IFOPTS[0]="" #IPADDR[0]="192.168.10.1" #NETMASK[0]="24" #IPALIASES[0]="" @@ -125,7 +114,7 @@ DEBUG_ETH_UP="no" # required for a standard bridge to be configured. #IFNAME[0]="br0" #BRNICS[0]="eth0" -#BROPTS[0]="" +#IFOPTS[0]="" #IPADDR[0]="192.168.0.1" #NETMASK[0]="24" #IPALIASES[0]="" @@ -181,6 +170,11 @@ DEBUG_ETH_UP="no" # Some examples of additional network parameters that you can use. #IFNAME[4]="wlan0" # Use a different interface name instead of # the default 'eth4' +#IFOPTS[4]="" # A pipe (|) delimited list of interface type + # specific options to apply. These options + # can be found in the ip-link(8) man page in + # the approprite section for the interface + # type being configured. #IPALIASES[4]="192.168.5.10/24" # Set up an IP alias. A netmask may be given # with a / after the IP address - if # not supplied, /24 will be used as default. @@ -224,3 +218,14 @@ DEBUG_ETH_UP="no" #WLAN_WPAWAIT[4]=30 # In case it takes long for the WPA association # to finish, you can increase the wait time # (defaults to 10 seconds) + +# ============================================================================= + +# Change this to "yes" for debugging output to syslog (if available, stdout if +# not). +DEBUG_ETH_UP="no" + +# MAXNICS is the maximum number of interfaces that will be configured. +# You may need to increase the MAXNICS value if you have many interfaces, or +# you use multiple VLANs and/or bridges. The default is 6. +#MAXNICS="6" -- cgit v1.2.3