base-files: fix wrong ucidef_set_network_device_mac network-device entry
[openwrt/openwrt.git] / package / base-files / files / lib / functions / uci-defaults.sh
old mode 100755 (executable)
new mode 100644 (file)
index 84b78b8..6f395ec
@@ -1,7 +1,3 @@
-#!/bin/ash
-
-CFG=/etc/board.json
-
 . /lib/functions.sh
 . /usr/share/libubox/jshn.sh
 
@@ -29,30 +25,39 @@ json_select_object() {
        json_select "$1"
 }
 
-_ucidef_set_interface() {
-       local name="$1"
-       local iface="$2"
-       local proto="$3"
+ucidef_set_interface() {
+       local network=$1; shift
 
-       json_select_object "$name"
-       json_add_string ifname "$iface"
+       [ -z "$network" ] && return
+
+       json_select_object network
+       json_select_object "$network"
+
+       while [ -n "$1" ]; do
+               local opt=$1; shift
+               local val=$1; shift
+
+               [ -n "$opt" -a -n "$val" ] || break
+
+               [ "$opt" = "device" -a "$val" != "${val/ //}" ] && {
+                       json_select_array "ports"
+                       for e in $val; do json_add_string "" "$e"; done
+                       json_close_array
+               } || {
+                       json_add_string "$opt" "$val"
+               }
+       done
 
        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
-                       ;;
+               case "$network" in
+                       lan) json_add_string protocol static ;;
+                       wan) json_add_string protocol dhcp ;;
+                       *) json_add_string protocol none ;;
                esac
-
-               json_add_string protocol "$proto"
        fi
 
        json_select ..
+       json_select ..
 }
 
 ucidef_set_board_id() {
@@ -67,30 +72,58 @@ ucidef_set_model_name() {
        json_select ..
 }
 
-ucidef_set_interface_lan() {
-       json_select_object network
-       _ucidef_set_interface lan "$@"
+ucidef_set_compat_version() {
+       json_select_object system
+       json_add_string compat_version "${1:-1.0}"
        json_select ..
 }
 
+ucidef_set_interface_lan() {
+       ucidef_set_interface "lan" device "$1" protocol "${2:-static}"
+}
+
 ucidef_set_interface_wan() {
-       json_select_object network
-       _ucidef_set_interface wan "$@"
-       json_select ..
+       ucidef_set_interface "wan" device "$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"
+       ucidef_set_interface_lan "$lan_if"
+       ucidef_set_interface_wan "$wan_if"
+}
+
+ucidef_set_bridge_device() {
+       json_select_object bridge
+       json_add_string name "${1:-switch0}"
+       json_select ..
+}
+
+ucidef_set_bridge_mac() {
+       json_select_object bridge
+       json_add_string macaddr "${1}"
+       json_select ..
+}
+
+ucidef_set_network_device_mac() {
+       json_select_object "network_device"
+       json_select_object "${1}"
+       json_add_string macaddr "${2}"
+       json_select ..
+       json_select ..
+}
+
+ucidef_set_network_device_path() {
+       json_select_object "network_device"
+       json_select_object "$1"
+       json_add_string path "$2"
+       json_select ..
        json_select ..
 }
 
 _ucidef_add_switch_port() {
-       # inherited: $num $device $need_tag $role $index $prev_role
+       # inherited: $num $device $need_tag $want_untag $role $index $prev_role
        # inherited: $n_cpu $n_ports $n_vlan $cpu0 $cpu1 $cpu2 $cpu3 $cpu4 $cpu5
 
        n_ports=$((n_ports + 1))
@@ -98,10 +131,11 @@ _ucidef_add_switch_port() {
        json_select_array ports
                json_add_object
                        json_add_int num "$num"
-                       [ -n "$device"   ] && json_add_string  device   "$device"
-                       [ -n "$need_tag" ] && json_add_boolean need_tag "$need_tag"
-                       [ -n "$role"     ] && json_add_string  role     "$role"
-                       [ -n "$index"    ] && json_add_int     index    "$index"
+                       [ -n "$device"     ] && json_add_string  device     "$device"
+                       [ -n "$need_tag"   ] && json_add_boolean need_tag   "$need_tag"
+                       [ -n "$want_untag" ] && json_add_boolean want_untag "$want_untag"
+                       [ -n "$role"       ] && json_add_string  role       "$role"
+                       [ -n "$index"      ] && json_add_int     index      "$index"
                json_close_object
        json_select ..
 
@@ -136,7 +170,7 @@ _ucidef_add_switch_port() {
 
 _ucidef_finish_switch_roles() {
        # inherited: $name $n_cpu $n_vlan $cpu0 $cpu1 $cpu2 $cpu3 $cpu4 $cpu5
-       local index role roles num device need_tag port ports
+       local index role roles num device need_tag want_untag port ports
 
        json_select switch
                json_select "$name"
@@ -151,11 +185,11 @@ _ucidef_finish_switch_roles() {
                        json_select "$name"
                                json_select ports
                                        json_select "$port"
-                                               json_get_vars num device need_tag
+                                               json_get_vars num device need_tag want_untag
                                        json_select ..
                                json_select ..
 
-                               if [ $n_vlan -gt $n_cpu -o ${need_tag:-0} -eq 1 ]; then
+                               if [ ${need_tag:-0} -eq 1 -o ${want_untag:-0} -ne 1 ]; then
                                        num="${num}t"
                                        device="${device}.${index}"
                                fi
@@ -175,17 +209,30 @@ _ucidef_finish_switch_roles() {
 
                        json_select_object "$role"
                                # attach previous interfaces (for multi-switch devices)
-                               json_get_var devices ifname
+                               json_get_var devices device
                                if ! list_contains devices "$device"; then
                                        devices="${devices:+$devices }$device"
                                fi
                        json_select ..
-
-                       _ucidef_set_interface "$role" "$devices"
                json_select ..
+
+               ucidef_set_interface "$role" device "$devices"
        done
 }
 
+ucidef_set_ar8xxx_switch_mib() {
+       local name="$1"
+       local type="$2"
+       local interval="$3"
+
+       json_select_object switch
+               json_select_object "$name"
+                       json_add_int ar8xxx_mib_type $type
+                       json_add_int ar8xxx_mib_poll_interval $interval
+               json_select ..
+       json_select ..
+}
+
 ucidef_add_switch() {
        local name="$1"; shift
        local port num role device index need_tag prev_role
@@ -203,10 +250,15 @@ ucidef_add_switch() {
                                                num="${port%%@*}"
                                                device="${port##*@}"
                                                need_tag=0
+                                               want_untag=0
                                                [ "${num%t}" != "$num" ] && {
                                                        num="${num%t}"
                                                        need_tag=1
                                                }
+                                               [ "${num%u}" != "$num" ] && {
+                                                       num="${num%u}"
+                                                       want_untag=1
+                                               }
                                        ;;
                                        [0-9]*:*:[0-9]*)
                                                num="${port%%:*}"
@@ -223,7 +275,7 @@ ucidef_add_switch() {
                                        _ucidef_add_switch_port
                                fi
 
-                               unset num device role index need_tag
+                               unset num device role index need_tag want_untag
                        done
                json_select ..
        json_select ..
@@ -290,17 +342,14 @@ ucidef_set_interface_macaddr() {
        local network="$1"
        local macaddr="$2"
 
-       json_select_object network
-
-       json_select "$network"
-       [ $? -eq 0 ] || {
-               json_select ..
-               return
-       }
+       ucidef_set_interface "$network" macaddr "$macaddr"
+}
 
-       json_add_string macaddr "$macaddr"
-       json_select ..
+ucidef_set_label_macaddr() {
+       local macaddr="$1"
 
+       json_select_object system
+               json_add_string label_macaddr "$macaddr"
        json_select ..
 }
 
@@ -309,6 +358,7 @@ ucidef_add_atm_bridge() {
        local vci="$2"
        local encaps="$3"
        local payload="$4"
+       local nameprefix="$5"
 
        json_select_object dsl
                json_select_object atmbridge
@@ -316,6 +366,7 @@ ucidef_add_atm_bridge() {
                        json_add_int vci "$vci"
                        json_add_string encaps "$encaps"
                        json_add_string payload "$payload"
+                       json_add_string nameprefix "$nameprefix"
                json_select ..
        json_select ..
 }
@@ -335,163 +386,153 @@ ucidef_add_adsl_modem() {
 
 ucidef_add_vdsl_modem() {
        local annex="$1"
-       local firmware="$2"
-       local tone="$3"
-       local xfer_mode="$4"
+       local tone="$2"
+       local xfer_mode="$3"
 
        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() {
+ucidef_set_led_ataport() {
+       _ucidef_set_led_trigger "$1" "$2" "$3" ata"$4"
+}
+
+_ucidef_set_led_common() {
        local cfg="led_$1"
        local name="$2"
        local sysfs="$3"
-       local dev="$4"
 
        json_select_object led
 
        json_select_object "$1"
        json_add_string name "$name"
-       json_add_string type netdev
        json_add_string sysfs "$sysfs"
-       json_add_string device "$dev"
+}
+
+ucidef_set_led_default() {
+       local default="$4"
+
+       _ucidef_set_led_common "$1" "$2" "$3"
+
+       json_add_string default "$default"
        json_select ..
 
        json_select ..
 }
 
-ucidef_set_led_usbdev() {
-       local cfg="led_$1"
-       local name="$2"
-       local sysfs="$3"
-       local dev="$4"
-
-       json_select_object led
+ucidef_set_led_heartbeat() {
+       _ucidef_set_led_common "$1" "$2" "$3"
 
-       json_select_object "$1"
-       json_add_string name "$name"
-       json_add_string type usb
-       json_add_string sysfs "$sysfs"
-       json_add_string device "$dev"
+       json_add_string trigger heartbeat
        json_select ..
 
        json_select ..
 }
 
-ucidef_set_led_wlan() {
-       local cfg="led_$1"
-       local name="$2"
-       local sysfs="$3"
-       local trigger="$4"
+ucidef_set_led_gpio() {
+       local gpio="$4"
+       local inverted="$5"
 
-       json_select_object led
+       _ucidef_set_led_common "$1" "$2" "$3"
 
-       json_select_object "$1"
-       json_add_string name "$name"
-       json_add_string type trigger
-       json_add_string sysfs "$sysfs"
        json_add_string trigger "$trigger"
+       json_add_string type gpio
+       json_add_int gpio "$gpio"
+       json_add_boolean inverted "$inverted"
        json_select ..
 
        json_select ..
 }
 
-ucidef_set_led_switch() {
-       local cfg="led_$1"
-       local name="$2"
-       local sysfs="$3"
-       local trigger="$4"
-       local port_mask="$5"
+ucidef_set_led_ide() {
+       _ucidef_set_led_trigger "$1" "$2" "$3" disk-activity
+}
 
-       json_select_object led
+ucidef_set_led_netdev() {
+       local dev="$4"
+       local mode="${5:-link tx rx}"
 
-       json_select_object "$1"
-       json_add_string name "$name"
-       json_add_string type switch
-       json_add_string sysfs "$sysfs"
-       json_add_string trigger "$trigger"
-       json_add_string port_mask "$port_mask"
+       _ucidef_set_led_common "$1" "$2" "$3"
+
+       json_add_string type netdev
+       json_add_string device "$dev"
+       json_add_string mode "$mode"
        json_select ..
 
        json_select ..
 }
 
-ucidef_set_led_default() {
-       local cfg="led_$1"
-       local name="$2"
-       local sysfs="$3"
-       local default="$4"
+ucidef_set_led_oneshot() {
+       _ucidef_set_led_timer $1 $2 $3 "oneshot" $4 $5
+}
 
-       json_select_object led
+ucidef_set_led_portstate() {
+       local port_state="$4"
 
-       json_select_object "$1"
-       json_add_string name "$name"
-       json_add_string sysfs "$sysfs"
-       json_add_string default "$default"
+       _ucidef_set_led_common "$1" "$2" "$3"
+
+       json_add_string trigger port_state
+       json_add_string type portstate
+       json_add_string port_state "$port_state"
        json_select ..
 
        json_select ..
 }
 
-ucidef_set_led_gpio() {
-       local cfg="led_$1"
-       local name="$2"
-       local sysfs="$3"
-       local gpio="$4"
-       local inverted="$5"
+ucidef_set_led_rssi() {
+       local iface="$4"
+       local minq="$5"
+       local maxq="$6"
+       local offset="${7:-0}"
+       local factor="${8:-1}"
 
-       json_select_object led
+       _ucidef_set_led_common "$1" "$2" "$3"
 
-       json_select_object "$1"
-       json_add_string type gpio
+       json_add_string type rssi
        json_add_string name "$name"
-       json_add_string sysfs "$sysfs"
-       json_add_string trigger "$trigger"
-       json_add_int gpio "$gpio"
-       json_add_boolean inverted "$inverted"
+       json_add_string iface "$iface"
+       json_add_string minq "$minq"
+       json_add_string maxq "$maxq"
+       json_add_string offset "$offset"
+       json_add_string factor "$factor"
        json_select ..
 
        json_select ..
 }
 
-ucidef_set_led_ide() {
-       local cfg="led_$1"
-       local name="$2"
-       local sysfs="$3"
+ucidef_set_led_switch() {
+       local trigger_name="$4"
+       local port_mask="$5"
+       local speed_mask="$6"
+       local mode="$7"
 
-       json_select_object led
+       _ucidef_set_led_common "$1" "$2" "$3"
 
-       json_select_object "$1"
-       json_add_string name "$name"
-       json_add_string sysfs "$sysfs"
-       json_add_string trigger ide-disk
+       json_add_string trigger "$trigger_name"
+       json_add_string type switch
+       json_add_string mode "$mode"
+       json_add_string port_mask "$port_mask"
+       json_add_string speed_mask "$speed_mask"
        json_select ..
 
        json_select ..
 }
 
-__ucidef_set_led_timer() {
-       local cfg="led_$1"
-       local name="$2"
-       local sysfs="$3"
-       local trigger="$4"
+_ucidef_set_led_timer() {
+       local trigger_name="$4"
        local delayon="$5"
        local delayoff="$6"
 
-       json_select_object led
+       _ucidef_set_led_common "$1" "$2" "$3"
 
-       json_select_object "$1"
-       json_add_string type "$trigger"
-       json_add_string name "$name"
-       json_add_string sysfs "$sysfs"
+       json_add_string type "$trigger_name"
+       json_add_string trigger "$trigger_name"
        json_add_int delayon "$delayon"
        json_add_int delayoff "$delayoff"
        json_select ..
@@ -499,40 +540,62 @@ __ucidef_set_led_timer() {
        json_select ..
 }
 
-ucidef_set_led_oneshot() {
-       __ucidef_set_led_timer $1 $2 $3 "oneshot" $4 $5
+ucidef_set_led_timer() {
+       _ucidef_set_led_timer $1 $2 $3 "timer" $4 $5
 }
 
-ucidef_set_led_timer() {
-       __ucidef_set_led_timer $1 $2 $3 "timer" $4 $5
+_ucidef_set_led_trigger() {
+       local trigger_name="$4"
+
+       _ucidef_set_led_common "$1" "$2" "$3"
+
+       json_add_string trigger "$trigger_name"
+       json_select ..
+
+       json_select ..
 }
 
-ucidef_set_led_rssi() {
-       local cfg="led_$1"
+ucidef_set_led_usbdev() {
+       local dev="$4"
+
+       _ucidef_set_led_common "$1" "$2" "$3"
+
+       json_add_string type usb
+       json_add_string device "$dev"
+       json_select ..
+
+       json_select ..
+}
+
+ucidef_set_led_usbhost() {
+       _ucidef_set_led_trigger "$1" "$2" "$3" usb-host
+}
+
+ucidef_set_led_usbport() {
+       local obj="$1"
        local name="$2"
        local sysfs="$3"
-       local iface="$4"
-       local minq="$5"
-       local maxq="$6"
-       local offset="$7"
-       local factor="$8"
+       shift
+       shift
+       shift
 
-       json_select_object led
+       _ucidef_set_led_common "$obj" "$name" "$sysfs"
 
-       json_select_object "$1"
-       json_add_string type rssi
-       json_add_string name "$name"
-       json_add_string iface "$iface"
-       json_add_string sysfs "$sysfs"
-       json_add_string minq "$minq"
-       json_add_string maxq "$maxq"
-       json_add_string offset "$offset"
-       json_add_string factor "$factor"
+       json_add_string type usbport
+       json_select_array ports
+               for port in "$@"; do
+                       json_add_string port "$port"
+               done
+       json_select ..
        json_select ..
 
        json_select ..
 }
 
+ucidef_set_led_wlan() {
+       _ucidef_set_led_trigger "$1" "$2" "$3" "$4"
+}
+
 ucidef_set_rssimon() {
        local dev="$1"
        local refresh="$2"
@@ -546,7 +609,6 @@ ucidef_set_rssimon() {
        json_select ..
 
        json_select ..
-
 }
 
 ucidef_add_gpio_switch() {
@@ -558,12 +620,47 @@ ucidef_add_gpio_switch() {
        json_select_object gpioswitch
                json_select_object "$cfg"
                        json_add_string name "$name"
-                       json_add_int pin "$pin"
+                       json_add_string pin "$pin"
                        json_add_int default "$default"
                json_select ..
        json_select ..
 }
 
+ucidef_set_hostname() {
+       local hostname="$1"
+
+       json_select_object system
+               json_add_string hostname "$hostname"
+       json_select ..
+}
+
+ucidef_set_ntpserver() {
+       local server
+
+       json_select_object system
+               json_select_array ntpserver
+                       for server in "$@"; do
+                               json_add_string "" "$server"
+                       done
+               json_select ..
+       json_select ..
+}
+
+ucidef_add_wlan() {
+       local path="$1"; shift
+
+       ucidef_wlan_idx=${ucidef_wlan_idx:-0}
+
+       json_select_object wlan
+       json_select_object "wl$ucidef_wlan_idx"
+       json_add_string path "$path"
+       json_add_fields "$@"
+       json_select ..
+       json_select ..
+
+       ucidef_wlan_idx="$((ucidef_wlan_idx + 1))"
+}
+
 board_config_update() {
        json_init
        [ -f ${CFG} ] && json_load "$(cat ${CFG})"
@@ -580,6 +677,5 @@ board_config_update() {
 }
 
 board_config_flush() {
-       json_dump -i > /tmp/.board.json
-       mv /tmp/.board.json ${CFG}
+       json_dump -i -o ${CFG}
 }