e79ec99f531ebe8fc7d76c561e468f7afb651737
[openwrt.git] / package / base-files / files / lib / functions / uci-defaults-new.sh
1 #!/bin/ash
2
3 CFG=/etc/board.json
4
5 . /usr/share/libubox/jshn.sh
6
7 json_select_array() {
8         local _json_no_warning=1
9
10         json_select "$1"
11         [ $? = 0 ] && return
12
13         json_add_array "$1"
14         json_close_array
15
16         json_select "$1"
17 }
18
19 json_select_object() {
20         local _json_no_warning=1
21
22         json_select "$1"
23         [ $? = 0 ] && return
24
25         json_add_object "$1"
26         json_close_object
27
28         json_select "$1"
29 }
30
31 _ucidef_set_interface() {
32         local name="$1"
33         local iface="$2"
34
35         json_select_object "$name"
36         json_add_string ifname "${iface%%.*}"
37         [ "$iface" = "${iface%%.*}" ] || json_add_boolean create_vlan 1
38         json_select ..
39 }
40
41 ucidef_set_interface_loopback()
42 {
43         # stub
44         local a="$1"
45 }
46
47 ucidef_set_interface_lan() {
48         local lan_if="$1"
49
50         json_select_object network
51         _ucidef_set_interface lan $lan_if
52         json_select ..
53 }
54
55 ucidef_set_interface_wan() {
56         local wan_if="$1"
57
58         json_select_object network
59         _ucidef_set_interface wan $wan_if
60         json_select ..
61 }
62
63 ucidef_set_interfaces_lan_wan() {
64         local lan_if="$1"
65         local wan_if="$2"
66
67         json_select_object network
68         _ucidef_set_interface lan $lan_if
69         _ucidef_set_interface wan $wan_if
70         json_select ..
71 }
72
73 ucidef_add_switch() {
74         local name="$1"
75         local reset="$2"
76         local enable="$3"
77
78         json_select_object switch
79
80         json_select_object "$name"
81         json_add_boolean enable "$enable"
82         json_add_boolean reset "$reset"
83         json_select ..
84
85         json_select ..
86 }
87
88 ucidef_add_switch_attr() {
89         local name="$1"
90         local key="$2"
91         local val="$3"
92
93         json_select_object switch
94         json_select_object "$name"
95
96         case "$val" in
97                 [0-9]) json_add_int "$key" "$val" ;;
98                 *) json_add_string "$key" "$val" ;;
99         esac
100
101         json_select ..
102         json_select ..
103 }
104
105 ucidef_add_switch_ports() {
106         local name="$1"; shift
107         local port num role dev idx
108
109         json_select_object switch
110         json_select_object "$name"
111         json_select_array ports
112
113         for port in "$@"; do
114                 case "$port" in
115                         [0-9]*@*)
116                                 num="${port%%@*}"
117                                 dev="${port##*@}"
118                         ;;
119                         [0-9]*:*:[0-9]*)
120                                 num="${port%%:*}"
121                                 idx="${port##*:}"
122                                 role="${port#[0-9]*:}"; role="${role%:*}"
123                         ;;
124                         [0-9]*:*)
125                                 num="${port%%:*}"
126                                 role="${port##*:}"
127                         ;;
128                 esac
129
130                 if [ -n "$num" ] && [ -n "$dev$role" ]; then
131                         json_add_object
132                         json_add_int num "$num"
133                         [ -n "$dev" ] && json_add_string device "$dev"
134                         [ -n "$role" ] && json_add_string role "$role"
135                         [ -n "$idx" ] && json_add_int index "$idx"
136                         json_close_object
137                 fi
138
139                 unset num dev role idx
140         done
141
142         json_select ..
143         json_select ..
144         json_select ..
145 }
146
147 ucidef_add_switch_port_attr() {
148         local name="$1"
149         local port="$2"
150         local key="$3"
151         local val="$4"
152         local ports i num
153
154         json_select_object switch
155         json_select_object "$name"
156
157         json_get_keys ports ports
158         json_select_array ports
159
160         for i in $ports; do
161                 json_select "$i"
162                 json_get_var num num
163
164                 if [ -n "$num" ] && [ $num -eq $port ]; then
165                         json_select_object attr
166
167                         case "$val" in
168                                 [0-9]) json_add_int "$key" "$val" ;;
169                                 *) json_add_string "$key" "$val" ;;
170                         esac
171
172                         json_select ..
173                 fi
174
175                 json_select ..
176         done
177
178         json_select ..
179         json_select ..
180         json_select ..
181 }
182
183 ucidef_add_switch_vlan() {
184         local name="$1"
185         local vlan="$2"
186         local ports="$3"
187         local cpu_port=''
188
189         case $vlan in
190         1)      vlan=lan;;
191         2)      vlan=wan;;
192         *)      vlan=vlan$vlan;;
193         esac
194
195         json_select_object switch
196         json_select_object "$name"
197         json_select_object vlans
198
199         json_add_array "$vlan"
200         for p in $ports; do
201                 if [ ${p%t} != $p ]; then
202                         cpu_port=$p
203                 else
204                         json_add_int "" $p
205                 fi
206         done
207         json_close_array
208
209         json_select ..
210         [ -n "$cpu_port" ] && json_add_int cpu_port "$cpu_port"
211         json_select ..
212         json_select ..
213 }
214
215 ucidef_set_interface_macaddr() {
216         local network="$1"
217         local macaddr="$2"
218
219         json_select_object network
220
221         json_select "$network"
222         [ $? -eq 0 ] || {
223                 json_select ..
224                 return
225         }
226
227         json_add_string macaddr "$macaddr"
228         json_select ..
229
230         json_select ..
231 }
232
233 ucidef_set_led_netdev() {
234         local cfg="led_$1"
235         local name="$2"
236         local sysfs="$3"
237         local dev="$4"
238
239         json_select_object led
240
241         json_select_object "$1"
242         json_add_string name "$name"
243         json_add_string type netdev
244         json_add_string sysfs "$sysfs"
245         json_add_string device "$dev"
246         json_select ..
247
248         json_select ..
249 }
250
251 ucidef_set_led_usbdev() {
252         local cfg="led_$1"
253         local name="$2"
254         local sysfs="$3"
255         local dev="$4"
256
257         json_select_object led
258
259         json_select_object "$1"
260         json_add_string name "$name"
261         json_add_string type usb
262         json_add_string sysfs "$sysfs"
263         json_add_string device "$dev"
264         json_select ..
265
266         json_select ..
267 }
268
269 ucidef_set_led_wlan() {
270         local cfg="led_$1"
271         local name="$2"
272         local sysfs="$3"
273         local trigger="$4"
274
275         json_select_object led
276
277         json_select_object "$1"
278         json_add_string name "$name"
279         json_add_string type trigger
280         json_add_string sysfs "$sysfs"
281         json_add_string trigger "$trigger"
282         json_select ..
283
284         json_select ..
285 }
286
287 ucidef_set_led_switch() {
288         local cfg="led_$1"
289         local name="$2"
290         local sysfs="$3"
291         local trigger="$4"
292         local port_mask="$5"
293
294         json_select_object led
295
296         json_select_object "$1"
297         json_add_string name "$name"
298         json_add_string type switch
299         json_add_string sysfs "$sysfs"
300         json_add_string trigger "$trigger"
301         json_add_string port_mask "$port_mask"
302         json_select ..
303
304         json_select ..
305 }
306
307 ucidef_set_led_default() {
308         local cfg="led_$1"
309         local name="$2"
310         local sysfs="$3"
311         local default="$4"
312
313         json_select_object led
314
315         json_select_object "$1"
316         json_add_string name "$name"
317         json_add_string sysfs "$sysfs"
318         json_add_string default "$default"
319         json_select ..
320
321         json_select ..
322 }
323
324 ucidef_set_led_gpio() {
325         local cfg="led_$1"
326         local name="$2"
327         local sysfs="$3"
328         local gpio="$4"
329         local inverted="$5"
330
331         json_select_object led
332
333         json_select_object "$1"
334         json_add_string type gpio
335         json_add_string name "$name"
336         json_add_string sysfs "$sysfs"
337         json_add_string trigger "$trigger"
338         json_add_int gpio "$gpio"
339         json_add_boolean inverted "$inverted"
340         json_select ..
341
342         json_select ..
343 }
344
345 ucidef_set_led_rssi() {
346         local cfg="led_$1"
347         local name="$2"
348         local sysfs="$3"
349         local iface="$4"
350         local minq="$5"
351         local maxq="$6"
352         local offset="$7"
353         local factor="$8"
354
355         json_select_object led
356
357         json_select_object "$1"
358         json_add_string type rssi
359         json_add_string name "$name"
360         json_add_string iface "$iface"
361         json_add_string sysfs "$sysfs"
362         json_add_string minq "$minq"
363         json_add_string maxq "$maxq"
364         json_add_string offset "$offset"
365         json_add_string factor "$factor"
366         json_select ..
367
368         json_select ..
369 }
370
371 ucidef_set_rssimon() {
372         local dev="$1"
373         local refresh="$2"
374         local threshold="$3"
375
376         json_select_object rssimon
377
378         json_select_object "$dev"
379         [ -n "$refresh" ] && json_add_int refresh "$refresh"
380         [ -n "$threshold" ] && json_add_int threshold "$threshold"
381         json_select ..
382
383         json_select ..
384
385 }
386
387 board_config_update() {
388         json_init
389         [ -f ${CFG} ] && json_load "$(cat ${CFG})"
390 }
391
392 board_config_flush() {
393         json_dump -i > /tmp/.board.json
394         mv /tmp/.board.json ${CFG}
395 }