From c24fa039eb52d7c02a3f5b8ef37d663e32546ae8 Mon Sep 17 00:00:00 2001 From: Bradley Jones Date: Thu, 12 Feb 2015 03:51:18 -0800 Subject: [PATCH] Advertise mtu over dhcp If advertise_mtu option is set in the config then set the dnsmasq config option to advertise the mtu Partially Implements: blueprint mtu-selection-and-advertisement Change-Id: I5f3d4276fe36dfd89d242e9afe2d46e9cc7a8a28 --- neutron/agent/linux/dhcp.py | 7 +++++++ neutron/tests/unit/test_linux_dhcp.py | 10 ++++++++++ 2 files changed, 17 insertions(+) diff --git a/neutron/agent/linux/dhcp.py b/neutron/agent/linux/dhcp.py index 53752a8a3..99b42099b 100644 --- a/neutron/agent/linux/dhcp.py +++ b/neutron/agent/linux/dhcp.py @@ -20,6 +20,7 @@ import re import shutil import netaddr +from oslo_config import cfg from oslo_log import log as logging from oslo_utils import importutils import six @@ -349,6 +350,12 @@ class Dnsmasq(DhcpLocalProcess): cidr.prefixlen, lease)) possible_leases += cidr.size + if cfg.CONF.advertise_mtu: + mtu = self.network.mtu + # Do not advertise unknown mtu + if mtu > 0: + cmd.append('--dhcp-option-force=option:mtu,%d' % mtu) + # Cap the limit because creating lots of subnets can inflate # this possible lease cap. cmd.append('--dhcp-lease-max=%d' % diff --git a/neutron/tests/unit/test_linux_dhcp.py b/neutron/tests/unit/test_linux_dhcp.py index e4f943b9b..2647bd8bc 100644 --- a/neutron/tests/unit/test_linux_dhcp.py +++ b/neutron/tests/unit/test_linux_dhcp.py @@ -860,6 +860,9 @@ class TestDnsmasq(TestBase): lease_duration, seconds)]) possible_leases += netaddr.IPNetwork(s.cidr).size + if cfg.CONF.advertise_mtu: + expected.append('--dhcp-option-force=option:mtu,%s' % network.mtu) + expected.append('--dhcp-lease-max=%d' % min( possible_leases, max_leases)) expected.extend(extra_options) @@ -946,6 +949,13 @@ class TestDnsmasq(TestBase): self._test_spawn(['--conf-file=', '--domain=openstacklocal', '--dhcp-broadcast']) + def test_spawn_cfg_advertise_mtu(self): + cfg.CONF.set_override('advertise_mtu', True) + network = FakeV4Network() + network.mtu = 1500 + self._test_spawn(['--conf-file=', '--domain=openstacklocal'], + network) + def _test_output_opts_file(self, expected, network, ipm_retval=None): with mock.patch.object(dhcp.Dnsmasq, 'get_conf_file_name') as conf_fn: conf_fn.return_value = '/foo/opts' -- 2.45.2