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
diff --git a/src/main/java/org/onosproject/aaa/AAA.java b/src/main/java/org/onosproject/aaa/AAA.java
index 59042fe..479ec7e 100644
--- a/src/main/java/org/onosproject/aaa/AAA.java
+++ b/src/main/java/org/onosproject/aaa/AAA.java
@@ -112,6 +112,9 @@
     // RADIUS port number
     protected long radiusPort;
 
+    // RADIUS server TCP port number
+    protected short radiusServerPort;
+
     // our application-specific event handler
     private ReactivePacketProcessor processor = new ReactivePacketProcessor();
 
@@ -206,8 +209,8 @@
         TrafficSelector radSelector = DefaultTrafficSelector.builder()
                 .matchEthType(EthType.EtherType.IPV4.ethType().toShort())
                 .matchIPProtocol(IPv4.PROTOCOL_UDP)
-                .matchUdpDst(TpPort.tpPort(1812))
-                .matchUdpSrc(TpPort.tpPort(1812))
+                .matchUdpDst(TpPort.tpPort(radiusServerPort))
+                .matchUdpSrc(TpPort.tpPort(radiusServerPort))
                 .build();
         packetService.requestPackets(radSelector, CONTROL, appId);
     }
@@ -223,8 +226,8 @@
         TrafficSelector radSelector = DefaultTrafficSelector.builder()
                 .matchEthType(EthType.EtherType.IPV4.ethType().toShort())
                 .matchIPProtocol(IPv4.PROTOCOL_UDP)
-                .matchUdpDst(TpPort.tpPort(1812))
-                .matchUdpSrc(TpPort.tpPort(1812))
+                .matchUdpDst(TpPort.tpPort(radiusServerPort))
+                .matchUdpSrc(TpPort.tpPort(radiusServerPort))
                 .build();
         packetService.cancelPackets(radSelector, CONTROL, appId);
     }
@@ -452,8 +455,8 @@
             IPv4 ip4Packet = new IPv4();
             Ethernet ethPkt = new Ethernet();
             radiusMessage.setParent(udp);
-            udp.setDestinationPort((short) 1812);
-            udp.setSourcePort((short) 1812); // TODO: make this configurable
+            udp.setDestinationPort(radiusServerPort);
+            udp.setSourcePort(radiusServerPort);
             udp.setPayload(radiusMessage);
             udp.setParent(ip4Packet);
             ip4Packet.setSourceAddress(AAA.this.nasIpAddress.getHostAddress());
@@ -524,15 +527,9 @@
             if (newCfg.radiusPort() != -1) {
                 radiusPort = newCfg.radiusPort();
             }
-
-            log.info("AAA app configuration:");
-            log.info("NAS IP is {}", nasIpAddress);
-            log.info("RADIUS IP is {}", radiusIpAddress);
-            log.info("NAS MAC is {}", nasMacAddress);
-            log.info("RADIUS MAC is {}", radiusMacAddress);
-            log.info("RADIUS secret is {}", radiusSecret);
-            log.info("RADIUS switch is {}", radiusSwitch);
-            log.info("RADIUS port is {}", radiusPort);
+            if (newCfg.radiusServerUDPPort() != -1) {
+                radiusServerPort = newCfg.radiusServerUDPPort();
+            }
         }
 
         @Override
diff --git a/src/main/java/org/onosproject/aaa/AAAConfig.java b/src/main/java/org/onosproject/aaa/AAAConfig.java
index 565ce9f..c18d2bf 100644
--- a/src/main/java/org/onosproject/aaa/AAAConfig.java
+++ b/src/main/java/org/onosproject/aaa/AAAConfig.java
@@ -28,6 +28,7 @@
 public class AAAConfig extends Config<ApplicationId> {
 
     private static final String RADIUS_IP = "radiusIp";
+    private static final String RADIUS_SERVER_PORT = "1812";
     private static final String RADIUS_MAC = "radiusMac";
     private static final String NAS_IP = "nasIp";
     private static final String NAS_MAC = "nasMac";
@@ -47,9 +48,6 @@
     // NAS MAC address
     protected static final String DEFAULT_NAS_MAC = "00:00:00:00:10:01";
 
-    // RADIUS uplink port
-    protected static final int DEFAULT_RADIUS_UPLINK = 2;
-
     // RADIUS server shared secret
     protected static final String DEFAULT_RADIUS_SECRET = "ONOSecret";
 
@@ -59,6 +57,24 @@
     // Radius Port Number
     protected static final String DEFAULT_RADIUS_PORT = "129";
 
+    // Radius Server UDP Port Number
+    protected static final String DEFAULT_RADIUS_SERVER_PORT = "1812";
+
+    /**
+     * Gets the value of a string property, protecting for an empty
+     * JSON object.
+     *
+     * @param name name of the property
+     * @param defaultValue default value if none has been specified
+     * @return String value if one os found, default value otherwise
+     */
+    private String getStringProperty(String name, String defaultValue) {
+        if (object == null) {
+            return defaultValue;
+        }
+        return get(name, defaultValue);
+    }
+
     /**
      * Returns the NAS ip.
      *
@@ -66,10 +82,7 @@
      */
     public InetAddress nasIp() {
         try {
-            if (object == null) {
-                return InetAddress.getByName(DEFAULT_NAS_IP);
-            }
-            return InetAddress.getByName(get(NAS_IP, DEFAULT_NAS_IP));
+            return InetAddress.getByName(getStringProperty(NAS_IP, DEFAULT_NAS_IP));
         } catch (UnknownHostException e) {
             return null;
         }
@@ -92,10 +105,7 @@
      */
     public InetAddress radiusIp() {
         try {
-            if (object == null) {
-                return InetAddress.getByName(DEFAULT_RADIUS_IP);
-            }
-            return InetAddress.getByName(get(RADIUS_IP, DEFAULT_RADIUS_IP));
+            return InetAddress.getByName(getStringProperty(RADIUS_IP, DEFAULT_RADIUS_IP));
         } catch (UnknownHostException e) {
             return null;
         }
@@ -117,10 +127,7 @@
      * @return mac address or null if not set
      */
     public String radiusMac() {
-        if (object == null) {
-            return DEFAULT_RADIUS_MAC;
-        }
-        return get(RADIUS_MAC, DEFAULT_RADIUS_MAC);
+        return getStringProperty(RADIUS_MAC, DEFAULT_RADIUS_MAC);
     }
 
     /**
@@ -139,10 +146,7 @@
      * @return mac address or null if not set
      */
     public String nasMac() {
-        if (object == null) {
-            return DEFAULT_NAS_MAC;
-        }
-        return get(NAS_MAC, DEFAULT_NAS_MAC);
+        return getStringProperty(NAS_MAC, DEFAULT_NAS_MAC);
     }
 
     /**
@@ -161,10 +165,7 @@
      * @return radius secret or null if not set
      */
     public String radiusSecret() {
-        if (object == null) {
-            return DEFAULT_RADIUS_SECRET;
-        }
-        return get(RADIUS_SECRET, DEFAULT_RADIUS_SECRET);
+        return getStringProperty(RADIUS_SECRET, DEFAULT_RADIUS_SECRET);
     }
 
     /**
@@ -183,10 +184,7 @@
      * @return radius switch ID or null if not set
      */
     public String radiusSwitch() {
-        if (object == null) {
-            return DEFAULT_RADIUS_SWITCH;
-        }
-        return get(RADIUS_SWITCH, DEFAULT_RADIUS_SWITCH);
+        return getStringProperty(RADIUS_SWITCH, DEFAULT_RADIUS_SWITCH);
     }
 
     /**
@@ -205,10 +203,7 @@
      * @return radius port or null if not set
      */
     public long radiusPort() {
-        if (object == null) {
-            return Integer.parseInt(DEFAULT_RADIUS_PORT);
-        }
-        return Integer.parseInt(get(RADIUS_PORT, "-1"));
+        return Integer.parseInt(getStringProperty(RADIUS_PORT, DEFAULT_RADIUS_PORT));
     }
 
     /**
@@ -221,4 +216,24 @@
         return (BasicElementConfig) setOrClear(RADIUS_PORT, port);
     }
 
+    /**
+     * Returns the RADIUS server UDP port.
+     *
+     * @return radius server UDP port.
+     */
+    public short radiusServerUDPPort() {
+        return Short.parseShort(getStringProperty(RADIUS_SERVER_PORT,
+                                                  DEFAULT_RADIUS_SERVER_PORT));
+    }
+
+    /**
+     * Sets the RADIUS port.
+     *
+     * @param port new RADIUS UDP port; -1 to clear
+     * @return self
+     */
+    public BasicElementConfig radiusServerUDPPort(short port) {
+        return (BasicElementConfig) setOrClear(RADIUS_SERVER_PORT, (long) port);
+    }
+
 }
diff --git a/src/test/java/org/onosproject/aaa/AAATest.java b/src/test/java/org/onosproject/aaa/AAATest.java
index 214a83a..75a6033 100644
--- a/src/test/java/org/onosproject/aaa/AAATest.java
+++ b/src/test/java/org/onosproject/aaa/AAATest.java
@@ -495,11 +495,6 @@
         assertThat(stateMachine.state(), is(StateMachine.STATE_AUTHORIZED));
     }
 
-
-    private static final String RADIUS_SECRET = "radiusSecret";
-    private static final String RADIUS_SWITCH = "radiusSwitch";
-    private static final String RADIUS_PORT = "radiusPort";
-
     /**
      * Tests the default configuration.
      */