From 85048a9c1fa4d37b5896d9237d28bbadbbe09d19 Mon Sep 17 00:00:00 2001 From: Roman Yeryomin Date: Fri, 4 May 2018 18:42:36 +0300 Subject: [PATCH] base-files: rework _ucidef_set_interface to be more generic 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 --- .../files/lib/functions/uci-defaults.sh | 72 ++++++------------- .../ar71xx/base-files/etc/board.d/02_network | 6 +- 2 files changed, 26 insertions(+), 52 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" + [ -z "$network" ] && return - 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 + json_select_object network + json_select_object "$network" + shift - json_add_string protocol "$proto" - fi + 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 547e2e04d2..1d27ab0bfe 100755 --- a/target/linux/ar71xx/base-files/etc/board.d/02_network +++ b/target/linux/ar71xx/base-files/etc/board.d/02_network @@ -402,7 +402,7 @@ ar71xx_setup_interfaces() "0@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" proto "static" ucidef_add_switch "switch0" \ "0@eth0" "5:lan:4" "4:lan:5" "3:wan" ;; @@ -469,7 +469,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" proto "dhcp" ;; tl-mr3420-v2|\ tl-wr841n-v8|\ @@ -500,7 +500,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|\