2 .
/usr
/share
/libubox
/jshn.sh
5 local _json_no_warning
=1
16 json_select_object
() {
17 local _json_no_warning
=1
28 ucidef_set_interface
() {
29 local network
=$1; shift
31 [ -z "$network" ] && return
33 json_select_object network
34 json_select_object
"$network"
40 [ -n "$opt" -a -n "$val" ] ||
break
42 [ "$opt" = "device" -a "$val" != "${val/ //}" ] && {
43 json_select_array
"ports"
44 for e
in $val; do json_add_string
"" "$e"; done
47 json_add_string
"$opt" "$val"
51 if ! json_is_a protocol string
; then
53 lan
) json_add_string protocol static
;;
54 wan
) json_add_string protocol dhcp
;;
55 *) json_add_string protocol none
;;
63 ucidef_set_board_id
() {
64 json_select_object model
65 json_add_string id
"$1"
69 ucidef_set_model_name
() {
70 json_select_object model
71 json_add_string name
"$1"
75 ucidef_set_compat_version
() {
76 json_select_object system
77 json_add_string compat_version
"${1:-1.0}"
81 ucidef_set_interface_lan
() {
82 ucidef_set_interface
"lan" device
"$1" protocol
"${2:-static}"
85 ucidef_set_interface_wan
() {
86 ucidef_set_interface
"wan" device
"$1" protocol
"${2:-dhcp}"
89 ucidef_set_interfaces_lan_wan
() {
93 ucidef_set_interface_lan
"$lan_if"
94 ucidef_set_interface_wan
"$wan_if"
97 ucidef_set_bridge_device
() {
98 json_select_object bridge
99 json_add_string name
"${1:-switch0}"
103 ucidef_set_bridge_mac
() {
104 json_select_object bridge
105 json_add_string macaddr
"${1}"
109 _ucidef_set_network_device_common
() {
110 json_select_object
"network_device"
111 json_select_object
"${1}"
112 json_add_string
"${2}" "${3}"
117 ucidef_set_network_device_mac
() {
118 _ucidef_set_network_device_common
$1 macaddr
$2
121 ucidef_set_network_device_path
() {
122 _ucidef_set_network_device_common
$1 path
$2
125 _ucidef_add_switch_port
() {
126 # inherited: $num $device $need_tag $want_untag $role $index $prev_role
127 # inherited: $n_cpu $n_ports $n_vlan $cpu0 $cpu1 $cpu2 $cpu3 $cpu4 $cpu5
129 n_ports
=$
((n_ports
+ 1))
131 json_select_array ports
133 json_add_int num
"$num"
134 [ -n "$device" ] && json_add_string device
"$device"
135 [ -n "$need_tag" ] && json_add_boolean need_tag
"$need_tag"
136 [ -n "$want_untag" ] && json_add_boolean want_untag
"$want_untag"
137 [ -n "$role" ] && json_add_string role
"$role"
138 [ -n "$index" ] && json_add_int index
"$index"
142 # record pointer to cpu entry for lookup in _ucidef_finish_switch_roles()
143 [ -n "$device" ] && {
144 export "cpu$n_cpu=$n_ports"
148 # create/append object to role list
150 json_select_array roles
152 if [ "$role" != "$prev_role" ]; then
154 json_add_string role
"$role"
155 json_add_string ports
"$num"
159 n_vlan
=$
((n_vlan
+ 1))
161 json_select_object
"$n_vlan"
162 json_get_var port ports
163 json_add_string ports
"$port $num"
171 _ucidef_finish_switch_roles
() {
172 # inherited: $name $n_cpu $n_vlan $cpu0 $cpu1 $cpu2 $cpu3 $cpu4 $cpu5
173 local index role roles num device need_tag want_untag port ports
177 json_get_keys roles roles
181 for index
in $roles; do
182 eval "port=\$cpu$(((index - 1) % n_cpu))"
188 json_get_vars num device need_tag want_untag
192 if [ ${need_tag:-0} -eq 1 -o ${want_untag:-0} -ne 1 ]; then
194 device
="${device}.${index}"
199 json_get_vars role ports
200 json_add_string ports
"$ports $num"
201 json_add_string device
"$device"
207 json_select_object network
210 json_select_object
"$role"
211 # attach previous interfaces (for multi-switch devices)
212 json_get_var devices device
213 if ! list_contains devices
"$device"; then
214 devices
="${devices:+$devices }$device"
219 ucidef_set_interface
"$role" device
"$devices"
223 ucidef_set_ar8xxx_switch_mib
() {
228 json_select_object switch
229 json_select_object
"$name"
230 json_add_int ar8xxx_mib_type
$type
231 json_add_int ar8xxx_mib_poll_interval
$interval
236 ucidef_add_switch
() {
237 local name
="$1"; shift
238 local port num role device index need_tag prev_role
239 local cpu0 cpu1 cpu2 cpu3 cpu4 cpu5
240 local n_cpu
=0 n_vlan
=0 n_ports
=0
242 json_select_object switch
243 json_select_object
"$name"
244 json_add_boolean
enable 1
245 json_add_boolean
reset 1
254 [ "${num%t}" != "$num" ] && {
258 [ "${num%u}" != "$num" ] && {
266 role
="${port#[0-9]*:}"; role
="${role%:*}"
274 if [ -n "$num" ] && [ -n "$device$role" ]; then
275 _ucidef_add_switch_port
278 unset num device role index need_tag want_untag
283 _ucidef_finish_switch_roles
286 ucidef_add_switch_attr
() {
291 json_select_object switch
292 json_select_object
"$name"
295 true|false
) [ "$val" != "true" ]; json_add_boolean
"$key" $?
;;
296 [0-9]) json_add_int
"$key" "$val" ;;
297 *) json_add_string
"$key" "$val" ;;
304 ucidef_add_switch_port_attr
() {
311 json_select_object switch
312 json_select_object
"$name"
314 json_get_keys ports ports
315 json_select_array ports
321 if [ -n "$num" ] && [ $num -eq $port ]; then
322 json_select_object attr
325 true|false
) [ "$val" != "true" ]; json_add_boolean
"$key" $?
;;
326 [0-9]) json_add_int
"$key" "$val" ;;
327 *) json_add_string
"$key" "$val" ;;
341 ucidef_set_interface_macaddr
() {
345 ucidef_set_interface
"$network" macaddr
"$macaddr"
348 ucidef_set_label_macaddr
() {
351 json_select_object system
352 json_add_string label_macaddr
"$macaddr"
356 ucidef_add_atm_bridge
() {
361 local nameprefix
="$5"
363 json_select_object dsl
364 json_select_object atmbridge
365 json_add_int vpi
"$vpi"
366 json_add_int vci
"$vci"
367 json_add_string encaps
"$encaps"
368 json_add_string payload
"$payload"
369 json_add_string nameprefix
"$nameprefix"
374 ucidef_add_adsl_modem
() {
378 json_select_object dsl
379 json_select_object modem
380 json_add_string
type "adsl"
381 json_add_string annex
"$annex"
382 json_add_string firmware
"$firmware"
387 ucidef_add_vdsl_modem
() {
392 json_select_object dsl
393 json_select_object modem
394 json_add_string
type "vdsl"
395 json_add_string annex
"$annex"
396 json_add_string tone
"$tone"
397 json_add_string xfer_mode
"$xfer_mode"
402 ucidef_set_led_ataport
() {
403 _ucidef_set_led_trigger
"$1" "$2" "$3" ata
"$4"
406 _ucidef_set_led_common
() {
411 json_select_object led
413 json_select_object
"$1"
414 json_add_string name
"$name"
415 json_add_string sysfs
"$sysfs"
418 ucidef_set_led_default
() {
421 _ucidef_set_led_common
"$1" "$2" "$3"
423 json_add_string default
"$default"
429 ucidef_set_led_heartbeat
() {
430 _ucidef_set_led_common
"$1" "$2" "$3"
432 json_add_string trigger heartbeat
438 ucidef_set_led_gpio
() {
442 _ucidef_set_led_common
"$1" "$2" "$3"
444 json_add_string trigger
"$trigger"
445 json_add_string
type gpio
446 json_add_int gpio
"$gpio"
447 json_add_boolean inverted
"$inverted"
453 ucidef_set_led_ide
() {
454 _ucidef_set_led_trigger
"$1" "$2" "$3" disk-activity
457 ucidef_set_led_netdev
() {
459 local mode
="${5:-link tx rx}"
461 _ucidef_set_led_common
"$1" "$2" "$3"
463 json_add_string
type netdev
464 json_add_string device
"$dev"
465 json_add_string mode
"$mode"
471 ucidef_set_led_oneshot
() {
472 _ucidef_set_led_timer
$1 $2 $3 "oneshot" $4 $5
475 ucidef_set_led_portstate
() {
476 local port_state
="$4"
478 _ucidef_set_led_common
"$1" "$2" "$3"
480 json_add_string trigger port_state
481 json_add_string
type portstate
482 json_add_string port_state
"$port_state"
488 ucidef_set_led_rssi
() {
492 local offset
="${7:-0}"
493 local factor="${8:-1}"
495 _ucidef_set_led_common
"$1" "$2" "$3"
497 json_add_string
type rssi
498 json_add_string name
"$name"
499 json_add_string iface
"$iface"
500 json_add_string minq
"$minq"
501 json_add_string maxq
"$maxq"
502 json_add_string offset
"$offset"
503 json_add_string
factor "$factor"
509 ucidef_set_led_switch
() {
510 local trigger_name
="$4"
512 local speed_mask
="$6"
515 _ucidef_set_led_common
"$1" "$2" "$3"
517 json_add_string trigger
"$trigger_name"
518 json_add_string
type switch
519 json_add_string mode
"$mode"
520 json_add_string port_mask
"$port_mask"
521 json_add_string speed_mask
"$speed_mask"
527 _ucidef_set_led_timer
() {
528 local trigger_name
="$4"
532 _ucidef_set_led_common
"$1" "$2" "$3"
534 json_add_string
type "$trigger_name"
535 json_add_string trigger
"$trigger_name"
536 json_add_int delayon
"$delayon"
537 json_add_int delayoff
"$delayoff"
543 ucidef_set_led_timer
() {
544 _ucidef_set_led_timer
$1 $2 $3 "timer" $4 $5
547 _ucidef_set_led_trigger
() {
548 local trigger_name
="$4"
550 _ucidef_set_led_common
"$1" "$2" "$3"
552 json_add_string trigger
"$trigger_name"
558 ucidef_set_led_usbdev
() {
561 _ucidef_set_led_common
"$1" "$2" "$3"
563 json_add_string
type usb
564 json_add_string device
"$dev"
570 ucidef_set_led_usbhost
() {
571 _ucidef_set_led_trigger
"$1" "$2" "$3" usb-host
574 ucidef_set_led_usbport
() {
582 _ucidef_set_led_common
"$obj" "$name" "$sysfs"
584 json_add_string
type usbport
585 json_select_array ports
587 json_add_string port
"$port"
595 ucidef_set_led_wlan
() {
596 _ucidef_set_led_trigger
"$1" "$2" "$3" "$4"
599 ucidef_set_rssimon
() {
604 json_select_object rssimon
606 json_select_object
"$dev"
607 [ -n "$refresh" ] && json_add_int refresh
"$refresh"
608 [ -n "$threshold" ] && json_add_int threshold
"$threshold"
614 ucidef_add_gpio_switch
() {
618 local default
="${4:-0}"
620 json_select_object gpioswitch
621 json_select_object
"$cfg"
622 json_add_string name
"$name"
623 json_add_string pin
"$pin"
624 json_add_int default
"$default"
629 ucidef_set_hostname
() {
632 json_select_object system
633 json_add_string hostname
"$hostname"
637 ucidef_set_ntpserver
() {
640 json_select_object system
641 json_select_array ntpserver
642 for server
in "$@"; do
643 json_add_string
"" "$server"
650 local path
="$1"; shift
652 ucidef_wlan_idx
=${ucidef_wlan_idx:-0}
654 json_select_object wlan
655 json_select_object
"wl$ucidef_wlan_idx"
656 json_add_string path
"$path"
661 ucidef_wlan_idx
="$((ucidef_wlan_idx + 1))"
664 board_config_update
() {
666 [ -f ${CFG} ] && json_load
"$(cat ${CFG})"
668 # auto-initialize model id and name if applicable
669 if ! json_is_a model object
; then
670 json_select_object model
671 [ -f "/tmp/sysinfo/board_name" ] && \
672 json_add_string id
"$(cat /tmp/sysinfo/board_name)"
673 [ -f "/tmp/sysinfo/model" ] && \
674 json_add_string name
"$(cat /tmp/sysinfo/model)"
679 board_config_flush
() {
680 json_dump
-i -o ${CFG}