From: Peng Yong Date: Wed, 12 Jun 2013 02:05:03 +0000 (+0800) Subject: set static route for windows 2003 X-Git-Url: https://review.fuel-infra.org/gitweb?a=commitdiff_plain;h=a669a910b9a411cdd0e6b3914a214014ed126289;p=openstack-build%2Fneutron-build.git set static route for windows 2003 Fixes: bug #1190108 Change-Id: I97266cf007d2a5d7ca8080d83bdfadd121d0fbeb --- diff --git a/neutron/agent/linux/dhcp.py b/neutron/agent/linux/dhcp.py index 2c603d4bd..338bb0898 100644 --- a/neutron/agent/linux/dhcp.py +++ b/neutron/agent/linux/dhcp.py @@ -57,6 +57,7 @@ DNS_PORT = 53 DHCPV4_PORT = 67 DHCPV6_PORT = 547 METADATA_DEFAULT_IP = '169.254.169.254' +WIN2k3_STATIC_DNS = 249 class DhcpBase(object): @@ -391,6 +392,9 @@ class Dnsmasq(DhcpLocalProcess): options.append( self._format_option(i, 'classless-static-route', ','.join(host_routes))) + options.append( + self._format_option(i, WIN2k3_STATIC_DNS, + ','.join(host_routes))) if subnet.ip_version == 4: if gateway: @@ -428,13 +432,17 @@ class Dnsmasq(DhcpLocalProcess): return os.path.join(os.path.dirname(sys.argv[0]), 'neutron-dhcp-agent-dnsmasq-lease-update') - def _format_option(self, index, option_name, *args): + def _format_option(self, index, option, *args): + """Format DHCP option by option name or code.""" if self.version >= self.MINIMUM_VERSION: set_tag = 'tag:' else: set_tag = '' + option = str(option) + if not option.isdigit(): + option = 'option:%s' % option return ','.join((set_tag + self._TAG_PREFIX % index, - 'option:%s' % option_name) + args) + option) + args) @classmethod def lease_update(cls): diff --git a/neutron/tests/unit/test_linux_dhcp.py b/neutron/tests/unit/test_linux_dhcp.py index ab2815e42..1ca9d9095 100644 --- a/neutron/tests/unit/test_linux_dhcp.py +++ b/neutron/tests/unit/test_linux_dhcp.py @@ -503,11 +503,13 @@ class TestDnsmasq(TestBase): expected = """ tag:tag0,option:dns-server,8.8.8.8 tag:tag0,option:classless-static-route,20.0.0.1/24,20.0.0.1 +tag:tag0,249,20.0.0.1/24,20.0.0.1 tag:tag0,option:router,192.168.0.1 tag:tag1,option:dns-server,%s -tag:tag1,option:classless-static-route,%s,%s""".lstrip() % (fake_v6, - fake_v6_cidr, - fake_v6) +tag:tag1,option:classless-static-route,%s,%s +tag:tag1,249,%s,%s""".lstrip() % (fake_v6, + fake_v6_cidr, fake_v6, + fake_v6_cidr, fake_v6) with mock.patch.object(dhcp.Dnsmasq, 'get_conf_file_name') as conf_fn: conf_fn.return_value = '/foo/opts' @@ -524,9 +526,10 @@ tag:tag1,option:classless-static-route,%s,%s""".lstrip() % (fake_v6, tag:tag0,option:dns-server,8.8.8.8 tag:tag0,option:router,10.0.0.1 tag:tag1,option:dns-server,%s -tag:tag1,option:classless-static-route,%s,%s""".lstrip() % (fake_v6, - fake_v6_cidr, - fake_v6) +tag:tag1,option:classless-static-route,%s,%s +tag:tag1,249,%s,%s""".lstrip() % (fake_v6, + fake_v6_cidr, fake_v6, + fake_v6_cidr, fake_v6) with mock.patch.object(dhcp.Dnsmasq, 'get_conf_file_name') as conf_fn: conf_fn.return_value = '/foo/opts' @@ -540,6 +543,7 @@ tag:tag1,option:classless-static-route,%s,%s""".lstrip() % (fake_v6, expected = """ tag:tag0,option:dns-server,8.8.8.8 tag:tag0,option:classless-static-route,20.0.0.1/24,20.0.0.1 +tag:tag0,249,20.0.0.1/24,20.0.0.1 tag:tag0,option:router,192.168.0.1""".lstrip() with mock.patch.object(dhcp.Dnsmasq, 'get_conf_file_name') as conf_fn: conf_fn.return_value = '/foo/opts' @@ -553,6 +557,7 @@ tag:tag0,option:router,192.168.0.1""".lstrip() expected = """ tag0,option:dns-server,8.8.8.8 tag0,option:classless-static-route,20.0.0.1/24,20.0.0.1 +tag0,249,20.0.0.1/24,20.0.0.1 tag0,option:router,192.168.0.1""".lstrip() with mock.patch.object(dhcp.Dnsmasq, 'get_conf_file_name') as conf_fn: conf_fn.return_value = '/foo/opts' @@ -565,6 +570,7 @@ tag0,option:router,192.168.0.1""".lstrip() def test_output_opts_file_no_gateway(self): expected = """ tag:tag0,option:classless-static-route,169.254.169.254/32,192.168.1.1 +tag:tag0,249,169.254.169.254/32,192.168.1.1 tag:tag0,option:router""".lstrip() with mock.patch.object(dhcp.Dnsmasq, 'get_conf_file_name') as conf_fn: @@ -594,11 +600,13 @@ tag:tag0,option:router""".lstrip() exp_opt_data = """ tag:tag0,option:dns-server,8.8.8.8 tag:tag0,option:classless-static-route,20.0.0.1/24,20.0.0.1 +tag:tag0,249,20.0.0.1/24,20.0.0.1 tag:tag0,option:router,192.168.0.1 tag:tag1,option:dns-server,%s -tag:tag1,option:classless-static-route,%s,%s""".lstrip() % (fake_v6, - fake_v6_cidr, - fake_v6) +tag:tag1,option:classless-static-route,%s,%s +tag:tag1,249,%s,%s""".lstrip() % (fake_v6, + fake_v6_cidr, fake_v6, + fake_v6_cidr, fake_v6) exp_args = ['kill', '-HUP', 5] @@ -638,11 +646,13 @@ tag:tag1,option:classless-static-route,%s,%s""".lstrip() % (fake_v6, exp_opt_data = """ tag:tag0,option:dns-server,8.8.8.8 tag:tag0,option:classless-static-route,20.0.0.1/24,20.0.0.1 +tag:tag0,249,20.0.0.1/24,20.0.0.1 tag:tag0,option:router,192.168.0.1 tag:tag1,option:dns-server,%s -tag:tag1,option:classless-static-route,%s,%s""".lstrip() % (fake_v6, - fake_v6_cidr, - fake_v6) +tag:tag1,option:classless-static-route,%s,%s +tag:tag1,249,%s,%s""".lstrip() % (fake_v6, + fake_v6_cidr, fake_v6, + fake_v6_cidr, fake_v6) exp_args = ['cat', '/proc/5/cmdline']