Committed by
Gerrit Code Review
More AAA refactoring
- parameterize the UDP port of the RADIUS server - clean up some unused constants - refactor config code to reduce repetitive code Change-Id: I797dabd12c8ccd522f1ab0812c2b03da7264f2c0
Showing
3 changed files
with
58 additions
and
51 deletions
| ... | @@ -112,6 +112,9 @@ public class AAA { | ... | @@ -112,6 +112,9 @@ public class AAA { |
| 112 | // RADIUS port number | 112 | // RADIUS port number |
| 113 | protected long radiusPort; | 113 | protected long radiusPort; |
| 114 | 114 | ||
| 115 | + // RADIUS server TCP port number | ||
| 116 | + protected short radiusServerPort; | ||
| 117 | + | ||
| 115 | // our application-specific event handler | 118 | // our application-specific event handler |
| 116 | private ReactivePacketProcessor processor = new ReactivePacketProcessor(); | 119 | private ReactivePacketProcessor processor = new ReactivePacketProcessor(); |
| 117 | 120 | ||
| ... | @@ -206,8 +209,8 @@ public class AAA { | ... | @@ -206,8 +209,8 @@ public class AAA { |
| 206 | TrafficSelector radSelector = DefaultTrafficSelector.builder() | 209 | TrafficSelector radSelector = DefaultTrafficSelector.builder() |
| 207 | .matchEthType(EthType.EtherType.IPV4.ethType().toShort()) | 210 | .matchEthType(EthType.EtherType.IPV4.ethType().toShort()) |
| 208 | .matchIPProtocol(IPv4.PROTOCOL_UDP) | 211 | .matchIPProtocol(IPv4.PROTOCOL_UDP) |
| 209 | - .matchUdpDst(TpPort.tpPort(1812)) | 212 | + .matchUdpDst(TpPort.tpPort(radiusServerPort)) |
| 210 | - .matchUdpSrc(TpPort.tpPort(1812)) | 213 | + .matchUdpSrc(TpPort.tpPort(radiusServerPort)) |
| 211 | .build(); | 214 | .build(); |
| 212 | packetService.requestPackets(radSelector, CONTROL, appId); | 215 | packetService.requestPackets(radSelector, CONTROL, appId); |
| 213 | } | 216 | } |
| ... | @@ -223,8 +226,8 @@ public class AAA { | ... | @@ -223,8 +226,8 @@ public class AAA { |
| 223 | TrafficSelector radSelector = DefaultTrafficSelector.builder() | 226 | TrafficSelector radSelector = DefaultTrafficSelector.builder() |
| 224 | .matchEthType(EthType.EtherType.IPV4.ethType().toShort()) | 227 | .matchEthType(EthType.EtherType.IPV4.ethType().toShort()) |
| 225 | .matchIPProtocol(IPv4.PROTOCOL_UDP) | 228 | .matchIPProtocol(IPv4.PROTOCOL_UDP) |
| 226 | - .matchUdpDst(TpPort.tpPort(1812)) | 229 | + .matchUdpDst(TpPort.tpPort(radiusServerPort)) |
| 227 | - .matchUdpSrc(TpPort.tpPort(1812)) | 230 | + .matchUdpSrc(TpPort.tpPort(radiusServerPort)) |
| 228 | .build(); | 231 | .build(); |
| 229 | packetService.cancelPackets(radSelector, CONTROL, appId); | 232 | packetService.cancelPackets(radSelector, CONTROL, appId); |
| 230 | } | 233 | } |
| ... | @@ -452,8 +455,8 @@ public class AAA { | ... | @@ -452,8 +455,8 @@ public class AAA { |
| 452 | IPv4 ip4Packet = new IPv4(); | 455 | IPv4 ip4Packet = new IPv4(); |
| 453 | Ethernet ethPkt = new Ethernet(); | 456 | Ethernet ethPkt = new Ethernet(); |
| 454 | radiusMessage.setParent(udp); | 457 | radiusMessage.setParent(udp); |
| 455 | - udp.setDestinationPort((short) 1812); | 458 | + udp.setDestinationPort(radiusServerPort); |
| 456 | - udp.setSourcePort((short) 1812); // TODO: make this configurable | 459 | + udp.setSourcePort(radiusServerPort); |
| 457 | udp.setPayload(radiusMessage); | 460 | udp.setPayload(radiusMessage); |
| 458 | udp.setParent(ip4Packet); | 461 | udp.setParent(ip4Packet); |
| 459 | ip4Packet.setSourceAddress(AAA.this.nasIpAddress.getHostAddress()); | 462 | ip4Packet.setSourceAddress(AAA.this.nasIpAddress.getHostAddress()); |
| ... | @@ -524,15 +527,9 @@ public class AAA { | ... | @@ -524,15 +527,9 @@ public class AAA { |
| 524 | if (newCfg.radiusPort() != -1) { | 527 | if (newCfg.radiusPort() != -1) { |
| 525 | radiusPort = newCfg.radiusPort(); | 528 | radiusPort = newCfg.radiusPort(); |
| 526 | } | 529 | } |
| 527 | - | 530 | + if (newCfg.radiusServerUDPPort() != -1) { |
| 528 | - log.info("AAA app configuration:"); | 531 | + radiusServerPort = newCfg.radiusServerUDPPort(); |
| 529 | - log.info("NAS IP is {}", nasIpAddress); | 532 | + } |
| 530 | - log.info("RADIUS IP is {}", radiusIpAddress); | ||
| 531 | - log.info("NAS MAC is {}", nasMacAddress); | ||
| 532 | - log.info("RADIUS MAC is {}", radiusMacAddress); | ||
| 533 | - log.info("RADIUS secret is {}", radiusSecret); | ||
| 534 | - log.info("RADIUS switch is {}", radiusSwitch); | ||
| 535 | - log.info("RADIUS port is {}", radiusPort); | ||
| 536 | } | 533 | } |
| 537 | 534 | ||
| 538 | @Override | 535 | @Override | ... | ... |
| ... | @@ -28,6 +28,7 @@ import org.onosproject.net.config.basics.BasicElementConfig; | ... | @@ -28,6 +28,7 @@ import org.onosproject.net.config.basics.BasicElementConfig; |
| 28 | public class AAAConfig extends Config<ApplicationId> { | 28 | public class AAAConfig extends Config<ApplicationId> { |
| 29 | 29 | ||
| 30 | private static final String RADIUS_IP = "radiusIp"; | 30 | private static final String RADIUS_IP = "radiusIp"; |
| 31 | + private static final String RADIUS_SERVER_PORT = "1812"; | ||
| 31 | private static final String RADIUS_MAC = "radiusMac"; | 32 | private static final String RADIUS_MAC = "radiusMac"; |
| 32 | private static final String NAS_IP = "nasIp"; | 33 | private static final String NAS_IP = "nasIp"; |
| 33 | private static final String NAS_MAC = "nasMac"; | 34 | private static final String NAS_MAC = "nasMac"; |
| ... | @@ -47,9 +48,6 @@ public class AAAConfig extends Config<ApplicationId> { | ... | @@ -47,9 +48,6 @@ public class AAAConfig extends Config<ApplicationId> { |
| 47 | // NAS MAC address | 48 | // NAS MAC address |
| 48 | protected static final String DEFAULT_NAS_MAC = "00:00:00:00:10:01"; | 49 | protected static final String DEFAULT_NAS_MAC = "00:00:00:00:10:01"; |
| 49 | 50 | ||
| 50 | - // RADIUS uplink port | ||
| 51 | - protected static final int DEFAULT_RADIUS_UPLINK = 2; | ||
| 52 | - | ||
| 53 | // RADIUS server shared secret | 51 | // RADIUS server shared secret |
| 54 | protected static final String DEFAULT_RADIUS_SECRET = "ONOSecret"; | 52 | protected static final String DEFAULT_RADIUS_SECRET = "ONOSecret"; |
| 55 | 53 | ||
| ... | @@ -59,6 +57,24 @@ public class AAAConfig extends Config<ApplicationId> { | ... | @@ -59,6 +57,24 @@ public class AAAConfig extends Config<ApplicationId> { |
| 59 | // Radius Port Number | 57 | // Radius Port Number |
| 60 | protected static final String DEFAULT_RADIUS_PORT = "129"; | 58 | protected static final String DEFAULT_RADIUS_PORT = "129"; |
| 61 | 59 | ||
| 60 | + // Radius Server UDP Port Number | ||
| 61 | + protected static final String DEFAULT_RADIUS_SERVER_PORT = "1812"; | ||
| 62 | + | ||
| 63 | + /** | ||
| 64 | + * Gets the value of a string property, protecting for an empty | ||
| 65 | + * JSON object. | ||
| 66 | + * | ||
| 67 | + * @param name name of the property | ||
| 68 | + * @param defaultValue default value if none has been specified | ||
| 69 | + * @return String value if one os found, default value otherwise | ||
| 70 | + */ | ||
| 71 | + private String getStringProperty(String name, String defaultValue) { | ||
| 72 | + if (object == null) { | ||
| 73 | + return defaultValue; | ||
| 74 | + } | ||
| 75 | + return get(name, defaultValue); | ||
| 76 | + } | ||
| 77 | + | ||
| 62 | /** | 78 | /** |
| 63 | * Returns the NAS ip. | 79 | * Returns the NAS ip. |
| 64 | * | 80 | * |
| ... | @@ -66,10 +82,7 @@ public class AAAConfig extends Config<ApplicationId> { | ... | @@ -66,10 +82,7 @@ public class AAAConfig extends Config<ApplicationId> { |
| 66 | */ | 82 | */ |
| 67 | public InetAddress nasIp() { | 83 | public InetAddress nasIp() { |
| 68 | try { | 84 | try { |
| 69 | - if (object == null) { | 85 | + return InetAddress.getByName(getStringProperty(NAS_IP, DEFAULT_NAS_IP)); |
| 70 | - return InetAddress.getByName(DEFAULT_NAS_IP); | ||
| 71 | - } | ||
| 72 | - return InetAddress.getByName(get(NAS_IP, DEFAULT_NAS_IP)); | ||
| 73 | } catch (UnknownHostException e) { | 86 | } catch (UnknownHostException e) { |
| 74 | return null; | 87 | return null; |
| 75 | } | 88 | } |
| ... | @@ -92,10 +105,7 @@ public class AAAConfig extends Config<ApplicationId> { | ... | @@ -92,10 +105,7 @@ public class AAAConfig extends Config<ApplicationId> { |
| 92 | */ | 105 | */ |
| 93 | public InetAddress radiusIp() { | 106 | public InetAddress radiusIp() { |
| 94 | try { | 107 | try { |
| 95 | - if (object == null) { | 108 | + return InetAddress.getByName(getStringProperty(RADIUS_IP, DEFAULT_RADIUS_IP)); |
| 96 | - return InetAddress.getByName(DEFAULT_RADIUS_IP); | ||
| 97 | - } | ||
| 98 | - return InetAddress.getByName(get(RADIUS_IP, DEFAULT_RADIUS_IP)); | ||
| 99 | } catch (UnknownHostException e) { | 109 | } catch (UnknownHostException e) { |
| 100 | return null; | 110 | return null; |
| 101 | } | 111 | } |
| ... | @@ -117,10 +127,7 @@ public class AAAConfig extends Config<ApplicationId> { | ... | @@ -117,10 +127,7 @@ public class AAAConfig extends Config<ApplicationId> { |
| 117 | * @return mac address or null if not set | 127 | * @return mac address or null if not set |
| 118 | */ | 128 | */ |
| 119 | public String radiusMac() { | 129 | public String radiusMac() { |
| 120 | - if (object == null) { | 130 | + return getStringProperty(RADIUS_MAC, DEFAULT_RADIUS_MAC); |
| 121 | - return DEFAULT_RADIUS_MAC; | ||
| 122 | - } | ||
| 123 | - return get(RADIUS_MAC, DEFAULT_RADIUS_MAC); | ||
| 124 | } | 131 | } |
| 125 | 132 | ||
| 126 | /** | 133 | /** |
| ... | @@ -139,10 +146,7 @@ public class AAAConfig extends Config<ApplicationId> { | ... | @@ -139,10 +146,7 @@ public class AAAConfig extends Config<ApplicationId> { |
| 139 | * @return mac address or null if not set | 146 | * @return mac address or null if not set |
| 140 | */ | 147 | */ |
| 141 | public String nasMac() { | 148 | public String nasMac() { |
| 142 | - if (object == null) { | 149 | + return getStringProperty(NAS_MAC, DEFAULT_NAS_MAC); |
| 143 | - return DEFAULT_NAS_MAC; | ||
| 144 | - } | ||
| 145 | - return get(NAS_MAC, DEFAULT_NAS_MAC); | ||
| 146 | } | 150 | } |
| 147 | 151 | ||
| 148 | /** | 152 | /** |
| ... | @@ -161,10 +165,7 @@ public class AAAConfig extends Config<ApplicationId> { | ... | @@ -161,10 +165,7 @@ public class AAAConfig extends Config<ApplicationId> { |
| 161 | * @return radius secret or null if not set | 165 | * @return radius secret or null if not set |
| 162 | */ | 166 | */ |
| 163 | public String radiusSecret() { | 167 | public String radiusSecret() { |
| 164 | - if (object == null) { | 168 | + return getStringProperty(RADIUS_SECRET, DEFAULT_RADIUS_SECRET); |
| 165 | - return DEFAULT_RADIUS_SECRET; | ||
| 166 | - } | ||
| 167 | - return get(RADIUS_SECRET, DEFAULT_RADIUS_SECRET); | ||
| 168 | } | 169 | } |
| 169 | 170 | ||
| 170 | /** | 171 | /** |
| ... | @@ -183,10 +184,7 @@ public class AAAConfig extends Config<ApplicationId> { | ... | @@ -183,10 +184,7 @@ public class AAAConfig extends Config<ApplicationId> { |
| 183 | * @return radius switch ID or null if not set | 184 | * @return radius switch ID or null if not set |
| 184 | */ | 185 | */ |
| 185 | public String radiusSwitch() { | 186 | public String radiusSwitch() { |
| 186 | - if (object == null) { | 187 | + return getStringProperty(RADIUS_SWITCH, DEFAULT_RADIUS_SWITCH); |
| 187 | - return DEFAULT_RADIUS_SWITCH; | ||
| 188 | - } | ||
| 189 | - return get(RADIUS_SWITCH, DEFAULT_RADIUS_SWITCH); | ||
| 190 | } | 188 | } |
| 191 | 189 | ||
| 192 | /** | 190 | /** |
| ... | @@ -205,10 +203,7 @@ public class AAAConfig extends Config<ApplicationId> { | ... | @@ -205,10 +203,7 @@ public class AAAConfig extends Config<ApplicationId> { |
| 205 | * @return radius port or null if not set | 203 | * @return radius port or null if not set |
| 206 | */ | 204 | */ |
| 207 | public long radiusPort() { | 205 | public long radiusPort() { |
| 208 | - if (object == null) { | 206 | + return Integer.parseInt(getStringProperty(RADIUS_PORT, DEFAULT_RADIUS_PORT)); |
| 209 | - return Integer.parseInt(DEFAULT_RADIUS_PORT); | ||
| 210 | - } | ||
| 211 | - return Integer.parseInt(get(RADIUS_PORT, "-1")); | ||
| 212 | } | 207 | } |
| 213 | 208 | ||
| 214 | /** | 209 | /** |
| ... | @@ -221,4 +216,24 @@ public class AAAConfig extends Config<ApplicationId> { | ... | @@ -221,4 +216,24 @@ public class AAAConfig extends Config<ApplicationId> { |
| 221 | return (BasicElementConfig) setOrClear(RADIUS_PORT, port); | 216 | return (BasicElementConfig) setOrClear(RADIUS_PORT, port); |
| 222 | } | 217 | } |
| 223 | 218 | ||
| 219 | + /** | ||
| 220 | + * Returns the RADIUS server UDP port. | ||
| 221 | + * | ||
| 222 | + * @return radius server UDP port. | ||
| 223 | + */ | ||
| 224 | + public short radiusServerUDPPort() { | ||
| 225 | + return Short.parseShort(getStringProperty(RADIUS_SERVER_PORT, | ||
| 226 | + DEFAULT_RADIUS_SERVER_PORT)); | ||
| 227 | + } | ||
| 228 | + | ||
| 229 | + /** | ||
| 230 | + * Sets the RADIUS port. | ||
| 231 | + * | ||
| 232 | + * @param port new RADIUS UDP port; -1 to clear | ||
| 233 | + * @return self | ||
| 234 | + */ | ||
| 235 | + public BasicElementConfig radiusServerUDPPort(short port) { | ||
| 236 | + return (BasicElementConfig) setOrClear(RADIUS_SERVER_PORT, (long) port); | ||
| 237 | + } | ||
| 238 | + | ||
| 224 | } | 239 | } | ... | ... |
| ... | @@ -495,11 +495,6 @@ public class AAATest { | ... | @@ -495,11 +495,6 @@ public class AAATest { |
| 495 | assertThat(stateMachine.state(), is(StateMachine.STATE_AUTHORIZED)); | 495 | assertThat(stateMachine.state(), is(StateMachine.STATE_AUTHORIZED)); |
| 496 | } | 496 | } |
| 497 | 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 | /** | 498 | /** |
| 504 | * Tests the default configuration. | 499 | * Tests the default configuration. |
| 505 | */ | 500 | */ | ... | ... |
-
Please register or login to post a comment