diff options
author | Jo-Philipp Wich <jo@mein.io> | 2021-04-09 18:52:15 +0200 |
---|---|---|
committer | Jo-Philipp Wich <jo@mein.io> | 2021-04-09 18:56:50 +0200 |
commit | 57a77386de7dda12f60bf3021efcde7f059833c8 (patch) | |
tree | 320ff9e6c925af8b12574d18f0fc68f34173d66d /net/bonding | |
parent | d2f8d9c90ff93ac835db6e2da4421dcd60838dae (diff) |
bonding: accept list of slaves in uci list notation
Rework the bonding.sh protocol handler to accept slave interface names
encoded in uci list notation. Also replace ifconfig up/down with ip
link calls while we're at it.
Fixes: #11455
Fixes: https://github.com/openwrt/luci/issues/4473
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
Diffstat (limited to 'net/bonding')
-rw-r--r-- | net/bonding/Makefile | 2 | ||||
-rwxr-xr-x | net/bonding/files/lib/netifd/proto/bonding.sh | 43 |
2 files changed, 25 insertions, 20 deletions
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 |