Replace former uci-defaults.sh implementation with the uci-defaults-new.sh one and update all users accordingly. Signed-off-by: Jo-Philipp Wich <jow@openwrt.org> SVN-Revision: 47867master
parent
b0b8293b7e
commit
67e1c87012
@ -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} |
||||
} |
@ -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} |
||||
} |
||||
|
Loading…
Reference in new issue