Supports dns options in OpenstackSwitchingDhcpHandler.
- In case a subnet has multiple dns server's, the handler uses that addresses

Change-Id: If9d5f1ebabc37fc1206c8555a7a1eeda09cff663
diff --git a/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/impl/OpenstackSwitchingDhcpHandler.java b/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/impl/OpenstackSwitchingDhcpHandler.java
index 27e8031..0b751e6 100644
--- a/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/impl/OpenstackSwitchingDhcpHandler.java
+++ b/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/impl/OpenstackSwitchingDhcpHandler.java
@@ -29,6 +29,7 @@
 import org.onlab.packet.Ethernet;
 import org.onlab.packet.IPv4;
 import org.onlab.packet.Ip4Address;
+import org.onlab.packet.IpAddress;
 import org.onlab.packet.IpPrefix;
 import org.onlab.packet.MacAddress;
 import org.onlab.packet.TpPort;
@@ -97,7 +98,8 @@
 
     private static final String DHCP_SERVER_MAC = "dhcpServerMac";
     private static final String DHCP_DATA_MTU = "dhcpDataMtu";
-    private static final Ip4Address DEFAULT_DNS = Ip4Address.valueOf("8.8.8.8");
+    private static final Ip4Address DEFAULT_PRIMARY_DNS = Ip4Address.valueOf("8.8.8.8");
+    private static final Ip4Address DEFAULT_SECONDARY_DNS = Ip4Address.valueOf("8.8.4.4");
     private static final byte PACKET_TTL = (byte) 127;
     // TODO add MTU, static route option codes to ONOS DHCP and remove here
     private static final byte DHCP_OPTION_MTU = (byte) 26;
@@ -394,9 +396,30 @@
 
             // domain server
             option = new DhcpOption();
+
+            List<String> dnsServers = osSubnet.getDnsNames();
             option.setCode(OptionCode_DomainServer.getValue());
-            option.setLength((byte) 4);
-            option.setData(DEFAULT_DNS.toOctets());
+
+            if (dnsServers.isEmpty()) {
+                option.setLength((byte) 8);
+                ByteBuffer dnsByteBuf = ByteBuffer.allocate(8);
+                dnsByteBuf.put(DEFAULT_PRIMARY_DNS.toOctets());
+                dnsByteBuf.put(DEFAULT_SECONDARY_DNS.toOctets());
+
+                option.setData(dnsByteBuf.array());
+            } else {
+                int dnsLength = 4 * dnsServers.size();
+
+                option.setLength((byte) dnsLength);
+
+                ByteBuffer dnsByteBuf = ByteBuffer.allocate(8);
+
+                for (int i = 0; i < dnsServers.size(); i++) {
+                    dnsByteBuf.put(IpAddress.valueOf(dnsServers.get(i)).toOctets());
+                }
+                option.setData(dnsByteBuf.array());
+            }
+
             options.add(option);
 
             option = new DhcpOption();
diff --git a/apps/openstacknetworking/app/src/test/java/org/onosproject/openstacknetworking/impl/OpenstackSwitchingDhcpHandlerTest.java b/apps/openstacknetworking/app/src/test/java/org/onosproject/openstacknetworking/impl/OpenstackSwitchingDhcpHandlerTest.java
index fed268f..1206ce3 100644
--- a/apps/openstacknetworking/app/src/test/java/org/onosproject/openstacknetworking/impl/OpenstackSwitchingDhcpHandlerTest.java
+++ b/apps/openstacknetworking/app/src/test/java/org/onosproject/openstacknetworking/impl/OpenstackSwitchingDhcpHandlerTest.java
@@ -426,7 +426,7 @@
 
             @Override
             public List<String> getDnsNames() {
-                return null;
+                return Lists.newArrayList();
             }
 
             @Override