diff --git a/etc/dhcp_agent.ini b/etc/dhcp_agent.ini index 9836d350007..0f998789449 100644 --- a/etc/dhcp_agent.ini +++ b/etc/dhcp_agent.ini @@ -72,6 +72,9 @@ # Location to DHCP lease relay UNIX domain socket # dhcp_lease_relay_socket = $state_path/dhcp/lease_relay +# Use broadcast in DHCP replies +# dhcp_broadcast_reply = False + # Location of Metadata Proxy UNIX domain socket # metadata_proxy_socket = $state_path/metadata_proxy diff --git a/neutron/agent/linux/dhcp.py b/neutron/agent/linux/dhcp.py index 51e89913d48..67e498d2dd2 100644 --- a/neutron/agent/linux/dhcp.py +++ b/neutron/agent/linux/dhcp.py @@ -57,6 +57,8 @@ OPTS = [ 'dnsmasq_lease_max', default=(2 ** 24), help=_('Limit number of leases to prevent a denial-of-service.')), + cfg.BoolOpt('dhcp_broadcast_reply', default=False, + help=_("Use broadcast in DHCP replies")), ] IPV4 = 4 @@ -414,6 +416,9 @@ class Dnsmasq(DhcpLocalProcess): if self.conf.dhcp_domain: cmd.append('--domain=%s' % self.conf.dhcp_domain) + if self.conf.dhcp_broadcast_reply: + cmd.append('--dhcp-broadcast') + ip_wrapper = ip_lib.IPWrapper(self.root_helper, self.network.namespace) ip_wrapper.netns.execute(cmd, addl_env=env) diff --git a/neutron/tests/unit/test_linux_dhcp.py b/neutron/tests/unit/test_linux_dhcp.py index a0187369b82..39edd30a8fd 100644 --- a/neutron/tests/unit/test_linux_dhcp.py +++ b/neutron/tests/unit/test_linux_dhcp.py @@ -856,6 +856,11 @@ class TestDnsmasq(TestBase): network=FakeV4Network(), max_leases=256) + def test_spawn_cfg_broadcast(self): + self.conf.set_override('dhcp_broadcast_reply', True) + self._test_spawn(['--conf-file=', '--domain=openstacklocal', + '--dhcp-broadcast']) + def test_output_opts_file(self): fake_v6 = '2001:0200:feed:7ac0::1' expected = (