summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristian Poessinger <christian@poessinger.com>2021-10-18 18:14:56 +0200
committerGitHub <noreply@github.com>2021-10-18 18:14:56 +0200
commitc3a65c60cfc854113a9af371f37fba6eb71ad05e (patch)
treeea368cee60a3c798f94ba5210477b9079195d83d
parent56810c62f91d3f11e23b2836bb4d14db6ec8ce25 (diff)
parent35aeea69c62a1755595d34b856d03f58cdd2da4c (diff)
downloadvyos-1x-c3a65c60cfc854113a9af371f37fba6eb71ad05e.tar.gz
vyos-1x-c3a65c60cfc854113a9af371f37fba6eb71ad05e.zip
Merge pull request #1022 from sever-sever/T3897
ddclient: T3897: Add option for IPv6 Dynamic DNS
-rw-r--r--data/templates/dynamic-dns/ddclient.conf.tmpl2
-rw-r--r--interface-definitions/dns-dynamic.xml.in6
-rwxr-xr-xsmoketest/scripts/cli/test_service_dns_dynamic.py38
-rwxr-xr-xsrc/conf_mode/dynamic_dns.py2
4 files changed, 46 insertions, 2 deletions
diff --git a/data/templates/dynamic-dns/ddclient.conf.tmpl b/data/templates/dynamic-dns/ddclient.conf.tmpl
index 9d379de00..517e4bad4 100644
--- a/data/templates/dynamic-dns/ddclient.conf.tmpl
+++ b/data/templates/dynamic-dns/ddclient.conf.tmpl
@@ -9,7 +9,7 @@ ssl=yes
{% set web_skip = ", web-skip='" + interface[iface].use_web.skip + "'" if interface[iface].use_web.skip is defined else '' %}
use=web, web='{{ interface[iface].use_web.url }}'{{ web_skip }}
{% else %}
-use=if, if={{ iface }}
+{{ 'usev6=if' if interface[iface].ipv6_enable is defined else 'use=if' }}, if={{ iface }}
{% endif %}
{% if interface[iface].rfc2136 is defined and interface[iface].rfc2136 is not none %}
diff --git a/interface-definitions/dns-dynamic.xml.in b/interface-definitions/dns-dynamic.xml.in
index 250642691..64826516e 100644
--- a/interface-definitions/dns-dynamic.xml.in
+++ b/interface-definitions/dns-dynamic.xml.in
@@ -274,6 +274,12 @@
</leafNode>
</children>
</node>
+ <leafNode name="ipv6-enable">
+ <properties>
+ <help>Allow explicit IPv6 addresses for Dynamic DNS for this interface</help>
+ <valueless/>
+ </properties>
+ </leafNode>
</children>
</tagNode>
</children>
diff --git a/smoketest/scripts/cli/test_service_dns_dynamic.py b/smoketest/scripts/cli/test_service_dns_dynamic.py
index d8a87ffd4..03fccf2c7 100755
--- a/smoketest/scripts/cli/test_service_dns_dynamic.py
+++ b/smoketest/scripts/cli/test_service_dns_dynamic.py
@@ -24,6 +24,7 @@ from vyos.configsession import ConfigSession
from vyos.configsession import ConfigSessionError
from vyos.util import cmd
from vyos.util import process_named_running
+from vyos.util import read_file
PROCESS_NAME = 'ddclient'
DDCLIENT_CONF = '/run/ddclient/ddclient.conf'
@@ -122,5 +123,42 @@ class TestServiceDDNS(VyOSUnitTestSHIM.TestCase):
# Check for running process
self.assertTrue(process_named_running(PROCESS_NAME))
+ def test_dyndns_ipv6(self):
+ ddns = ['interface', 'eth0', 'service', 'dynv6']
+ hostname = 'test.ddns.vyos.io'
+ proto = 'dyndns2'
+ user = 'none'
+ password = 'paSS_4ord'
+ servr = 'ddns.vyos.io'
+
+ self.cli_set(base_path + ['interface', 'eth0', 'ipv6-enable'])
+ self.cli_set(base_path + ddns + ['host-name', hostname])
+ self.cli_set(base_path + ddns + ['login', user])
+ self.cli_set(base_path + ddns + ['password', password])
+ self.cli_set(base_path + ddns + ['protocol', proto])
+ self.cli_set(base_path + ddns + ['server', servr])
+
+ # commit changes
+ self.cli_commit()
+
+ # Check for running process
+ self.assertTrue(process_named_running(PROCESS_NAME))
+
+ config = read_file(DDCLIENT_CONF)
+
+ protocol = get_config_value('protocol')
+ login = get_config_value('login')
+ pwd = get_config_value('password')
+ server = get_config_value('server')
+
+ # Check some generating config parameters
+ self.assertTrue(protocol == proto)
+ self.assertTrue(login == user)
+ self.assertTrue(pwd == "'" + password + "'")
+ self.assertTrue(server == servr)
+
+ self.assertIn('usev6=if', config)
+ self.assertIn(hostname, config)
+
if __name__ == '__main__':
unittest.main(verbosity=2)
diff --git a/src/conf_mode/dynamic_dns.py b/src/conf_mode/dynamic_dns.py
index c979feca7..646de6324 100755
--- a/src/conf_mode/dynamic_dns.py
+++ b/src/conf_mode/dynamic_dns.py
@@ -132,7 +132,7 @@ def generate(dyndns):
return None
render(config_file, 'dynamic-dns/ddclient.conf.tmpl', dyndns,
- permission=0o600)
+ permission=0o644)
return None