summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristian Poessinger <christian@poessinger.com>2020-05-16 22:20:43 +0200
committerChristian Poessinger <christian@poessinger.com>2020-05-16 22:52:30 +0200
commit7d01f7fec95f65705ec886f4de8bce21e0bfee07 (patch)
treec34361e7c4a6d0f04eae4567fd2a7abb14c4a51a
parent9e305400f281a1ce558aab692f44426da0d76bcc (diff)
downloadvyos-1x-7d01f7fec95f65705ec886f4de8bce21e0bfee07.tar.gz
vyos-1x-7d01f7fec95f65705ec886f4de8bce21e0bfee07.zip
nat: nptv6: T2198: add XML/Python skeleton
- define XML CLI interface - read CLI into Python dict
-rw-r--r--interface-definitions/include/nat-outbound-interface.xml.i8
-rw-r--r--interface-definitions/nat.xml.in81
-rwxr-xr-xsrc/conf_mode/nat.py10
3 files changed, 90 insertions, 9 deletions
diff --git a/interface-definitions/include/nat-outbound-interface.xml.i b/interface-definitions/include/nat-outbound-interface.xml.i
new file mode 100644
index 000000000..d562f7f03
--- /dev/null
+++ b/interface-definitions/include/nat-outbound-interface.xml.i
@@ -0,0 +1,8 @@
+<leafNode name="outbound-interface">
+ <properties>
+ <help>Outbound interface of NAT traffic</help>
+ <completionHelp>
+ <script>${vyos_completion_dir}/list_interfaces.py</script>
+ </completionHelp>
+ </properties>
+</leafNode>
diff --git a/interface-definitions/nat.xml.in b/interface-definitions/nat.xml.in
index af9dd1eff..a0b3b815b 100644
--- a/interface-definitions/nat.xml.in
+++ b/interface-definitions/nat.xml.in
@@ -52,22 +52,87 @@
</tagNode>
</children>
</node>
- <node name="source">
+ <node name="nptv6">
<properties>
- <help>Source NAT settings</help>
+ <help>IPv6-to-IPv6 Network Prefix Translation Settings</help>
</properties>
<children>
- #include <include/nat-rule.xml.i>
<tagNode name="rule">
+ <properties>
+ <help>NPTv6 rule number</help>
+ <valueHelp>
+ <format>1-9999</format>
+ <description>Number for this rule</description>
+ </valueHelp>
+ <constraint>
+ <validator name="numeric" argument="--range 1-9999"/>
+ </constraint>
+ <constraintErrorMessage>NAT rule number must be between 1 and 9999</constraintErrorMessage>
+ </properties>
<children>
- <leafNode name="outbound-interface">
+ <leafNode name="description">
<properties>
- <help>Outbound interface of NAT traffic</help>
- <completionHelp>
- <script>${vyos_completion_dir}/list_interfaces.py</script>
- </completionHelp>
+ <help>Rule description</help>
</properties>
</leafNode>
+ <leafNode name="disable">
+ <properties>
+ <help>Disable NAT rule</help>
+ <valueless/>
+ </properties>
+ </leafNode>
+ #include <include/nat-outbound-interface.xml.i>
+ <node name="source">
+ <properties>
+ <help>IPv6 source prefix options</help>
+ </properties>
+ <children>
+ <leafNode name="prefix">
+ <properties>
+ <help>IPv6 prefix to be translated</help>
+ <valueHelp>
+ <format>ipv6net</format>
+ <description>IPv6 prefix</description>
+ </valueHelp>
+ <constraint>
+ <validator name="ipv6-prefix"/>
+ </constraint>
+ </properties>
+ </leafNode>
+ </children>
+ </node>
+ <node name="translation">
+ <properties>
+ <help>Translated IPv6 prefix options</help>
+ </properties>
+ <children>
+ <leafNode name="prefix">
+ <properties>
+ <help>IPv6 prefix to translate to</help>
+ <valueHelp>
+ <format>ipv6net</format>
+ <description>IPv6 prefix</description>
+ </valueHelp>
+ <constraint>
+ <validator name="ipv6-prefix"/>
+ </constraint>
+ </properties>
+ </leafNode>
+ </children>
+ </node>
+ </children>
+ </tagNode>
+ </children>
+ </node>
+ <node name="source">
+ <properties>
+ <help>Source NAT settings</help>
+ </properties>
+ <children>
+ #include <include/nat-rule.xml.i>
+ <tagNode name="rule">
+ <children>
+ #include <include/nat-outbound-interface.xml.i>
<node name="translation">
<properties>
<help>Outside NAT IP (source NAT only)</help>
diff --git a/src/conf_mode/nat.py b/src/conf_mode/nat.py
index 5cb1af1f1..406ec1caf 100755
--- a/src/conf_mode/nat.py
+++ b/src/conf_mode/nat.py
@@ -102,8 +102,10 @@ def parse_source_destination(conf, source_dest):
'protocol': 'all',
'number': number,
'source_address': '',
+ 'source_prefix': '',
'source_port': '',
'translation_address': '',
+ 'translation_prefix': '',
'translation_port': ''
}
conf.set_level(base_level + ['rule', number])
@@ -138,12 +140,18 @@ def parse_source_destination(conf, source_dest):
if conf.exists(['source', 'address']):
rule['source_address'] = conf.return_value(['source', 'address'])
+ if conf.exists(['source', 'prefix']):
+ rule['source_prefix'] = conf.return_value(['source', 'prefix'])
+
if conf.exists(['source', 'port']):
rule['source_port'] = conf.return_value(['source', 'port'])
if conf.exists(['translation', 'address']):
rule['translation_address'] = conf.return_value(['translation', 'address'])
+ if conf.exists(['translation', 'prefix']):
+ rule['translation_prefix'] = conf.return_value(['translation', 'prefix'])
+
if conf.exists(['translation', 'port']):
rule['translation_port'] = conf.return_value(['translation', 'port'])
@@ -193,7 +201,7 @@ def get_config():
# use a common wrapper function to read in the source / destination
# tree from the config - thus we do not need to replicate almost the
# same code :-)
- for tgt in ['source', 'destination']:
+ for tgt in ['source', 'destination', 'nptv6']:
nat[tgt] = parse_source_destination(conf, tgt)
return nat