Support to inject hostRoutes and DNS info inside DHCP reply message

Change-Id: Ic88f98b6fca88aa69a23c6a576d4d0a6ac4b8f99
diff --git a/apps/kubevirt-networking/api/src/main/java/org/onosproject/kubevirtnetworking/api/DefaultKubevirtNetwork.java b/apps/kubevirt-networking/api/src/main/java/org/onosproject/kubevirtnetworking/api/DefaultKubevirtNetwork.java
index 970c0eb..79c535d 100644
--- a/apps/kubevirt-networking/api/src/main/java/org/onosproject/kubevirtnetworking/api/DefaultKubevirtNetwork.java
+++ b/apps/kubevirt-networking/api/src/main/java/org/onosproject/kubevirtnetworking/api/DefaultKubevirtNetwork.java
@@ -19,6 +19,7 @@
 import com.google.common.collect.ImmutableSet;
 import org.onlab.packet.IpAddress;
 
+import java.util.HashSet;
 import java.util.Objects;
 import java.util.Set;
 
@@ -41,6 +42,7 @@
     private final String cidr;
     private final Set<KubevirtHostRoute> hostRoutes;
     private final KubevirtIpPool ipPool;
+    private final Set<IpAddress> dnses;
 
     /**
      * Default constructor.
@@ -54,11 +56,12 @@
      * @param cidr              CIDR of network
      * @param hostRoutes        a set of host routes
      * @param ipPool            IP pool
+     * @param dnses             a set of DNSes
      */
     public DefaultKubevirtNetwork(String networkId, Type type, String name,
                                   Integer mtu, String segmentId, IpAddress gatewayIp,
                                   String cidr, Set<KubevirtHostRoute> hostRoutes,
-                                  KubevirtIpPool ipPool) {
+                                  KubevirtIpPool ipPool, Set<IpAddress> dnses) {
         this.networkId = networkId;
         this.type = type;
         this.name = name;
@@ -68,6 +71,7 @@
         this.cidr = cidr;
         this.hostRoutes = hostRoutes;
         this.ipPool = ipPool;
+        this.dnses = dnses;
     }
 
     @Override
@@ -120,6 +124,15 @@
     }
 
     @Override
+    public Set<IpAddress> dnses() {
+        if (dnses == null || dnses.size() == 0) {
+            return ImmutableSet.of();
+        } else {
+            return ImmutableSet.copyOf(dnses);
+        }
+    }
+
+    @Override
     public boolean equals(Object o) {
         if (this == o) {
             return true;
@@ -132,13 +145,14 @@
                 name.equals(that.name) && mtu.equals(that.mtu) &&
                 gatewayIp.equals(that.gatewayIp) &&
                 cidr.equals(that.cidr) && hostRoutes.equals(that.hostRoutes) &&
-                ipPool.equals(that.ipPool);
+                ipPool.equals(that.ipPool) &&
+                dnses.equals(that.dnses);
     }
 
     @Override
     public int hashCode() {
         return Objects.hash(networkId, type, name, mtu, segmentId, gatewayIp,
-                cidr, hostRoutes, ipPool);
+                cidr, hostRoutes, ipPool, dnses);
     }
 
     @Override
@@ -153,6 +167,7 @@
                 .add("cidr", cidr)
                 .add("hostRouts", hostRoutes)
                 .add("ipPool", ipPool)
+                .add("dnses", dnses)
                 .toString();
     }
 
@@ -176,6 +191,7 @@
         private String cidr;
         private Set<KubevirtHostRoute> hostRouts;
         private KubevirtIpPool ipPool;
+        private Set<IpAddress> dnses;
 
         @Override
         public KubevirtNetwork build() {
@@ -191,8 +207,12 @@
                 checkArgument(segmentId != null, NOT_NULL_MSG, "segmentId");
             }
 
+            if (dnses == null) {
+                dnses = new HashSet<>();
+            }
+
             return new DefaultKubevirtNetwork(networkId, type, name, mtu, segmentId,
-                    gatewayIp, cidr, hostRouts, ipPool);
+                    gatewayIp, cidr, hostRouts, ipPool, dnses);
         }
 
         @Override
@@ -248,5 +268,11 @@
             this.hostRouts = hostRoutes;
             return this;
         }
+
+        @Override
+        public KubevirtNetwork.Builder dnses(Set<IpAddress> dnses) {
+            this.dnses = dnses;
+            return this;
+        }
     }
 }
diff --git a/apps/kubevirt-networking/api/src/main/java/org/onosproject/kubevirtnetworking/api/KubevirtNetwork.java b/apps/kubevirt-networking/api/src/main/java/org/onosproject/kubevirtnetworking/api/KubevirtNetwork.java
index 4293310..97b2286 100644
--- a/apps/kubevirt-networking/api/src/main/java/org/onosproject/kubevirtnetworking/api/KubevirtNetwork.java
+++ b/apps/kubevirt-networking/api/src/main/java/org/onosproject/kubevirtnetworking/api/KubevirtNetwork.java
@@ -114,6 +114,13 @@
     KubevirtIpPool ipPool();
 
     /**
+     * Returns a set of DNS.
+     *
+     * @return a set of DNS
+     */
+    Set<IpAddress> dnses();
+
+    /**
      * Builder of new network.
      */
     interface Builder {
@@ -182,7 +189,7 @@
         Builder cidr(String cidr);
 
         /**
-         * Returns the IP pool.
+         * Returns network builder with the supplied IP pool.
          *
          * @param ipPool IP pool
          * @return network builder
@@ -190,11 +197,19 @@
         Builder ipPool(KubevirtIpPool ipPool);
 
         /**
-         * Returns host routes.
+         * Returns network builder with the host routes.
          *
          * @param hostRoutes host routes
          * @return network builder
          */
         Builder hostRoutes(Set<KubevirtHostRoute> hostRoutes);
+
+        /**
+         * Returns network builder with supplied DNSes.
+         *
+         * @param dnses a set of DNS
+         * @return network builder
+         */
+        Builder dnses(Set<IpAddress> dnses);
     }
 }
diff --git a/apps/kubevirt-networking/api/src/test/java/org/onosproject/kubevirtnetworking/api/DefaultKubevirtNetworkTest.java b/apps/kubevirt-networking/api/src/test/java/org/onosproject/kubevirtnetworking/api/DefaultKubevirtNetworkTest.java
index 1b39db8..8eefe36 100644
--- a/apps/kubevirt-networking/api/src/test/java/org/onosproject/kubevirtnetworking/api/DefaultKubevirtNetworkTest.java
+++ b/apps/kubevirt-networking/api/src/test/java/org/onosproject/kubevirtnetworking/api/DefaultKubevirtNetworkTest.java
@@ -49,6 +49,8 @@
     private static final IpAddress IP_POOL_START_2 = IpAddress.valueOf("20.20.20.100");
     private static final IpAddress IP_POOL_END_1 = IpAddress.valueOf("10.10.10.200");
     private static final IpAddress IP_POOL_END_2 = IpAddress.valueOf("20.20.20.200");
+    private static final IpAddress DNS_1 = IpAddress.valueOf("8.8.8.8");
+    private static final IpAddress DNS_2 = IpAddress.valueOf("8.8.4.4");
 
     private KubevirtNetwork network1;
     private KubevirtNetwork sameAsNetwork1;
@@ -77,6 +79,7 @@
                 .cidr(CIDR_1)
                 .ipPool(new KubevirtIpPool(IP_POOL_START_1, IP_POOL_END_1))
                 .hostRoutes(ImmutableSet.of())
+                .dnses(ImmutableSet.of(DNS_1))
                 .build();
 
         sameAsNetwork1 = DefaultKubevirtNetwork.builder()
@@ -89,6 +92,7 @@
                 .cidr(CIDR_1)
                 .ipPool(new KubevirtIpPool(IP_POOL_START_1, IP_POOL_END_1))
                 .hostRoutes(ImmutableSet.of())
+                .dnses(ImmutableSet.of(DNS_1))
                 .build();
 
         network2 = DefaultKubevirtNetwork.builder()
@@ -101,6 +105,7 @@
                 .cidr(CIDR_2)
                 .ipPool(new KubevirtIpPool(IP_POOL_START_2, IP_POOL_END_2))
                 .hostRoutes(ImmutableSet.of())
+                .dnses(ImmutableSet.of(DNS_2))
                 .build();
     }
 
@@ -128,6 +133,7 @@
         assertEquals(GATEWAY_IP_1, network.gatewayIp());
         assertEquals(CIDR_1, network.cidr());
         assertEquals(new KubevirtIpPool(IP_POOL_START_1, IP_POOL_END_1), network.ipPool());
+        assertEquals(ImmutableSet.of(DNS_1), network.dnses());
     }
 
     /**