diff --git a/net/bonding/Makefile b/net/bonding/Makefile index 5c74d6b5c..d3c1855f0 100644 --- a/net/bonding/Makefile +++ b/net/bonding/Makefile @@ -8,7 +8,7 @@ include $(TOPDIR)/rules.mk PKG_NAME:=proto-bonding -PKG_VERSION:=2020-03-30 +PKG_VERSION:=2021-04-09 PKG_RELEASE:=1 PKG_LICENSE:=GPL-2.0 diff --git a/net/bonding/files/lib/netifd/proto/bonding.sh b/net/bonding/files/lib/netifd/proto/bonding.sh index 556d7c824..ac6551637 100755 --- a/net/bonding/files/lib/netifd/proto/bonding.sh +++ b/net/bonding/files/lib/netifd/proto/bonding.sh @@ -37,7 +37,7 @@ proto_bonding_init_config() { proto_config_add_string "bonding_policy" proto_config_add_string "link_monitoring" - proto_config_add_string "slaves" + proto_config_add_array "slaves" proto_config_add_string "all_slaves_active" proto_config_add_string "min_links" @@ -66,6 +66,28 @@ proto_bonding_init_config() { proto_config_add_string "use_carrier" } +proto_bonding_add_slave() { + local slave=$1 + local idx=$2 + local cfg=$3 + local link=$4 + + if [ ! -e "/sys/class/net/$slave" ]; then + echo "$cfg" "No slave device $slave found" + proto_notify_error "$cfg" NO_DEVICE + proto_block_restart "$cfg" + return + fi + + ip link set dev "$slave" down + + sleep 1 + + echo "+$slave" > /sys/class/net/"$link"/bonding/slaves + + ip link set dev "$slave" up +} + proto_bonding_setup() { local cfg="$1" local link="bonding-$cfg" @@ -157,24 +179,7 @@ proto_bonding_setup() { # Add slaves to bonding interface local slaves json_get_vars slaves - - for slave in $slaves; do - - if [ "$(cat /proc/net/dev |grep "$slave")" == "" ]; then - echo "$cfg" "No slave device $slave found" - proto_notify_error "$cfg" NO_DEVICE - proto_block_restart "$cfg" - return - fi - - ifconfig "$slave" down - - sleep 1 - - echo "+$slave" > /sys/class/net/"$link"/bonding/slaves - - ifconfig "$slave" up - done + json_for_each_item proto_bonding_add_slave slaves "$cfg" "$link" [ -n "$all_slaves_active" ] && echo "$all_slaves_active" > /sys/class/net/"$link"/bonding/all_slaves_active