Feed kubevirt port info from K8S port, add a CLI to query port info

Change-Id: Id791fbae66b72cbb8908687463355ecb62ef8543
diff --git a/apps/kubevirt-networking/api/src/main/java/org/onosproject/kubevirtnetworking/api/Constants.java b/apps/kubevirt-networking/api/src/main/java/org/onosproject/kubevirtnetworking/api/Constants.java
index 0ff5fec..c0afe45 100644
--- a/apps/kubevirt-networking/api/src/main/java/org/onosproject/kubevirtnetworking/api/Constants.java
+++ b/apps/kubevirt-networking/api/src/main/java/org/onosproject/kubevirtnetworking/api/Constants.java
@@ -53,6 +53,7 @@
 
     // flow rule priority
     public static final int PRIORITY_SWITCHING_RULE = 30000;
+    public static final int PRIORITY_DHCP_RULE = 42000;
 
     // CLI item length
     public static final int CLI_ID_LENGTH = 30;
diff --git a/apps/kubevirt-networking/api/src/main/java/org/onosproject/kubevirtnetworking/api/DefaultKubevirtPort.java b/apps/kubevirt-networking/api/src/main/java/org/onosproject/kubevirtnetworking/api/DefaultKubevirtPort.java
index 4fe0125..992eb90 100644
--- a/apps/kubevirt-networking/api/src/main/java/org/onosproject/kubevirtnetworking/api/DefaultKubevirtPort.java
+++ b/apps/kubevirt-networking/api/src/main/java/org/onosproject/kubevirtnetworking/api/DefaultKubevirtPort.java
@@ -82,23 +82,34 @@
     }
 
     @Override
-    public KubevirtPort updatePortNumber(PortNumber portNumber) {
+    public KubevirtPort updateIpAddress(IpAddress updateIpAddress) {
         return new Builder()
                 .networkId(networkId)
                 .macAddress(macAddress)
-                .ipAddress(ipAddress)
+                .ipAddress(updateIpAddress)
                 .deviceId(deviceId)
                 .portNumber(portNumber)
                 .build();
     }
 
     @Override
-    public KubevirtPort updateDeviceId(DeviceId deviceId) {
+    public KubevirtPort updatePortNumber(PortNumber updatedPortNumber) {
         return new Builder()
                 .networkId(networkId)
                 .macAddress(macAddress)
                 .ipAddress(ipAddress)
                 .deviceId(deviceId)
+                .portNumber(updatedPortNumber)
+                .build();
+    }
+
+    @Override
+    public KubevirtPort updateDeviceId(DeviceId updatedDeviceId) {
+        return new Builder()
+                .networkId(networkId)
+                .macAddress(macAddress)
+                .ipAddress(ipAddress)
+                .deviceId(updatedDeviceId)
                 .portNumber(portNumber)
                 .build();
     }
@@ -161,7 +172,6 @@
         public KubevirtPort build() {
             checkArgument(networkId != null, NOT_NULL_MSG, "networkId");
             checkArgument(macAddress != null, NOT_NULL_MSG, "macAddress");
-            checkArgument(ipAddress != null, NOT_NULL_MSG, "ipAddress");
 
             return new DefaultKubevirtPort(networkId, macAddress, ipAddress,
                     deviceId, portNumber);
diff --git a/apps/kubevirt-networking/api/src/main/java/org/onosproject/kubevirtnetworking/api/KubevirtNetworkAdminService.java b/apps/kubevirt-networking/api/src/main/java/org/onosproject/kubevirtnetworking/api/KubevirtNetworkAdminService.java
index f0fa716..aeabd84 100644
--- a/apps/kubevirt-networking/api/src/main/java/org/onosproject/kubevirtnetworking/api/KubevirtNetworkAdminService.java
+++ b/apps/kubevirt-networking/api/src/main/java/org/onosproject/kubevirtnetworking/api/KubevirtNetworkAdminService.java
@@ -15,6 +15,8 @@
  */
 package org.onosproject.kubevirtnetworking.api;
 
+import org.onlab.packet.IpAddress;
+
 public interface KubevirtNetworkAdminService extends KubevirtNetworkService {
 
     /**
@@ -38,5 +40,21 @@
      */
     void removeNetwork(String networkId);
 
+    /**
+     * Allocate an IP address.
+     *
+     * @param networkId network identifier
+     * @return IP address
+     */
+    IpAddress allocateIp(String networkId);
+
+    /**
+     * Release the existing IP address.
+     *
+     * @param networkId network identifier
+     * @param ip IP address to be released
+     */
+    void releaseIp(String networkId, IpAddress ip);
+
     void clear();
 }
diff --git a/apps/kubevirt-networking/api/src/main/java/org/onosproject/kubevirtnetworking/api/KubevirtPort.java b/apps/kubevirt-networking/api/src/main/java/org/onosproject/kubevirtnetworking/api/KubevirtPort.java
index a7ae75e..850ac6f 100644
--- a/apps/kubevirt-networking/api/src/main/java/org/onosproject/kubevirtnetworking/api/KubevirtPort.java
+++ b/apps/kubevirt-networking/api/src/main/java/org/onosproject/kubevirtnetworking/api/KubevirtPort.java
@@ -61,20 +61,28 @@
     PortNumber portNumber();
 
     /**
-     * Returns new port instance with the given port number.
+     * Returns new port instance with the given IP address.
      *
-     * @param portNumber updated port number
+     * @param updatedIpAddress updated ip address
      * @return updated port
      */
-    KubevirtPort updatePortNumber(PortNumber portNumber);
+    KubevirtPort updateIpAddress(IpAddress updatedIpAddress);
+
+    /**
+     * Returns new port instance with the given port number.
+     *
+     * @param updatedPortNumber updated port number
+     * @return updated port
+     */
+    KubevirtPort updatePortNumber(PortNumber updatedPortNumber);
 
     /**
      * Returns new port instance with the given device ID.
      *
-     * @param deviceId device identifier
+     * @param updatedDeviceId device identifier
      * @return updated port
      */
-    KubevirtPort updateDeviceId(DeviceId deviceId);
+    KubevirtPort updateDeviceId(DeviceId updatedDeviceId);
 
     /**
      * Builder of new port.