9d1ecb60e0f55955635d97aa23e1392cb553f3aa
[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_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 }