[OpenWrt-Devel] [PATCH] base-files: rework _ucidef_set_interface to be more generic

Roman Yeryomin roman at advem.lv
Fri May 4 11:42:36 EDT 2018


This is a rework of previously submitted patch reworking
ucidef_set_interface_raw [1]. Here, keep the idea but instead
make _ucidef_set_interface more generic and use it instead of
ucidef_set_interface_raw.
Also change the users like ucidef_set_interface_lan and others.

[1] https://patchwork.ozlabs.org/patch/844961/

Signed-off-by: Roman Yeryomin <roman at advem.lv>
---
 .../base-files/files/lib/functions/uci-defaults.sh | 74 +++++++---------------
 .../linux/ar71xx/base-files/etc/board.d/02_network |  6 +-
 2 files changed, 27 insertions(+), 53 deletions(-)

diff --git a/package/base-files/files/lib/functions/uci-defaults.sh b/package/base-files/files/lib/functions/uci-defaults.sh
index 3126fe6510..8065af24a5 100755
--- a/package/base-files/files/lib/functions/uci-defaults.sh
+++ b/package/base-files/files/lib/functions/uci-defaults.sh
@@ -27,29 +27,26 @@ json_select_object() {
 	json_select "$1"
 }
 
-_ucidef_set_interface() {
-	local name="$1"
-	local iface="$2"
-	local proto="$3"
+ucidef_set_interface() {
+	local network=$1
 
-	json_select_object "$name"
-	json_add_string ifname "$iface"
-
-	if ! json_is_a protocol string || [ -n "$proto" ]; then
-		case "$proto" in
-			static|dhcp|none|pppoe) : ;;
-			*)
-				case "$name" in
-					lan) proto="static" ;;
-					wan) proto="dhcp" ;;
-					*) proto="none" ;;
-				esac
-			;;
-		esac
+	[ -z "$network" ] && return
 
-		json_add_string protocol "$proto"
-	fi
+	json_select_object network
+	json_select_object "$network"
+	shift
+
+	while [ -n "$1" ]; do
+		local opt="$1"
+		local val="$2"
+		shift; shift;
 
+		[ -n "$opt" -a -n "$val" ] || break
+
+		json_add_string "$opt" "$val"
+	done
+
+	json_select ..
 	json_select ..
 }
 
@@ -66,31 +63,19 @@ ucidef_set_model_name() {
 }
 
 ucidef_set_interface_lan() {
-	json_select_object network
-	_ucidef_set_interface lan "$@"
-	json_select ..
+	ucidef_set_interface "lan" ifname "$1" protocol "${2:-static}"
 }
 
 ucidef_set_interface_wan() {
-	json_select_object network
-	_ucidef_set_interface wan "$@"
-	json_select ..
+	ucidef_set_interface "wan" ifname "$1" protocol "${2:-dhcp}"
 }
 
 ucidef_set_interfaces_lan_wan() {
 	local lan_if="$1"
 	local wan_if="$2"
 
-	json_select_object network
-	_ucidef_set_interface lan "$lan_if"
-	_ucidef_set_interface wan "$wan_if"
-	json_select ..
-}
-
-ucidef_set_interface_raw() {
-	json_select_object network
-	_ucidef_set_interface "$@"
-	json_select ..
+	ucidef_set_interface_lan "$lan_if"
+	ucidef_set_interface_wan "$wan_if"
 }
 
 _ucidef_add_switch_port() {
@@ -185,9 +170,9 @@ _ucidef_finish_switch_roles() {
 					devices="${devices:+$devices }$device"
 				fi
 			json_select ..
-
-			_ucidef_set_interface "$role" "$devices"
 		json_select ..
+
+		ucidef_set_interface "$role" ifname "$devices"
 	done
 }
 
@@ -300,18 +285,7 @@ ucidef_set_interface_macaddr() {
 	local network="$1"
 	local macaddr="$2"
 
-	json_select_object network
-
-	json_select "$network"
-	[ $? -eq 0 ] || {
-		json_select ..
-		return
-	}
-
-	json_add_string macaddr "$macaddr"
-	json_select ..
-
-	json_select ..
+	ucidef_set_interface "$network" macaddr "$macaddr"
 }
 
 ucidef_add_atm_bridge() {
diff --git a/target/linux/ar71xx/base-files/etc/board.d/02_network b/target/linux/ar71xx/base-files/etc/board.d/02_network
index cbbcf53946..0c7034525b 100755
--- a/target/linux/ar71xx/base-files/etc/board.d/02_network
+++ b/target/linux/ar71xx/base-files/etc/board.d/02_network
@@ -400,7 +400,7 @@ ar71xx_setup_interfaces()
 			"0 at eth0" "1:lan:4" "2:lan:3" "3:lan:2" "4:lan:1" "5:wan"
 		;;
 	ew-balin)
-		ucidef_set_interface_raw "usb2" "usb0" "static"
+		ucidef_set_interface "usb2" ifname "usb0" protocol "static"
 		ucidef_add_switch "switch0" \
 			"0 at eth0" "5:lan:4" "4:lan:5" "3:wan"
 		;;
@@ -467,7 +467,7 @@ ar71xx_setup_interfaces()
 		;;
 	tellstick-znet-lite)
 		ucidef_set_interface_wan "eth0"
-		ucidef_set_interface_raw "wlan" "wlan0" "dhcp"
+		ucidef_set_interface "wlan" ifname "wlan0" protocol "dhcp"
 		;;
 	tl-mr3420-v2|\
 	tl-wr841n-v8|\
@@ -498,7 +498,7 @@ ar71xx_setup_interfaces()
 		;;
 	tl-wr841n-v1|\
 	tl-wr941nd)
-		ucidef_set_interface_raw "eth" "eth0"
+		ucidef_set_interface "eth" ifname "eth0"
 		ucidef_set_interfaces_lan_wan "lan1 lan2 lan3 lan4" "wan"
 		;;
 	tl-wr741nd|\
-- 
2.14.1
_______________________________________________
openwrt-devel mailing list
openwrt-devel at lists.openwrt.org
https://lists.openwrt.org/cgi-bin/mailman/listinfo/openwrt-devel


More information about the openwrt-devel mailing list