]> git.ipfire.org Git - people/ms/network.git/blobdiff - src/functions/functions.bonding
ipsec: security policies: Make integrity command plural
[people/ms/network.git] / src / functions / functions.bonding
index 7939c9624995053327d597d52f567860fdac2d87..afa3306732d57e0b04bc4da35e003619b42560a1 100644 (file)
 BONDING_ALLOWED_MODES="balance-rr active-backup balance-xor broadcast 802.3ad \
        balance-tlb balance-alb"
 BONDING_MASTERS="/sys/class/net/bonding_masters"
-
-bonding_init() {
-       module_load "bonding"
-}
+BONDING_PORT_PATTERN="bN"
 
 bonding_create() {
        local device=${1}
@@ -38,10 +35,10 @@ bonding_create() {
        while [ $# -gt 0 ]; do
                case "${1}" in
                        --address=*)
-                               address=$(cli_get_val ${1})
+                               address=$(cli_get_val "${1}")
                                ;;
                        --mode=*)
-                               mode=$(cli_get_val ${1})
+                               mode=$(cli_get_val "${1}")
                                ;;
                        *)
                                error "Unrecognized argument: ${1}"
@@ -64,28 +61,18 @@ bonding_create() {
                return ${EXIT_ERROR}
        fi
 
-       # Initialize the bonding driver just
-       # when we need it.
-       bonding_init
-
-       # Create the bonding device.
-       fappend "${BONDING_MASTERS}" "+${device}"
-       local ret=$?
+       # Load the kernel module
+       module_load "bonding"
 
-       if [ ${ret} -eq ${EXIT_OK} ]; then
+       # Create the bonding device
+       if cmd ip link add "${device}" address "${address}" \
+                       type bond mode "${mode}"; then
                log DEBUG "Successfully created bonding device '${device}'"
        else
                log ERROR "Could not create bonding device '${device}'"
                return ${EXIT_ERROR}
        fi
 
-       # Set the mode of the bonding device.
-       bonding_set_mode "${device}" "${mode}"
-
-       if isset address; then
-               device_set_address "${device}" "${address}"
-       fi
-
        return ${EXIT_OK}
 }
 
@@ -93,18 +80,8 @@ bonding_remove() {
        local device=${1}
        assert isset device
 
-       if ! device_exists ${device}; then
-               return ${EXIT_ERROR}
-       fi
-
-       # Set device down if not already done.
-       device_set_down ${device}
-
        # Remove the device.
-       fappend "${BONDING_MASTERS}" "-${device}"
-       local ret=$?
-
-       if [ ${ret} -eq ${EXIT_OK} ]; then
+       if device_delete "${device}"; then
                log DEBUG "Successfully removed bonding device '${device}'"
        else
                log ERROR "Could not remove bonding device '${device}'"
@@ -148,25 +125,25 @@ bonding_enslave_device() {
 
        shift 2
 
-       # Slave must be down to be enslaved.
-       device_set_down ${device}
+       local slaves="$(bonding_get_slaves "${device}")"
+       if list_match "${slave}" ${slaves}; then
+               log DEBUG "${slave} is already enslaved in ${device}"
+               return ${EXIT_OK}
+       fi
 
-       if device_is_up ${device}; then
+       # Slave must be down to be enslaved.
+       if ! device_set_down "${slave}"; then
                log ERROR "Cannot enslave '${slave}' because it cannot be set down."
                return ${EXIT_ERROR}
        fi
 
-       # Add it.
-       fappend "${SYS_CLASS_NET}/${device}/bonding/slaves" "+${slave}"
-       local ret=$?
-
-       if [ ${ret} -eq ${EXIT_OK} ]; then
-               log DEBUG "Successfully enslaved '${slave}' to '${device}'"
-       else
+       # Add it
+       if ! device_set_master "${slave}" "${device}"; then
                log ERROR "Could not enslave '${slave}' to '${device}'"
                return ${EXIT_ERROR}
        fi
 
+       log DEBUG "Successfully enslaved '${slave}' to '${device}'"
        return ${EXIT_OK}
 }