tools/patchelf: update to 0.18.0
[openwrt/staging/dedeckeh.git] / package / base-files / files / lib / functions / uci-defaults.sh
1 . /lib/functions.sh
2 . /usr/share/libubox/jshn.sh
3
4 json_select_array() {
5 local _json_no_warning=1
6
7 json_select "$1"
8 [ $? = 0 ] && return
9
10 json_add_array "$1"
11 json_close_array
12
13 json_select "$1"
14 }
15
16 json_select_object() {
17 local _json_no_warning=1
18
19 json_select "$1"
20 [ $? = 0 ] && return
21
22 json_add_object "$1"
23 json_close_object
24
25 json_select "$1"
26 }
27
28 ucidef_set_interface() {
29 local network=$1; shift
30
31 [ -z "$network" ] && return
32
33 json_select_object network
34 json_select_object "$network"
35
36 while [ -n "$1" ]; do
37 local opt=$1; shift
38 local val=$1; shift
39
40 [ -n "$opt" -a -n "$val" ] || break
41
42 [ "$opt" = "device" -a "$val" != "${val/ //}" ] && {
43 json_select_array "ports"
44 for e in $val; do json_add_string "" "$e"; done
45 json_close_array
46 } || {
47 json_add_string "$opt" "$val"
48 }
49 done
50
51 if ! json_is_a protocol string; then
52 case "$network" in
53 lan) json_add_string protocol static ;;
54 wan) json_add_string protocol dhcp ;;
55 *) json_add_string protocol none ;;
56 esac
57 fi
58
59 json_select ..
60 json_select ..
61 }
62
63 ucidef_set_board_id() {
64 json_select_object model
65 json_add_string id "$1"
66 json_select ..
67 }
68
69 ucidef_set_model_name() {
70 json_select_object model
71 json_add_string name "$1"
72 json_select ..
73 }
74
75 ucidef_set_compat_version() {
76 json_select_object system
77 json_add_string compat_version "${1:-1.0}"
78 json_select ..
79 }
80
81 ucidef_set_interface_lan() {
82 ucidef_set_interface "lan" device "$1" protocol "${2:-static}"
83 }
84
85 ucidef_set_interface_wan() {
86 ucidef_set_interface "wan" device "$1" protocol "${2:-dhcp}"
87 }
88
89 ucidef_set_interfaces_lan_wan() {
90 local lan_if="$1"
91 local wan_if="$2"
92
93 ucidef_set_interface_lan "$lan_if"
94 ucidef_set_interface_wan "$wan_if"
95 }
96
97 ucidef_set_bridge_device() {
98 json_select_object bridge
99 json_add_string name "${1:-switch0}"
100 json_select ..
101 }
102
103 ucidef_set_bridge_mac() {
104 json_select_object bridge
105 json_add_string macaddr "${1}"
106 json_select ..
107 }
108
109 ucidef_set_network_device_mac() {
110 json_select_object "network-device"
111 json_select_object "${1}"
112 json_add_string macaddr "${2}"
113 json_select ..
114 json_select ..
115 }
116
117 ucidef_set_network_device_path() {
118 json_select_object "network_device"
119 json_select_object "$1"
120 json_add_string path "$2"
121 json_select ..
122 json_select ..
123 }
124
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
128
129 n_ports=$((n_ports + 1))
130
131 json_select_array ports
132 json_add_object
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"
139 json_close_object
140 json_select ..
141
142 # record pointer to cpu entry for lookup in _ucidef_finish_switch_roles()
143 [ -n "$device" ] && {
144 export "cpu$n_cpu=$n_ports"
145 n_cpu=$((n_cpu + 1))
146 }
147
148 # create/append object to role list
149 [ -n "$role" ] && {
150 json_select_array roles
151
152 if [ "$role" != "$prev_role" ]; then
153 json_add_object
154 json_add_string role "$role"
155 json_add_string ports "$num"
156 json_close_object
157
158 prev_role="$role"
159 n_vlan=$((n_vlan + 1))
160 else
161 json_select_object "$n_vlan"
162 json_get_var port ports
163 json_add_string ports "$port $num"
164 json_select ..
165 fi
166
167 json_select ..
168 }
169 }
170
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
174
175 json_select switch
176 json_select "$name"
177 json_get_keys roles roles
178 json_select ..
179 json_select ..
180
181 for index in $roles; do
182 eval "port=\$cpu$(((index - 1) % n_cpu))"
183
184 json_select switch
185 json_select "$name"
186 json_select ports
187 json_select "$port"
188 json_get_vars num device need_tag want_untag
189 json_select ..
190 json_select ..
191
192 if [ ${need_tag:-0} -eq 1 -o ${want_untag:-0} -ne 1 ]; then
193 num="${num}t"
194 device="${device}.${index}"
195 fi
196
197 json_select roles
198 json_select "$index"
199 json_get_vars role ports
200 json_add_string ports "$ports $num"
201 json_add_string device "$device"
202 json_select ..
203 json_select ..
204 json_select ..
205 json_select ..
206
207 json_select_object network
208 local devices
209
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"
215 fi
216 json_select ..
217 json_select ..
218
219 ucidef_set_interface "$role" device "$devices"
220 done
221 }
222
223 ucidef_set_ar8xxx_switch_mib() {
224 local name="$1"
225 local type="$2"
226 local interval="$3"
227
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
232 json_select ..
233 json_select ..
234 }
235
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
241
242 json_select_object switch
243 json_select_object "$name"
244 json_add_boolean enable 1
245 json_add_boolean reset 1
246
247 for port in "$@"; do
248 case "$port" in
249 [0-9]*@*)
250 num="${port%%@*}"
251 device="${port##*@}"
252 need_tag=0
253 want_untag=0
254 [ "${num%t}" != "$num" ] && {
255 num="${num%t}"
256 need_tag=1
257 }
258 [ "${num%u}" != "$num" ] && {
259 num="${num%u}"
260 want_untag=1
261 }
262 ;;
263 [0-9]*:*:[0-9]*)
264 num="${port%%:*}"
265 index="${port##*:}"
266 role="${port#[0-9]*:}"; role="${role%:*}"
267 ;;
268 [0-9]*:*)
269 num="${port%%:*}"
270 role="${port##*:}"
271 ;;
272 esac
273
274 if [ -n "$num" ] && [ -n "$device$role" ]; then
275 _ucidef_add_switch_port
276 fi
277
278 unset num device role index need_tag want_untag
279 done
280 json_select ..
281 json_select ..
282
283 _ucidef_finish_switch_roles
284 }
285
286 ucidef_add_switch_attr() {
287 local name="$1"
288 local key="$2"
289 local val="$3"
290
291 json_select_object switch
292 json_select_object "$name"
293
294 case "$val" in
295 true|false) [ "$val" != "true" ]; json_add_boolean "$key" $? ;;
296 [0-9]) json_add_int "$key" "$val" ;;
297 *) json_add_string "$key" "$val" ;;
298 esac
299
300 json_select ..
301 json_select ..
302 }
303
304 ucidef_add_switch_port_attr() {
305 local name="$1"
306 local port="$2"
307 local key="$3"
308 local val="$4"
309 local ports i num
310
311 json_select_object switch
312 json_select_object "$name"
313
314 json_get_keys ports ports
315 json_select_array ports
316
317 for i in $ports; do
318 json_select "$i"
319 json_get_var num num
320
321 if [ -n "$num" ] && [ $num -eq $port ]; then
322 json_select_object attr
323
324 case "$val" in
325 true|false) [ "$val" != "true" ]; json_add_boolean "$key" $? ;;
326 [0-9]) json_add_int "$key" "$val" ;;
327 *) json_add_string "$key" "$val" ;;
328 esac
329
330 json_select ..
331 fi
332
333 json_select ..
334 done
335
336 json_select ..
337 json_select ..
338 json_select ..
339 }
340
341 ucidef_set_interface_macaddr() {
342 local network="$1"
343 local macaddr="$2"
344
345 ucidef_set_interface "$network" macaddr "$macaddr"
346 }
347
348 ucidef_set_label_macaddr() {
349 local macaddr="$1"
350
351 json_select_object system
352 json_add_string label_macaddr "$macaddr"
353 json_select ..
354 }
355
356 ucidef_add_atm_bridge() {
357 local vpi="$1"
358 local vci="$2"
359 local encaps="$3"
360 local payload="$4"
361 local nameprefix="$5"
362
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"
370 json_select ..
371 json_select ..
372 }
373
374 ucidef_add_adsl_modem() {
375 local annex="$1"
376 local firmware="$2"
377
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"
383 json_select ..
384 json_select ..
385 }
386
387 ucidef_add_vdsl_modem() {
388 local annex="$1"
389 local tone="$2"
390 local xfer_mode="$3"
391
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"
398 json_select ..
399 json_select ..
400 }
401
402 ucidef_set_led_ataport() {
403 _ucidef_set_led_trigger "$1" "$2" "$3" ata"$4"
404 }
405
406 _ucidef_set_led_common() {
407 local cfg="led_$1"
408 local name="$2"
409 local sysfs="$3"
410
411 json_select_object led
412
413 json_select_object "$1"
414 json_add_string name "$name"
415 json_add_string sysfs "$sysfs"
416 }
417
418 ucidef_set_led_default() {
419 local default="$4"
420
421 _ucidef_set_led_common "$1" "$2" "$3"
422
423 json_add_string default "$default"
424 json_select ..
425
426 json_select ..
427 }
428
429 ucidef_set_led_heartbeat() {
430 _ucidef_set_led_common "$1" "$2" "$3"
431
432 json_add_string trigger heartbeat
433 json_select ..
434
435 json_select ..
436 }
437
438 ucidef_set_led_gpio() {
439 local gpio="$4"
440 local inverted="$5"
441
442 _ucidef_set_led_common "$1" "$2" "$3"
443
444 json_add_string trigger "$trigger"
445 json_add_string type gpio
446 json_add_int gpio "$gpio"
447 json_add_boolean inverted "$inverted"
448 json_select ..
449
450 json_select ..
451 }
452
453 ucidef_set_led_ide() {
454 _ucidef_set_led_trigger "$1" "$2" "$3" disk-activity
455 }
456
457 ucidef_set_led_netdev() {
458 local dev="$4"
459 local mode="${5:-link tx rx}"
460
461 _ucidef_set_led_common "$1" "$2" "$3"
462
463 json_add_string type netdev
464 json_add_string device "$dev"
465 json_add_string mode "$mode"
466 json_select ..
467
468 json_select ..
469 }
470
471 ucidef_set_led_oneshot() {
472 _ucidef_set_led_timer $1 $2 $3 "oneshot" $4 $5
473 }
474
475 ucidef_set_led_portstate() {
476 local port_state="$4"
477
478 _ucidef_set_led_common "$1" "$2" "$3"
479
480 json_add_string trigger port_state
481 json_add_string type portstate
482 json_add_string port_state "$port_state"
483 json_select ..
484
485 json_select ..
486 }
487
488 ucidef_set_led_rssi() {
489 local iface="$4"
490 local minq="$5"
491 local maxq="$6"
492 local offset="${7:-0}"
493 local factor="${8:-1}"
494
495 _ucidef_set_led_common "$1" "$2" "$3"
496
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"
504 json_select ..
505
506 json_select ..
507 }
508
509 ucidef_set_led_switch() {
510 local trigger_name="$4"
511 local port_mask="$5"
512 local speed_mask="$6"
513 local mode="$7"
514
515 _ucidef_set_led_common "$1" "$2" "$3"
516
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"
522 json_select ..
523
524 json_select ..
525 }
526
527 _ucidef_set_led_timer() {
528 local trigger_name="$4"
529 local delayon="$5"
530 local delayoff="$6"
531
532 _ucidef_set_led_common "$1" "$2" "$3"
533
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"
538 json_select ..
539
540 json_select ..
541 }
542
543 ucidef_set_led_timer() {
544 _ucidef_set_led_timer $1 $2 $3 "timer" $4 $5
545 }
546
547 _ucidef_set_led_trigger() {
548 local trigger_name="$4"
549
550 _ucidef_set_led_common "$1" "$2" "$3"
551
552 json_add_string trigger "$trigger_name"
553 json_select ..
554
555 json_select ..
556 }
557
558 ucidef_set_led_usbdev() {
559 local dev="$4"
560
561 _ucidef_set_led_common "$1" "$2" "$3"
562
563 json_add_string type usb
564 json_add_string device "$dev"
565 json_select ..
566
567 json_select ..
568 }
569
570 ucidef_set_led_usbhost() {
571 _ucidef_set_led_trigger "$1" "$2" "$3" usb-host
572 }
573
574 ucidef_set_led_usbport() {
575 local obj="$1"
576 local name="$2"
577 local sysfs="$3"
578 shift
579 shift
580 shift
581
582 _ucidef_set_led_common "$obj" "$name" "$sysfs"
583
584 json_add_string type usbport
585 json_select_array ports
586 for port in "$@"; do
587 json_add_string port "$port"
588 done
589 json_select ..
590 json_select ..
591
592 json_select ..
593 }
594
595 ucidef_set_led_wlan() {
596 _ucidef_set_led_trigger "$1" "$2" "$3" "$4"
597 }
598
599 ucidef_set_rssimon() {
600 local dev="$1"
601 local refresh="$2"
602 local threshold="$3"
603
604 json_select_object rssimon
605
606 json_select_object "$dev"
607 [ -n "$refresh" ] && json_add_int refresh "$refresh"
608 [ -n "$threshold" ] && json_add_int threshold "$threshold"
609 json_select ..
610
611 json_select ..
612 }
613
614 ucidef_add_gpio_switch() {
615 local cfg="$1"
616 local name="$2"
617 local pin="$3"
618 local default="${4:-0}"
619
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"
625 json_select ..
626 json_select ..
627 }
628
629 ucidef_set_hostname() {
630 local hostname="$1"
631
632 json_select_object system
633 json_add_string hostname "$hostname"
634 json_select ..
635 }
636
637 ucidef_set_ntpserver() {
638 local server
639
640 json_select_object system
641 json_select_array ntpserver
642 for server in "$@"; do
643 json_add_string "" "$server"
644 done
645 json_select ..
646 json_select ..
647 }
648
649 ucidef_add_wlan() {
650 local path="$1"; shift
651
652 ucidef_wlan_idx=${ucidef_wlan_idx:-0}
653
654 json_select_object wlan
655 json_select_object "wl$ucidef_wlan_idx"
656 json_add_string path "$path"
657 json_add_fields "$@"
658 json_select ..
659 json_select ..
660
661 ucidef_wlan_idx="$((ucidef_wlan_idx + 1))"
662 }
663
664 board_config_update() {
665 json_init
666 [ -f ${CFG} ] && json_load "$(cat ${CFG})"
667
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)"
675 json_select ..
676 fi
677 }
678
679 board_config_flush() {
680 json_dump -i -o ${CFG}
681 }