]> review.fuel-infra Code Review - openstack-build/neutron-build.git/commitdiff
set static route for windows 2003
authorPeng Yong <ppyy@pubyun.com>
Wed, 12 Jun 2013 02:05:03 +0000 (10:05 +0800)
committerPeng Yong <ppyy@pubyun.com>
Sun, 21 Jul 2013 02:27:54 +0000 (10:27 +0800)
Fixes: bug #1190108
Change-Id: I97266cf007d2a5d7ca8080d83bdfadd121d0fbeb

neutron/agent/linux/dhcp.py
neutron/tests/unit/test_linux_dhcp.py

index 2c603d4bddfc3a2924377de5d5cf6dd5544d2076..338bb0898fc03ea9efb779a98b0fb46cf1507785 100644 (file)
@@ -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):
index ab2815e4253924dc1e8e3c9a48c4f2e813663621..1ca9d9095365124053ab795eaf775b02fc59709d 100644 (file)
@@ -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']