aboutsummaryrefslogtreecommitdiff
path: root/net/bonding
diff options
context:
space:
mode:
authorJo-Philipp Wich <jo@mein.io>2021-04-09 18:52:15 +0200
committerJo-Philipp Wich <jo@mein.io>2021-04-09 18:56:50 +0200
commit57a77386de7dda12f60bf3021efcde7f059833c8 (patch)
tree320ff9e6c925af8b12574d18f0fc68f34173d66d /net/bonding
parentd2f8d9c90ff93ac835db6e2da4421dcd60838dae (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/Makefile2
-rwxr-xr-xnet/bonding/files/lib/netifd/proto/bonding.sh43
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