Fix: retrieve port bridge port MAC from deviceService rather via ovsdb

1. Derive gateway IP address from POD subnet CIDR.
2. Remove the logic of injecting gateway IP address.

Change-Id: Ice44c1c4b41bc1689954041aee6441a379e5bacd
diff --git a/apps/k8s-node/api/src/main/java/org/onosproject/k8snode/api/DefaultK8sNode.java b/apps/k8s-node/api/src/main/java/org/onosproject/k8snode/api/DefaultK8sNode.java
index 87e1f1d..ff0f9de 100644
--- a/apps/k8s-node/api/src/main/java/org/onosproject/k8snode/api/DefaultK8sNode.java
+++ b/apps/k8s-node/api/src/main/java/org/onosproject/k8snode/api/DefaultK8sNode.java
@@ -19,6 +19,7 @@
 import org.onlab.osgi.DefaultServiceDirectory;
 import org.onlab.packet.IpAddress;
 import org.onlab.packet.MacAddress;
+import org.onosproject.net.Annotations;
 import org.onosproject.net.DeviceId;
 import org.onosproject.net.Port;
 import org.onosproject.net.PortNumber;
@@ -48,10 +49,9 @@
 
     private static final int DEFAULT_OVSDB_PORT = 6640;
     private static final String IP_ADDRESS = "ip_address";
-    private static final String MAC_ADDRESS = "mac_address";
     private static final String EXT_INTF = "ext_interface";
     private static final String EXT_GW_IP = "ext_gw_ip_address";
-    private static final String EXT_GW_MAC = "ext_gw_mac_address";
+    private static final String PORT_MAC = "portMac";
 
     private final String hostname;
     private final Type type;
@@ -204,69 +204,7 @@
 
     @Override
     public PortNumber intgBridgePortNum() {
-        DeviceService deviceService = DefaultServiceDirectory.getService(DeviceService.class);
-        Port port = deviceService.getPorts(intgBridge).stream()
-                .filter(p -> p.isEnabled() &&
-                        Objects.equals(p.annotations().value(PORT_NAME), INTEGRATION_BRIDGE))
-                .findAny().orElse(null);
-        return port != null ? port.number() : null;
-    }
-
-    @Override
-    public MacAddress intgBridgeMac() {
-        OvsdbClientService client = getOvsClient();
-
-        if (client == null) {
-            return null;
-        }
-
-        Interface iface = getOvsClient().getInterface(INTEGRATION_BRIDGE);
-        OvsdbMap data = (OvsdbMap) iface.getExternalIdsColumn().data();
-        return MacAddress.valueOf((String) data.map().get(MAC_ADDRESS));
-    }
-
-    @Override
-    public IpAddress extBridgeIp() {
-        OvsdbClientService client = getOvsClient();
-
-        if (client == null) {
-            return null;
-        }
-
-        Interface iface = getOvsClient().getInterface(EXTERNAL_BRIDGE);
-        OvsdbMap data = (OvsdbMap) iface.getExternalIdsColumn().data();
-        return IpAddress.valueOf((String) data.map().get(IP_ADDRESS));
-    }
-
-    @Override
-    public MacAddress extBridgeMac() {
-        OvsdbClientService client = getOvsClient();
-
-        if (client == null) {
-            return null;
-        }
-
-        Interface iface = getOvsClient().getInterface(EXTERNAL_BRIDGE);
-        OvsdbMap data = (OvsdbMap) iface.getExternalIdsColumn().data();
-        return MacAddress.valueOf((String) data.map().get(MAC_ADDRESS));
-    }
-
-    @Override
-    public IpAddress extGatewayIp() {
-        OvsdbClientService client = getOvsClient();
-
-        if (client == null) {
-            return null;
-        }
-
-        Interface iface = getOvsClient().getInterface(EXTERNAL_BRIDGE);
-        OvsdbMap data = (OvsdbMap) iface.getExternalIdsColumn().data();
-        return IpAddress.valueOf((String) data.map().get(EXT_GW_IP));
-    }
-
-    @Override
-    public MacAddress extGatewayMac() {
-        return extGatewayMac;
+        return portNumber(intgBridge, INTEGRATION_BRIDGE);
     }
 
     @Override
@@ -298,6 +236,47 @@
     }
 
     @Override
+    public MacAddress intgBridgeMac() {
+        return macAddress(intgBridge, INTEGRATION_BRIDGE);
+    }
+
+    @Override
+    public IpAddress extBridgeIp() {
+        OvsdbClientService client = getOvsClient();
+
+        if (client == null) {
+            return null;
+        }
+
+        Interface iface = getOvsClient().getInterface(EXTERNAL_BRIDGE);
+        OvsdbMap data = (OvsdbMap) iface.getExternalIdsColumn().data();
+        return IpAddress.valueOf((String) data.map().get(IP_ADDRESS));
+    }
+
+    @Override
+    public MacAddress extBridgeMac() {
+        return macAddress(extBridge, EXTERNAL_BRIDGE);
+    }
+
+    @Override
+    public IpAddress extGatewayIp() {
+        OvsdbClientService client = getOvsClient();
+
+        if (client == null) {
+            return null;
+        }
+
+        Interface iface = getOvsClient().getInterface(EXTERNAL_BRIDGE);
+        OvsdbMap data = (OvsdbMap) iface.getExternalIdsColumn().data();
+        return IpAddress.valueOf((String) data.map().get(EXT_GW_IP));
+    }
+
+    @Override
+    public MacAddress extGatewayMac() {
+        return extGatewayMac;
+    }
+
+    @Override
     public boolean equals(Object obj) {
         if (this == obj) {
             return true;
@@ -346,13 +325,23 @@
         return portNumber(intgBridge, tunnelType);
     }
 
+    private MacAddress macAddress(DeviceId deviceId, String portName) {
+        Port port = port(deviceId, portName);
+        Annotations annots = port.annotations();
+        return annots != null ? MacAddress.valueOf(annots.value(PORT_MAC)) : null;
+    }
+
     private PortNumber portNumber(DeviceId deviceId, String portName) {
+        Port port = port(deviceId, portName);
+        return port != null ? port.number() : null;
+    }
+
+    private Port port(DeviceId deviceId, String portName) {
         DeviceService deviceService = DefaultServiceDirectory.getService(DeviceService.class);
-        Port port = deviceService.getPorts(deviceId).stream()
+        return deviceService.getPorts(deviceId).stream()
                 .filter(p -> p.isEnabled() &&
                         Objects.equals(p.annotations().value(PORT_NAME), portName))
                 .findAny().orElse(null);
-        return port != null ? port.number() : null;
     }
 
     private OvsdbClientService getOvsClient() {
diff --git a/apps/k8s-node/api/src/main/java/org/onosproject/k8snode/api/K8sNode.java b/apps/k8s-node/api/src/main/java/org/onosproject/k8snode/api/K8sNode.java
index 065f2dd..8d6f57c 100644
--- a/apps/k8s-node/api/src/main/java/org/onosproject/k8snode/api/K8sNode.java
+++ b/apps/k8s-node/api/src/main/java/org/onosproject/k8snode/api/K8sNode.java
@@ -157,6 +157,27 @@
     PortNumber intgBridgePortNum();
 
     /**
+     * Returns the integration to external patch port number.
+     *
+     * @return patch port number
+     */
+    PortNumber intgToExtPatchPortNum();
+
+    /**
+     * Returns the external to integration patch port number.
+     *
+     * @return patch port number
+     */
+    PortNumber extToIntgPatchPortNum();
+
+    /**
+     * Returns the external bridge to router port number.
+     *
+     * @return port number, null if the port does not exist
+     */
+    PortNumber extBridgePortNum();
+
+    /**
      * Returns the integration bridge's MAC address.
      *
      * @return MAC address; null if the MAC address does not exist
@@ -192,27 +213,6 @@
     MacAddress extGatewayMac();
 
     /**
-     * Returns the integration to external patch port number.
-     *
-     * @return patch port number
-     */
-    PortNumber intgToExtPatchPortNum();
-
-    /**
-     * Returns the external to integration patch port number.
-     *
-     * @return patch port number
-     */
-    PortNumber extToIntgPatchPortNum();
-
-    /**
-     * Returns the external bridge to router port number.
-     *
-     * @return port number, null if the port does not exist
-     */
-    PortNumber extBridgePortNum();
-
-    /**
      * Builder of new node entity.
      */
     interface Builder {