ipq40xx: only include ath10k-board-qca4019 for the generic subtarget
[openwrt/staging/chunkeey.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_add_switch_port() {
118 # inherited: $num $device $need_tag $want_untag $role $index $prev_role
119 # inherited: $n_cpu $n_ports $n_vlan $cpu0 $cpu1 $cpu2 $cpu3 $cpu4 $cpu5
120
121 n_ports=$((n_ports + 1))
122
123 json_select_array ports
124 json_add_object
125 json_add_int num "$num"
126 [ -n "$device" ] && json_add_string device "$device"
127 [ -n "$need_tag" ] && json_add_boolean need_tag "$need_tag"
128 [ -n "$want_untag" ] && json_add_boolean want_untag "$want_untag"
129 [ -n "$role" ] && json_add_string role "$role"
130 [ -n "$index" ] && json_add_int index "$index"
131 json_close_object
132 json_select ..
133
134 # record pointer to cpu entry for lookup in _ucidef_finish_switch_roles()
135 [ -n "$device" ] && {
136 export "cpu$n_cpu=$n_ports"
137 n_cpu=$((n_cpu + 1))
138 }
139
140 # create/append object to role list
141 [ -n "$role" ] && {
142 json_select_array roles
143
144 if [ "$role" != "$prev_role" ]; then
145 json_add_object
146 json_add_string role "$role"
147 json_add_string ports "$num"
148 json_close_object
149
150 prev_role="$role"
151 n_vlan=$((n_vlan + 1))
152 else
153 json_select_object "$n_vlan"
154 json_get_var port ports
155 json_add_string ports "$port $num"
156 json_select ..
157 fi
158
159 json_select ..
160 }
161 }
162
163 _ucidef_finish_switch_roles() {
164 # inherited: $name $n_cpu $n_vlan $cpu0 $cpu1 $cpu2 $cpu3 $cpu4 $cpu5
165 local index role roles num device need_tag want_untag port ports
166
167 json_select switch
168 json_select "$name"
169 json_get_keys roles roles
170 json_select ..
171 json_select ..
172
173 for index in $roles; do
174 eval "port=\$cpu$(((index - 1) % n_cpu))"
175
176 json_select switch
177 json_select "$name"
178 json_select ports
179 json_select "$port"
180 json_get_vars num device need_tag want_untag
181 json_select ..
182 json_select ..
183
184 if [ ${need_tag:-0} -eq 1 -o ${want_untag:-0} -ne 1 ]; then
185 num="${num}t"
186 device="${device}.${index}"
187 fi
188
189 json_select roles
190 json_select "$index"
191 json_get_vars role ports
192 json_add_string ports "$ports $num"
193 json_add_string device "$device"
194 json_select ..
195 json_select ..
196 json_select ..
197 json_select ..
198
199 json_select_object network
200 local devices
201
202 json_select_object "$role"
203 # attach previous interfaces (for multi-switch devices)
204 json_get_var devices device
205 if ! list_contains devices "$device"; then
206 devices="${devices:+$devices }$device"
207 fi
208 json_select ..
209 json_select ..
210
211 ucidef_set_interface "$role" device "$devices"
212 done
213 }
214
215 ucidef_set_ar8xxx_switch_mib() {
216 local name="$1"
217 local type="$2"
218 local interval="$3"
219
220 json_select_object switch
221 json_select_object "$name"
222 json_add_int ar8xxx_mib_type $type
223 json_add_int ar8xxx_mib_poll_interval $interval
224 json_select ..
225 json_select ..
226 }
227
228 ucidef_add_switch() {
229 local name="$1"; shift
230 local port num role device index need_tag prev_role
231 local cpu0 cpu1 cpu2 cpu3 cpu4 cpu5
232 local n_cpu=0 n_vlan=0 n_ports=0
233
234 json_select_object switch
235 json_select_object "$name"
236 json_add_boolean enable 1
237 json_add_boolean reset 1
238
239 for port in "$@"; do
240 case "$port" in
241 [0-9]*@*)
242 num="${port%%@*}"
243 device="${port##*@}"
244 need_tag=0
245 want_untag=0
246 [ "${num%t}" != "$num" ] && {
247 num="${num%t}"
248 need_tag=1
249 }
250 [ "${num%u}" != "$num" ] && {
251 num="${num%u}"
252 want_untag=1
253 }
254 ;;
255 [0-9]*:*:[0-9]*)
256 num="${port%%:*}"
257 index="${port##*:}"
258 role="${port#[0-9]*:}"; role="${role%:*}"
259 ;;
260 [0-9]*:*)
261 num="${port%%:*}"
262 role="${port##*:}"
263 ;;
264 esac
265
266 if [ -n "$num" ] && [ -n "$device$role" ]; then
267 _ucidef_add_switch_port
268 fi
269
270 unset num device role index need_tag want_untag
271 done
272 json_select ..
273 json_select ..
274
275 _ucidef_finish_switch_roles
276 }
277
278 ucidef_add_switch_attr() {
279 local name="$1"
280 local key="$2"
281 local val="$3"
282
283 json_select_object switch
284 json_select_object "$name"
285
286 case "$val" in
287 true|false) [ "$val" != "true" ]; json_add_boolean "$key" $? ;;
288 [0-9]) json_add_int "$key" "$val" ;;
289 *) json_add_string "$key" "$val" ;;
290 esac
291
292 json_select ..
293 json_select ..
294 }
295
296 ucidef_add_switch_port_attr() {
297 local name="$1"
298 local port="$2"
299 local key="$3"
300 local val="$4"
301 local ports i num
302
303 json_select_object switch
304 json_select_object "$name"
305
306 json_get_keys ports ports
307 json_select_array ports
308
309 for i in $ports; do
310 json_select "$i"
311 json_get_var num num
312
313 if [ -n "$num" ] && [ $num -eq $port ]; then
314 json_select_object attr
315
316 case "$val" in
317 true|false) [ "$val" != "true" ]; json_add_boolean "$key" $? ;;
318 [0-9]) json_add_int "$key" "$val" ;;
319 *) json_add_string "$key" "$val" ;;
320 esac
321
322 json_select ..
323 fi
324
325 json_select ..
326 done
327
328 json_select ..
329 json_select ..
330 json_select ..
331 }
332
333 ucidef_set_interface_macaddr() {
334 local network="$1"
335 local macaddr="$2"
336
337 ucidef_set_interface "$network" macaddr "$macaddr"
338 }
339
340 ucidef_set_label_macaddr() {
341 local macaddr="$1"
342
343 json_select_object system
344 json_add_string label_macaddr "$macaddr"
345 json_select ..
346 }
347
348 ucidef_add_atm_bridge() {
349 local vpi="$1"
350 local vci="$2"
351 local encaps="$3"
352 local payload="$4"
353 local nameprefix="$5"
354
355 json_select_object dsl
356 json_select_object atmbridge
357 json_add_int vpi "$vpi"
358 json_add_int vci "$vci"
359 json_add_string encaps "$encaps"
360 json_add_string payload "$payload"
361 json_add_string nameprefix "$nameprefix"
362 json_select ..
363 json_select ..
364 }
365
366 ucidef_add_adsl_modem() {
367 local annex="$1"
368 local firmware="$2"
369
370 json_select_object dsl
371 json_select_object modem
372 json_add_string type "adsl"
373 json_add_string annex "$annex"
374 json_add_string firmware "$firmware"
375 json_select ..
376 json_select ..
377 }
378
379 ucidef_add_vdsl_modem() {
380 local annex="$1"
381 local tone="$2"
382 local xfer_mode="$3"
383
384 json_select_object dsl
385 json_select_object modem
386 json_add_string type "vdsl"
387 json_add_string annex "$annex"
388 json_add_string tone "$tone"
389 json_add_string xfer_mode "$xfer_mode"
390 json_select ..
391 json_select ..
392 }
393
394 ucidef_set_led_ataport() {
395 _ucidef_set_led_trigger "$1" "$2" "$3" ata"$4"
396 }
397
398 _ucidef_set_led_common() {
399 local cfg="led_$1"
400 local name="$2"
401 local sysfs="$3"
402
403 json_select_object led
404
405 json_select_object "$1"
406 json_add_string name "$name"
407 json_add_string sysfs "$sysfs"
408 }
409
410 ucidef_set_led_default() {
411 local default="$4"
412
413 _ucidef_set_led_common "$1" "$2" "$3"
414
415 json_add_string default "$default"
416 json_select ..
417
418 json_select ..
419 }
420
421 ucidef_set_led_heartbeat() {
422 _ucidef_set_led_common "$1" "$2" "$3"
423
424 json_add_string trigger heartbeat
425 json_select ..
426
427 json_select ..
428 }
429
430 ucidef_set_led_gpio() {
431 local gpio="$4"
432 local inverted="$5"
433
434 _ucidef_set_led_common "$1" "$2" "$3"
435
436 json_add_string trigger "$trigger"
437 json_add_string type gpio
438 json_add_int gpio "$gpio"
439 json_add_boolean inverted "$inverted"
440 json_select ..
441
442 json_select ..
443 }
444
445 ucidef_set_led_ide() {
446 _ucidef_set_led_trigger "$1" "$2" "$3" disk-activity
447 }
448
449 ucidef_set_led_netdev() {
450 local dev="$4"
451 local mode="${5:-link tx rx}"
452
453 _ucidef_set_led_common "$1" "$2" "$3"
454
455 json_add_string type netdev
456 json_add_string device "$dev"
457 json_add_string mode "$mode"
458 json_select ..
459
460 json_select ..
461 }
462
463 ucidef_set_led_oneshot() {
464 _ucidef_set_led_timer $1 $2 $3 "oneshot" $4 $5
465 }
466
467 ucidef_set_led_portstate() {
468 local port_state="$4"
469
470 _ucidef_set_led_common "$1" "$2" "$3"
471
472 json_add_string trigger port_state
473 json_add_string type portstate
474 json_add_string port_state "$port_state"
475 json_select ..
476
477 json_select ..
478 }
479
480 ucidef_set_led_rssi() {
481 local iface="$4"
482 local minq="$5"
483 local maxq="$6"
484 local offset="${7:-0}"
485 local factor="${8:-1}"
486
487 _ucidef_set_led_common "$1" "$2" "$3"
488
489 json_add_string type rssi
490 json_add_string name "$name"
491 json_add_string iface "$iface"
492 json_add_string minq "$minq"
493 json_add_string maxq "$maxq"
494 json_add_string offset "$offset"
495 json_add_string factor "$factor"
496 json_select ..
497
498 json_select ..
499 }
500
501 ucidef_set_led_switch() {
502 local trigger_name="$4"
503 local port_mask="$5"
504 local speed_mask="$6"
505 local mode="$7"
506
507 _ucidef_set_led_common "$1" "$2" "$3"
508
509 json_add_string trigger "$trigger_name"
510 json_add_string type switch
511 json_add_string mode "$mode"
512 json_add_string port_mask "$port_mask"
513 json_add_string speed_mask "$speed_mask"
514 json_select ..
515
516 json_select ..
517 }
518
519 _ucidef_set_led_timer() {
520 local trigger_name="$4"
521 local delayon="$5"
522 local delayoff="$6"
523
524 _ucidef_set_led_common "$1" "$2" "$3"
525
526 json_add_string type "$trigger_name"
527 json_add_string trigger "$trigger_name"
528 json_add_int delayon "$delayon"
529 json_add_int delayoff "$delayoff"
530 json_select ..
531
532 json_select ..
533 }
534
535 ucidef_set_led_timer() {
536 _ucidef_set_led_timer $1 $2 $3 "timer" $4 $5
537 }
538
539 _ucidef_set_led_trigger() {
540 local trigger_name="$4"
541
542 _ucidef_set_led_common "$1" "$2" "$3"
543
544 json_add_string trigger "$trigger_name"
545 json_select ..
546
547 json_select ..
548 }
549
550 ucidef_set_led_usbdev() {
551 local dev="$4"
552
553 _ucidef_set_led_common "$1" "$2" "$3"
554
555 json_add_string type usb
556 json_add_string device "$dev"
557 json_select ..
558
559 json_select ..
560 }
561
562 ucidef_set_led_usbhost() {
563 _ucidef_set_led_trigger "$1" "$2" "$3" usb-host
564 }
565
566 ucidef_set_led_usbport() {
567 local obj="$1"
568 local name="$2"
569 local sysfs="$3"
570 shift
571 shift
572 shift
573
574 _ucidef_set_led_common "$obj" "$name" "$sysfs"
575
576 json_add_string type usbport
577 json_select_array ports
578 for port in "$@"; do
579 json_add_string port "$port"
580 done
581 json_select ..
582 json_select ..
583
584 json_select ..
585 }
586
587 ucidef_set_led_wlan() {
588 _ucidef_set_led_trigger "$1" "$2" "$3" "$4"
589 }
590
591 ucidef_set_rssimon() {
592 local dev="$1"
593 local refresh="$2"
594 local threshold="$3"
595
596 json_select_object rssimon
597
598 json_select_object "$dev"
599 [ -n "$refresh" ] && json_add_int refresh "$refresh"
600 [ -n "$threshold" ] && json_add_int threshold "$threshold"
601 json_select ..
602
603 json_select ..
604 }
605
606 ucidef_add_gpio_switch() {
607 local cfg="$1"
608 local name="$2"
609 local pin="$3"
610 local default="${4:-0}"
611
612 json_select_object gpioswitch
613 json_select_object "$cfg"
614 json_add_string name "$name"
615 json_add_string pin "$pin"
616 json_add_int default "$default"
617 json_select ..
618 json_select ..
619 }
620
621 ucidef_set_hostname() {
622 local hostname="$1"
623
624 json_select_object system
625 json_add_string hostname "$hostname"
626 json_select ..
627 }
628
629 ucidef_set_ntpserver() {
630 local server
631
632 json_select_object system
633 json_select_array ntpserver
634 for server in "$@"; do
635 json_add_string "" "$server"
636 done
637 json_select ..
638 json_select ..
639 }
640
641 board_config_update() {
642 json_init
643 [ -f ${CFG} ] && json_load "$(cat ${CFG})"
644
645 # auto-initialize model id and name if applicable
646 if ! json_is_a model object; then
647 json_select_object model
648 [ -f "/tmp/sysinfo/board_name" ] && \
649 json_add_string id "$(cat /tmp/sysinfo/board_name)"
650 [ -f "/tmp/sysinfo/model" ] && \
651 json_add_string name "$(cat /tmp/sysinfo/model)"
652 json_select ..
653 fi
654 }
655
656 board_config_flush() {
657 json_dump -i -o ${CFG}
658 }