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/api/src/main/java/org/onosproject/k8snetworking/api/DefaultK8sNetwork.java b/apps/k8s-networking/api/src/main/java/org/onosproject/k8snetworking/api/DefaultK8sNetwork.java
index fef1b1c..f3c7a82 100644
--- a/apps/k8s-networking/api/src/main/java/org/onosproject/k8snetworking/api/DefaultK8sNetwork.java
+++ b/apps/k8s-networking/api/src/main/java/org/onosproject/k8snetworking/api/DefaultK8sNetwork.java
@@ -17,6 +17,7 @@
 
 import com.google.common.base.MoreObjects;
 import com.google.common.base.Objects;
+import org.apache.commons.net.util.SubnetUtils;
 import org.onlab.packet.IpAddress;
 
 import static com.google.common.base.Preconditions.checkArgument;
@@ -27,6 +28,8 @@
 public final class DefaultK8sNetwork implements K8sNetwork {
 
     private static final int DEFAULT_MTU = 1500;
+    private static final Type DEFAULT_TYPE = Type.VXLAN;
+    private static final String DEFAULT_SEGMENT_ID = String.valueOf(100);
 
     private final String networkId;
     private final String name;
@@ -147,11 +150,23 @@
         public K8sNetwork build() {
             checkArgument(networkId != null, NOT_NULL_MSG, "networkId");
             checkArgument(name != null, NOT_NULL_MSG, "name");
-            checkArgument(type != null, NOT_NULL_MSG, "type");
-            checkArgument(segmentId != null, NOT_NULL_MSG, "segmentId");
-            checkArgument(gatewayIp != null, NOT_NULL_MSG, "gatewayIp");
+
+            // TODO: CIDR can be retrieve from k8s node info, therefore, such
+            // value injection should be purged sooner
             checkArgument(cidr != null, NOT_NULL_MSG, "cidr");
 
+            // gateway IP address is derived from subnet CIDR
+            gatewayIp = getGatewayIp(cidr);
+
+            if (segmentId == null) {
+                segmentId = DEFAULT_SEGMENT_ID;
+            }
+
+            // VXLAN as the default tunneling protocol if not specified
+            if (type == null) {
+                type = DEFAULT_TYPE;
+            }
+
             if (mtu == null) {
                 mtu = DEFAULT_MTU;
             }
@@ -200,5 +215,13 @@
             this.cidr = cidr;
             return this;
         }
+
+        private IpAddress getGatewayIp(String cidr) {
+            SubnetUtils utils = new SubnetUtils(cidr);
+            utils.setInclusiveHostCount(false);
+            SubnetUtils.SubnetInfo info = utils.getInfo();
+
+            return IpAddress.valueOf(info.getLowAddress());
+        }
     }
 }
diff --git a/apps/k8s-networking/api/src/test/java/org/onosproject/k8snetworking/api/DefaultK8sNetworkTest.java b/apps/k8s-networking/api/src/test/java/org/onosproject/k8snetworking/api/DefaultK8sNetworkTest.java
index 058bc03..df1b611 100644
--- a/apps/k8s-networking/api/src/test/java/org/onosproject/k8snetworking/api/DefaultK8sNetworkTest.java
+++ b/apps/k8s-networking/api/src/test/java/org/onosproject/k8snetworking/api/DefaultK8sNetworkTest.java
@@ -18,7 +18,6 @@
 import com.google.common.testing.EqualsTester;
 import org.junit.Before;
 import org.junit.Test;
-import org.onlab.packet.IpAddress;
 
 import static junit.framework.TestCase.assertEquals;
 import static org.onlab.junit.ImmutableClassChecker.assertThatClassIsImmutable;
@@ -38,10 +37,8 @@
     private static final Integer MTU_2 = 1600;
     private static final String SEGMENT_ID_1 = "1";
     private static final String SEGMENT_ID_2 = "2";
-    private static final IpAddress GATEWAY_IP_1 = IpAddress.valueOf("10.10.10.1");
-    private static final IpAddress GATEWAY_IP_2 = IpAddress.valueOf("20.20.20.1");
-    private static final String CIDR_1 = "32";
-    private static final String CIDR_2 = "32";
+    private static final String CIDR_1 = "10.10.0.0/24";
+    private static final String CIDR_2 = "10.10.1.0/24";
 
     private K8sNetwork k8sNetwork1;
     private K8sNetwork sameAsK8sNetwork1;
@@ -58,7 +55,6 @@
                 .type(TYPE_1)
                 .mtu(MTU_1)
                 .segmentId(SEGMENT_ID_1)
-                .gatewayIp(GATEWAY_IP_1)
                 .cidr(CIDR_1)
                 .build();
 
@@ -68,7 +64,6 @@
                 .type(TYPE_1)
                 .mtu(MTU_1)
                 .segmentId(SEGMENT_ID_1)
-                .gatewayIp(GATEWAY_IP_1)
                 .cidr(CIDR_1)
                 .build();
 
@@ -78,7 +73,6 @@
                 .type(TYPE_2)
                 .mtu(MTU_2)
                 .segmentId(SEGMENT_ID_2)
-                .gatewayIp(GATEWAY_IP_2)
                 .cidr(CIDR_2)
                 .build();
     }
@@ -113,7 +107,6 @@
         assertEquals(TYPE_1, k8sNetwork.type());
         assertEquals(MTU_1, k8sNetwork.mtu());
         assertEquals(SEGMENT_ID_1, k8sNetwork.segmentId());
-        assertEquals(GATEWAY_IP_1, k8sNetwork.gatewayIp());
         assertEquals(CIDR_1, k8sNetwork.cidr());
     }
 }