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