Support to specify BootFileName and ServerName in DHCP Option

Change-Id: I0b1cc4af29db933e22b42f999c56a2189a967b97
diff --git a/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/util/OpenstackNetworkingUtil.java b/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/util/OpenstackNetworkingUtil.java
index ff53f1b..cb78448 100644
--- a/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/util/OpenstackNetworkingUtil.java
+++ b/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/util/OpenstackNetworkingUtil.java
@@ -20,6 +20,7 @@
 import com.fasterxml.jackson.databind.JsonMappingException;
 import com.fasterxml.jackson.databind.JsonNode;
 import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.node.ArrayNode;
 import com.fasterxml.jackson.databind.node.ObjectNode;
 import com.google.common.base.Charsets;
 import com.google.common.base.Strings;
@@ -95,6 +96,7 @@
 import org.openstack4j.model.network.SecurityGroup;
 import org.openstack4j.model.network.Subnet;
 import org.openstack4j.openstack.OSFactory;
+import org.openstack4j.openstack.networking.domain.NeutronPort;
 import org.openstack4j.openstack.networking.domain.NeutronRouterInterface;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -1470,6 +1472,53 @@
     }
 
     /**
+     * Obtains the DHCP server name from option.
+     *
+     * @param port neutron port
+     * @return server name
+     */
+    public static String getDhcpServerName(NeutronPort port) {
+        return getDhcpOptionValue(port, "server-ip-address");
+    }
+
+    /**
+     * Obtains the DHCP static boot file name from option.
+     *
+     * @param port neutron port
+     * @return DHCP static boot file name
+     */
+    public static String getDhcpStaticBootFileName(NeutronPort port) {
+        return getDhcpOptionValue(port, "tag:!ipxe,67");
+    }
+
+    /**
+     * Obtains the DHCP full boot file name from option.
+     *
+     * @param port neutron port
+     * @return DHCP full boot file name
+     */
+    public static String getDhcpFullBootFileName(NeutronPort port) {
+        return getDhcpOptionValue(port, "tag:ipxe,67");
+    }
+
+    private static String getDhcpOptionValue(NeutronPort port, String optionNameStr) {
+        ObjectNode node = modelEntityToJson(port, NeutronPort.class);
+
+        if (node != null) {
+            JsonNode portJson = node.get("port");
+            ArrayNode options = (ArrayNode) portJson.get("extra_dhcp_opts");
+            for (JsonNode option : options) {
+                String optionName = option.get("optName").asText();
+                if (StringUtils.equals(optionName, optionNameStr)) {
+                    return option.get("optValue").asText();
+                }
+            }
+        }
+
+        return null;
+    }
+
+    /**
      * Builds up and a complete endpoint URL from gateway node.
      *
      * @param node gateway node