brcm47xx: migrate network config to board detection framework
[openwrt/staging/rmilecki.git] / package / base-files / files / lib / functions / uci-defaults-new.sh
index f025cb696efe63e3a9945fade60b4e74a985ca48..de3f180cbb75b9d7f44ed716c518107421f367a1 100755 (executable)
@@ -32,9 +32,26 @@ json_select_object() {
 _ucidef_set_interface() {
        local name="$1"
        local iface="$2"
+       local proto="$3"
 
        json_select_object "$name"
        json_add_string ifname "$iface"
+
+       if ! json_is_a protocol string; then
+               case "$proto" in
+                       static|dhcp|none|pppoe) : ;;
+                       *)
+                               case "$name" in
+                                       lan) proto="static" ;;
+                                       wan) proto="dhcp" ;;
+                                       *) proto="none" ;;
+                               esac
+                       ;;
+               esac
+
+               json_add_string protocol "$proto"
+       fi
+
        json_select ..
 }
 
@@ -50,26 +67,16 @@ ucidef_set_model_name() {
        json_select ..
 }
 
-ucidef_set_interface_loopback()
-{
-       # stub
-       local a="$1"
-}
-
 ucidef_set_interface_lan() {
-       local lan_if="$1"
-
        json_select_object network
-       _ucidef_set_interface lan "$lan_if"
+       _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 ..
+       json_select_object network
+       _ucidef_set_interface wan "$@"
+       json_select ..
 }
 
 ucidef_set_interfaces_lan_wan() {
@@ -164,14 +171,17 @@ _ucidef_finish_switch_roles() {
                json_select ..
 
                json_select_object network
+                       local devices
+
                        json_select_object "$role"
                                # attach previous interfaces (for multi-switch devices)
-                               local prev_device; json_get_var prev_device ifname
-                               if ! list_contains prev_device "$device"; then
-                                       device="${prev_device:+$prev_device }$device"
+                               json_get_var devices ifname
+                               if ! list_contains devices "$device"; then
+                                       devices="${devices:+$devices }$device"
                                fi
-                               json_add_string ifname "$device"
                        json_select ..
+
+                       _ucidef_set_interface "$role" "$devices"
                json_select ..
        done
 }
@@ -294,6 +304,52 @@ ucidef_set_interface_macaddr() {
        json_select ..
 }
 
+ucidef_add_atm_bridge() {
+       local vpi="$1"
+       local vci="$2"
+       local encaps="$3"
+       local payload="$4"
+
+       json_select_object dsl
+               json_select_object atmbridge
+                       json_add_int vpi "$vpi"
+                       json_add_int vci "$vci"
+                       json_add_string encaps "$encaps"
+                       json_add_string payload "$payload"
+               json_select ..
+       json_select ..
+}
+
+ucidef_add_adsl_modem() {
+       local annex="$1"
+       local firmware="$2"
+
+       json_select_object dsl
+               json_select_object modem
+                       json_add_string type "adsl"
+                       json_add_string annex "$annex"
+                       json_add_string firmware "$firmware"
+               json_select ..
+       json_select ..
+}
+
+ucidef_add_vdsl_modem() {
+       local annex="$1"
+       local firmware="$2"
+       local tone="$3"
+       local xfer_mode="$4"
+
+       json_select_object dsl
+               json_select_object modem
+                       json_add_string type "vdsl"
+                       json_add_string annex "$annex"
+                       json_add_string firmware "$firmware"
+                       json_add_string tone "$tone"
+                       json_add_string xfer_mode "$xfer_mode"
+               json_select ..
+       json_select ..
+}
+
 ucidef_set_led_netdev() {
        local cfg="led_$1"
        local name="$2"
@@ -406,6 +462,42 @@ ucidef_set_led_gpio() {
        json_select ..
 }
 
+ucidef_set_led_ide() {
+       local cfg="led_$1"
+       local name="$2"
+       local sysfs="$3"
+
+       json_select_object led
+
+       json_select_object "$1"
+       json_add_string name "$name"
+       json_add_string sysfs "$sysfs"
+       json_add_string trigger ide-disk
+       json_select ..
+
+       json_select ..
+}
+
+ucidef_set_led_timer() {
+       local cfg="led_$1"
+       local name="$2"
+       local sysfs="$3"
+       local delayon="$4"
+       local delayoff="$5"
+
+       json_select_object led
+
+       json_select_object "$1"
+       json_add_string type timer
+       json_add_string name "$name"
+       json_add_string sysfs "$sysfs"
+       json_add_int delayon "$delayon"
+       json_add_int delayoff "$delayoff"
+       json_select ..
+
+       json_select ..
+}
+
 ucidef_set_led_rssi() {
        local cfg="led_$1"
        local name="$2"
@@ -448,9 +540,34 @@ ucidef_set_rssimon() {
 
 }
 
+ucidef_add_gpio_switch() {
+       local cfg="$1"
+       local name="$2"
+       local pin="$3"
+       local default="${4:-0}"
+
+       json_select_object gpioswitch
+               json_select_object "$cfg"
+                       json_add_string name "$name"
+                       json_add_int pin "$pin"
+                       json_add_int default "$default"
+               json_select ..
+       json_select ..
+}
+
 board_config_update() {
        json_init
        [ -f ${CFG} ] && json_load "$(cat ${CFG})"
+
+       # auto-initialize model id and name if applicable
+       if ! json_is_a model object; then
+               json_select_object model
+                       [ -f "/tmp/sysinfo/board_name" ] && \
+                               json_add_string id "$(cat /tmp/sysinfo/board_name)"
+                       [ -f "/tmp/sysinfo/model" ] && \
+                               json_add_string name "$(cat /tmp/sysinfo/model)"
+               json_select ..
+       fi
 }
 
 board_config_flush() {