DHCPV4_PORT = 67
DHCPV6_PORT = 547
METADATA_DEFAULT_IP = '169.254.169.254'
+WIN2k3_STATIC_DNS = 249
class DhcpBase(object):
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:
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):
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'
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'
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'
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'
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:
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]
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']