]> git.ipfire.org Git - thirdparty/knot-resolver.git/commitdiff
datamodel: dns64 section added
authorAleš <ales.mrazek@nic.cz>
Wed, 8 Sep 2021 10:56:51 +0000 (12:56 +0200)
committerAleš Mrázek <ales.mrazek@nic.cz>
Fri, 8 Apr 2022 14:17:52 +0000 (16:17 +0200)
manager/knot_resolver_manager/datamodel/config.py
manager/knot_resolver_manager/datamodel/dns64_config.py [new file with mode: 0644]
manager/knot_resolver_manager/datamodel/lua_template.j2
manager/tests/datamodel/test_config.py [new file with mode: 0644]
manager/tests/datamodel/test_dns64_config.py [new file with mode: 0644]

index e73e2f5a8f973b92b0a1fd0d2eb59d5469a46791..fc8e9d3bd0aa41bb22714b580be1b457911aecd8 100644 (file)
@@ -1,8 +1,9 @@
 import pkgutil
-from typing import Optional, Text
+from typing import Optional, Text, Union
 
 from jinja2 import Environment, Template
 
+from knot_resolver_manager.datamodel.dns64_config import Dns64, Dns64Strict
 from knot_resolver_manager.datamodel.lua_config import Lua, LuaStrict
 from knot_resolver_manager.datamodel.network_config import Network, NetworkStrict
 from knot_resolver_manager.datamodel.server_config import Server, ServerStrict
@@ -23,14 +24,21 @@ _LUA_TEMPLATE = _import_lua_template()
 class KresConfig(DataParser):
     server: Server = Server()
     network: Network = Network()
+    dns64: Union[bool, Dns64] = False
     lua: Optional[Lua] = None
 
 
 class KresConfigStrict(DataValidator):
     server: ServerStrict
     network: NetworkStrict
+    dns64: Union[bool, Dns64Strict] = False
     lua: Optional[LuaStrict]
 
+    def _dns64(self, obj: KresConfig) -> Union[bool, Dns64]:
+        if obj.dns64 is True:
+            return Dns64()
+        return obj.dns64
+
     def render_lua(self) -> Text:
         return _LUA_TEMPLATE.render(cfg=self)
 
diff --git a/manager/knot_resolver_manager/datamodel/dns64_config.py b/manager/knot_resolver_manager/datamodel/dns64_config.py
new file mode 100644 (file)
index 0000000..0cd1fe2
--- /dev/null
@@ -0,0 +1,12 @@
+from knot_resolver_manager.utils import DataParser, DataValidator
+
+
+class Dns64(DataParser):
+    prefix: str = "64:ff9b::"
+
+
+class Dns64Strict(DataValidator):
+    prefix: str
+
+    def _validate(self):
+        pass
index 889202e6c7917d8dcd12f0381e09740edc77c6c3..4c24fde45d535a168895f02b3be2fa2408eb8997 100644 (file)
@@ -17,6 +17,13 @@ net.listen('{{ item.address }}', {{ item.port }}, {
 })
 {% endfor %}
 
+-- MODULES
+modules = {
+{% if cfg.dns64 %}
+    dns64 = '{{ cfg.dns64.prefix }}', -- DNS64
+{% endif %}
+}
+
 {% if cfg.lua %}
 -- LUA section
 {% if cfg.lua.script_file %}
diff --git a/manager/tests/datamodel/test_config.py b/manager/tests/datamodel/test_config.py
new file mode 100644 (file)
index 0000000..9b21633
--- /dev/null
@@ -0,0 +1,9 @@
+from knot_resolver_manager.datamodel import KresConfig, KresConfigStrict
+
+
+def test_dns64_true_default():
+    config = KresConfig({"dns64": True})
+    strict = KresConfigStrict(config)
+
+    assert strict.dns64
+    assert strict.dns64.prefix == "64:ff9b::"
diff --git a/manager/tests/datamodel/test_dns64_config.py b/manager/tests/datamodel/test_dns64_config.py
new file mode 100644 (file)
index 0000000..d594a2e
--- /dev/null
@@ -0,0 +1,16 @@
+from knot_resolver_manager.datamodel.dns64_config import Dns64, Dns64Strict
+
+yaml = """
+prefix: fe80::21b:77ff:0:0
+"""
+
+config = Dns64.from_yaml(yaml)
+strict = Dns64Strict(config)
+
+
+def test_parsing():
+    assert config.prefix == "fe80::21b:77ff:0:0"
+
+
+def test_validating():
+    assert strict.prefix == "fe80::21b:77ff:0:0"