Committed by
Gerrit Code Review
Modify AAA app to use the network configuation service
Change-Id: Ie7e12dfd9a3b80c55db2b55bdfdf431db8157d24
Showing
3 changed files
with
260 additions
and
8 deletions
This diff is collapsed. Click to expand it.
1 | +/* | ||
2 | + * Copyright 2015 Open Networking Laboratory | ||
3 | + * | ||
4 | + * Licensed under the Apache License, Version 2.0 (the "License"); | ||
5 | + * you may not use this file except in compliance with the License. | ||
6 | + * You may obtain a copy of the License at | ||
7 | + * | ||
8 | + * http://www.apache.org/licenses/LICENSE-2.0 | ||
9 | + * | ||
10 | + * Unless required by applicable law or agreed to in writing, software | ||
11 | + * distributed under the License is distributed on an "AS IS" BASIS, | ||
12 | + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
13 | + * See the License for the specific language governing permissions and | ||
14 | + * limitations under the License. | ||
15 | + */ | ||
16 | +package org.onosproject.aaa; | ||
17 | + | ||
18 | +import java.net.InetAddress; | ||
19 | +import java.net.UnknownHostException; | ||
20 | + | ||
21 | +import org.onosproject.core.ApplicationId; | ||
22 | +import org.onosproject.net.config.Config; | ||
23 | +import org.onosproject.net.config.basics.BasicElementConfig; | ||
24 | + | ||
25 | +/** | ||
26 | + * Network config for the AAA app. | ||
27 | + */ | ||
28 | +public class AAAConfig extends Config<ApplicationId> { | ||
29 | + | ||
30 | + private static final String RADIUS_IP = "radiusIp"; | ||
31 | + private static final String RADIUS_MAC = "radiusMac"; | ||
32 | + private static final String NAS_IP = "nasIp"; | ||
33 | + private static final String NAS_MAC = "nasMac"; | ||
34 | + private static final String RADIUS_SECRET = "radiusSecret"; | ||
35 | + private static final String RADIUS_SWITCH = "radiusSwitch"; | ||
36 | + private static final String RADIUS_PORT = "radiusPort"; | ||
37 | + | ||
38 | + // RADIUS server IP address | ||
39 | + protected static final String DEFAULT_RADIUS_IP = "192.168.1.10"; | ||
40 | + | ||
41 | + // RADIUS MAC address | ||
42 | + protected static final String DEFAULT_RADIUS_MAC = "00:00:00:00:01:10"; | ||
43 | + | ||
44 | + // NAS IP address | ||
45 | + protected static final String DEFAULT_NAS_IP = "192.168.1.11"; | ||
46 | + | ||
47 | + // NAS MAC address | ||
48 | + protected static final String DEFAULT_NAS_MAC = "00:00:00:00:10:01"; | ||
49 | + | ||
50 | + // RADIUS uplink port | ||
51 | + protected static final int DEFAULT_RADIUS_UPLINK = 2; | ||
52 | + | ||
53 | + // RADIUS server shared secret | ||
54 | + protected static final String DEFAULT_RADIUS_SECRET = "ONOSecret"; | ||
55 | + | ||
56 | + // Radius Switch Id | ||
57 | + protected static final String DEFAULT_RADIUS_SWITCH = "of:90e2ba82f97791e9"; | ||
58 | + | ||
59 | + // Radius Port Number | ||
60 | + protected static final String DEFAULT_RADIUS_PORT = "129"; | ||
61 | + | ||
62 | + /** | ||
63 | + * Returns the NAS ip. | ||
64 | + * | ||
65 | + * @return ip address or null if not set | ||
66 | + */ | ||
67 | + public InetAddress nasIp() { | ||
68 | + try { | ||
69 | + if (object == null) { | ||
70 | + return InetAddress.getByName(DEFAULT_NAS_IP); | ||
71 | + } | ||
72 | + return InetAddress.getByName(get(NAS_IP, DEFAULT_NAS_IP)); | ||
73 | + } catch (UnknownHostException e) { | ||
74 | + return null; | ||
75 | + } | ||
76 | + } | ||
77 | + | ||
78 | + /** | ||
79 | + * Sets the NAS ip. | ||
80 | + * | ||
81 | + * @param ip new ip address; null to clear | ||
82 | + * @return self | ||
83 | + */ | ||
84 | + public BasicElementConfig nasIp(String ip) { | ||
85 | + return (BasicElementConfig) setOrClear(NAS_IP, ip); | ||
86 | + } | ||
87 | + | ||
88 | + /** | ||
89 | + * Returns the RADIUS server ip. | ||
90 | + * | ||
91 | + * @return ip address or null if not set | ||
92 | + */ | ||
93 | + public InetAddress radiusIp() { | ||
94 | + try { | ||
95 | + if (object == null) { | ||
96 | + return InetAddress.getByName(DEFAULT_RADIUS_IP); | ||
97 | + } | ||
98 | + return InetAddress.getByName(get(RADIUS_IP, DEFAULT_RADIUS_IP)); | ||
99 | + } catch (UnknownHostException e) { | ||
100 | + return null; | ||
101 | + } | ||
102 | + } | ||
103 | + | ||
104 | + /** | ||
105 | + * Sets the RADIUS server ip. | ||
106 | + * | ||
107 | + * @param ip new ip address; null to clear | ||
108 | + * @return self | ||
109 | + */ | ||
110 | + public BasicElementConfig radiusIp(String ip) { | ||
111 | + return (BasicElementConfig) setOrClear(RADIUS_IP, ip); | ||
112 | + } | ||
113 | + | ||
114 | + /** | ||
115 | + * Returns the RADIUS MAC address. | ||
116 | + * | ||
117 | + * @return mac address or null if not set | ||
118 | + */ | ||
119 | + public String radiusMac() { | ||
120 | + if (object == null) { | ||
121 | + return DEFAULT_RADIUS_MAC; | ||
122 | + } | ||
123 | + return get(RADIUS_MAC, DEFAULT_RADIUS_MAC); | ||
124 | + } | ||
125 | + | ||
126 | + /** | ||
127 | + * Sets the RADIUS MAC address. | ||
128 | + * | ||
129 | + * @param mac new MAC address; null to clear | ||
130 | + * @return self | ||
131 | + */ | ||
132 | + public BasicElementConfig radiusMac(String mac) { | ||
133 | + return (BasicElementConfig) setOrClear(RADIUS_MAC, mac); | ||
134 | + } | ||
135 | + | ||
136 | + /** | ||
137 | + * Returns the RADIUS MAC address. | ||
138 | + * | ||
139 | + * @return mac address or null if not set | ||
140 | + */ | ||
141 | + public String nasMac() { | ||
142 | + if (object == null) { | ||
143 | + return DEFAULT_NAS_MAC; | ||
144 | + } | ||
145 | + return get(NAS_MAC, DEFAULT_NAS_MAC); | ||
146 | + } | ||
147 | + | ||
148 | + /** | ||
149 | + * Sets the RADIUS MAC address. | ||
150 | + * | ||
151 | + * @param mac new MAC address; null to clear | ||
152 | + * @return self | ||
153 | + */ | ||
154 | + public BasicElementConfig nasMac(String mac) { | ||
155 | + return (BasicElementConfig) setOrClear(NAS_MAC, mac); | ||
156 | + } | ||
157 | + | ||
158 | + /** | ||
159 | + * Returns the RADIUS secret. | ||
160 | + * | ||
161 | + * @return radius secret or null if not set | ||
162 | + */ | ||
163 | + public String radiusSecret() { | ||
164 | + if (object == null) { | ||
165 | + return DEFAULT_RADIUS_SECRET; | ||
166 | + } | ||
167 | + return get(RADIUS_SECRET, DEFAULT_RADIUS_SECRET); | ||
168 | + } | ||
169 | + | ||
170 | + /** | ||
171 | + * Sets the RADIUS secret. | ||
172 | + * | ||
173 | + * @param secret new MAC address; null to clear | ||
174 | + * @return self | ||
175 | + */ | ||
176 | + public BasicElementConfig radiusSecret(String secret) { | ||
177 | + return (BasicElementConfig) setOrClear(RADIUS_SECRET, secret); | ||
178 | + } | ||
179 | + | ||
180 | + /** | ||
181 | + * Returns the ID of the RADIUS switch. | ||
182 | + * | ||
183 | + * @return radius switch ID or null if not set | ||
184 | + */ | ||
185 | + public String radiusSwitch() { | ||
186 | + if (object == null) { | ||
187 | + return DEFAULT_RADIUS_SWITCH; | ||
188 | + } | ||
189 | + return get(RADIUS_SWITCH, DEFAULT_RADIUS_SWITCH); | ||
190 | + } | ||
191 | + | ||
192 | + /** | ||
193 | + * Sets the ID of the RADIUS switch. | ||
194 | + * | ||
195 | + * @param switchId new RADIUS switch ID; null to clear | ||
196 | + * @return self | ||
197 | + */ | ||
198 | + public BasicElementConfig radiusSwitch(String switchId) { | ||
199 | + return (BasicElementConfig) setOrClear(RADIUS_SWITCH, switchId); | ||
200 | + } | ||
201 | + | ||
202 | + /** | ||
203 | + * Returns the RADIUS port. | ||
204 | + * | ||
205 | + * @return radius port or null if not set | ||
206 | + */ | ||
207 | + public long radiusPort() { | ||
208 | + if (object == null) { | ||
209 | + return Integer.parseInt(DEFAULT_RADIUS_PORT); | ||
210 | + } | ||
211 | + return Integer.parseInt(get(RADIUS_PORT, "-1")); | ||
212 | + } | ||
213 | + | ||
214 | + /** | ||
215 | + * Sets the RADIUS port. | ||
216 | + * | ||
217 | + * @param port new RADIUS port; null to clear | ||
218 | + * @return self | ||
219 | + */ | ||
220 | + public BasicElementConfig radiusPort(long port) { | ||
221 | + return (BasicElementConfig) setOrClear(RADIUS_PORT, port); | ||
222 | + } | ||
223 | + | ||
224 | +} |
... | @@ -23,7 +23,6 @@ import java.util.Set; | ... | @@ -23,7 +23,6 @@ import java.util.Set; |
23 | import org.junit.After; | 23 | import org.junit.After; |
24 | import org.junit.Before; | 24 | import org.junit.Before; |
25 | import org.junit.Test; | 25 | import org.junit.Test; |
26 | -import org.onlab.osgi.ComponentContextAdapter; | ||
27 | import org.onlab.packet.Data; | 26 | import org.onlab.packet.Data; |
28 | import org.onlab.packet.DeserializationException; | 27 | import org.onlab.packet.DeserializationException; |
29 | import org.onlab.packet.EAP; | 28 | import org.onlab.packet.EAP; |
... | @@ -37,12 +36,13 @@ import org.onlab.packet.RADIUS; | ... | @@ -37,12 +36,13 @@ import org.onlab.packet.RADIUS; |
37 | import org.onlab.packet.RADIUSAttribute; | 36 | import org.onlab.packet.RADIUSAttribute; |
38 | import org.onlab.packet.UDP; | 37 | import org.onlab.packet.UDP; |
39 | import org.onlab.packet.VlanId; | 38 | import org.onlab.packet.VlanId; |
40 | -import org.onosproject.cfg.ComponentConfigAdapter; | ||
41 | import org.onosproject.core.CoreServiceAdapter; | 39 | import org.onosproject.core.CoreServiceAdapter; |
42 | import org.onosproject.net.Annotations; | 40 | import org.onosproject.net.Annotations; |
43 | import org.onosproject.net.Host; | 41 | import org.onosproject.net.Host; |
44 | import org.onosproject.net.HostId; | 42 | import org.onosproject.net.HostId; |
45 | import org.onosproject.net.HostLocation; | 43 | import org.onosproject.net.HostLocation; |
44 | +import org.onosproject.net.config.Config; | ||
45 | +import org.onosproject.net.config.NetworkConfigRegistryAdapter; | ||
46 | import org.onosproject.net.host.HostServiceAdapter; | 46 | import org.onosproject.net.host.HostServiceAdapter; |
47 | import org.onosproject.net.packet.DefaultInboundPacket; | 47 | import org.onosproject.net.packet.DefaultInboundPacket; |
48 | import org.onosproject.net.packet.DefaultPacketContext; | 48 | import org.onosproject.net.packet.DefaultPacketContext; |
... | @@ -173,6 +173,18 @@ public class AAATest { | ... | @@ -173,6 +173,18 @@ public class AAATest { |
173 | } | 173 | } |
174 | 174 | ||
175 | /** | 175 | /** |
176 | + * Mocks the network config registry. | ||
177 | + */ | ||
178 | + @SuppressWarnings("unchecked") | ||
179 | + private static final class TestNetworkConfigRegistry | ||
180 | + extends NetworkConfigRegistryAdapter { | ||
181 | + @Override | ||
182 | + public <S, C extends Config<S>> C getConfig(S subject, Class<C> configClass) { | ||
183 | + return (C) new AAAConfig(); | ||
184 | + } | ||
185 | + } | ||
186 | + | ||
187 | + /** | ||
176 | * Sends an Ethernet packet to the process method of the Packet Processor. | 188 | * Sends an Ethernet packet to the process method of the Packet Processor. |
177 | * | 189 | * |
178 | * @param reply Ethernet packet | 190 | * @param reply Ethernet packet |
... | @@ -261,7 +273,7 @@ public class AAATest { | ... | @@ -261,7 +273,7 @@ public class AAATest { |
261 | 273 | ||
262 | IPv4 ipv4 = new IPv4(); | 274 | IPv4 ipv4 = new IPv4(); |
263 | ipv4.setProtocol(IPv4.PROTOCOL_UDP); | 275 | ipv4.setProtocol(IPv4.PROTOCOL_UDP); |
264 | - ipv4.setSourceAddress("127.0.0.1"); | 276 | + ipv4.setSourceAddress(aaa.radiusIpAddress.getHostAddress()); |
265 | 277 | ||
266 | String challenge = "1234"; | 278 | String challenge = "1234"; |
267 | 279 | ||
... | @@ -294,11 +306,11 @@ public class AAATest { | ... | @@ -294,11 +306,11 @@ public class AAATest { |
294 | @Before | 306 | @Before |
295 | public void setUp() { | 307 | public void setUp() { |
296 | aaa = new AAA(); | 308 | aaa = new AAA(); |
297 | - aaa.cfgService = new ComponentConfigAdapter(); | 309 | + aaa.netCfgService = new TestNetworkConfigRegistry(); |
298 | aaa.coreService = new CoreServiceAdapter(); | 310 | aaa.coreService = new CoreServiceAdapter(); |
299 | aaa.packetService = new MockPacketService(); | 311 | aaa.packetService = new MockPacketService(); |
300 | aaa.hostService = new MockHostService(); | 312 | aaa.hostService = new MockHostService(); |
301 | - aaa.activate(new ComponentContextAdapter()); | 313 | + aaa.activate(); |
302 | } | 314 | } |
303 | 315 | ||
304 | /** | 316 | /** |
... | @@ -328,9 +340,9 @@ public class AAATest { | ... | @@ -328,9 +340,9 @@ public class AAATest { |
328 | IPv4 ipv4 = (IPv4) supplicantPacket.getPayload(); | 340 | IPv4 ipv4 = (IPv4) supplicantPacket.getPayload(); |
329 | assertThat(ipv4, notNullValue()); | 341 | assertThat(ipv4, notNullValue()); |
330 | assertThat(IpAddress.valueOf(ipv4.getSourceAddress()).toString(), | 342 | assertThat(IpAddress.valueOf(ipv4.getSourceAddress()).toString(), |
331 | - is(aaa.nasIpAddress)); | 343 | + is(aaa.nasIpAddress.getHostAddress())); |
332 | assertThat(IpAddress.valueOf(ipv4.getDestinationAddress()).toString(), | 344 | assertThat(IpAddress.valueOf(ipv4.getDestinationAddress()).toString(), |
333 | - is(aaa.radiusIpAddress)); | 345 | + is(aaa.radiusIpAddress.getHostAddress())); |
334 | 346 | ||
335 | assertThat(ipv4.getPayload(), instanceOf(UDP.class)); | 347 | assertThat(ipv4.getPayload(), instanceOf(UDP.class)); |
336 | UDP udp = (UDP) ipv4.getPayload(); | 348 | UDP udp = (UDP) ipv4.getPayload(); |
... | @@ -418,7 +430,7 @@ public class AAATest { | ... | @@ -418,7 +430,7 @@ public class AAATest { |
418 | IpAddress.valueOf(IpAddress.Version.INET, | 430 | IpAddress.valueOf(IpAddress.Version.INET, |
419 | radiusAccessRequest.getAttribute(RADIUSAttribute.RADIUS_ATTR_NAS_IP) | 431 | radiusAccessRequest.getAttribute(RADIUSAttribute.RADIUS_ATTR_NAS_IP) |
420 | .getValue()); | 432 | .getValue()); |
421 | - assertThat(nasIp.toString(), is("127.0.0.1")); | 433 | + assertThat(nasIp.toString(), is(aaa.nasIpAddress.getHostAddress())); |
422 | 434 | ||
423 | // State machine should have been created by now | 435 | // State machine should have been created by now |
424 | 436 | ||
... | @@ -482,4 +494,20 @@ public class AAATest { | ... | @@ -482,4 +494,20 @@ public class AAATest { |
482 | assertThat(stateMachine, notNullValue()); | 494 | assertThat(stateMachine, notNullValue()); |
483 | assertThat(stateMachine.state(), is(StateMachine.STATE_AUTHORIZED)); | 495 | assertThat(stateMachine.state(), is(StateMachine.STATE_AUTHORIZED)); |
484 | } | 496 | } |
497 | + | ||
498 | + | ||
499 | + private static final String RADIUS_SECRET = "radiusSecret"; | ||
500 | + private static final String RADIUS_SWITCH = "radiusSwitch"; | ||
501 | + private static final String RADIUS_PORT = "radiusPort"; | ||
502 | + | ||
503 | + /** | ||
504 | + * Tests the default configuration. | ||
505 | + */ | ||
506 | + @Test | ||
507 | + public void testConfig() { | ||
508 | + assertThat(aaa.nasIpAddress.getHostAddress(), is(AAAConfig.DEFAULT_NAS_IP)); | ||
509 | + assertThat(aaa.nasMacAddress, is(AAAConfig.DEFAULT_NAS_MAC)); | ||
510 | + assertThat(aaa.radiusIpAddress.getHostAddress(), is(AAAConfig.DEFAULT_RADIUS_IP)); | ||
511 | + assertThat(aaa.radiusMacAddress, is(AAAConfig.DEFAULT_RADIUS_MAC)); | ||
512 | + } | ||
485 | } | 513 | } | ... | ... |
-
Please register or login to post a comment