base-files: uci-defaults-new: don't store switch attr numbers as strings
[openwrt/staging/lynxis/omap.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_vlan() {
148 local name=$1
149 local vlan=$2
150 local ports=$3
151 local cpu_port=''
152
153 case $vlan in
154 1) vlan=lan;;
155 2) vlan=wan;;
156 *) vlan=vlan$vlan;;
157 esac
158
159 json_select_object switch
160 json_select_object $name
161 json_select_object vlans
162
163 json_add_array $vlan
164 for p in $ports; do
165 if [ ${p%t} != $p ]; then
166 cpu_port=$p
167 else
168 json_add_int "" $p
169 fi
170 done
171 json_close_array
172
173 json_select ..
174 [ -n "$cpu_port" ] && json_add_int cpu_port $cpu_port
175 json_select ..
176 json_select ..
177 }
178
179 ucidef_set_interface_macaddr() {
180 local network=$1
181 local macaddr=$2
182
183 json_select_object network
184
185 json_select $network
186 [ $? -eq 0 ] || {
187 json_select ..
188 return
189 }
190
191 json_add_string macaddr $macaddr
192 json_select ..
193
194 json_select ..
195 }
196
197 ucidef_set_led_netdev() {
198 local cfg="led_$1"
199 local name=$2
200 local sysfs=$3
201 local dev=$4
202
203 json_select_object led
204
205 json_select_object $1
206 json_add_string name $name
207 json_add_string type netdev
208 json_add_string sysfs $sysfs
209 json_add_string device $dev
210 json_select ..
211
212 json_select ..
213 }
214
215 ucidef_set_led_interface() {
216 local name=$1
217 local sysfs=$2
218
219 json_select_object led
220
221 json_select_object $1
222 json_add_string name $name
223 json_add_string type interface
224 json_add_string sysfs $sysfs
225 json_add_string interface $name
226 json_select ..
227
228 json_select ..
229 }
230
231 ucidef_set_led_usbdev() {
232 local cfg="led_$1"
233 local name=$2
234 local sysfs=$3
235 local dev=$4
236
237 json_select_object led
238
239 json_select_object $1
240 json_add_string name $name
241 json_add_string type usb
242 json_add_string sysfs $sysfs
243 json_add_string device $dev
244 json_select ..
245
246 json_select ..
247 }
248
249 ucidef_set_led_wlan() {
250 local cfg="led_$1"
251 local name=$2
252 local sysfs=$3
253 local trigger=$4
254
255 json_select_object led
256
257 json_select_object $1
258 json_add_string name $name
259 json_add_string type trigger
260 json_add_string sysfs $sysfs
261 json_add_string trigger $trigger
262 json_select ..
263
264 json_select ..
265 }
266
267 ucidef_set_led_switch() {
268 local cfg="led_$1"
269 local name=$2
270 local sysfs=$3
271 local trigger=$4
272 local port_mask=$5
273
274 json_select_object led
275
276 json_select_object $1
277 json_add_string name $name
278 json_add_string type switch
279 json_add_string sysfs $sysfs
280 json_add_string trigger $trigger
281 json_add_string port_mask $port_mask
282 json_select ..
283
284 json_select ..
285 }
286
287 ucidef_set_led_default() {
288 local cfg="led_$1"
289 local name=$2
290 local sysfs=$3
291 local default=$4
292
293 json_select_object led
294
295 json_select_object $1
296 json_add_string name $name
297 json_add_string sysfs $sysfs
298 json_add_string default $default
299 json_select ..
300
301 json_select ..
302 }
303
304 ucidef_set_led_rssi() {
305 local cfg="led_$1"
306 local name=$2
307 local sysfs=$3
308 local iface=$4
309 local minq=$5
310 local maxq=$6
311 local offset=$7
312 local factor=$8
313
314 json_select_object led
315
316 json_select_object rssi
317 json_select_object $1
318 json_add_string name $name
319 json_add_string sysfs $sysfs
320 json_add_string minq $minq
321 json_add_string maxq $maxq
322 json_add_string offset $offset
323 json_add_string factor $factor
324 json_select ..
325 json_select ..
326
327 json_select ..
328 }
329
330 ucidef_set_rssimon() {
331 local dev="$1"
332 local refresh="$2"
333 local threshold="$3"
334
335 json_select_object led
336
337 json_select_object rssi
338 json_add_string type rssi
339 json_add_string dev $dev
340 json_add_string threshold $threshold
341 json_select ..
342
343 json_select ..
344
345 }
346
347 board_config_update() {
348 json_init
349 [ -f ${CFG} ] && json_load "$(cat ${CFG})"
350 }
351
352 board_config_flush() {
353 json_dump -i > /tmp/.board.json
354 mv /tmp/.board.json ${CFG}
355 }