From 67e1c8701215724dcee9fabcbd7a397ea76e1a9d Mon Sep 17 00:00:00 2001 From: Jo-Philipp Wich Date: Fri, 11 Dec 2015 15:26:06 +0000 Subject: [PATCH] all: drop old uci-defaults.sh Replace former uci-defaults.sh implementation with the uci-defaults-new.sh one and update all users accordingly. Signed-off-by: Jo-Philipp Wich SVN-Revision: 47867 --- .../files/lib/functions/uci-defaults-new.sh | 576 ------------- .../files/lib/functions/uci-defaults.sh | 789 +++++++++++------- .../ar7/base-files/etc/board.d/02_network | 2 +- .../ar71xx/base-files/etc/board.d/01_leds | 2 +- .../ar71xx/base-files/etc/board.d/02_network | 2 +- .../base-files/etc/board.d/03_gpio_switches | 2 +- .../arc770/base-files/etc/board.d/02_network | 2 +- .../at91/base-files/etc/board.d/02_network | 2 +- .../ath25/base-files/etc/board.d/01_leds | 2 +- .../ath25/base-files/etc/board.d/02_network | 2 +- .../bcm53xx/base-files/etc/board.d/02_network | 2 +- .../base-files/etc/board.d/02_network | 2 +- .../brcm47xx/base-files/etc/board.d/01_detect | 2 +- .../brcm63xx/base-files/etc/board.d/01_leds | 2 +- .../base-files/etc/board.d/02_network | 2 +- .../imx6/base-files/etc/board.d/02_network | 2 +- .../ipq806x/base-files/etc/board.d/01_leds | 2 +- .../ipq806x/base-files/etc/board.d/02_network | 2 +- .../kirkwood/base-files/etc/board.d/01_leds | 2 +- .../base-files/etc/board.d/02_network | 2 +- .../lantiq/base-files/etc/board.d/01_leds | 2 +- .../lantiq/base-files/etc/board.d/02_network | 2 +- .../malta/base-files/etc/board.d/00_model | 2 +- .../malta/base-files/etc/board.d/02_network | 2 +- .../mcs814x/base-files/etc/board.d/01_leds | 2 +- .../mcs814x/base-files/etc/board.d/02_network | 2 +- .../mpc85xx/base-files/etc/board.d/02_network | 2 +- .../mvebu/base-files/etc/board.d/01_leds | 2 +- .../mvebu/base-files/etc/board.d/02_network | 2 +- .../mxs/base-files/etc/board.d/02_network | 2 +- .../base-files/etc/board.d/02_network | 2 +- .../octeon/base-files/etc/board.d/01_network | 2 +- .../orion/base-files/etc/board.d/02_network | 2 +- .../oxnas/base-files/etc/board.d/01_leds | 2 +- .../oxnas/base-files/etc/board.d/02_network | 2 +- .../ramips/base-files/etc/board.d/01_leds | 2 +- .../ramips/base-files/etc/board.d/02_network | 2 +- .../realview/base-files/etc/board.d/00_model | 2 +- .../base-files/etc/board.d/02_network | 2 +- .../sunxi/base-files/etc/board.d/02_network | 2 +- 40 files changed, 548 insertions(+), 893 deletions(-) delete mode 100755 package/base-files/files/lib/functions/uci-defaults-new.sh mode change 100644 => 100755 package/base-files/files/lib/functions/uci-defaults.sh 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 old mode 100644 new mode 100755 index 2658d439ac..de3f180cbb --- a/package/base-files/files/lib/functions/uci-defaults.sh +++ b/package/base-files/files/lib/functions/uci-defaults.sh @@ -1,197 +1,527 @@ -#!/bin/sh -# Copyright (C) 2011 OpenWrt.org +#!/bin/ash -UCIDEF_LEDS_CHANGED=0 -UCIDEF_GPIO_SWITCHES_CHANGED=0 +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 + local name="$2" + local sysfs="$3" + local dev="$4" - uci -q get system.$cfg && return 0 + json_select_object led - uci batch < /tmp/.board.json + mv /tmp/.board.json ${CFG} } - -ucidef_set_interface_raw() { - local cfg=$1 - local ifname=$2 - local proto=${3:-"none"} - - uci batch <