From 7724bac41baddc29a74acf7bbe39e60e4799040d Mon Sep 17 00:00:00 2001 From: Sheng Yang Date: Thu, 17 Nov 2011 15:18:59 -0800 Subject: [PATCH] NaaS: Separate DNS service from DHCP service of virtual router If virtual router provide DHCP but not DNS service, the DHCP response would contained DNS server address rather than domr itself's address. Then user VM would use specified DNS server directly. --- .../VirtualNetworkApplianceManagerImpl.java | 28 +++++++++++++------ 1 file changed, 20 insertions(+), 8 deletions(-) diff --git a/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java b/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java index 61b1c41a45a..aee91a0942d 100755 --- a/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java +++ b/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java @@ -1574,16 +1574,28 @@ public class VirtualNetworkApplianceManagerImpl implements VirtualNetworkApplian buf.append(" defaultroute=true"); } - buf.append(" dns1=").append(defaultDns1); - if (defaultDns2 != null) { - buf.append(" dns2=").append(defaultDns2); + boolean dnsProvided = _networkMgr.isProviderSupportServiceInNetwork(network.getId(), Service.Dns, Provider.VirtualRouter); + boolean dhcpProvided = _networkMgr.isProviderSupportServiceInNetwork(network.getId(), Service.Dhcp, Provider.VirtualRouter); + /* If virtual router didn't provide DNS service but provide DHCP service, we need to override the DHCP response to return DNS server rather than + * virtual router itself. */ + if (dnsProvided || dhcpProvided) { + buf.append(" dns1=").append(defaultDns1); + if (defaultDns2 != null) { + buf.append(" dns2=").append(defaultDns2); + } + + boolean useExtDns = !dnsProvided; + /* For backward compatibility */ + String use_external_dns = _configDao.getValue(Config.UseExternalDnsServers.key()); + if (use_external_dns != null && use_external_dns.equals("true")) { + useExtDns = true; + } + + if (useExtDns) { + buf.append(" useextdns=true"); + } } - String use_external_dns = _configDao.getValue(Config.UseExternalDnsServers.key()); - if (use_external_dns!=null && use_external_dns.equals("true")){ - buf.append(" useextdns=true"); - } - if(profile.getHypervisorType() == HypervisorType.VMware) { buf.append(" extra_pubnics=" + _routerExtraPublicNics); }