Skip to content

Commit

Permalink
Merge pull request #3226 from vyos/mergify/bp/sagitta/pr-3224
Browse files Browse the repository at this point in the history
dhcpv6-client: T2590: fix vyos-hostsd update for nameserver and search domains (backport #3224)
  • Loading branch information
c-po authored Apr 1, 2024
2 parents 5e5bb5a + 4e37494 commit adb89e7
Show file tree
Hide file tree
Showing 4 changed files with 43 additions and 22 deletions.
31 changes: 31 additions & 0 deletions data/templates/dhcp-client/dhcp6c-script.j2
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
#!/bin/sh
# Update DNS information for DHCPv6 clients
# should be used only if vyos-hostsd is running

if /usr/bin/systemctl -q is-active vyos-hostsd; then
hostsd_client="/usr/bin/vyos-hostsd-client"
hostsd_changes=

if [ -n "$new_domain_name" ]; then
logmsg info "Deleting search domains with tag \"dhcpv6-{{ ifname }}\" via vyos-hostsd-client"
$hostsd_client --delete-search-domains --tag "dhcpv6-{{ ifname }}"
logmsg info "Adding domain name \"$new_domain_name\" as search domain with tag \"dhcpv6-{{ ifname }}\" via vyos-hostsd-client"
$hostsd_client --add-search-domains "$new_domain_name" --tag "dhcpv6-{{ ifname }}"
hostsd_changes=y
fi

if [ -n "$new_domain_name_servers" ]; then
logmsg info "Deleting nameservers with tag \"dhcpv6-{{ ifname }}\" via vyos-hostsd-client"
$hostsd_client --delete-name-servers --tag "dhcpv6-{{ ifname }}"
logmsg info "Adding nameservers \"$new_domain_name_servers\" with tag \"dhcpv6-{{ ifname }}\" via vyos-hostsd-client"
$hostsd_client --add-name-servers $new_domain_name_servers --tag "dhcpv6-{{ ifname }}"
hostsd_changes=y
fi

if [ $hostsd_changes ]; then
logmsg info "Applying changes via vyos-hostsd-client"
$hostsd_client --apply
else
logmsg info "No changes to apply via vyos-hostsd-client"
fi
fi
2 changes: 1 addition & 1 deletion data/templates/dhcp-client/ipv6.j2
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ interface {{ ifname }} {
send ia-pd {{ pd }}; # prefix delegation #{{ pd }}
{% endfor %}
{% endif %}
script "{{ dhcp6_script_file }}";
};

{% if address is vyos_defined and 'dhcpv6' in address %}
Expand Down Expand Up @@ -59,4 +60,3 @@ id-assoc pd {{ pd }} {
};
{% endfor %}
{% endif %}

16 changes: 11 additions & 5 deletions python/vyos/ifconfig/interface.py
Original file line number Diff line number Diff line change
Expand Up @@ -1338,15 +1338,19 @@ def set_dhcpv6(self, enable):
ifname = self.ifname
config_base = directories['dhcp6_client_dir']
config_file = f'{config_base}/dhcp6c.{ifname}.conf'
script_file = f'/etc/wide-dhcpv6/dhcp6c.{ifname}.script' # can not live under /run b/c of noexec mount option
systemd_override_file = f'/run/systemd/system/dhcp6c@{ifname}.service.d/10-override.conf'
systemd_service = f'dhcp6c@{ifname}.service'

# Rendered client configuration files require the apsolute config path
self.config['dhcp6_client_dir'] = directories['dhcp6_client_dir']
# Rendered client configuration files require additional settings
config = deepcopy(self.config)
config['dhcp6_client_dir'] = directories['dhcp6_client_dir']
config['dhcp6_script_file'] = script_file

if enable and 'disable' not in self.config:
render(systemd_override_file, 'dhcp-client/ipv6.override.conf.j2', self.config)
render(config_file, 'dhcp-client/ipv6.j2', self.config)
if enable and 'disable' not in config:
render(systemd_override_file, 'dhcp-client/ipv6.override.conf.j2', config)
render(config_file, 'dhcp-client/ipv6.j2', config)
render(script_file, 'dhcp-client/dhcp6c-script.j2', config, permission=0o755)

# Reload systemd unit definitons as some options are dynamically generated
self._cmd('systemctl daemon-reload')
Expand All @@ -1359,6 +1363,8 @@ def set_dhcpv6(self, enable):
self._cmd(f'systemctl stop {systemd_service}')
if os.path.isfile(config_file):
os.remove(config_file)
if os.path.isfile(script_file):
os.remove(script_file)

return None

Expand Down
16 changes: 0 additions & 16 deletions src/etc/dhcp/dhclient-enter-hooks.d/04-vyos-resolvconf
Original file line number Diff line number Diff line change
Expand Up @@ -14,14 +14,6 @@ if /usr/bin/systemctl -q is-active vyos-hostsd; then
hostsd_changes=y
fi

if [ -n "$new_dhcp6_domain_search" ]; then
logmsg info "Deleting search domains with tag \"dhcpv6-$interface\" via vyos-hostsd-client"
$hostsd_client --delete-search-domains --tag "dhcpv6-$interface"
logmsg info "Adding search domain \"$new_dhcp6_domain_search\" with tag \"dhcpv6-$interface\" via vyos-hostsd-client"
$hostsd_client --add-search-domains "$new_dhcp6_domain_search" --tag "dhcpv6-$interface"
hostsd_changes=y
fi

if [ -n "$new_domain_name_servers" ]; then
logmsg info "Deleting nameservers with tag \"dhcp-$interface\" via vyos-hostsd-client"
$hostsd_client --delete-name-servers --tag "dhcp-$interface"
Expand All @@ -30,14 +22,6 @@ if /usr/bin/systemctl -q is-active vyos-hostsd; then
hostsd_changes=y
fi

if [ -n "$new_dhcp6_name_servers" ]; then
logmsg info "Deleting nameservers with tag \"dhcpv6-$interface\" via vyos-hostsd-client"
$hostsd_client --delete-name-servers --tag "dhcpv6-$interface"
logmsg info "Adding nameservers \"$new_dhcp6_name_servers\" with tag \"dhcpv6-$interface\" via vyos-hostsd-client"
$hostsd_client --add-name-servers $new_dhcp6_name_servers --tag "dhcpv6-$interface"
hostsd_changes=y
fi

if [ $hostsd_changes ]; then
logmsg info "Applying changes via vyos-hostsd-client"
$hostsd_client --apply
Expand Down

0 comments on commit adb89e7

Please sign in to comment.