base-files: add ucidef_set_interface_wan() and ucidef_add_switch_ports()
[librecmc/librecmc.git] / package / base-files / files / lib / functions / uci-defaults-new.sh
index ba954dee21fc563832795cedf5dc7fe76c2922aa..6a8b6b9029d29674993e780b56f24a1b3cf58f17 100755 (executable)
@@ -34,7 +34,7 @@ _ucidef_set_interface() {
 
        json_select_object $name
        json_add_string ifname "${iface%%.*}"
-       [ "$iface" == "${iface%%.*}" ] || json_add_boolean create_vlan 1
+       [ "$iface" = "${iface%%.*}" ] || json_add_boolean create_vlan 1
        json_select ..
 }
 
@@ -52,6 +52,14 @@ ucidef_set_interface_lan() {
        json_select ..
 }
 
+ucidef_set_interface_wan() {
+        local wan_if=$1
+
+        json_select_object network
+        _ucidef_set_interface wan $wan_if
+        json_select ..
+}
+
 ucidef_set_interfaces_lan_wan() {
        local lan_if=$1
        local wan_if=$2
@@ -70,8 +78,8 @@ ucidef_add_switch() {
        json_select_object switch
 
        json_select_object $name
-       [ "$enable" -eq 1 ] && json_add_boolean enable 1
-       [ "$reset" -eq 1 ] && json_add_boolean reset 1
+       json_add_boolean enable $enable
+       json_add_boolean reset $reset
        json_select ..
 
        json_select ..
@@ -91,6 +99,48 @@ ucidef_add_switch_attr() {
        json_select ..
 }
 
+ucidef_add_switch_ports() {
+       local name="$1"; shift
+       local port num role dev idx
+
+       json_select_object switch
+       json_select_object "$name"
+       json_select_array ports
+
+       for port in "$@"; do
+               case "$port" in
+                       [0-9]*@*)
+                               num="${port%%@*}"
+                               dev="${port##*@}"
+                       ;;
+                       [0-9]*:*:[0-9]*)
+                               num="${port%%:*}"
+                               idx="${port##*:}"
+                               role="${port#[0-9]*:}"; role="${role%:*}"
+                       ;;
+                       [0-9]*:*)
+                               num="${port%%:*}"
+                               role="${port##*:}"
+                       ;;
+               esac
+
+               if [ -n "$num" ] && [ -n "$dev$role" ]; then
+                       json_add_object
+                       json_add_int num "$num"
+                       [ -n "$dev" ] && json_add_string device "$dev"
+                       [ -n "$role" ] && json_add_string role "$role"
+                       [ -n "$idx" ] && json_add_int index "$idx"
+                       json_close_object
+               fi
+
+               unset num dev role idx
+       done
+
+       json_select ..
+       json_select ..
+       json_select ..
+}
+
 ucidef_add_switch_vlan() {
        local name=$1
        local vlan=$2