diff options
Diffstat (limited to 'package/base-files')
-rwxr-xr-x | package/base-files/files/lib/functions/uci-defaults-new.sh | 576 | ||||
-rwxr-xr-x[-rw-r--r--] | package/base-files/files/lib/functions/uci-defaults.sh | 807 |
2 files changed, 519 insertions, 864 deletions
diff --git a/package/base-files/files/lib/functions/uci-defaults-new.sh b/package/base-files/files/lib/functions/uci-defaults-new.sh deleted file mode 100755 index de3f180cbb..0000000000 --- a/package/base-files/files/lib/functions/uci-defaults-new.sh +++ /dev/null @@ -1,576 +0,0 @@ -#!/bin/ash - -CFG=/etc/board.json - -. /lib/functions.sh -. /usr/share/libubox/jshn.sh - -json_select_array() { - local _json_no_warning=1 - - json_select "$1" - [ $? = 0 ] && return - - json_add_array "$1" - json_close_array - - json_select "$1" -} - -json_select_object() { - local _json_no_warning=1 - - json_select "$1" - [ $? = 0 ] && return - - json_add_object "$1" - json_close_object - - json_select "$1" -} - -_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 .. -} - -ucidef_set_board_id() { - json_select_object model - json_add_string id "$1" - json_select .. -} - -ucidef_set_model_name() { - json_select_object model - json_add_string name "$1" - json_select .. -} - -ucidef_set_interface_lan() { - json_select_object network - _ucidef_set_interface lan "$@" - json_select .. -} - -ucidef_set_interface_wan() { - json_select_object network - _ucidef_set_interface wan "$@" - json_select .. -} - -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_add_switch_port() { - # inherited: $num $device $need_tag $role $index $prev_role - # inherited: $n_cpu $n_ports $n_vlan $cpu0 $cpu1 $cpu2 $cpu3 $cpu4 $cpu5 - - n_ports=$((n_ports + 1)) - - 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" - json_close_object - json_select .. - - # record pointer to cpu entry for lookup in _ucidef_finish_switch_roles() - [ -n "$device" ] && { - export "cpu$n_cpu=$n_ports" - n_cpu=$((n_cpu + 1)) - } - - # create/append object to role list - [ -n "$role" ] && { - json_select_array roles - - if [ "$role" != "$prev_role" ]; then - json_add_object - json_add_string role "$role" - json_add_string ports "$num" - json_close_object - - prev_role="$role" - n_vlan=$((n_vlan + 1)) - else - json_select_object "$n_vlan" - json_get_var port ports - json_add_string ports "$port $num" - json_select .. - fi - - json_select .. - } -} - -_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 - - json_select switch - json_select "$name" - json_get_keys roles roles - json_select .. - json_select .. - - for index in $roles; do - eval "port=\$cpu$(((index - 1) % n_cpu))" - - json_select switch - json_select "$name" - json_select ports - json_select "$port" - json_get_vars num device need_tag - json_select .. - json_select .. - - if [ $n_vlan -gt $n_cpu -o ${need_tag:-0} -eq 1 ]; then - num="${num}t" - device="${device}.${index}" - fi - - json_select roles - json_select "$index" - json_get_vars role ports - json_add_string ports "$ports $num" - json_add_string device "$device" - json_select .. - json_select .. - json_select .. - json_select .. - - json_select_object network - local devices - - json_select_object "$role" - # attach previous interfaces (for multi-switch devices) - json_get_var devices ifname - if ! list_contains devices "$device"; then - devices="${devices:+$devices }$device" - fi - json_select .. - - _ucidef_set_interface "$role" "$devices" - json_select .. - done -} - -ucidef_add_switch() { - local name="$1"; shift - local port num role device index need_tag prev_role - local cpu0 cpu1 cpu2 cpu3 cpu4 cpu5 - local n_cpu=0 n_vlan=0 n_ports=0 - - json_select_object switch - json_select_object "$name" - json_add_boolean enable 1 - json_add_boolean reset 1 - - for port in "$@"; do - case "$port" in - [0-9]*@*) - num="${port%%@*}" - device="${port##*@}" - need_tag=0 - [ "${num%t}" != "$num" ] && { - num="${num%t}" - need_tag=1 - } - ;; - [0-9]*:*:[0-9]*) - num="${port%%:*}" - index="${port##*:}" - role="${port#[0-9]*:}"; role="${role%:*}" - ;; - [0-9]*:*) - num="${port%%:*}" - role="${port##*:}" - ;; - esac - - if [ -n "$num" ] && [ -n "$device$role" ]; then - _ucidef_add_switch_port - fi - - unset num device role index need_tag - done - json_select .. - json_select .. - - _ucidef_finish_switch_roles -} - -ucidef_add_switch_attr() { - local name="$1" - local key="$2" - local val="$3" - - json_select_object switch - json_select_object "$name" - - case "$val" in - true|false) [ "$val" != "true" ]; json_add_boolean "$key" $? ;; - [0-9]) json_add_int "$key" "$val" ;; - *) json_add_string "$key" "$val" ;; - esac - - json_select .. - json_select .. -} - -ucidef_add_switch_port_attr() { - local name="$1" - local port="$2" - local key="$3" - local val="$4" - local ports i num - - json_select_object switch - json_select_object "$name" - - json_get_keys ports ports - json_select_array ports - - for i in $ports; do - json_select "$i" - json_get_var num num - - if [ -n "$num" ] && [ $num -eq $port ]; then - json_select_object attr - - case "$val" in - true|false) [ "$val" != "true" ]; json_add_boolean "$key" $? ;; - [0-9]) json_add_int "$key" "$val" ;; - *) json_add_string "$key" "$val" ;; - esac - - json_select .. - fi - - json_select .. - done - - json_select .. - json_select .. - json_select .. -} - -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_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" - 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" - 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 - - 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_select .. - - json_select .. -} - -ucidef_set_led_wlan() { - local cfg="led_$1" - local name="$2" - local sysfs="$3" - local trigger="$4" - - json_select_object led - - 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_select .. - - json_select .. -} - -ucidef_set_led_switch() { - local cfg="led_$1" - local name="$2" - local sysfs="$3" - local trigger="$4" - local port_mask="$5" - - json_select_object led - - 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" - json_select .. - - json_select .. -} - -ucidef_set_led_default() { - local cfg="led_$1" - local name="$2" - local sysfs="$3" - local default="$4" - - json_select_object led - - json_select_object "$1" - json_add_string name "$name" - json_add_string sysfs "$sysfs" - json_add_string default "$default" - json_select .. - - json_select .. -} - -ucidef_set_led_gpio() { - local cfg="led_$1" - local name="$2" - local sysfs="$3" - local gpio="$4" - local inverted="$5" - - json_select_object led - - json_select_object "$1" - json_add_string type gpio - 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_select .. - - 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" - local sysfs="$3" - local iface="$4" - local minq="$5" - local maxq="$6" - local offset="$7" - local factor="$8" - - json_select_object led - - 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_select .. - - json_select .. -} - -ucidef_set_rssimon() { - local dev="$1" - local refresh="$2" - local threshold="$3" - - json_select_object rssimon - - json_select_object "$dev" - [ -n "$refresh" ] && json_add_int refresh "$refresh" - [ -n "$threshold" ] && json_add_int threshold "$threshold" - json_select .. - - json_select .. - -} - -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() { - json_dump -i > /tmp/.board.json - mv /tmp/.board.json ${CFG} -} diff --git a/package/base-files/files/lib/functions/uci-defaults.sh b/package/base-files/files/lib/functions/uci-defaults.sh index 2658d439ac..de3f180cbb 100644..100755 --- a/package/base-files/files/lib/functions/uci-defaults.sh +++ b/package/base-files/files/lib/functions/uci-defaults.sh @@ -1,345 +1,576 @@ -#!/bin/sh -# Copyright (C) 2011 OpenWrt.org +#!/bin/ash -UCIDEF_LEDS_CHANGED=0 -UCIDEF_GPIO_SWITCHES_CHANGED=0 +CFG=/etc/board.json -ucidef_set_led_netdev() { - local cfg="led_$1" - local name=$2 - local sysfs=$3 - local dev=$4 - - uci -q get system.$cfg && return 0 - - uci batch <<EOF -set system.$cfg='led' -set system.$cfg.name='$name' -set system.$cfg.sysfs='$sysfs' -set system.$cfg.trigger='netdev' -set system.$cfg.dev='$dev' -set system.$cfg.mode='link tx rx' -EOF - UCIDEF_LEDS_CHANGED=1 +. /lib/functions.sh +. /usr/share/libubox/jshn.sh + +json_select_array() { + local _json_no_warning=1 + + json_select "$1" + [ $? = 0 ] && return + + json_add_array "$1" + json_close_array + + json_select "$1" } -ucidef_set_led_usbdev() { - local cfg="led_$1" - local name=$2 - local sysfs=$3 - local dev=$4 - - uci -q get system.$cfg && return 0 - - uci batch <<EOF -set system.$cfg='led' -set system.$cfg.name='$name' -set system.$cfg.sysfs='$sysfs' -set system.$cfg.trigger='usbdev' -set system.$cfg.dev='$dev' -set system.$cfg.interval='50' -EOF - UCIDEF_LEDS_CHANGED=1 +json_select_object() { + local _json_no_warning=1 + + json_select "$1" + [ $? = 0 ] && return + + json_add_object "$1" + json_close_object + + json_select "$1" } -ucidef_set_led_wlan() { - local cfg="led_$1" - local name=$2 - local sysfs=$3 - local trigger=$4 - - uci -q get system.$cfg && return 0 - - uci batch <<EOF -set system.$cfg='led' -set system.$cfg.name='$name' -set system.$cfg.sysfs='$sysfs' -set system.$cfg.trigger='$trigger' -EOF - UCIDEF_LEDS_CHANGED=1 +_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 .. } -ucidef_set_led_switch() { - local cfg="led_$1" - local name=$2 - local sysfs=$3 - local trigger=$4 - local port_mask=$5 - - uci -q get system.$cfg && return 0 - - uci batch <<EOF -set system.$cfg='led' -set system.$cfg.name='$name' -set system.$cfg.sysfs='$sysfs' -set system.$cfg.trigger='$trigger' -set system.$cfg.port_mask='$port_mask' -EOF - UCIDEF_LEDS_CHANGED=1 +ucidef_set_board_id() { + json_select_object model + json_add_string id "$1" + json_select .. } -ucidef_set_led_default() { - local cfg="led_$1" - local name=$2 - local sysfs=$3 - local default=$4 - - uci -q get system.$cfg && return 0 - - uci batch <<EOF -set system.$cfg='led' -set system.$cfg.name='$name' -set system.$cfg.sysfs='$sysfs' -set system.$cfg.default='$default' -EOF - UCIDEF_LEDS_CHANGED=1 +ucidef_set_model_name() { + json_select_object model + json_add_string name "$1" + json_select .. } -ucidef_set_led_rssi() { - local cfg="led_$1" - local name=$2 - local sysfs=$3 - local iface=$4 - local minq=$5 - local maxq=$6 - local offset=$7 - local factor=$8 - - uci -q get system.$cfg && return 0 - - uci batch <<EOF -set system.$cfg='led' -set system.$cfg.name='$name' -set system.$cfg.sysfs='$sysfs' -set system.$cfg.trigger='rssi' -set system.$cfg.iface='rssid_$iface' -set system.$cfg.minq='$minq' -set system.$cfg.maxq='$maxq' -set system.$cfg.offset='$offset' -set system.$cfg.factor='$factor' -EOF - UCIDEF_LEDS_CHANGED=1 +ucidef_set_interface_lan() { + json_select_object network + _ucidef_set_interface lan "$@" + json_select .. } -ucidef_set_led_timer() { - local cfg="led_$1" - local name=$2 - local sysfs=$3 - local delayon=$4 - local delayoff=$5 - - uci -q get system.$cfg && return 0 - - uci batch <<EOF -set system.$cfg='led' -set system.$cfg.name='$name' -set system.$cfg.sysfs='$sysfs' -set system.$cfg.trigger='timer' -set system.$cfg.delayon='$delayon' -set system.$cfg.delayoff='$delayoff' -EOF - UCIDEF_LEDS_CHANGED=1 +ucidef_set_interface_wan() { + json_select_object network + _ucidef_set_interface wan "$@" + json_select .. } -ucidef_set_led_mmc() { - local cfg="led_$1" - local name=$2 - local sysfs=$3 - local trigger=$4 - - uci -q get system.$cfg && return 0 - - uci batch <<EOF -set system.$cfg='led' -set system.$cfg.name='$name' -set system.$cfg.sysfs='$sysfs' -set system.$cfg.trigger='$trigger' -EOF - UCIDEF_LEDS_CHANGED=1 +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_led_trigger_gpio() { - local cfg="led_$1" - local name=$2 - local sysfs=$3 - local gpio=$4 - local inverted=$5 - - uci -q get system.$cfg && return 0 - - uci batch <<EOF -set system.$cfg='led' -set system.$cfg.name='$name' -set system.$cfg.sysfs='$sysfs' -set system.$cfg.trigger='gpio' -set system.$cfg.gpio='$gpio' -set system.$cfg.inverted='$inverted' -EOF - UCIDEF_LEDS_CHANGED=1 +_ucidef_add_switch_port() { + # inherited: $num $device $need_tag $role $index $prev_role + # inherited: $n_cpu $n_ports $n_vlan $cpu0 $cpu1 $cpu2 $cpu3 $cpu4 $cpu5 + + n_ports=$((n_ports + 1)) + + 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" + json_close_object + json_select .. + + # record pointer to cpu entry for lookup in _ucidef_finish_switch_roles() + [ -n "$device" ] && { + export "cpu$n_cpu=$n_ports" + n_cpu=$((n_cpu + 1)) + } + + # create/append object to role list + [ -n "$role" ] && { + json_select_array roles + + if [ "$role" != "$prev_role" ]; then + json_add_object + json_add_string role "$role" + json_add_string ports "$num" + json_close_object + + prev_role="$role" + n_vlan=$((n_vlan + 1)) + else + json_select_object "$n_vlan" + json_get_var port ports + json_add_string ports "$port $num" + json_select .. + fi + + json_select .. + } } -ucidef_set_led_ide_disk() { - local cfg="led_$1" - local name=$2 - local sysfs=$3 - - uci -q get system.$cfg && return 0 - - uci batch <<EOF -set system.$cfg='led' -set system.$cfg.name='$name' -set system.$cfg.sysfs='$sysfs' -set system.$cfg.trigger='ide-disk' -EOF - UCIDEF_LEDS_CHANGED=1 +_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 + + json_select switch + json_select "$name" + json_get_keys roles roles + json_select .. + json_select .. + + for index in $roles; do + eval "port=\$cpu$(((index - 1) % n_cpu))" + + json_select switch + json_select "$name" + json_select ports + json_select "$port" + json_get_vars num device need_tag + json_select .. + json_select .. + + if [ $n_vlan -gt $n_cpu -o ${need_tag:-0} -eq 1 ]; then + num="${num}t" + device="${device}.${index}" + fi + + json_select roles + json_select "$index" + json_get_vars role ports + json_add_string ports "$ports $num" + json_add_string device "$device" + json_select .. + json_select .. + json_select .. + json_select .. + + json_select_object network + local devices + + json_select_object "$role" + # attach previous interfaces (for multi-switch devices) + json_get_var devices ifname + if ! list_contains devices "$device"; then + devices="${devices:+$devices }$device" + fi + json_select .. + + _ucidef_set_interface "$role" "$devices" + json_select .. + done } -ucidef_set_rssimon() { - local dev="$1" - local refresh="$2" - local threshold="$3" +ucidef_add_switch() { + local name="$1"; shift + local port num role device index need_tag prev_role + local cpu0 cpu1 cpu2 cpu3 cpu4 cpu5 + local n_cpu=0 n_vlan=0 n_ports=0 + + json_select_object switch + json_select_object "$name" + json_add_boolean enable 1 + json_add_boolean reset 1 + + for port in "$@"; do + case "$port" in + [0-9]*@*) + num="${port%%@*}" + device="${port##*@}" + need_tag=0 + [ "${num%t}" != "$num" ] && { + num="${num%t}" + need_tag=1 + } + ;; + [0-9]*:*:[0-9]*) + num="${port%%:*}" + index="${port##*:}" + role="${port#[0-9]*:}"; role="${role%:*}" + ;; + [0-9]*:*) + num="${port%%:*}" + role="${port##*:}" + ;; + esac + + if [ -n "$num" ] && [ -n "$device$role" ]; then + _ucidef_add_switch_port + fi + + unset num device role index need_tag + done + json_select .. + json_select .. + + _ucidef_finish_switch_roles +} + +ucidef_add_switch_attr() { + local name="$1" + local key="$2" + local val="$3" - local cfg="rssid_$dev" + json_select_object switch + json_select_object "$name" - uci -q get system.$cfg && return 0 + case "$val" in + true|false) [ "$val" != "true" ]; json_add_boolean "$key" $? ;; + [0-9]) json_add_int "$key" "$val" ;; + *) json_add_string "$key" "$val" ;; + esac - uci batch <<EOF -set system.$cfg='rssid' -set system.$cfg.dev='$dev' -set system.$cfg.refresh='$refresh' -set system.$cfg.threshold='$threshold' -EOF - UCIDEF_LEDS_CHANGED=1 + json_select .. + json_select .. } -ucidef_commit_leds() -{ - [ "$UCIDEF_LEDS_CHANGED" = "1" ] && uci commit system +ucidef_add_switch_port_attr() { + local name="$1" + local port="$2" + local key="$3" + local val="$4" + local ports i num + + json_select_object switch + json_select_object "$name" + + json_get_keys ports ports + json_select_array ports + + for i in $ports; do + json_select "$i" + json_get_var num num + + if [ -n "$num" ] && [ $num -eq $port ]; then + json_select_object attr + + case "$val" in + true|false) [ "$val" != "true" ]; json_add_boolean "$key" $? ;; + [0-9]) json_add_int "$key" "$val" ;; + *) json_add_string "$key" "$val" ;; + esac + + json_select .. + fi + + json_select .. + done + + json_select .. + json_select .. + json_select .. } -ucidef_set_gpio_switch() { - local cfg="gpio_switch_$1" +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_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" - local gpio_pin="$3" - # use "0" as default value - local default="${4:-0}" + local sysfs="$3" + local dev="$4" + + json_select_object led - uci -q get "system.$cfg" && return 0 + json_select_object "$1" + json_add_string name "$name" + json_add_string type netdev + json_add_string sysfs "$sysfs" + json_add_string device "$dev" + json_select .. - uci batch <<EOF -set system.$cfg='gpio_switch' -set system.$cfg.name='$name' -set system.$cfg.gpio_pin='$gpio_pin' -set system.$cfg.value='$default' -EOF - UCIDEF_GPIO_SWITCHES_CHANGED=1 + json_select .. } -ucidef_commit_gpio_switches() -{ - [ "$UCIDEF_GPIO_SWITCHES_CHANGED" = "1" ] && uci commit system +ucidef_set_led_usbdev() { + 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 usb + json_add_string sysfs "$sysfs" + json_add_string device "$dev" + json_select .. + + json_select .. } -ucidef_set_interface_loopback() { - uci batch <<EOF -set network.loopback='interface' -set network.loopback.ifname='lo' -set network.loopback.proto='static' -set network.loopback.ipaddr='127.0.0.1' -set network.loopback.netmask='255.0.0.0' -set network.globals='globals' -set network.globals.ula_prefix='auto' -EOF +ucidef_set_led_wlan() { + local cfg="led_$1" + local name="$2" + local sysfs="$3" + local trigger="$4" + + json_select_object led + + 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_select .. + + json_select .. } -ucidef_set_interface_raw() { - local cfg=$1 - local ifname=$2 - local proto=${3:-"none"} +ucidef_set_led_switch() { + local cfg="led_$1" + local name="$2" + local sysfs="$3" + local trigger="$4" + local port_mask="$5" + + json_select_object led + + 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" + json_select .. - uci batch <<EOF -set network.$cfg='interface' -set network.$cfg.ifname='$ifname' -set network.$cfg.proto='$proto' -EOF + json_select .. } -ucidef_set_interface_lan() { - local ifname=$1 - - uci batch <<EOF -set network.lan='interface' -set network.lan.ifname='$ifname' -set network.lan.force_link=1 -set network.lan.type='bridge' -set network.lan.proto='static' -set network.lan.ipaddr='192.168.1.1' -set network.lan.netmask='255.255.255.0' -set network.lan.ip6assign='60' -EOF +ucidef_set_led_default() { + local cfg="led_$1" + local name="$2" + local sysfs="$3" + local default="$4" + + json_select_object led + + json_select_object "$1" + json_add_string name "$name" + json_add_string sysfs "$sysfs" + json_add_string default "$default" + json_select .. + + json_select .. } -ucidef_set_interface_wan() { - local ifname=$1 - - uci batch <<EOF -set network.wan='interface' -set network.wan.ifname='$ifname' -set network.wan.proto='dhcp' -set network.wan6='interface' -set network.wan6.ifname='$ifname' -set network.wan6.proto='dhcpv6' -EOF +ucidef_set_led_gpio() { + local cfg="led_$1" + local name="$2" + local sysfs="$3" + local gpio="$4" + local inverted="$5" + + json_select_object led + + json_select_object "$1" + json_add_string type gpio + 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_select .. + + json_select .. } -ucidef_set_interfaces_lan_wan() { - local lan_ifname=$1 - local wan_ifname=$2 +ucidef_set_led_ide() { + local cfg="led_$1" + local name="$2" + local sysfs="$3" + + json_select_object led - ucidef_set_interface_lan "$lan_ifname" - ucidef_set_interface_wan "$wan_ifname" + 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_interface_macaddr() { - local ifname=$1 - local mac=$2 +ucidef_set_led_timer() { + local cfg="led_$1" + local name="$2" + local sysfs="$3" + local delayon="$4" + local delayoff="$5" + + json_select_object led - uci batch <<EOF -set network.$ifname.macaddr='$mac' -EOF + 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_add_switch() { - local name=$1 - local reset=$2 - local enable=$3 - uci batch <<EOF -add network switch -set network.@switch[-1].name='$name' -set network.@switch[-1].reset='$reset' -set network.@switch[-1].enable_vlan='$enable' -EOF +ucidef_set_led_rssi() { + local cfg="led_$1" + local name="$2" + local sysfs="$3" + local iface="$4" + local minq="$5" + local maxq="$6" + local offset="$7" + local factor="$8" + + json_select_object led + + 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_select .. + + json_select .. } -ucidef_add_switch_vlan() { - local device=$1 - local vlan=$2 - local ports=$3 - uci batch <<EOF -add network switch_vlan -set network.@switch_vlan[-1].device='$device' -set network.@switch_vlan[-1].vlan='$vlan' -set network.@switch_vlan[-1].ports='$ports' -EOF +ucidef_set_rssimon() { + local dev="$1" + local refresh="$2" + local threshold="$3" + + json_select_object rssimon + + json_select_object "$dev" + [ -n "$refresh" ] && json_add_int refresh "$refresh" + [ -n "$threshold" ] && json_add_int threshold "$threshold" + json_select .. + + json_select .. + } -ucidef_add_switch_port() { - local device=$1 - local port=$2 - uci batch <<EOF -add network switch_port -set network.@switch_port[-1].device='$device' -set network.@switch_port[-1].port='$port' -EOF +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() { + json_dump -i > /tmp/.board.json + mv /tmp/.board.json ${CFG} +} |