base-files: uci-defaults-new: properly quote variables
[openwrt/staging/yousong.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_interface() {
252 local name="$1"
253 local sysfs="$2"
254
255 json_select_object led
256
257 json_select_object "$1"
258 json_add_string name "$name"
259 json_add_string type interface
260 json_add_string sysfs "$sysfs"
261 json_add_string interface "$name"
262 json_select ..
263
264 json_select ..
265 }
266
267 ucidef_set_led_usbdev() {
268 local cfg="led_$1"
269 local name="$2"
270 local sysfs="$3"
271 local dev="$4"
272
273 json_select_object led
274
275 json_select_object "$1"
276 json_add_string name "$name"
277 json_add_string type usb
278 json_add_string sysfs "$sysfs"
279 json_add_string device "$dev"
280 json_select ..
281
282 json_select ..
283 }
284
285 ucidef_set_led_wlan() {
286 local cfg="led_$1"
287 local name="$2"
288 local sysfs="$3"
289 local trigger="$4"
290
291 json_select_object led
292
293 json_select_object "$1"
294 json_add_string name "$name"
295 json_add_string type trigger
296 json_add_string sysfs "$sysfs"
297 json_add_string trigger "$trigger"
298 json_select ..
299
300 json_select ..
301 }
302
303 ucidef_set_led_switch() {
304 local cfg="led_$1"
305 local name="$2"
306 local sysfs="$3"
307 local trigger="$4"
308 local port_mask="$5"
309
310 json_select_object led
311
312 json_select_object "$1"
313 json_add_string name "$name"
314 json_add_string type switch
315 json_add_string sysfs "$sysfs"
316 json_add_string trigger "$trigger"
317 json_add_string port_mask "$port_mask"
318 json_select ..
319
320 json_select ..
321 }
322
323 ucidef_set_led_default() {
324 local cfg="led_$1"
325 local name="$2"
326 local sysfs="$3"
327 local default="$4"
328
329 json_select_object led
330
331 json_select_object "$1"
332 json_add_string name "$name"
333 json_add_string sysfs "$sysfs"
334 json_add_string default "$default"
335 json_select ..
336
337 json_select ..
338 }
339
340 ucidef_set_led_rssi() {
341 local cfg="led_$1"
342 local name="$2"
343 local sysfs="$3"
344 local iface="$4"
345 local minq="$5"
346 local maxq="$6"
347 local offset="$7"
348 local factor="$8"
349
350 json_select_object led
351
352 json_select_object rssi
353 json_select_object "$1"
354 json_add_string name "$name"
355 json_add_string sysfs "$sysfs"
356 json_add_string minq "$minq"
357 json_add_string maxq "$maxq"
358 json_add_string offset "$offset"
359 json_add_string factor "$factor"
360 json_select ..
361 json_select ..
362
363 json_select ..
364 }
365
366 ucidef_set_rssimon() {
367 local dev="$1"
368 local refresh="$2"
369 local threshold="$3"
370
371 json_select_object led
372
373 json_select_object rssi
374 json_add_string type rssi
375 json_add_string dev "$dev"
376 json_add_string threshold "$threshold"
377 json_select ..
378
379 json_select ..
380
381 }
382
383 board_config_update() {
384 json_init
385 [ -f ${CFG} ] && json_load "$(cat ${CFG})"
386 }
387
388 board_config_flush() {
389 json_dump -i > /tmp/.board.json
390 mv /tmp/.board.json ${CFG}
391 }