Support NodePort communication  model at k8s passthrough mode

Change-Id: I2179ebc9a4812493619c56aa270d8fc4821efbb2
diff --git a/apps/k8s-node/app/src/main/java/org/onosproject/k8snode/codec/K8sNodeCodec.java b/apps/k8s-node/app/src/main/java/org/onosproject/k8snode/codec/K8sNodeCodec.java
index 4f4e6bf..6e00655 100644
--- a/apps/k8s-node/app/src/main/java/org/onosproject/k8snode/codec/K8sNodeCodec.java
+++ b/apps/k8s-node/app/src/main/java/org/onosproject/k8snode/codec/K8sNodeCodec.java
@@ -24,6 +24,7 @@
 import org.onosproject.codec.JsonCodec;
 import org.onosproject.k8snode.api.DefaultK8sNode;
 import org.onosproject.k8snode.api.K8sNode;
+import org.onosproject.k8snode.api.K8sNodeInfo;
 import org.onosproject.k8snode.api.K8sNodeState;
 import org.onosproject.net.DeviceId;
 import org.slf4j.Logger;
@@ -49,6 +50,7 @@
     private static final String MANAGEMENT_IP = "managementIp";
     private static final String DATA_IP = "dataIp";
     private static final String NODE_IP = "nodeIp";
+    private static final String NODE_MAC = "nodeMac";
     private static final String INTEGRATION_BRIDGE = "integrationBridge";
     private static final String EXTERNAL_BRIDGE = "externalBridge";
     private static final String LOCAL_BRIDGE = "localBridge";
@@ -95,6 +97,10 @@
             result.put(DATA_IP, node.dataIp().toString());
         }
 
+        if (node.nodeMac() != null) {
+            result.put(NODE_MAC, node.nodeMac().toString());
+        }
+
         if (node.extIntf() != null) {
             result.put(EXTERNAL_INTF, node.extIntf());
         }
@@ -135,13 +141,15 @@
         String nIp = nullIsIllegal(json.get(NODE_IP).asText(),
                 NODE_IP + MISSING_MESSAGE);
 
+        K8sNodeInfo nodeInfo = new K8sNodeInfo(IpAddress.valueOf(nIp), null);
+
         DefaultK8sNode.Builder nodeBuilder = DefaultK8sNode.builder()
                 .clusterName(clusterName)
                 .hostname(hostname)
                 .type(K8sNode.Type.valueOf(type))
                 .state(K8sNodeState.INIT)
                 .managementIp(IpAddress.valueOf(mIp))
-                .nodeIp(IpAddress.valueOf(nIp));
+                .nodeInfo(nodeInfo);
 
         if (json.get(DATA_IP) != null) {
             nodeBuilder.dataIp(IpAddress.valueOf(json.get(DATA_IP).asText()));
diff --git a/apps/k8s-node/app/src/main/java/org/onosproject/k8snode/impl/DefaultK8sApiConfigHandler.java b/apps/k8s-node/app/src/main/java/org/onosproject/k8snode/impl/DefaultK8sApiConfigHandler.java
index 30606f0..c688740 100644
--- a/apps/k8s-node/app/src/main/java/org/onosproject/k8snode/impl/DefaultK8sApiConfigHandler.java
+++ b/apps/k8s-node/app/src/main/java/org/onosproject/k8snode/impl/DefaultK8sApiConfigHandler.java
@@ -39,6 +39,7 @@
 import org.onosproject.k8snode.api.K8sHostState;
 import org.onosproject.k8snode.api.K8sNode;
 import org.onosproject.k8snode.api.K8sNodeAdminService;
+import org.onosproject.k8snode.api.K8sNodeInfo;
 import org.onosproject.k8snode.api.K8sRouterBridge;
 import org.onosproject.k8snode.api.K8sTunnelBridge;
 import org.osgi.service.component.annotations.Activate;
@@ -274,7 +275,7 @@
                 .hostname(hostname)
                 .managementIp(managementIp)
                 .dataIp(dataIp)
-                .nodeIp(nodeIp)
+                .nodeInfo(new K8sNodeInfo(nodeIp, null))
                 .extIntf(extIntf)
                 .type(nodeType)
                 .segmentId(config.segmentId())
diff --git a/apps/k8s-node/app/src/main/java/org/onosproject/k8snode/impl/DistributedK8sNodeStore.java b/apps/k8s-node/app/src/main/java/org/onosproject/k8snode/impl/DistributedK8sNodeStore.java
index 8d3e926..90ec2a0 100644
--- a/apps/k8s-node/app/src/main/java/org/onosproject/k8snode/impl/DistributedK8sNodeStore.java
+++ b/apps/k8s-node/app/src/main/java/org/onosproject/k8snode/impl/DistributedK8sNodeStore.java
@@ -25,6 +25,7 @@
 import org.onosproject.k8snode.api.K8sExternalNetwork;
 import org.onosproject.k8snode.api.K8sNode;
 import org.onosproject.k8snode.api.K8sNodeEvent;
+import org.onosproject.k8snode.api.K8sNodeInfo;
 import org.onosproject.k8snode.api.K8sNodeState;
 import org.onosproject.k8snode.api.K8sNodeStore;
 import org.onosproject.k8snode.api.K8sNodeStoreDelegate;
@@ -79,6 +80,7 @@
             .register(K8sNode.class)
             .register(DefaultK8sNode.class)
             .register(K8sNode.Type.class)
+            .register(K8sNodeInfo.class)
             .register(K8sNodeState.class)
             .register(K8sApiConfig.Mode.class)
             .register(K8sExternalNetwork.class)
diff --git a/apps/k8s-node/app/src/test/java/org/onosproject/k8snode/codec/K8sNodeCodecTest.java b/apps/k8s-node/app/src/test/java/org/onosproject/k8snode/codec/K8sNodeCodecTest.java
index ae31130..d2061d2 100644
--- a/apps/k8s-node/app/src/test/java/org/onosproject/k8snode/codec/K8sNodeCodecTest.java
+++ b/apps/k8s-node/app/src/test/java/org/onosproject/k8snode/codec/K8sNodeCodecTest.java
@@ -28,6 +28,7 @@
 import org.onosproject.core.CoreService;
 import org.onosproject.k8snode.api.DefaultK8sNode;
 import org.onosproject.k8snode.api.K8sNode;
+import org.onosproject.k8snode.api.K8sNodeInfo;
 import org.onosproject.k8snode.api.K8sNodeState;
 import org.onosproject.net.DeviceId;
 
@@ -86,7 +87,7 @@
                 .state(K8sNodeState.INIT)
                 .managementIp(IpAddress.valueOf("10.10.10.1"))
                 .dataIp(IpAddress.valueOf("20.20.20.2"))
-                .nodeIp(IpAddress.valueOf("30.30.30.3"))
+                .nodeInfo(new K8sNodeInfo(IpAddress.valueOf("30.30.30.3"), null))
                 .intgBridge(DeviceId.deviceId("kbr-int"))
                 .extIntf("eth1")
                 .extBridgeIp(IpAddress.valueOf("10.10.10.5"))
diff --git a/apps/k8s-node/app/src/test/java/org/onosproject/k8snode/impl/K8sNodeManagerTest.java b/apps/k8s-node/app/src/test/java/org/onosproject/k8snode/impl/K8sNodeManagerTest.java
index e336164..a1df1b6 100644
--- a/apps/k8s-node/app/src/test/java/org/onosproject/k8snode/impl/K8sNodeManagerTest.java
+++ b/apps/k8s-node/app/src/test/java/org/onosproject/k8snode/impl/K8sNodeManagerTest.java
@@ -23,6 +23,7 @@
 import org.onlab.junit.TestUtils;
 import org.onlab.packet.ChassisId;
 import org.onlab.packet.IpAddress;
+import org.onlab.packet.MacAddress;
 import org.onosproject.cluster.ClusterServiceAdapter;
 import org.onosproject.cluster.LeadershipServiceAdapter;
 import org.onosproject.core.ApplicationId;
@@ -32,6 +33,7 @@
 import org.onosproject.k8snode.api.DefaultK8sNode;
 import org.onosproject.k8snode.api.K8sNode;
 import org.onosproject.k8snode.api.K8sNodeEvent;
+import org.onosproject.k8snode.api.K8sNodeInfo;
 import org.onosproject.k8snode.api.K8sNodeListener;
 import org.onosproject.k8snode.api.K8sNodeState;
 import org.onosproject.net.DefaultDevice;
@@ -74,6 +76,10 @@
     private static final String MINION_2_HOSTNAME = "minion_2";
     private static final String MINION_3_HOSTNAME = "minion_3";
 
+    private static final IpAddress NODE_IP = IpAddress.valueOf("30.30.30.30");
+    private static final MacAddress NODE_MAC = MacAddress.valueOf("fa:00:00:00:00:08");
+    private static final K8sNodeInfo NODE_INFO = new K8sNodeInfo(NODE_IP, NODE_MAC);
+
     private static final Device MINION_1_INTG_DEVICE = createDevice(1);
     private static final Device MINION_2_INTG_DEVICE = createDevice(2);
     private static final Device MINION_3_INTG_DEVICE = createDevice(3);
@@ -100,6 +106,7 @@
             MINION_1_LOCAL_DEVICE,
             MINION_1_TUN_DEVICE,
             IpAddress.valueOf("10.100.0.1"),
+            NODE_INFO,
             INIT
     );
     private static final K8sNode MINION_2 = createNode(
@@ -111,6 +118,7 @@
             MINION_2_LOCAL_DEVICE,
             MINION_2_TUN_DEVICE,
             IpAddress.valueOf("10.100.0.2"),
+            NODE_INFO,
             INIT
     );
     private static final K8sNode MINION_3 = createNode(
@@ -122,6 +130,7 @@
             MINION_3_LOCAL_DEVICE,
             MINION_3_TUN_DEVICE,
             IpAddress.valueOf("10.100.0.3"),
+            NODE_INFO,
             COMPLETE
     );
 
@@ -349,7 +358,8 @@
     private static K8sNode createNode(String clusterName, String hostname, K8sNode.Type type,
                                       Device intgBridge, Device extBridge,
                                       Device localBridge, Device tunBridge,
-                                      IpAddress ipAddr, K8sNodeState state) {
+                                      IpAddress ipAddr, K8sNodeInfo nodeInfo,
+                                      K8sNodeState state) {
         return DefaultK8sNode.builder()
                 .hostname(hostname)
                 .clusterName(clusterName)
@@ -360,7 +370,7 @@
                 .tunBridge(tunBridge.id())
                 .managementIp(ipAddr)
                 .dataIp(ipAddr)
-                .nodeIp(ipAddr)
+                .nodeInfo(nodeInfo)
                 .state(state)
                 .build();
     }
diff --git a/apps/k8s-node/app/src/test/java/org/onosproject/k8snode/web/K8sNodeWebResourceTest.java b/apps/k8s-node/app/src/test/java/org/onosproject/k8snode/web/K8sNodeWebResourceTest.java
index 9908e99..b99c881 100644
--- a/apps/k8s-node/app/src/test/java/org/onosproject/k8snode/web/K8sNodeWebResourceTest.java
+++ b/apps/k8s-node/app/src/test/java/org/onosproject/k8snode/web/K8sNodeWebResourceTest.java
@@ -30,6 +30,7 @@
 import org.onosproject.k8snode.api.K8sApiConfigAdminService;
 import org.onosproject.k8snode.api.K8sNode;
 import org.onosproject.k8snode.api.K8sNodeAdminService;
+import org.onosproject.k8snode.api.K8sNodeInfo;
 import org.onosproject.k8snode.api.K8sNodeState;
 import org.onosproject.k8snode.codec.HostNodesInfoCodec;
 import org.onosproject.k8snode.codec.K8sApiConfigCodec;
@@ -97,7 +98,7 @@
                 .type(K8sNode.Type.MINION)
                 .dataIp(IpAddress.valueOf("10.134.34.222"))
                 .managementIp(IpAddress.valueOf("10.134.231.30"))
-                .nodeIp(IpAddress.valueOf("30.30.30.3"))
+                .nodeInfo(new K8sNodeInfo(IpAddress.valueOf("30.30.30.3"), null))
                 .intgBridge(DeviceId.deviceId("of:00000000000000a1"))
                 .extBridge(DeviceId.deviceId("of:00000000000000b1"))
                 .state(K8sNodeState.INIT)