Skip to content

Commit 9f877f6

Browse files
committed
[airos] moved ebtables to module, added tests for station mode
1 parent 01113e9 commit 9f877f6

3 files changed

Lines changed: 223 additions & 11 deletions

File tree

netjsonconfig/backends/airos/converters.py

Lines changed: 8 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +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
78
from .interface import (autonegotiation, bridge, flowcontrol, mode, protocol,
89
radio, split_cidr, stp, vlan, wireless)
910
from .radio import radio_available_mode, radio_configuration
@@ -156,19 +157,15 @@ def to_intermediate(self):
156157
class Ebtables(AirOsConverter):
157158
netjson_key = 'general'
158159

159-
_base = {
160-
'sys': {
161-
'fw': {
162-
'status': 'disabled',
163-
},
164-
'status': 'enabled'
165-
},
166-
'status': 'enabled'
167-
}
160+
@property
161+
def wireless(self):
162+
"""
163+
Return all the wireless interfaces
164+
"""
165+
return wireless(get_copy(self.netjson, 'interfaces', []))
168166

169167
def bridge_intermediate(self):
170-
base = self._base.copy()
171-
return [base]
168+
return ebtables_from_interface(self.wireless[0])
172169

173170
def router_intermediate(self):
174171
return [{}]
Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
from .interface import mode, protocol, radio
2+
import copy
3+
4+
5+
def default(interace):
6+
return {}
7+
8+
9+
def station(interface):
10+
"""
11+
Returns the configuration for ``ebtables.sys``
12+
for an interface in ``station`` mode with ``wpa2_enterpise``
13+
or ``wpa2_personal`` authentication
14+
"""
15+
return {
16+
'eap': [
17+
{
18+
'devname': radio(interface),
19+
'status': 'enabled',
20+
}
21+
],
22+
'eap.status': 'enabled',
23+
}
24+
25+
26+
_base = {
27+
'sys': {
28+
'fw': {'status': 'disabled'},
29+
'status': 'enabled',
30+
},
31+
}
32+
33+
_status = {
34+
'status': 'enabled',
35+
}
36+
37+
38+
_mapping = {
39+
'access_point': {
40+
'none': default,
41+
'wpa2_personal': default,
42+
'wpa2_enterprise': default,
43+
},
44+
'station': {
45+
'none': default,
46+
'wpa2_personal': station,
47+
'wpa2_enterprise': station,
48+
},
49+
}
50+
51+
52+
def ebtables_from_interface(interface):
53+
base = copy.deepcopy(_base)
54+
status = _status.copy()
55+
base['sys'].update(_mapping[mode(interface)][protocol(interface)](interface))
56+
return [status, base]

tests/airos/test_ebtables.py

Lines changed: 159 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
from unittest import skip
12
from .mock import ConverterTest, EbtablesAirOs
23

34

@@ -21,10 +22,168 @@ def test_station_none(self):
2122
})
2223
o.to_intermediate()
2324
expected = [
25+
{
26+
'status': 'enabled',
27+
},
28+
{
29+
'sys.fw.status': 'disabled',
30+
'sys.status': 'enabled',
31+
},
32+
]
33+
self.assertEqualConfig(o.intermediate_data['ebtables'], expected)
34+
35+
def test_station_psk(self):
36+
o = self.backend({
37+
'interfaces': [
38+
{
39+
'type': 'wireless',
40+
'name': 'wlan0',
41+
'wireless': {
42+
'mode': 'station',
43+
'radio': 'ath0',
44+
'ssid': 'ubnt',
45+
'bssid': '00:11:22:33:44:55',
46+
'encryption': {
47+
'protocol': 'wpa2_personal',
48+
'key': 'changeme',
49+
}
50+
}
51+
}
52+
]
53+
})
54+
o.to_intermediate()
55+
expected = [
56+
{
57+
'status': 'enabled',
58+
},
59+
{
60+
'sys.eap.1.devname': 'ath0',
61+
'sys.eap.1.status': 'enabled',
62+
'sys.eap.status': 'enabled',
63+
'sys.fw.status': 'disabled',
64+
'sys.status': 'enabled',
65+
},
66+
]
67+
self.assertEqualConfig(o.intermediate_data['ebtables'], expected)
68+
69+
def test_station_eap(self):
70+
o = self.backend({
71+
'interfaces': [
72+
{
73+
'type': 'wireless',
74+
'name': 'wlan0',
75+
'wireless': {
76+
'mode': 'station',
77+
'radio': 'ath0',
78+
'ssid': 'ubnt',
79+
'bssid': '00:11:22:33:44:55',
80+
'encryption': {
81+
'protocol': 'wpa2_enterprise',
82+
'identity': 'name@domain.com',
83+
'key': 'changeme',
84+
}
85+
}
86+
}
87+
]
88+
})
89+
o.to_intermediate()
90+
expected = [
91+
{
92+
'status': 'enabled',
93+
},
94+
{
95+
'sys.eap.1.devname': 'ath0',
96+
'sys.eap.1.status': 'enabled',
97+
'sys.eap.status': 'enabled',
98+
'sys.fw.status': 'disabled',
99+
'sys.status': 'enabled',
100+
},
101+
]
102+
self.assertEqualConfig(o.intermediate_data['ebtables'], expected)
103+
104+
def test_access_none(self):
105+
o = self.backend({
106+
'interfaces': [
107+
{
108+
'type': 'wireless',
109+
'name': 'wlan0',
110+
'wireless': {
111+
'mode': 'access_point',
112+
'radio': 'ath0',
113+
'ssid': 'ubnt',
114+
}
115+
}
116+
]
117+
})
118+
o.to_intermediate()
119+
expected = [
120+
{
121+
'status': 'enabled',
122+
},
24123
{
25124
'sys.fw.status': 'disabled',
26125
'sys.status': 'enabled',
126+
},
127+
]
128+
self.assertEqualConfig(o.intermediate_data['ebtables'], expected)
129+
130+
def test_access_psk(self):
131+
o = self.backend({
132+
'interfaces': [
133+
{
134+
'type': 'wireless',
135+
'name': 'wlan0',
136+
'wireless': {
137+
'mode': 'access_point',
138+
'radio': 'ath0',
139+
'ssid': 'ubnt',
140+
'encryption': {
141+
'protocol': 'wpa2_personal',
142+
'key': 'changeme',
143+
}
144+
}
145+
}
146+
]
147+
})
148+
o.to_intermediate()
149+
expected = [
150+
{
27151
'status': 'enabled',
28152
},
153+
{
154+
'sys.fw.status': 'disabled',
155+
'sys.status': 'enabled',
156+
},
157+
]
158+
self.assertEqualConfig(o.intermediate_data['ebtables'], expected)
159+
160+
@skip
161+
def test_access_eap(self):
162+
o = self.backend({
163+
'interfaces': [
164+
{
165+
'type': 'wireless',
166+
'name': 'wlan0',
167+
'wireless': {
168+
'mode': 'access_point',
169+
'radio': 'ath0',
170+
'ssid': 'ubnt',
171+
'encryption': {
172+
'protocol': 'wpa2_enterprise',
173+
'server': '192.168.1.1',
174+
}
175+
}
176+
}
177+
]
178+
})
179+
o.to_intermediate()
180+
expected = [
181+
{
182+
'status': 'enabled',
183+
},
184+
{
185+
'sys.fw.status': 'disabled',
186+
'sys.status': 'enabled',
187+
},
29188
]
30189
self.assertEqualConfig(o.intermediate_data['ebtables'], expected)

0 commit comments

Comments
 (0)