Revision 7b0ebdd0 nfdhcpd
b/nfdhcpd | ||
---|---|---|
55 | 55 |
from scapy.layers.dhcp import BOOTP, DHCP |
56 | 56 |
from scapy.layers.dhcp6 import DHCP6_Reply, DHCP6OptDNSServers, \ |
57 | 57 |
DHCP6OptServerId, DHCP6OptClientId, \ |
58 |
DUID_LLT, DHCP6_InfoRequest |
|
58 |
DUID_LLT, DHCP6_InfoRequest, DHCP6OptDNSDomains
|
|
59 | 59 |
|
60 | 60 |
|
61 | 61 |
DEFAULT_CONFIG = "/etc/nfdhcpd/nfdhcpd.conf" |
... | ... | |
96 | 96 |
ns_queue = integer(min=0, max=65535) |
97 | 97 |
dhcp_queue = integer(min=0, max=65535) |
98 | 98 |
nameservers = ip_addr_list(family=6) |
99 |
domains = force_list(default=None) |
|
99 | 100 |
""" |
100 | 101 |
|
101 | 102 |
|
... | ... | |
356 | 357 |
rs_queue_num=None, ns_queue_num=None, dhcpv6_queue_num=None, |
357 | 358 |
dhcp_lease_lifetime=DEFAULT_LEASE_LIFETIME, |
358 | 359 |
dhcp_lease_renewal=DEFAULT_LEASE_RENEWAL, |
359 |
dhcp_domain='',
|
|
360 |
dhcp_domain=None,
|
|
360 | 361 |
dhcp_server_ip=DHCP_DUMMY_SERVER_IP, dhcp_nameservers=None, |
361 |
ra_period=DEFAULT_RA_PERIOD, ipv6_nameservers=None): |
|
362 |
ra_period=DEFAULT_RA_PERIOD, ipv6_nameservers=None, |
|
363 |
dhcpv6_domains=None): |
|
362 | 364 |
|
363 | 365 |
try: |
364 | 366 |
getattr(nfqueue.payload, 'get_physindev') |
... | ... | |
381 | 383 |
else: |
382 | 384 |
self.ipv6_nameservers = ipv6_nameservers |
383 | 385 |
|
386 |
if dhcpv6_domains is None: |
|
387 |
self.dhcpv6_domains = [] |
|
388 |
else: |
|
389 |
self.dhcpv6_domains = dhcpv6_domains |
|
390 |
|
|
384 | 391 |
self.ipv6_enabled = False |
385 | 392 |
|
386 | 393 |
self.clients = {} |
... | ... | |
745 | 752 |
logging.info(" - Generating DHCPv6 response for host %s (mac %s) on tap %s", |
746 | 753 |
binding.hostname, binding.mac, binding.tap) |
747 | 754 |
|
755 |
if self.dhcpv6_domains: |
|
756 |
domains = self.dhcpv6_domains |
|
757 |
else: |
|
758 |
domains = [binding.hostname.split('.', 1)[-1]] |
|
759 |
|
|
760 |
# We do this in order not to caclulate optlen ourselves |
|
761 |
dnsdomains = str(DHCP6OptDNSDomains(dnsdomains=domains)) |
|
762 |
dnsservers = str(DHCP6OptDNSServers(dnsservers=self.ipv6_nameservers)) |
|
763 |
|
|
748 | 764 |
resp = Ether(src=indevmac, dst=binding.mac)/\ |
749 | 765 |
IPv6(tc=192, src=str(ifll), dst=str(ofll))/\ |
750 | 766 |
UDP(sport=pkt.dport, dport=pkt.sport)/\ |
751 | 767 |
DHCP6_Reply(trid=pkt[DHCP6_InfoRequest].trid)/\ |
752 | 768 |
DHCP6OptClientId(duid=pkt[DHCP6OptClientId].duid)/\ |
753 | 769 |
DHCP6OptServerId(duid=DUID_LLT(lladdr=indevmac, timeval=time.time()))/\ |
754 |
DHCP6OptDNSServers(dnsservers=self.ipv6_nameservers,
|
|
755 |
optlen=16 * len(self.ipv6_nameservers))
|
|
770 |
DHCP6OptDNSDomains(dnsdomains)/\
|
|
771 |
DHCP6OptDNSServers(dnsservers)
|
|
756 | 772 |
|
757 | 773 |
try: |
758 | 774 |
binding.sendp(resp) |
... | ... | |
1186 | 1202 |
"ns_queue_num": config["ipv6"].as_int("ns_queue"), |
1187 | 1203 |
"ra_period": config["ipv6"].as_int("ra_period"), |
1188 | 1204 |
"ipv6_nameservers": config["ipv6"]["nameservers"], |
1205 |
"dhcpv6_domains": config["ipv6"]["domains"], |
|
1189 | 1206 |
}) |
1190 | 1207 |
|
1191 | 1208 |
# pylint: disable=W0142 |
Also available in: Unified diff