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-networking/app/src/main/java/org/onosproject/k8snetworking/codec/K8sNetworkCodec.java b/apps/k8s-networking/app/src/main/java/org/onosproject/k8snetworking/codec/K8sNetworkCodec.java
index b9984bf..07e85da 100644
--- a/apps/k8s-networking/app/src/main/java/org/onosproject/k8snetworking/codec/K8sNetworkCodec.java
+++ b/apps/k8s-networking/app/src/main/java/org/onosproject/k8snetworking/codec/K8sNetworkCodec.java
@@ -15,8 +15,8 @@
  */
 package org.onosproject.k8snetworking.codec;
 
+import com.fasterxml.jackson.databind.JsonNode;
 import com.fasterxml.jackson.databind.node.ObjectNode;
-import org.onlab.packet.IpAddress;
 import org.onosproject.codec.CodecContext;
 import org.onosproject.codec.JsonCodec;
 import org.onosproject.k8snetworking.api.DefaultK8sNetwork;
@@ -39,7 +39,6 @@
     private static final String TYPE = "type";
     private static final String MTU = "mtu";
     private static final String SEGMENT_ID = "segmentId";
-    private static final String GATEWAY_IP = "gatewayIp";
     private static final String CIDR = "cidr";
 
     private static final String MISSING_MESSAGE = " is required in K8sNetwork";
@@ -51,11 +50,16 @@
         ObjectNode result = context.mapper().createObjectNode()
                 .put(NETWORK_ID, network.networkId())
                 .put(NAME, network.name())
-                .put(TYPE, network.type().name())
-                .put(SEGMENT_ID, network.segmentId())
-                .put(GATEWAY_IP, network.gatewayIp().toString())
                 .put(CIDR, network.cidr());
 
+        if (network.type() != null) {
+            result.put(TYPE, network.type().name());
+        }
+
+        if (network.segmentId() != null) {
+            result.put(SEGMENT_ID, network.segmentId());
+        }
+
         if (network.mtu() != null) {
             result.put(MTU, network.mtu());
         }
@@ -73,23 +77,25 @@
                 NETWORK_ID + MISSING_MESSAGE);
         String name = nullIsIllegal(json.get(NAME).asText(),
                 NAME + MISSING_MESSAGE);
-        String type = nullIsIllegal(json.get(TYPE).asText(),
-                TYPE + MISSING_MESSAGE);
-        String segmentId = nullIsIllegal(json.get(SEGMENT_ID).asText(),
-                SEGMENT_ID + MISSING_MESSAGE);
-        String gatewayIp = nullIsIllegal(json.get(GATEWAY_IP).asText(),
-                GATEWAY_IP + MISSING_MESSAGE);
         String cidr = nullIsIllegal(json.get(CIDR).asText(),
                 CIDR + MISSING_MESSAGE);
 
+        JsonNode type = json.get(TYPE);
+        JsonNode segmentId = json.get(SEGMENT_ID);
+
         DefaultK8sNetwork.Builder networkBuilder = DefaultK8sNetwork.builder()
                 .networkId(networkId)
                 .name(name)
-                .type(K8sNetwork.Type.valueOf(type))
-                .segmentId(segmentId)
-                .gatewayIp(IpAddress.valueOf(gatewayIp))
                 .cidr(cidr);
 
+        if (type != null) {
+            networkBuilder.type(K8sNetwork.Type.valueOf(type.asText()));
+        }
+
+        if (segmentId != null) {
+            networkBuilder.segmentId(segmentId.asText());
+        }
+
         if (json.get(MTU) != null) {
             networkBuilder.mtu(json.get(MTU).asInt());
         }
diff --git a/apps/k8s-networking/app/src/test/java/org/onosproject/k8snetworking/codec/K8sNetworkCodecTest.java b/apps/k8s-networking/app/src/test/java/org/onosproject/k8snetworking/codec/K8sNetworkCodecTest.java
index fa894de..3055a91 100644
--- a/apps/k8s-networking/app/src/test/java/org/onosproject/k8snetworking/codec/K8sNetworkCodecTest.java
+++ b/apps/k8s-networking/app/src/test/java/org/onosproject/k8snetworking/codec/K8sNetworkCodecTest.java
@@ -21,7 +21,6 @@
 import org.hamcrest.MatcherAssert;
 import org.junit.Before;
 import org.junit.Test;
-import org.onlab.packet.IpAddress;
 import org.onosproject.codec.CodecContext;
 import org.onosproject.codec.JsonCodec;
 import org.onosproject.codec.impl.CodecManager;
@@ -82,8 +81,7 @@
                 .name("network-1")
                 .segmentId("1")
                 .type(K8sNetwork.Type.VXLAN)
-                .gatewayIp(IpAddress.valueOf("10.10.10.1"))
-                .cidr("32")
+                .cidr("10.10.0.0/24")
                 .mtu(1500)
                 .build();
 
@@ -102,8 +100,8 @@
         assertEquals("network-1", network.name());
         assertEquals("1", network.segmentId());
         assertEquals("VXLAN", network.type().name());
-        assertEquals("10.10.10.1", network.gatewayIp().toString());
-        assertEquals("32", network.cidr());
+        assertEquals("10.10.0.1", network.gatewayIp().toString());
+        assertEquals("10.10.0.0/24", network.cidr());
         assertThat(network.mtu(), is(1500));
     }
 
diff --git a/apps/k8s-networking/app/src/test/java/org/onosproject/k8snetworking/codec/K8sNetworkJsonMatcher.java b/apps/k8s-networking/app/src/test/java/org/onosproject/k8snetworking/codec/K8sNetworkJsonMatcher.java
index 73f2e58..1f3526f 100644
--- a/apps/k8s-networking/app/src/test/java/org/onosproject/k8snetworking/codec/K8sNetworkJsonMatcher.java
+++ b/apps/k8s-networking/app/src/test/java/org/onosproject/k8snetworking/codec/K8sNetworkJsonMatcher.java
@@ -32,7 +32,6 @@
     private static final String TYPE = "type";
     private static final String MTU = "mtu";
     private static final String SEGMENT_ID = "segmentId";
-    private static final String GATEWAY_IP = "gatewayIp";
     private static final String CIDR = "cidr";
 
     private K8sNetworkJsonMatcher(K8sNetwork network) {
@@ -59,11 +58,13 @@
         }
 
         // check type
-        String jsonType = jsonNode.get(TYPE).asText();
-        String type = network.type().name();
-        if (!jsonType.equals(type)) {
-            description.appendText("network type was " + jsonType);
-            return false;
+        JsonNode jsonType = jsonNode.get(TYPE);
+        if (jsonType != null) {
+            String type = network.type().name();
+            if (!jsonType.asText().equals(type)) {
+                description.appendText("network type was " + jsonType);
+                return false;
+            }
         }
 
         // check MTU
@@ -75,19 +76,13 @@
         }
 
         // check segment ID
-        String jsonSegmentId = jsonNode.get(SEGMENT_ID).asText();
-        String segmentId = network.segmentId();
-        if (!jsonSegmentId.equals(segmentId)) {
-            description.appendText("segment ID was " + jsonSegmentId);
-            return false;
-        }
-
-        // check gateway IP
-        String jsonGatewayIp = jsonNode.get(GATEWAY_IP).asText();
-        String gatewayIp = network.gatewayIp().toString();
-        if (!jsonGatewayIp.equals(gatewayIp)) {
-            description.appendText("gateway IP was " + jsonGatewayIp);
-            return false;
+        JsonNode jsonSegmentId = jsonNode.get(SEGMENT_ID);
+        if (jsonSegmentId != null) {
+            String segmentId = network.segmentId();
+            if (!jsonSegmentId.asText().equals(segmentId)) {
+                description.appendText("segment ID was " + jsonSegmentId);
+                return false;
+            }
         }
 
         // check CIDR
diff --git a/apps/k8s-networking/app/src/test/java/org/onosproject/k8snetworking/impl/K8sNetworkManagerTest.java b/apps/k8s-networking/app/src/test/java/org/onosproject/k8snetworking/impl/K8sNetworkManagerTest.java
index 874899b..468f682 100644
--- a/apps/k8s-networking/app/src/test/java/org/onosproject/k8snetworking/impl/K8sNetworkManagerTest.java
+++ b/apps/k8s-networking/app/src/test/java/org/onosproject/k8snetworking/impl/K8sNetworkManagerTest.java
@@ -67,8 +67,7 @@
             .name(NETWORK_NAME)
             .type(K8sNetwork.Type.VXLAN)
             .segmentId("1")
-            .gatewayIp(IpAddress.valueOf("10.10.10.1"))
-            .cidr("32")
+            .cidr("10.10.0.0/24")
             .mtu(1500)
             .build();
     private static final K8sNetwork NETWORK_UPDATED = DefaultK8sNetwork.builder()
@@ -76,8 +75,7 @@
             .name(UPDATED_NAME)
             .type(K8sNetwork.Type.VXLAN)
             .segmentId("1")
-            .gatewayIp(IpAddress.valueOf("10.10.10.1"))
-            .cidr("32")
+            .cidr("10.10.0.0/24")
             .mtu(1500)
             .build();
 
diff --git a/apps/k8s-networking/app/src/test/java/org/onosproject/k8snetworking/web/K8sNetworkWebResourceTest.java b/apps/k8s-networking/app/src/test/java/org/onosproject/k8snetworking/web/K8sNetworkWebResourceTest.java
index 9a4ca67..77153c3 100644
--- a/apps/k8s-networking/app/src/test/java/org/onosproject/k8snetworking/web/K8sNetworkWebResourceTest.java
+++ b/apps/k8s-networking/app/src/test/java/org/onosproject/k8snetworking/web/K8sNetworkWebResourceTest.java
@@ -20,7 +20,6 @@
 import org.junit.Test;
 import org.onlab.osgi.ServiceDirectory;
 import org.onlab.osgi.TestServiceDirectory;
-import org.onlab.packet.IpAddress;
 import org.onosproject.codec.CodecService;
 import org.onosproject.codec.impl.CodecManager;
 import org.onosproject.k8snetworking.api.DefaultK8sNetwork;
@@ -80,8 +79,7 @@
                 .name("sona-network")
                 .type(K8sNetwork.Type.VXLAN)
                 .segmentId("1")
-                .cidr("10.10.10.0/24")
-                .gatewayIp(IpAddress.valueOf("10.10.10.1"))
+                .cidr("10.10.0.0/24")
                 .mtu(1500)
                 .build();
     }
diff --git a/apps/k8s-networking/app/src/test/resources/org/onosproject/k8snetworking/codec/K8sNetwork.json b/apps/k8s-networking/app/src/test/resources/org/onosproject/k8snetworking/codec/K8sNetwork.json
index 6efe965..136c9e3 100644
--- a/apps/k8s-networking/app/src/test/resources/org/onosproject/k8snetworking/codec/K8sNetwork.json
+++ b/apps/k8s-networking/app/src/test/resources/org/onosproject/k8snetworking/codec/K8sNetwork.json
@@ -4,6 +4,5 @@
   "type": "VXLAN",
   "mtu": 1500,
   "segmentId": "1",
-  "gatewayIp": "10.10.10.1",
-  "cidr": "32"
+  "cidr": "10.10.0.0/24"
 }
\ No newline at end of file
diff --git a/apps/k8s-networking/app/src/test/resources/org/onosproject/k8snetworking/web/k8s-network.json b/apps/k8s-networking/app/src/test/resources/org/onosproject/k8snetworking/web/k8s-network.json
index 6efe965..136c9e3 100644
--- a/apps/k8s-networking/app/src/test/resources/org/onosproject/k8snetworking/web/k8s-network.json
+++ b/apps/k8s-networking/app/src/test/resources/org/onosproject/k8snetworking/web/k8s-network.json
@@ -4,6 +4,5 @@
   "type": "VXLAN",
   "mtu": 1500,
   "segmentId": "1",
-  "gatewayIp": "10.10.10.1",
-  "cidr": "32"
+  "cidr": "10.10.0.0/24"
 }
\ No newline at end of file