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