Skip to content

Commit 2e7e62e

Browse files
committed
[airos] updated ebtables converter and tests
1 parent 1688e81 commit 2e7e62e

3 files changed

Lines changed: 211 additions & 45 deletions

File tree

netjsonconfig/backends/airos/converters.py

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
from ...utils import get_copy
55
from ..base.converter import BaseConverter
66
from .aaa import bridge_devname, profile_from_interface, status_from_interface
7-
from .ebtables import ebtables_from_interface
7+
from .ebtables import encrypted, unencrypted
88
from .interface import (autonegotiation, bridge, flowcontrol, mode, protocol,
99
radio, split_cidr, stp, vlan, wireless)
1010
from .radio import radio_available_mode, radio_configuration
@@ -164,17 +164,22 @@ def wireless(self):
164164
"""
165165
return wireless(get_copy(self.netjson, 'interfaces', []))
166166

167-
def bridge_intermediate(self):
168-
return ebtables_from_interface(self.wireless[0])
167+
@property
168+
def ebtables(self):
169+
w = self.wireless[0]
170+
status = {'status': 'enabled'}
171+
base = {}
172+
if protocol(w) == 'none':
173+
base.update(unencrypted(w))
174+
else:
175+
base.update(encrypted(w))
176+
if self.netmode == 'bridge':
177+
base['sys'].update({'fw': {'status': 'disabled'}})
169178

170-
def router_intermediate(self):
171-
result = ebtables_from_interface(self.wireless[0])
172-
del result['sys']['fw']
173-
return result
179+
return [status, base]
174180

175181
def to_intermediate(self):
176-
result = getattr(self, '{netmode}_intermediate'.format(netmode=self.netmode))()
177-
return (('ebtables', result),)
182+
return (('ebtables', self.ebtables),)
178183

179184

180185
class Gui(AirOsConverter):
Lines changed: 9 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,17 @@
11
import copy
22

3-
from .interface import mode, protocol, radio
3+
from .interface import protocol, radio
44

55

66
_base = {
77
'sys': {
8-
'fw': {'status': 'disabled'},
98
'status': 'enabled',
109
},
1110
}
1211

13-
14-
def default(interace):
15-
return {}
16-
17-
18-
def station(interface):
12+
def encrypted(interface):
1913
"""
20-
Returns the configuration for ``ebtables.sys``
21-
for an interface in ``station`` mode with ``wpa2_enterpise``
22-
or ``wpa2_personal`` authentication
14+
Returns the configuration for ``ebtables.sys`` when encrypted
2315
"""
2416
base = copy.deepcopy(_base)
2517
base['sys'].update({
@@ -34,26 +26,9 @@ def station(interface):
3426
return base
3527

3628

37-
_status = {
38-
'status': 'enabled',
39-
}
40-
41-
42-
_mapping = {
43-
'access_point': {
44-
'none': default,
45-
'wpa2_personal': station,
46-
'wpa2_enterprise': default,
47-
},
48-
'station': {
49-
'none': default,
50-
'wpa2_personal': station,
51-
'wpa2_enterprise': station,
52-
},
53-
}
54-
55-
56-
def ebtables_from_interface(interface):
57-
status = _status.copy()
58-
base = _mapping[mode(interface)][protocol(interface)](interface)
59-
return [status, base]
29+
def unencrypted(interface):
30+
"""
31+
Returns the configuration for ``ebtables.sys``
32+
for an interface withouth encryption
33+
"""
34+
return {}

tests/airos/test_ebtables.py

Lines changed: 188 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
11
from unittest import skip
2+
23
from .mock import ConverterTest, EbtablesAirOs
34

45

5-
class EbtablesConverter(ConverterTest):
6+
class EbtablesConverterBridge(ConverterTest):
67
backend = EbtablesAirOs
78

89
def test_station_none(self):
@@ -151,13 +152,15 @@ def test_access_psk(self):
151152
'status': 'enabled',
152153
},
153154
{
155+
'sys.eap.1.devname': 'ath0',
156+
'sys.eap.1.status': 'enabled',
157+
'sys.eap.status': 'enabled',
154158
'sys.fw.status': 'disabled',
155159
'sys.status': 'enabled',
156160
},
157161
]
158162
self.assertEqualConfig(o.intermediate_data['ebtables'], expected)
159163

160-
@skip
161164
def test_access_eap(self):
162165
o = self.backend({
163166
'interfaces': [
@@ -171,6 +174,7 @@ def test_access_eap(self):
171174
'encryption': {
172175
'protocol': 'wpa2_enterprise',
173176
'server': '192.168.1.1',
177+
'key': 'changeme',
174178
}
175179
}
176180
}
@@ -182,8 +186,190 @@ def test_access_eap(self):
182186
'status': 'enabled',
183187
},
184188
{
189+
'sys.eap.1.devname': 'ath0',
190+
'sys.eap.1.status': 'enabled',
191+
'sys.eap.status': 'enabled',
185192
'sys.fw.status': 'disabled',
186193
'sys.status': 'enabled',
187194
},
188195
]
189196
self.assertEqualConfig(o.intermediate_data['ebtables'], expected)
197+
198+
199+
class EbtablesConverterRouter(ConverterTest):
200+
backend = EbtablesAirOs
201+
202+
def test_station_none(self):
203+
o = self.backend({
204+
'interfaces': [
205+
{
206+
'type': 'wireless',
207+
'name': 'wlan0',
208+
'wireless': {
209+
'mode': 'station',
210+
'radio': 'ath0',
211+
'ssid': 'ubnt',
212+
'bssid': '00:11:22:33:44:55',
213+
}
214+
}
215+
],
216+
"netmode": "router",
217+
})
218+
o.to_intermediate()
219+
expected = []
220+
self.assertEqualConfig(o.intermediate_data['ebtables'], expected)
221+
222+
def test_station_psk(self):
223+
o = self.backend({
224+
'interfaces': [
225+
{
226+
'type': 'wireless',
227+
'name': 'wlan0',
228+
'wireless': {
229+
'mode': 'station',
230+
'radio': 'ath0',
231+
'ssid': 'ubnt',
232+
'bssid': '00:11:22:33:44:55',
233+
'encryption': {
234+
'protocol': 'wpa2_personal',
235+
'key': 'changeme',
236+
}
237+
}
238+
}
239+
],
240+
"netmode": "router",
241+
})
242+
o.to_intermediate()
243+
expected = [
244+
{
245+
'status': 'enabled',
246+
},
247+
{
248+
'sys.eap.1.devname': 'ath0',
249+
'sys.eap.1.status': 'enabled',
250+
'sys.eap.status': 'enabled',
251+
'sys.status': 'enabled',
252+
},
253+
]
254+
self.assertEqualConfig(o.intermediate_data['ebtables'], expected)
255+
256+
def test_station_eap(self):
257+
o = self.backend({
258+
'interfaces': [
259+
{
260+
'type': 'wireless',
261+
'name': 'wlan0',
262+
'wireless': {
263+
'mode': 'station',
264+
'radio': 'ath0',
265+
'ssid': 'ubnt',
266+
'bssid': '00:11:22:33:44:55',
267+
'encryption': {
268+
'protocol': 'wpa2_enterprise',
269+
'identity': 'name@domain.com',
270+
'key': 'changeme',
271+
}
272+
}
273+
}
274+
],
275+
"netmode": "router",
276+
})
277+
o.to_intermediate()
278+
expected = [
279+
{
280+
'status': 'enabled',
281+
},
282+
{
283+
'sys.eap.1.devname': 'ath0',
284+
'sys.eap.1.status': 'enabled',
285+
'sys.eap.status': 'enabled',
286+
'sys.status': 'enabled',
287+
},
288+
]
289+
self.assertEqualConfig(o.intermediate_data['ebtables'], expected)
290+
291+
def test_access_none(self):
292+
o = self.backend({
293+
'interfaces': [
294+
{
295+
'type': 'wireless',
296+
'name': 'wlan0',
297+
'wireless': {
298+
'mode': 'access_point',
299+
'radio': 'ath0',
300+
'ssid': 'ubnt',
301+
}
302+
}
303+
],
304+
"netmode": "router",
305+
})
306+
o.to_intermediate()
307+
expected = []
308+
self.assertEqualConfig(o.intermediate_data['ebtables'], expected)
309+
310+
def test_access_psk(self):
311+
o = self.backend({
312+
'interfaces': [
313+
{
314+
'type': 'wireless',
315+
'name': 'wlan0',
316+
'wireless': {
317+
'mode': 'access_point',
318+
'radio': 'ath0',
319+
'ssid': 'ubnt',
320+
'encryption': {
321+
'protocol': 'wpa2_personal',
322+
'key': 'changeme',
323+
}
324+
}
325+
}
326+
],
327+
"netmode": "router",
328+
})
329+
o.to_intermediate()
330+
expected = [
331+
{
332+
'status': 'enabled',
333+
},
334+
{
335+
'sys.eap.1.devname': 'ath0',
336+
'sys.eap.1.status': 'enabled',
337+
'sys.eap.status': 'enabled',
338+
'sys.status': 'enabled',
339+
},
340+
]
341+
self.assertEqualConfig(o.intermediate_data['ebtables'], expected)
342+
343+
@skip
344+
def test_access_eap(self):
345+
o = self.backend({
346+
'interfaces': [
347+
{
348+
'type': 'wireless',
349+
'name': 'wlan0',
350+
'wireless': {
351+
'mode': 'access_point',
352+
'radio': 'ath0',
353+
'ssid': 'ubnt',
354+
'encryption': {
355+
'protocol': 'wpa2_enterprise',
356+
'server': '192.168.1.1',
357+
}
358+
}
359+
}
360+
],
361+
"netmode": "router",
362+
})
363+
o.to_intermediate()
364+
expected = [
365+
{
366+
'status': 'enabled',
367+
},
368+
{
369+
'sys.eap.1.devname': 'ath0',
370+
'sys.eap.1.status': 'enabled',
371+
'sys.eap.status': 'enabled',
372+
'sys.status': 'enabled',
373+
},
374+
]
375+
self.assertEqualConfig(o.intermediate_data['ebtables'], expected)

0 commit comments

Comments
 (0)