diff --git a/neutron/agent/linux/dhcp.py b/neutron/agent/linux/dhcp.py index dc25ca514f5..327c4e8ffdd 100644 --- a/neutron/agent/linux/dhcp.py +++ b/neutron/agent/linux/dhcp.py @@ -354,14 +354,10 @@ class Dnsmasq(DhcpLocalProcess): '--dhcp-match=set:ipxe,175', '--dhcp-userclass=set:ipxe6,iPXE', '--local-service', + '--bind-dynamic', ] - if self.device_manager.driver.bridged: + if not self.device_manager.driver.bridged: cmd += [ - '--bind-interfaces', - ] - else: - cmd += [ - '--bind-dynamic', '--bridge-interface=%s,tap*' % self.interface_name, ] diff --git a/neutron/tests/unit/agent/linux/test_dhcp.py b/neutron/tests/unit/agent/linux/test_dhcp.py index 1285e5b790c..2be866c5d6f 100644 --- a/neutron/tests/unit/agent/linux/test_dhcp.py +++ b/neutron/tests/unit/agent/linux/test_dhcp.py @@ -1260,7 +1260,8 @@ class TestDnsmasq(TestBase): def _test_spawn(self, extra_options, network=FakeDualNetwork(), max_leases=16777216, lease_duration=86400, has_static=True, no_resolv='--no-resolv', - has_stateless=True, dhcp_t1=0, dhcp_t2=0): + has_stateless=True, dhcp_t1=0, dhcp_t2=0, + bridged=True): def mock_get_conf_file_name(kind): return '/dhcp/%s/%s' % (network.id, kind) @@ -1281,8 +1282,12 @@ class TestDnsmasq(TestBase): '--dhcp-match=set:ipxe,175', '--dhcp-userclass=set:ipxe6,iPXE', '--local-service', - '--bind-interfaces', + '--bind-dynamic', ] + if not bridged: + expected += [ + '--bridge-interface=tap0,tap*' + ] seconds = '' if lease_duration == -1: @@ -1356,6 +1361,11 @@ class TestDnsmasq(TestBase): def test_spawn(self): self._test_spawn(['--conf-file=', '--domain=openstacklocal']) + def test_spawn_not_bridged(self): + self.mock_mgr.return_value.driver.bridged = False + self._test_spawn(['--conf-file=', '--domain=openstacklocal'], + bridged=False) + def test_spawn_infinite_lease_duration(self): self.conf.set_override('dhcp_lease_duration', -1) self._test_spawn(['--conf-file=', '--domain=openstacklocal'],