From 07080afd4015a900fb7474e1c81008f58b478565 Mon Sep 17 00:00:00 2001
From: Christian Poessinger <christian@poessinger.com>
Date: Sat, 11 Apr 2020 15:12:52 +0200
Subject: vpn: l2tp: T2264: migrate IPv6 prefix node to common CLI style

Combining multiple options into a single CLI node is considered bad practice.
IPv6 prefixes consited of the prefix itself and a mask send to the client in
one node only.

The following CLI parts have been migrated from

  client-ipv6-pool {
    delegate-prefix fc00:0:1::/48,64
    prefix 2001:db8::/64,64
  }

to

  client-ipv6-pool {
    delegate fc00:0:1::/48 {
      delegation-prefix 48
    }
    prefix 2001:db8::/48 {
      mask 64
    }
  }

Thus regular validation steps from the VyOS CLI can be used when a prefix is
configured.
---
 interface-definitions/vpn-l2tp.xml.in | 56 +++++++++++++++++++++++++++--------
 1 file changed, 44 insertions(+), 12 deletions(-)

(limited to 'interface-definitions')

diff --git a/interface-definitions/vpn-l2tp.xml.in b/interface-definitions/vpn-l2tp.xml.in
index 84dd8187c..d4286a810 100644
--- a/interface-definitions/vpn-l2tp.xml.in
+++ b/interface-definitions/vpn-l2tp.xml.in
@@ -237,26 +237,58 @@
                   <help>Pool of client IPv6 addresses</help>
                 </properties>
                 <children>
-                  <leafNode name="prefix">
+                  <tagNode name="prefix">
                     <properties>
-                      <help>IPV6 prefix delegation</help>
+                      <help>Pool of addresses used to assign to clients</help>
                       <valueHelp>
-                        <format>ipv6prefix/mask,prefix_len</format>
-                        <description>e.g.: fc00:0:1::/48,64 - divides prefix into /64 subnets for clients</description>
+                        <format>ipv6net</format>
+                        <description>IPv6 address and prefix length</description>
                       </valueHelp>
-                      <multi />
+                      <constraint>
+                        <validator name="ipv6-prefix"/>
+                      </constraint>
                     </properties>
-                  </leafNode>
-                  <leafNode name="delegate-prefix">
+                    <children>
+                        <leafNode name="mask">
+                          <properties>
+                            <help>Prefix length used for individual client</help>
+                            <valueHelp>
+                              <format>&lt;48-128&gt;</format>
+                              <description>Client prefix length (default: 64)</description>
+                            </valueHelp>
+                            <constraint>
+                              <validator name="numeric" argument="--range 48-128"/>
+                            </constraint>
+                          </properties>
+                        </leafNode>
+                    </children>
+                  </tagNode>
+                  <tagNode name="delegate">
                     <properties>
-                      <help>DHCPv6 prefix delegation - rfc3633</help>
+                      <help>Subnet used to delegate prefix through DHCPv6-PD (RFC3633)</help>
                       <valueHelp>
-                        <format>ipv6prefix/mask,prefix_len</format>
-                        <description>Delegate to clients through DHCPv6 prefix delegation - rfc3633</description>
+                        <format>ipv6net</format>
+                        <description>IPv6 address and prefix length</description>
                       </valueHelp>
-                      <multi />
+                      <constraint>
+                        <validator name="ipv6-prefix"/>
+                      </constraint>
                     </properties>
-                  </leafNode>
+                    <children>
+                        <leafNode name="delegation-prefix">
+                          <properties>
+                            <help>Prefix length delegated to client</help>
+                            <valueHelp>
+                              <format>&lt;32-64&gt;</format>
+                              <description>Delegated prefix length</description>
+                            </valueHelp>
+                            <constraint>
+                              <validator name="numeric" argument="--range 32-64"/>
+                            </constraint>
+                          </properties>
+                        </leafNode>
+                    </children>
+                  </tagNode>
                 </children>
               </node>
               <leafNode name="description">
-- 
cgit v1.2.3