Skip to content

Commit 2751fe3

Browse files
committed
[schema] Improved definition of wireless interface fields
1 parent ec15a67 commit 2751fe3

File tree

2 files changed

+194
-122
lines changed

2 files changed

+194
-122
lines changed

netjsonconfig/schema.py

Lines changed: 188 additions & 120 deletions
Original file line numberDiff line numberDiff line change
@@ -214,130 +214,19 @@
214214
"enum": ["wireless"],
215215
"default": "wireless",
216216
"propertyOrder": 1,
217-
}
218-
}
219-
},
220-
{"$ref": "#/definitions/interface_settings"},
221-
{
222-
"properties": {
217+
},
223218
"wireless": {
224219
"type": "object",
225-
"title": "Wireless Settings",
226-
"additionalProperties": True,
227-
"propertyOrder": 8,
228-
"required": [
229-
"radio",
230-
"mode",
231-
"ssid"
232-
],
233-
"properties": {
234-
"radio": {
235-
"type": "string",
236-
"propertyOrder": 1,
237-
},
238-
"mode": {
239-
"type": "string",
240-
"enum": [
241-
"access_point",
242-
"station",
243-
"adhoc",
244-
"monitor",
245-
"802.11s"
246-
],
247-
"propertyOrder": 2,
248-
},
249-
"wds": {
250-
"title": "WDS",
251-
"type": "boolean",
252-
"default": False,
253-
"format": "checkbox",
254-
"propertyOrder": 3,
255-
},
256-
"ssid": {
257-
"type": "string",
258-
"maxLength": 32,
259-
"propertyOrder": 4,
260-
},
261-
"bssid": {
262-
"type": "string",
263-
"propertyOrder": 5,
264-
},
265-
"hidden": {
266-
"type": "boolean",
267-
"default": False,
268-
"format": "checkbox",
269-
"propertyOrder": 6,
270-
},
271-
"ack_distance": {
272-
"type": "integer",
273-
"minimum": 1,
274-
"propertyOrder": 7,
275-
},
276-
"rts_threshold": {
277-
"type": "integer",
278-
"minimum": 0,
279-
"maximum": 2346,
280-
"propertyOrder": 8,
281-
},
282-
"frag_threshold": {
283-
"type": "integer",
284-
"minimum": 0,
285-
"maximum": 2346,
286-
"propertyOrder": 9,
287-
},
288-
"encryption": {
289-
"type": "object",
290-
"title": "Encryption",
291-
"required": [
292-
"protocol",
293-
"key"
294-
],
295-
"propertyOrder": 20,
296-
"properties": {
297-
"protocol": {
298-
"type": "string",
299-
"enum": [
300-
"none",
301-
"wep_open",
302-
"wep_shared",
303-
"wpa_personal",
304-
"wpa2_personal",
305-
"wpa_personal_mixed",
306-
"wpa_enterprise",
307-
"wpa2_enterprise",
308-
"wpa_enterprise_mixed",
309-
"wps"
310-
],
311-
"propertyOrder": 1,
312-
},
313-
"disabled": {
314-
"type": "boolean",
315-
"default": False,
316-
"format": "checkbox",
317-
"propertyOrder": 2,
318-
},
319-
"key": {
320-
"type": "string",
321-
"propertyOrder": 3,
322-
},
323-
"ciphers": {
324-
"type": "array",
325-
"propertyOrder": 4,
326-
"items": {
327-
"type": "string",
328-
"enum": [
329-
"tkip",
330-
"ccmp",
331-
"aes",
332-
]
333-
}
334-
}
335-
}
336-
}
337-
}
220+
"propertyOrder": 10,
221+
"oneOf": [
222+
{"$ref": "#/definitions/ap_wireless_settings"},
223+
{"$ref": "#/definitions/sta_wireless_settings"},
224+
{"$ref": "#/definitions/adhoc_wireless_settings"},
225+
{"$ref": "#/definitions/monitor_wireless_settings"},
338226
}
339227
}
340-
}
228+
},
229+
{"$ref": "#/definitions/interface_settings"},
341230
]
342231
},
343232
"bridge_interface": {
@@ -372,6 +261,185 @@
372261
}
373262
}
374263
]
264+
},
265+
"base_wireless_settings": {
266+
"type": "object",
267+
"title": "Wireless Settings",
268+
"additionalProperties": True,
269+
"propertyOrder": 8,
270+
"required": [
271+
"radio",
272+
"mode",
273+
],
274+
"properties": {
275+
"radio": {
276+
"type": "string",
277+
"minLength": 2,
278+
"propertyOrder": 1,
279+
},
280+
"mode": {
281+
"type": "string",
282+
"propertyOrder": 2,
283+
},
284+
"ack_distance": {
285+
"type": "integer",
286+
"minimum": 1,
287+
"propertyOrder": 7,
288+
},
289+
"rts_threshold": {
290+
"type": "integer",
291+
"minimum": 0,
292+
"maximum": 2346,
293+
"propertyOrder": 8,
294+
},
295+
"frag_threshold": {
296+
"type": "integer",
297+
"minimum": 0,
298+
"maximum": 2346,
299+
"propertyOrder": 9,
300+
}
301+
}
302+
},
303+
"ssid_wireless_property": {
304+
"type": "object",
305+
"required": ["ssid"],
306+
"properties": {
307+
"ssid": {
308+
"type": "string",
309+
"maxLength": 32,
310+
"propertyOrder": 4,
311+
}
312+
}
313+
},
314+
"hidden_wireless_property": {
315+
"type": "object",
316+
"properties": {
317+
"hidden": {
318+
"type": "boolean",
319+
"default": False,
320+
"format": "checkbox",
321+
"propertyOrder": 5,
322+
}
323+
}
324+
},
325+
"bssid_wireless_property": {
326+
"type": "object",
327+
"required": ["bssid"],
328+
"properties": {
329+
"bssid": {
330+
"type": "string",
331+
"propertyOrder": 6,
332+
},
333+
}
334+
},
335+
"wds_wireless_property": {
336+
"type": "object",
337+
"properties": {
338+
"wds": {
339+
"title": "WDS",
340+
"type": "boolean",
341+
"default": False,
342+
"format": "checkbox",
343+
"propertyOrder": 3,
344+
}
345+
}
346+
},
347+
"encryption_wireless_property": {
348+
"type": "object",
349+
"properties": {
350+
"encryption": {
351+
"type": "object",
352+
"title": "Encryption",
353+
"required": [
354+
"protocol",
355+
"key"
356+
],
357+
"propertyOrder": 20,
358+
"properties": {
359+
"protocol": {
360+
"type": "string",
361+
"enum": [
362+
"none",
363+
"wep_open",
364+
"wep_shared",
365+
"wpa_personal",
366+
"wpa2_personal",
367+
"wpa_personal_mixed",
368+
"wpa_enterprise",
369+
"wpa2_enterprise",
370+
"wpa_enterprise_mixed",
371+
"wps"
372+
],
373+
"propertyOrder": 1,
374+
},
375+
"disabled": {
376+
"type": "boolean",
377+
"default": False,
378+
"format": "checkbox",
379+
"propertyOrder": 2,
380+
},
381+
"key": {
382+
"type": "string",
383+
"propertyOrder": 3,
384+
},
385+
"ciphers": {
386+
"type": "array",
387+
"propertyOrder": 4,
388+
"items": {
389+
"type": "string",
390+
"enum": [
391+
"tkip",
392+
"ccmp",
393+
"aes",
394+
]
395+
}
396+
}
397+
}
398+
}
399+
}
400+
},
401+
"ap_wireless_settings": {
402+
"type": "object",
403+
"title": "Access Point",
404+
"allOf": [
405+
{"properties": {"mode": {"enum": ["access_point"]}}},
406+
{"$ref": "#/definitions/base_wireless_settings"},
407+
{"$ref": "#/definitions/ssid_wireless_property"},
408+
{"$ref": "#/definitions/hidden_wireless_property"},
409+
{"$ref": "#/definitions/wds_wireless_property"},
410+
{"$ref": "#/definitions/encryption_wireless_property"},
411+
]
412+
},
413+
"sta_wireless_settings": {
414+
"type": "object",
415+
"title": "Station",
416+
"allOf": [
417+
{"properties": {"mode": {"enum": ["station"]}}},
418+
{"$ref": "#/definitions/base_wireless_settings"},
419+
{"$ref": "#/definitions/ssid_wireless_property"},
420+
{"$ref": "#/definitions/bssid_wireless_property"},
421+
{"$ref": "#/definitions/wds_wireless_property"},
422+
{"$ref": "#/definitions/encryption_wireless_property"},
423+
]
424+
},
425+
"adhoc_wireless_settings": {
426+
"type": "object",
427+
"title": "Adhoc",
428+
"allOf": [
429+
{"properties": {"mode": {"enum": ["adhoc"]}}},
430+
{"$ref": "#/definitions/base_wireless_settings"},
431+
{"$ref": "#/definitions/ssid_wireless_property"},
432+
{"$ref": "#/definitions/bssid_wireless_property"},
433+
{"$ref": "#/definitions/encryption_wireless_property"},
434+
]
435+
},
436+
"monitor_wireless_settings": {
437+
"type": "object",
438+
"title": "Monitor",
439+
"allOf": [
440+
{"properties": {"mode": {"enum": ["monitor"]}}},
441+
{"$ref": "#/definitions/base_wireless_settings"},
442+
]
375443
}
376444
},
377445
"properties": {

tests/openwrt/test_wireless.py

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -507,7 +507,8 @@ def test_multiple_wifi(self):
507507
"wireless": {
508508
"radio": "radio1",
509509
"mode": "adhoc",
510-
"ssid": "adhoc-ssid"
510+
"ssid": "adhoc-ssid",
511+
"bssid": "00:11:22:33:44:55"
511512
}
512513
}
513514
]
@@ -534,6 +535,7 @@ def test_multiple_wifi(self):
534535
option ssid 'wpa2-personal'
535536
536537
config wifi-iface
538+
option bssid '00:11:22:33:44:55'
537539
option device 'radio1'
538540
option ifname 'wlan1'
539541
option mode 'adhoc'
@@ -823,7 +825,8 @@ def test_inherit_disabled_from_interface(self):
823825
"wireless": {
824826
"radio": "radio0",
825827
"mode": "station",
826-
"ssid": "mywifi"
828+
"ssid": "mywifi",
829+
"bssid": "00:11:22:33:44:55"
827830
}
828831
}
829832
]
@@ -838,6 +841,7 @@ def test_inherit_disabled_from_interface(self):
838841
package wireless
839842
840843
config wifi-iface
844+
option bssid '00:11:22:33:44:55'
841845
option device 'radio0'
842846
option disabled '1'
843847
option ifname 'wlan0'

0 commit comments

Comments
 (0)