diff --git a/interface-definitions/dhcp-server.xml.in b/interface-definitions/dhcp-server.xml.in
index 0747d649a..6e1592200 100644
--- a/interface-definitions/dhcp-server.xml.in
+++ b/interface-definitions/dhcp-server.xml.in
@@ -1,490 +1,477 @@
 <?xml version="1.0"?>
 <!-- DHCP server configuration -->
 <interfaceDefinition>
   <node name="service">
     <children>
       <node name="dhcp-server" owner="${vyos_conf_scripts_dir}/dhcp_server.py">
         <properties>
           <help>Dynamic Host Configuration Protocol (DHCP) for DHCP server</help>
           <priority>911</priority>
         </properties>
         <children>
           #include <include/generic-disable-node.xml.i>
           <leafNode name="dynamic-dns-update">
             <properties>
               <help>Dynamically update Domain Name System (RFC4702)</help>
               <valueless/>
             </properties>
           </leafNode>
           <node name="failover">
             <properties>
               <help>DHCP failover configuration</help>
             </properties>
             <children>
               #include <include/source-address-ipv4.xml.i>
               <leafNode name="remote">
                 <properties>
                   <help>IPv4 remote address used for connectio</help>
                   <valueHelp>
                     <format>ipv4</format>
                     <description>IPv4 address of failover peer</description>
                   </valueHelp>
                   <constraint>
                     <validator name="ipv4-address"/>
                   </constraint>
                 </properties>
               </leafNode>
               <leafNode name="name">
                 <properties>
                   <help>Peer name used to identify connection</help>
                   <constraint>
                     <regex>[-_a-zA-Z0-9.]+</regex>
                   </constraint>
                   <constraintErrorMessage>Invalid failover peer name. May only contain letters, numbers and .-_</constraintErrorMessage>
                 </properties>
               </leafNode>
               <leafNode name="status">
                 <properties>
                   <help>Failover hierarchy</help>
                   <completionHelp>
                     <list>primary secondary</list>
                   </completionHelp>
                   <valueHelp>
                     <format>primary</format>
                     <description>Configure this server to be the primary node</description>
                   </valueHelp>
                   <valueHelp>
                     <format>secondary</format>
                     <description>Configure this server to be the secondary node</description>
                   </valueHelp>
                   <constraint>
                     <regex>(primary|secondary)</regex>
                   </constraint>
                   <constraintErrorMessage>Invalid DHCP failover peer status</constraintErrorMessage>
                 </properties>
               </leafNode>
             </children>
           </node>
           <leafNode name="global-parameters">
             <properties>
-              <help>Additional global parameters for DHCP server. You must
-                use the syntax of dhcpd.conf in this text-field. Using this
-                without proper knowledge may result in a crashed DHCP server.
-                Check system log to look for errors.</help>
+              <help>Additional global parameters for DHCP server. You must use the syntax of dhcpd.conf in this text-field. Using this without proper knowledge may result in a crashed DHCP server. Check system log to look for errors.</help>
               <multi/>
             </properties>
           </leafNode>
           <leafNode name="hostfile-update">
             <properties>
               <help>Updating /etc/hosts file (per client lease)</help>
               <valueless/>
             </properties>
           </leafNode>
           <leafNode name="host-decl-name">
             <properties>
               <help>Use host declaration name for forward DNS name</help>
               <valueless/>
             </properties>
           </leafNode>
           #include <include/listen-address-ipv4.xml.i>
           <tagNode name="shared-network-name">
             <properties>
               <help>Name of DHCP shared network</help>
               <constraint>
                 <regex>[-_a-zA-Z0-9.]+</regex>
               </constraint>
               <constraintErrorMessage>Invalid shared network name. May only contain letters, numbers and .-_</constraintErrorMessage>
             </properties>
             <children>
               <leafNode name="authoritative">
                 <properties>
                   <help>Option to make DHCP server authoritative for this physical network</help>
                   <valueless/>
                 </properties>
               </leafNode>
               #include <include/dhcp/domain-name.xml.i>
               #include <include/dhcp/domain-search.xml.i>
               #include <include/dhcp/ntp-server.xml.i>
               #include <include/dhcp/ping-check.xml.i>
               #include <include/generic-description.xml.i>
               #include <include/generic-disable-node.xml.i>
               #include <include/name-server-ipv4.xml.i>
               <leafNode name="shared-network-parameters">
                 <properties>
-                  <help>Additional shared-network parameters for DHCP server.
-                You must use the syntax of dhcpd.conf in this text-field.
-                Using this without proper knowledge may result in a crashed
-                DHCP server. Check system log to look for errors.</help>
+                  <help>Additional shared-network parameters for DHCP server. You must use the syntax of dhcpd.conf in this text-field. Using this without proper knowledge may result in a crashed DHCP server. Check system log to look for errors.</help>
                   <multi/>
                 </properties>
               </leafNode>
               <tagNode name="subnet">
                 <properties>
                   <help>DHCP subnet for shared network</help>
                   <valueHelp>
                     <format>ipv4net</format>
                     <description>IPv4 address and prefix length</description>
                   </valueHelp>
                   <constraint>
                     <validator name="ipv4-prefix"/>
                   </constraint>
                   <constraintErrorMessage>Invalid IPv4 subnet definition</constraintErrorMessage>
                 </properties>
                 <children>
                   <leafNode name="bootfile-name">
                     <properties>
                       <help>Bootstrap file name</help>
                       <constraint>
                         <regex>[-_a-zA-Z0-9./]+</regex>
                       </constraint>
                     </properties>
                   </leafNode>
                   <leafNode name="bootfile-server">
                     <properties>
                       <help>Server from which the initial boot file is to be loaded</help>
                       <valueHelp>
                         <format>ipv4</format>
                         <description>Bootfile server IPv4 address</description>
                       </valueHelp>
                       <valueHelp>
                         <format>hostname</format>
                         <description>Bootfile server FQDN</description>
                       </valueHelp>
                       <constraint>
                         <validator name="ipv4-address"/>
                         <validator name="fqdn"/>
                       </constraint>
                     </properties>
                   </leafNode>
                   <leafNode name="bootfile-size">
                     <properties>
                       <help>Bootstrap file size</help>
                       <valueHelp>
                         <format>u32:1-16</format>
                         <description>Bootstrap file size in 512 byte blocks</description>
                       </valueHelp>
                       <constraint>
                         <validator name="numeric" argument="--range 1-16"/>
                       </constraint>
                     </properties>
                   </leafNode>
                   <leafNode name="client-prefix-length">
                     <properties>
                       <help>Specifies the clients subnet mask as per RFC 950. If unset, subnet declaration is used.</help>
                       <valueHelp>
                         <format>u32:0-32</format>
                         <description>DHCP client prefix length must be 0 to 32</description>
                       </valueHelp>
                       <constraint>
                         <validator name="numeric" argument="--range 0-32"/>
                       </constraint>
                       <constraintErrorMessage>DHCP client prefix length must be 0 to 32</constraintErrorMessage>
                     </properties>
                   </leafNode>
                   <leafNode name="default-router">
                     <properties>
                       <help>IP address of default router</help>
                       <valueHelp>
                         <format>ipv4</format>
                         <description>Default router IPv4 address</description>
                       </valueHelp>
                       <constraint>
                         <validator name="ipv4-address"/>
                       </constraint>
                     </properties>
                   </leafNode>
                   #include <include/dhcp/domain-name.xml.i>
                   #include <include/dhcp/domain-search.xml.i>
                   #include <include/generic-description.xml.i>
                   #include <include/name-server-ipv4.xml.i>
                   <leafNode name="enable-failover">
                     <properties>
                       <help>Enable DHCP failover support for this subnet</help>
                       <valueless/>
                     </properties>
                   </leafNode>
                   <leafNode name="exclude">
                     <properties>
                       <help>IP address to exclude from DHCP lease range</help>
                       <valueHelp>
                         <format>ipv4</format>
                         <description>IPv4 address to exclude from lease range</description>
                       </valueHelp>
                       <constraint>
                         <validator name="ipv4-address"/>
                       </constraint>
                       <multi/>
                     </properties>
                   </leafNode>
                   <leafNode name="ip-forwarding">
                     <properties>
                       <help>Enable IP forwarding on client</help>
                       <valueless/>
                     </properties>
                   </leafNode>
                   <leafNode name="lease">
                     <properties>
                       <help>Lease timeout in seconds</help>
                       <valueHelp>
                         <format>u32</format>
                         <description>DHCP lease time in seconds</description>
                       </valueHelp>
                       <constraint>
                         <validator name="numeric" argument="--range 0-4294967295"/>
                       </constraint>
                       <constraintErrorMessage>DHCP lease time must be between 0 and 4294967295 (49 days)</constraintErrorMessage>
                     </properties>
                     <defaultValue>86400</defaultValue>
                   </leafNode>
                   #include <include/dhcp/ntp-server.xml.i>
                   #include <include/dhcp/ping-check.xml.i>
                   <leafNode name="pop-server">
                     <properties>
                       <help>IP address of POP3 server</help>
                       <valueHelp>
                         <format>ipv4</format>
                         <description>POP3 server IPv4 address</description>
                       </valueHelp>
                       <constraint>
                         <validator name="ipv4-address"/>
                       </constraint>
                       <multi/>
                     </properties>
                   </leafNode>
                   <leafNode name="server-identifier">
                     <properties>
                       <help>Address for DHCP server identifier</help>
                       <valueHelp>
                         <format>ipv4</format>
                         <description>DHCP server identifier IPv4 address</description>
                       </valueHelp>
                       <constraint>
                         <validator name="ipv4-address"/>
                       </constraint>
                     </properties>
                   </leafNode>
                   <leafNode name="smtp-server">
                     <properties>
                       <help>IP address of SMTP server</help>
                       <valueHelp>
                         <format>ipv4</format>
                         <description>SMTP server IPv4 address</description>
                       </valueHelp>
                       <constraint>
                         <validator name="ipv4-address"/>
                       </constraint>
                       <multi/>
                     </properties>
                   </leafNode>
                   <tagNode name="range">
                     <properties>
                       <help>DHCP lease range</help>
                       <constraint>
                         <regex>[-_a-zA-Z0-9.]+</regex>
                       </constraint>
                       <constraintErrorMessage>Invalid range name, may only be alphanumeric, dot and hyphen</constraintErrorMessage>
                     </properties>
                     <children>
                       <leafNode name="start">
                         <properties>
                           <help>First IP address for DHCP lease range</help>
                           <valueHelp>
                             <format>ipv4</format>
                             <description>IPv4 start address of pool</description>
                           </valueHelp>
                           <constraint>
                             <validator name="ipv4-address"/>
                           </constraint>
                         </properties>
                       </leafNode>
                       <leafNode name="stop">
                         <properties>
                           <help>Last IP address for DHCP lease range</help>
                           <valueHelp>
                             <format>ipv4</format>
                             <description>IPv4 end address of pool</description>
                           </valueHelp>
                           <constraint>
                             <validator name="ipv4-address"/>
                           </constraint>
                         </properties>
                       </leafNode>
                     </children>
                   </tagNode>
                   <tagNode name="static-mapping">
                     <properties>
                       <help>Name of static mapping</help>
                       <constraint>
                         <regex>[-_a-zA-Z0-9.]+</regex>
                       </constraint>
                       <constraintErrorMessage>Invalid static mapping name, may only be alphanumeric, dot and hyphen</constraintErrorMessage>
                     </properties>
                     <children>
                       #include <include/generic-disable-node.xml.i>
                       <leafNode name="ip-address">
                         <properties>
                           <help>Fixed IP address of static mapping</help>
                           <valueHelp>
                             <format>ipv4</format>
                             <description>IPv4 address used in static mapping</description>
                           </valueHelp>
                           <constraint>
                             <validator name="ipv4-address"/>
                           </constraint>
                         </properties>
                       </leafNode>
                       <leafNode name="mac-address">
                         <properties>
                           <help>Media Access Control (MAC) address</help>
                           <valueHelp>
                             <format>macaddr</format>
                             <description>Hardware (MAC) address</description>
                           </valueHelp>
                           <constraint>
                             <validator name="mac-address"/>
                           </constraint>
                         </properties>
                       </leafNode>
                       <leafNode name="static-mapping-parameters">
                         <properties>
-                          <help>Additional static-mapping parameters for DHCP server.
-                Will be placed inside the "host" block of the mapping.
-                You must use the syntax of dhcpd.conf in this text-field.
-                Using this without proper knowledge may result in a crashed
-                DHCP server. Check system log to look for errors.</help>
+                          <help>Additional static-mapping parameters for DHCP server. Will be placed inside the "host" block of the mapping. You must use the syntax of dhcpd.conf in this text-field. Using this without proper knowledge may result in a crashed DHCP server. Check system log to look for errors.</help>
                           <multi/>
                         </properties>
                       </leafNode>
                     </children>
                   </tagNode>
                   <tagNode name="static-route">
                     <properties>
                       <help>Classless static route destination subnet</help>
                       <valueHelp>
                         <format>ipv4net</format>
                         <description>IPv4 address and prefix length</description>
                       </valueHelp>
                       <constraint>
                         <validator name="ipv4-prefix"/>
                       </constraint>
                     </properties>
                     <children>
                       <leafNode name="next-hop">
                         <properties>
                           <help>IP address of router to be used to reach the destination subnet</help>
                           <valueHelp>
                             <format>ipv4</format>
                             <description>IPv4 address of router</description>
                           </valueHelp>
                           <constraint>
                             <validator name="ip-address"/>
                           </constraint>
                         </properties>
                       </leafNode>
                     </children>
                   </tagNode >
                   <leafNode name="subnet-parameters">
                     <properties>
-                      <help>Additional subnet parameters for DHCP server. You must
-                use the syntax of dhcpd.conf in this text-field. Using this
-                without proper knowledge may result in a crashed DHCP server.
-                Check system log to look for errors.</help>
+                      <help>Additional subnet parameters for DHCP server. You must use the syntax of dhcpd.conf in this text-field. Using this without proper knowledge may result in a crashed DHCP server. Check system log to look for errors.</help>
                       <multi/>
                     </properties>
                   </leafNode>
                   <leafNode name="tftp-server-name">
                     <properties>
                       <help>TFTP server name</help>
                       <valueHelp>
                         <format>ipv4</format>
                         <description>TFTP server IPv4 address</description>
                       </valueHelp>
                       <valueHelp>
                         <format>hostname</format>
                         <description>TFTP server FQDN</description>
                       </valueHelp>
                       <constraint>
                         <validator name="ipv4-address"/>
                         <validator name="fqdn"/>
                       </constraint>
                     </properties>
                   </leafNode>
                   <leafNode name="time-offset">
                     <properties>
                       <help>Client subnet offset in seconds from Coordinated Universal Time (UTC)</help>
                       <valueHelp>
                         <format>[-]N</format>
                         <description>Time offset (number, may be negative)</description>
                       </valueHelp>
                       <constraint>
                         <regex>-?[0-9]+</regex>
                       </constraint>
                       <constraintErrorMessage>Invalid time offset value</constraintErrorMessage>
                     </properties>
                   </leafNode>
                   <leafNode name="time-server">
                     <properties>
                       <help>IP address of time server</help>
                       <valueHelp>
                         <format>ipv4</format>
                         <description>Time server IPv4 address</description>
                       </valueHelp>
                       <constraint>
                         <validator name="ipv4-address"/>
                       </constraint>
                       <multi/>
                     </properties>
                   </leafNode>
                   <node name="vendor-option">
                     <properties>
                       <help>Vendor Specific Options</help>
                     </properties>
                     <children>
                       <node name="ubiquiti">
                         <properties>
                           <help>Ubiquiti specific parameters</help>
                         </properties>
                         <children>
                           <leafNode name="unifi-controller">
                             <properties>
                               <help>Address of UniFi controller</help>
                               <valueHelp>
                                 <format>ipv4</format>
                                 <description>IP address of UniFi controller</description>
                               </valueHelp>
                               <constraint>
                                 <validator name="ipv4-address"/>
                               </constraint>
                             </properties>
                           </leafNode>
                         </children>
                       </node>
                     </children>
                   </node>
                   <leafNode name="wins-server">
                     <properties>
                       <help>IP address for Windows Internet Name Service (WINS) server</help>
                       <valueHelp>
                         <format>ipv4</format>
                         <description>WINS server IPv4 address</description>
                       </valueHelp>
                       <constraint>
                         <validator name="ipv4-address"/>
                       </constraint>
                       <multi/>
                     </properties>
                   </leafNode>
                   <leafNode name="wpad-url">
                     <properties>
                       <help>Web Proxy Autodiscovery (WPAD) URL</help>
                     </properties>
                   </leafNode>
                 </children>
               </tagNode>
             </children>
           </tagNode>
         </children>
       </node>
     </children>
   </node>
 </interfaceDefinition>
diff --git a/interface-definitions/interfaces-openvpn.xml.in b/interface-definitions/interfaces-openvpn.xml.in
index bfad6d70f..f1cbf8468 100644
--- a/interface-definitions/interfaces-openvpn.xml.in
+++ b/interface-definitions/interfaces-openvpn.xml.in
@@ -1,827 +1,821 @@
 <?xml version="1.0"?>
 <interfaceDefinition>
   <node name="interfaces">
     <children>
       <tagNode name="openvpn" owner="${vyos_conf_scripts_dir}/interfaces-openvpn.py">
         <properties>
           <help>OpenVPN Tunnel Interface</help>
           <priority>460</priority>
           <constraint>
             <regex>vtun[0-9]+</regex>
           </constraint>
           <constraintErrorMessage>OpenVPN tunnel interface must be named vtunN</constraintErrorMessage>
           <valueHelp>
             <format>vtunN</format>
             <description>OpenVPN interface name</description>
           </valueHelp>
         </properties>
         <children>
           <node name="authentication">
             <properties>
               <help>Authentication options</help>
             </properties>
             <children>
               <leafNode name="password">
                 <properties>
                   <help>OpenVPN password used for authentication</help>
                 </properties>
               </leafNode>
               <leafNode name="username">
                 <properties>
                   <help>OpenVPN username used for authentication</help>
                 </properties>
               </leafNode>
             </children>
           </node>
           #include <include/interface/description.xml.i>
           #include <include/interface/interface-firewall.xml.i>
           #include <include/interface/interface-policy.xml.i>
           <leafNode name="device-type">
             <properties>
               <help>OpenVPN interface device-type</help>
               <completionHelp>
                 <list>tun tap</list>
               </completionHelp>
               <valueHelp>
                 <format>tun</format>
                 <description>TUN device, required for OSI layer 3</description>
               </valueHelp>
               <valueHelp>
                 <format>tap</format>
                 <description>TAP device, required for OSI layer 2</description>
               </valueHelp>
               <constraint>
                 <regex>(tun|tap)</regex>
               </constraint>
             </properties>
             <defaultValue>tun</defaultValue>
           </leafNode>
           #include <include/interface/disable.xml.i>
           <node name="encryption">
             <properties>
               <help>Data Encryption settings</help>
             </properties>
             <children>
               <leafNode name="cipher">
                 <properties>
                   <help>Standard Data Encryption Algorithm</help>
                   <completionHelp>
                     <list>none des 3des bf128 bf256 aes128 aes128gcm aes192 aes192gcm aes256 aes256gcm</list>
                   </completionHelp>
                   <valueHelp>
                     <format>none</format>
                     <description>Disable encryption</description>
                   </valueHelp>
                   <valueHelp>
                     <format>des</format>
                     <description>DES algorithm</description>
                   </valueHelp>
                   <valueHelp>
                     <format>3des</format>
                     <description>DES algorithm with triple encryption</description>
                   </valueHelp>
                   <valueHelp>
                     <format>bf128</format>
                     <description>Blowfish algorithm with 128-bit key</description>
                   </valueHelp>
                   <valueHelp>
                     <format>bf256</format>
                     <description>Blowfish algorithm with 256-bit key</description>
                   </valueHelp>
                   <valueHelp>
                     <format>aes128</format>
                     <description>AES algorithm with 128-bit key CBC</description>
                   </valueHelp>
                   <valueHelp>
                     <format>aes128gcm</format>
                     <description>AES algorithm with 128-bit key GCM</description>
                   </valueHelp>
                   <valueHelp>
                     <format>aes192</format>
                     <description>AES algorithm with 192-bit key CBC</description>
                   </valueHelp>
                   <valueHelp>
                     <format>aes192gcm</format>
                     <description>AES algorithm with 192-bit key GCM</description>
                   </valueHelp>
                   <valueHelp>
                     <format>aes256</format>
                     <description>AES algorithm with 256-bit key CBC</description>
                   </valueHelp>
                   <valueHelp>
                     <format>aes256gcm</format>
                     <description>AES algorithm with 256-bit key GCM</description>
                   </valueHelp>
                   <constraint>
                     <regex>(none|des|3des|bf128|bf256|aes128|aes128gcm|aes192|aes192gcm|aes256|aes256gcm)</regex>
                   </constraint>
                 </properties>
               </leafNode>
               <leafNode name="ncp-ciphers">
                 <properties>
                   <help>Cipher negotiation list for use in server or client mode</help>
                   <completionHelp>
                     <list>none des 3des aes128 aes128gcm aes192 aes192gcm aes256 aes256gcm</list>
                   </completionHelp>
                   <valueHelp>
                     <format>none</format>
                     <description>Disable encryption</description>
                   </valueHelp>
                   <valueHelp>
                     <format>des</format>
                     <description>DES algorithm</description>
                   </valueHelp>
                   <valueHelp>
                     <format>3des</format>
                     <description>DES algorithm with triple encryption</description>
                   </valueHelp>
                   <valueHelp>
                     <format>aes128</format>
                     <description>AES algorithm with 128-bit key CBC</description>
                   </valueHelp>
                   <valueHelp>
                     <format>aes128gcm</format>
                     <description>AES algorithm with 128-bit key GCM</description>
                   </valueHelp>
                   <valueHelp>
                     <format>aes192</format>
                     <description>AES algorithm with 192-bit key CBC</description>
                   </valueHelp>
                   <valueHelp>
                     <format>aes192gcm</format>
                     <description>AES algorithm with 192-bit key GCM</description>
                   </valueHelp>
                   <valueHelp>
                     <format>aes256</format>
                     <description>AES algorithm with 256-bit key CBC</description>
                   </valueHelp>
                   <valueHelp>
                     <format>aes256gcm</format>
                     <description>AES algorithm with 256-bit key GCM</description>
                   </valueHelp>
                   <constraint>
                     <regex>(none|des|3des|aes128|aes128gcm|aes192|aes192gcm|aes256|aes256gcm)</regex>
                   </constraint>
                   <multi/>
                 </properties>
               </leafNode>
             </children>
           </node>
           #include <include/interface/ipv4-options.xml.i>
           #include <include/interface/ipv6-options.xml.i>
           #include <include/interface/mirror.xml.i>
           <leafNode name="hash">
             <properties>
               <help>Hashing Algorithm</help>
               <completionHelp>
                 <list>md5 sha1 sha256 sha384 sha512</list>
               </completionHelp>
               <valueHelp>
                 <format>md5</format>
                 <description>MD5 algorithm</description>
               </valueHelp>
               <valueHelp>
                 <format>sha1</format>
                 <description>SHA-1 algorithm</description>
               </valueHelp>
               <valueHelp>
                 <format>sha256</format>
                 <description>SHA-256 algorithm</description>
               </valueHelp>
               <valueHelp>
                 <format>sha384</format>
                 <description>SHA-384 algorithm</description>
               </valueHelp>
               <valueHelp>
                 <format>sha512</format>
                 <description>SHA-512 algorithm</description>
               </valueHelp>
               <constraint>
                 <regex>(md5|sha1|sha256|sha384|sha512)</regex>
               </constraint>
             </properties>
           </leafNode>
           <node name="keep-alive">
             <properties>
               <help>Keepalive helper options</help>
             </properties>
             <children>
               <leafNode name="failure-count">
                 <properties>
                   <help>Maximum number of keepalive packet failures</help>
                   <valueHelp>
                     <format>u32:0-1000</format>
                     <description>Maximum number of keepalive packet failures</description>
                   </valueHelp>
                   <constraint>
                     <validator name="numeric" argument="--range 0-1000"/>
                   </constraint>
                 </properties>
                 <defaultValue>60</defaultValue>
               </leafNode>
               <leafNode name="interval">
                 <properties>
                   <help>Keepalive packet interval in seconds</help>
                   <valueHelp>
                     <format>u32:0-600</format>
                     <description>Keepalive packet interval (seconds)</description>
                   </valueHelp>
                   <constraint>
                     <validator name="numeric" argument="--range 0-600"/>
                   </constraint>
                 </properties>
                 <defaultValue>10</defaultValue>
               </leafNode>
             </children>
           </node>
           <tagNode name="local-address">
             <properties>
               <help>Local IP address of tunnel (IPv4 or IPv6)</help>
               <constraint>
                 <validator name="ip-address"/>
               </constraint>
             </properties>
             <children>
               <leafNode name="subnet-mask">
                 <properties>
                   <help>Subnet-mask for local IP address of tunnel (IPv4 only)</help>
                   <constraint>
                     <validator name="ipv4-address"/>
                   </constraint>
                 </properties>
               </leafNode>
             </children>
           </tagNode>
           <leafNode name="local-host">
             <properties>
               <help>Local IP address to accept connections (all if not set)</help>
               <valueHelp>
                 <format>ipv4</format>
                 <description>Local IPv4 address</description>
               </valueHelp>
               <valueHelp>
                 <format>ipv6</format>
                 <description>Local IPv6 address</description>
               </valueHelp>
               <constraint>
                 <validator name="ip-address"/>
               </constraint>
             </properties>
           </leafNode>
           <leafNode name="local-port">
             <properties>
               <help>Local port number to accept connections</help>
               <valueHelp>
                 <format>u32:1-65535</format>
                 <description>Numeric IP port</description>
               </valueHelp>
               <constraint>
                 <validator name="numeric" argument="--range 1-65535"/>
               </constraint>
             </properties>
           </leafNode>
           <leafNode name="mode">
             <properties>
               <help>OpenVPN mode of operation</help>
               <completionHelp>
                 <list>site-to-site client server</list>
               </completionHelp>
               <valueHelp>
                 <format>site-to-site</format>
                 <description>Site-to-site mode</description>
               </valueHelp>
               <valueHelp>
                 <format>client</format>
                 <description>Client in client-server mode</description>
               </valueHelp>
               <valueHelp>
                 <format>server</format>
                 <description>Server in client-server mode</description>
               </valueHelp>
               <constraint>
                 <regex>(site-to-site|client|server)</regex>
               </constraint>
             </properties>
           </leafNode>
           <leafNode name="openvpn-option">
             <properties>
-              <help>Additional OpenVPN options. You must
-                use the syntax of openvpn.conf in this text-field. Using this
-                without proper knowledge may result in a crashed OpenVPN server.
-                Check system log to look for errors.</help>
+              <help>Additional OpenVPN options. You must use the syntax of openvpn.conf in this text-field. Using this without proper knowledge may result in a crashed OpenVPN server. Check system log to look for errors.</help>
               <multi/>
             </properties>
           </leafNode>
           <leafNode name="persistent-tunnel">
             <properties>
               <help>Do not close and reopen interface (TUN/TAP device) on client restarts</help>
               <valueless/>
             </properties>
           </leafNode>
           <leafNode name="protocol">
             <properties>
               <help>OpenVPN communication protocol</help>
               <completionHelp>
                 <list>udp tcp-passive tcp-active</list>
               </completionHelp>
               <valueHelp>
                 <format>udp</format>
                 <description>UDP</description>
               </valueHelp>
               <valueHelp>
                 <format>tcp-passive</format>
                 <description>TCP and accepts connections passively</description>
               </valueHelp>
               <valueHelp>
                 <format>tcp-active</format>
                 <description>TCP and initiates connections actively</description>
               </valueHelp>
               <constraint>
                 <regex>(udp|tcp-passive|tcp-active)</regex>
               </constraint>
             </properties>
             <defaultValue>udp</defaultValue>
           </leafNode>
           <leafNode name="remote-address">
             <properties>
               <help>IP address of remote end of tunnel</help>
               <valueHelp>
                 <format>ipv4</format>
                 <description>Remote end IPv4 address</description>
               </valueHelp>
               <valueHelp>
                 <format>ipv6</format>
                 <description>Remote end IPv6 address</description>
               </valueHelp>
               <constraint>
                 <validator name="ipv4-address"/>
                 <validator name="ipv6-address"/>
               </constraint>
               <multi/>
             </properties>
           </leafNode>
           <leafNode name="remote-host">
             <properties>
               <help>Remote host to connect to (dynamic if not set)</help>
               <valueHelp>
                 <format>ipv4</format>
                 <description>IPv4 address of remote host</description>
               </valueHelp>
               <valueHelp>
                 <format>ipv6</format>
                 <description>IPv6 address of remote host</description>
               </valueHelp>
               <valueHelp>
                 <format>txt</format>
                 <description>Hostname of remote host</description>
               </valueHelp>
               <multi/>
             </properties>
           </leafNode>
           <leafNode name="remote-port">
             <properties>
               <help>Remote port number to connect to</help>
               <valueHelp>
                 <format>u32:1-65535</format>
                 <description>Numeric IP port</description>
               </valueHelp>
               <constraint>
                 <validator name="numeric" argument="--range 1-65535"/>
               </constraint>
             </properties>
           </leafNode>
           <node name="replace-default-route">
             <properties>
               <help>OpenVPN tunnel to be used as the default route</help>
             </properties>
             <children>
               <leafNode name="local">
                 <properties>
                   <help>Tunnel endpoints are on the same subnet</help>
                 </properties>
               </leafNode>
             </children>
           </node>
           <node name="server">
             <properties>
               <help>Server-mode options</help>
             </properties>
             <children>
               <tagNode name="client">
                 <properties>
                   <help>Client-specific settings</help>
                   <valueHelp>
                     <format>name</format>
                     <description>Client common-name in the certificate</description>
                   </valueHelp>
                 </properties>
                 <children>
                   #include <include/generic-disable-node.xml.i>
                   <leafNode name="ip">
                     <properties>
                       <help>IP address of the client</help>
                       <valueHelp>
                         <format>ipv4</format>
                         <description>Client IPv4 address</description>
                       </valueHelp>
                       <valueHelp>
                         <format>ipv6</format>
                         <description>Client IPv6 address</description>
                       </valueHelp>
                       <constraint>
                         <validator name="ip-address"/>
                       </constraint>
                       <multi/>
                     </properties>
                   </leafNode>
                   <leafNode name="push-route">
                     <properties>
                       <help>Route to be pushed to the client</help>
                       <valueHelp>
                         <format>ipv4net</format>
                         <description>IPv4 network and prefix length</description>
                       </valueHelp>
                       <valueHelp>
                         <format>ipv6net</format>
                         <description>IPv6 network and prefix length</description>
                       </valueHelp>
                       <constraint>
                         <validator name="ip-prefix"/>
                       </constraint>
                       <multi/>
                     </properties>
                   </leafNode>
                   <leafNode name="subnet">
                     <properties>
                       <help>Subnet belonging to the client (iroute)</help>
                       <valueHelp>
                         <format>ipv4net</format>
                         <description>IPv4 network and prefix length belonging to the client</description>
                       </valueHelp>
                       <valueHelp>
                         <format>ipv6net</format>
                         <description>IPv6 network and prefix length belonging to the client</description>
                       </valueHelp>
                       <constraint>
                         <validator name="ip-prefix"/>
                       </constraint>
                       <multi/>
                     </properties>
                   </leafNode>
                 </children>
               </tagNode>
               <node name="client-ip-pool">
                 <properties>
                   <help>Pool of client IPv4 addresses</help>
                 </properties>
                 <children>
                   #include <include/generic-disable-node.xml.i>
                   <leafNode name="start">
                     <properties>
                       <help>First IP address in the pool</help>
                       <constraint>
                         <validator name="ipv4-address"/>
                       </constraint>
                       <valueHelp>
                         <format>ipv4</format>
                         <description>IPv4 address</description>
                       </valueHelp>
                     </properties>
                   </leafNode>
                   <leafNode name="stop">
                     <properties>
                       <help>Last IP address in the pool</help>
                       <constraint>
                         <validator name="ipv4-address"/>
                       </constraint>
                       <valueHelp>
                         <format>ipv4</format>
                         <description>IPv4 address</description>
                       </valueHelp>
                     </properties>
                   </leafNode>
                   <leafNode name="subnet-mask">
                     <properties>
-                      <help>Subnet mask pushed to dynamic clients.
-                If not set the server subnet mask will be used.
-                Only used with topology subnet or device type tap.
-                Not used with bridged interfaces.</help>
+                      <help>Subnet mask pushed to dynamic clients. If not set the server subnet mask will be used. Only used with topology subnet or device type tap. Not used with bridged interfaces.</help>
                       <constraint>
                         <validator name="ipv4-address"/>
                       </constraint>
                       <valueHelp>
                         <format>ipv4</format>
                         <description>IPv4 subnet mask</description>
                       </valueHelp>
                     </properties>
                   </leafNode>
                 </children>
               </node>
               <node name="client-ipv6-pool">
                 <properties>
                   <help>Pool of client IPv6 addresses</help>
                 </properties>
                 <children>
                   <leafNode name="base">
                     <properties>
                       <help>Client IPv6 pool base address with optional prefix length</help>
                       <valueHelp>
                         <format>ipv6net</format>
                         <description>Client IPv6 pool base address with optional prefix length (defaults: base = server subnet + 0x1000, prefix length = server prefix length)</description>
                       </valueHelp>
                       <constraint>
                         <validator name="ipv6"/>
                       </constraint>
                     </properties>
                   </leafNode>
                   #include <include/generic-disable-node.xml.i>
                 </children>
               </node>
               <leafNode name="domain-name">
                 <properties>
                   <help>DNS suffix to be pushed to all clients</help>
                   <valueHelp>
                     <format>txt</format>
                     <description>Domain Name Server suffix</description>
                   </valueHelp>
                 </properties>
               </leafNode>
               <leafNode name="max-connections">
                 <properties>
                   <help>Number of maximum client connections</help>
                   <valueHelp>
                     <format>u32:1-4096</format>
                     <description>Number of concurrent clients</description>
                   </valueHelp>
                   <constraint>
                     <validator name="numeric" argument="--range 1-4096"/>
                   </constraint>
                 </properties>
               </leafNode>
               #include <include/name-server-ipv4-ipv6.xml.i>
               <tagNode name="push-route">
                 <properties>
                   <help>Route to be pushed to all clients</help>
                   <valueHelp>
                     <format>ipv4net</format>
                     <description>IPv4 network and prefix length</description>
                   </valueHelp>
                   <valueHelp>
                     <format>ipv6net</format>
                     <description>IPv6 network and prefix length</description>
                   </valueHelp>
                   <constraint>
                     <validator name="ip-prefix"/>
                   </constraint>
                 </properties>
                 <children>
                   <leafNode name="metric">
                     <properties>
                       <help>Set metric for this route</help>
                       <valueHelp>
                         <format>u32:0-4294967295</format>
                         <description>Metric for this route</description>
                       </valueHelp>
                       <constraint>
                         <validator name="numeric" argument="--range 0-4294967295"/>
                       </constraint>
                     </properties>
                     <defaultValue>0</defaultValue>
                   </leafNode>
                 </children>
               </tagNode>
               <leafNode name="reject-unconfigured-clients">
                 <properties>
                   <help>Reject connections from clients that are not explicitly configured</help>
                   <valueless/>
                 </properties>
               </leafNode>
               <leafNode name="subnet">
                 <properties>
                   <help>Server-mode subnet (from which client IPs are allocated)</help>
                   <valueHelp>
                     <format>ipv4net</format>
                     <description>IPv4 network and prefix length</description>
                   </valueHelp>
                   <valueHelp>
                     <format>ipv6net</format>
                     <description>IPv6 network and prefix length</description>
                   </valueHelp>
                   <constraint>
                     <validator name="ip-prefix"/>
                   </constraint>
                   <multi/>
                 </properties>
               </leafNode>
               <leafNode name="topology">
                 <properties>
                   <help>Topology for clients</help>
                   <completionHelp>
                     <list>net30 point-to-point subnet</list>
                   </completionHelp>
                   <valueHelp>
                     <format>net30</format>
                     <description>net30 topology</description>
                   </valueHelp>
                   <valueHelp>
                     <format>point-to-point</format>
                     <description>Point-to-point topology</description>
                   </valueHelp>
                   <valueHelp>
                     <format>subnet</format>
                     <description>Subnet topology</description>
                   </valueHelp>
                   <constraint>
                     <regex>(subnet|point-to-point|net30)</regex>
                   </constraint>
                 </properties>
                 <defaultValue>net30</defaultValue>
               </leafNode>
               <node name="mfa">
                 <properties>
                   <help>multi-factor authentication</help>
                 </properties>
                 <children>
                   <node name="totp">
                     <properties>
                       <help>Time-based one-time passwords</help>
                     </properties>
                     <children>
                       <leafNode name="slop">
                         <properties>
                           <help>Maximum allowed clock slop in seconds</help>
                           <valueHelp>
                             <format>1-65535</format>
                             <description>Seconds</description>
                           </valueHelp>
                           <constraint>
                             <validator name="numeric" argument="--range 1-65535"/>
                           </constraint>
                         </properties>
                         <defaultValue>180</defaultValue>
                       </leafNode>
                       <leafNode name="drift">
                         <properties>
                           <help>Time drift in seconds</help>
                           <valueHelp>
                             <format>1-65535</format>
                             <description>Seconds</description>
                           </valueHelp>
                           <constraint>
                             <validator name="numeric" argument="--range 1-65535"/>
                           </constraint>
                         </properties>
                         <defaultValue>0</defaultValue>
                       </leafNode>
                       <leafNode name="step">
                         <properties>
                           <help>Step value for totp in seconds</help>
                           <valueHelp>
                             <format>1-65535</format>
                             <description>Seconds</description>
                           </valueHelp>
                           <constraint>
                             <validator name="numeric" argument="--range 1-65535"/>
                           </constraint>
                         </properties>
                         <defaultValue>30</defaultValue>
                       </leafNode>
                       <leafNode name="digits">
                         <properties>
                           <help>Number of digits to use for totp hash</help>
                           <valueHelp>
                             <format>1-65535</format>
                             <description>Seconds</description>
                           </valueHelp>
                           <constraint>
                             <validator name="numeric" argument="--range 1-65535"/>
                           </constraint>
                         </properties>
                         <defaultValue>6</defaultValue>
                       </leafNode>
                       <leafNode name="challenge">
                         <properties>
                           <help>Expect password as result of a challenge response protocol</help>
                           <completionHelp>
                             <list>disable enable</list>
                           </completionHelp>
                           <valueHelp>
                             <format>disable</format>
                             <description>Disable challenge-response</description>
                           </valueHelp>
                           <valueHelp>
                             <format>enable</format>
                             <description>Enable chalenge-response</description>
                           </valueHelp>
                           <constraint>
                             <regex>(disable|enable)</regex>
                           </constraint>
                         </properties>
                         <defaultValue>enable</defaultValue>
                       </leafNode>
                    </children>
                   </node>
                </children>
               </node>
             </children>
           </node>
           <leafNode name="shared-secret-key">
             <properties>
               <help>Secret key shared with remote end of tunnel</help>
               <completionHelp>
                 <path>pki openvpn shared-secret</path>
               </completionHelp>
             </properties>
           </leafNode>
           <node name="tls">
             <properties>
               <help>Transport Layer Security (TLS) options</help>
             </properties>
             <children>
               <leafNode name="auth-key">
                 <properties>
                   <help>TLS shared secret key for tls-auth</help>
                   <completionHelp>
                     <path>pki openvpn shared-secret</path>
                   </completionHelp>
                 </properties>
               </leafNode>
               #include <include/pki/certificate.xml.i>
               #include <include/pki/ca-certificate.xml.i>
               <leafNode name="dh-params">
                 <properties>
                   <help>Diffie Hellman parameters (server only)</help>
                   <completionHelp>
                     <path>pki dh</path>
                   </completionHelp>
                 </properties>
               </leafNode>
               <leafNode name="crypt-key">
                 <properties>
                   <help>Static key to use to authenticate control channel</help>
                   <completionHelp>
                     <path>pki openvpn shared-secret</path>
                   </completionHelp>
                 </properties>
               </leafNode>
               <leafNode name="tls-version-min">
                 <properties>
                   <help>Specify the minimum required TLS version</help>
                   <completionHelp>
                     <list>1.0 1.1 1.2 1.3</list>
                   </completionHelp>
                   <valueHelp>
                     <format>1.0</format>
                     <description>TLS v1.0</description>
                   </valueHelp>
                   <valueHelp>
                     <format>1.1</format>
                     <description>TLS v1.1</description>
                   </valueHelp>
                   <valueHelp>
                     <format>1.2</format>
                     <description>TLS v1.2</description>
                   </valueHelp>
                   <valueHelp>
                     <format>1.3</format>
                     <description>TLS v1.3</description>
                   </valueHelp>
                   <constraint>
                     <regex>(1.0|1.1|1.2|1.3)</regex>
                   </constraint>
                 </properties>
               </leafNode>
               <leafNode name="role">
                 <properties>
                   <help>TLS negotiation role</help>
                   <completionHelp>
                     <list>active passive</list>
                   </completionHelp>
                   <valueHelp>
                     <format>active</format>
                     <description>Initiate TLS negotiation actively</description>
                   </valueHelp>
                   <valueHelp>
                     <format>passive</format>
                     <description>Wait for incoming TLS connection</description>
                   </valueHelp>
                   <constraint>
                     <regex>(active|passive)</regex>
                   </constraint>
                 </properties>
               </leafNode>
             </children>
           </node>
           <leafNode name="use-lzo-compression">
             <properties>
               <help>Use fast LZO compression on this TUN/TAP interface</help>
               <valueless/>
             </properties>
           </leafNode>
           #include <include/interface/redirect.xml.i>
           #include <include/interface/vrf.xml.i>
         </children>
       </tagNode>
     </children>
   </node>
 </interfaceDefinition>
diff --git a/interface-definitions/interfaces-wireless.xml.in b/interface-definitions/interfaces-wireless.xml.in
index eb6107303..daee770a9 100644
--- a/interface-definitions/interfaces-wireless.xml.in
+++ b/interface-definitions/interfaces-wireless.xml.in
@@ -1,792 +1,790 @@
 <?xml version="1.0"?>
 <interfaceDefinition>
   <node name="interfaces">
     <children>
       <tagNode name="wireless" owner="${vyos_conf_scripts_dir}/interfaces-wireless.py">
         <properties>
           <help>Wireless (WiFi/WLAN) Network Interface</help>
           <priority>318</priority>
           <completionHelp>
             <script>cd /sys/class/net; if compgen -G "wlan*" > /dev/null; then ls -d wlan*; fi</script>
           </completionHelp>
           <constraint>
             <regex>wlan[0-9]+</regex>
           </constraint>
           <constraintErrorMessage>Wireless interface must be named wlanN</constraintErrorMessage>
           <valueHelp>
             <format>wlanN</format>
             <description>Wireless (WiFi/WLAN) interface name</description>
           </valueHelp>
         </properties>
         <children>
           #include <include/interface/address-ipv4-ipv6-dhcp.xml.i>
           #include <include/interface/interface-firewall.xml.i>
           #include <include/interface/interface-policy.xml.i>
           <node name="capabilities">
             <properties>
               <help>HT and VHT capabilities for your card</help>
             </properties>
             <children>
               <node name="ht">
                 <properties>
                   <help>HT (High Throughput) settings</help>
                 </properties>
                 <children>
                   <leafNode name="40mhz-incapable">
                     <properties>
                       <help>40MHz intolerance, use 20MHz only!</help>
                       <valueless/>
                     </properties>
                   </leafNode>
                   <leafNode name="auto-powersave">
                     <properties>
                       <help>Enable WMM-PS unscheduled automatic power aave delivery [U-APSD]</help>
                       <valueless/>
                     </properties>
                   </leafNode>
                   <leafNode name="channel-set-width">
                     <properties>
                       <help>Supported channel set width</help>
                       <completionHelp>
                         <list>ht20 ht40+ ht40-</list>
                       </completionHelp>
                       <valueHelp>
                         <format>ht20</format>
                         <description>Supported channel set width both 20 MHz only</description>
                       </valueHelp>
                       <valueHelp>
                         <format>ht40+</format>
                         <description>Supported channel set width both 20 MHz and 40 MHz with secondary channel above primary channel</description>
                       </valueHelp>
                       <valueHelp>
                         <format>ht40-</format>
                         <description>Supported channel set width both 20 MHz and 40 MHz with secondary channel below primary channel</description>
                       </valueHelp>
                       <constraint>
                         <regex>(ht20|ht40\+|ht40-)</regex>
                       </constraint>
                       <multi/>
                     </properties>
                   </leafNode>
                   <leafNode name="delayed-block-ack">
                     <properties>
                       <help>Enable HT-delayed block ack</help>
                       <valueless/>
                     </properties>
                   </leafNode>
                   <leafNode name="dsss-cck-40">
                     <properties>
                       <help>Enable DSSS_CCK-40</help>
                       <valueless/>
                     </properties>
                   </leafNode>
                   <leafNode name="greenfield">
                     <properties>
                       <help>Enable HT-greenfield</help>
                       <valueless/>
                     </properties>
                   </leafNode>
                   <leafNode name="ldpc">
                     <properties>
                       <help>Enable LDPC coding capability</help>
                       <valueless/>
                     </properties>
                   </leafNode>
                   <leafNode name="lsig-protection">
                     <properties>
                       <help>Enable L-SIG TXOP protection capability</help>
                       <valueless/>
                     </properties>
                   </leafNode>
                   <leafNode name="max-amsdu">
                     <properties>
                       <help>Set maximum A-MSDU length</help>
                       <completionHelp>
                         <list>3839 7935</list>
                       </completionHelp>
                       <valueHelp>
                         <format>3839</format>
                         <description>Set maximum A-MSDU length to 3839 octets</description>
                       </valueHelp>
                       <valueHelp>
                         <format>7935</format>
                         <description>Set maximum A-MSDU length to 7935 octets</description>
                       </valueHelp>
                       <constraint>
                         <regex>(3839|7935)</regex>
                       </constraint>
                     </properties>
                   </leafNode>
                   <leafNode name="short-gi">
                     <properties>
                       <help>Short GI capabilities</help>
                       <completionHelp>
                         <list>20 40</list>
                       </completionHelp>
                       <valueHelp>
                         <format>20</format>
                         <description>Short GI for 20 MHz</description>
                       </valueHelp>
                       <valueHelp>
                         <format>40</format>
                         <description>Short GI for 40 MHz</description>
                       </valueHelp>
                       <constraint>
                         <regex>(20|40)</regex>
                       </constraint>
                       <multi/>
                     </properties>
                   </leafNode>
                   <leafNode name="smps">
                     <properties>
                       <help>Spatial Multiplexing Power Save (SMPS) settings</help>
                       <completionHelp>
                         <list>static dynamic</list>
                       </completionHelp>
                       <valueHelp>
                         <format>static</format>
                         <description>STATIC Spatial Multiplexing (SM) Power Save</description>
                       </valueHelp>
                       <valueHelp>
                         <format>dynamic</format>
                         <description>DYNAMIC Spatial Multiplexing (SM) Power Save</description>
                       </valueHelp>
                       <constraint>
                         <regex>(static|dynamic)</regex>
                       </constraint>
                     </properties>
                   </leafNode>
                   <node name="stbc">
                     <properties>
                       <help>Support for sending and receiving PPDU using STBC (Space Time Block Coding)</help>
                     </properties>
                     <children>
                       <leafNode name="rx">
                         <properties>
                           <help>Enable receiving PPDU using STBC (Space Time Block Coding)</help>
                           <valueHelp>
                             <format>[1-3]+</format>
                             <description>Number of spacial streams that can use RX STBC</description>
                           </valueHelp>
                           <constraint>
                             <regex>[1-3]+</regex>
                           </constraint>
                           <constraintErrorMessage>Invalid capability item</constraintErrorMessage>
                         </properties>
                       </leafNode>
                       <leafNode name="tx">
                         <properties>
                           <help>Enable sending PPDU using STBC (Space Time Block Coding)</help>
                           <valueless/>
                         </properties>
                       </leafNode>
                     </children>
                   </node>
                 </children>
               </node>
               <leafNode name="require-ht">
                 <properties>
                   <help>Require stations to support HT PHY (reject association if they do not)</help>
                   <completionHelp>
                     <script>echo If you reject non-HT, you also disable 802.11g</script>
                   </completionHelp>
                   <valueless/>
                 </properties>
               </leafNode>
               <leafNode name="require-vht">
                 <properties>
                   <help>Require stations to support VHT PHY (reject association if they do not)</help>
                   <completionHelp>
                     <script>echo If you reject non-VHT, you also disable 802.11n</script>
                   </completionHelp>
                   <valueless/>
                 </properties>
               </leafNode>
               <node name="vht">
                 <properties>
                   <help>VHT (Very High Throughput) settings</help>
                 </properties>
                 <children>
                   <leafNode name="antenna-count">
                     <properties>
                       <help>Number of antennas on this card</help>
                       <valueHelp>
                         <format>u32:1-8</format>
                         <description>Number of antennas for this card</description>
                       </valueHelp>
                       <constraint>
                         <validator name="numeric" argument="--range 1-8"/>
                       </constraint>
                     </properties>
                   </leafNode>
                   <leafNode name="antenna-pattern-fixed">
                     <properties>
                       <help>Set if antenna pattern does not change during the lifetime of an association</help>
                       <valueless/>
                     </properties>
                   </leafNode>
                   <leafNode name="beamform">
                     <properties>
                       <help>Beamforming capabilities</help>
                       <completionHelp>
                         <list>single-user-beamformer single-user-beamformee multi-user-beamformer multi-user-beamformee</list>
                       </completionHelp>
                       <valueHelp>
                         <format>single-user-beamformer</format>
                         <description>Support for operation as single user beamformer</description>
                       </valueHelp>
                       <valueHelp>
                         <format>single-user-beamformee</format>
                         <description>Support for operation as single user beamformee</description>
                       </valueHelp>
                       <valueHelp>
                         <format>multi-user-beamformer</format>
                         <description>Support for operation as multi user beamformer</description>
                       </valueHelp>
                       <valueHelp>
                         <format>multi-user-beamformee</format>
                         <description>Support for operation as multi user beamformee</description>
                       </valueHelp>
                       <constraint>
                         <regex>(single-user-beamformer|single-user-beamformee|multi-user-beamformer|multi-user-beamformee)</regex>
                       </constraint>
                       <multi/>
                     </properties>
                   </leafNode>
                   <node name="center-channel-freq">
                     <properties>
                       <help>VHT operating channel center frequency</help>
                     </properties>
                     <children>
                       <leafNode name="freq-1">
                         <properties>
                           <help>VHT operating channel center frequency - center freq 1 (for use with 80, 80+80 and 160 modes)</help>
                           <valueHelp>
                             <format>u32:34-173</format>
                             <description>5Ghz (802.11 a/h/j/n/ac) center channel index (use 42 for primary 80MHz channel 36)</description>
                           </valueHelp>
                           <constraint>
                             <validator name="numeric" argument="--range 34-173"/>
                           </constraint>
                           <constraintErrorMessage>Channel center value must be between 34 and 173</constraintErrorMessage>
                         </properties>
                       </leafNode>
                       <leafNode name="freq-2">
                         <properties>
                           <help>VHT operating channel center frequency - center freq 2 (for use with the 80+80 mode)</help>
                           <valueHelp>
                             <format>u32:34-173</format>
                             <description>5Ghz (802.11 a/h/j/n/ac) center channel index (use 58 for primary 80MHz channel 52)</description>
                           </valueHelp>
                           <constraint>
                             <validator name="numeric" argument="--range 34-173"/>
                           </constraint>
                           <constraintErrorMessage>Channel center value must be between 34 and 173</constraintErrorMessage>
                         </properties>
                       </leafNode>
                     </children>
                   </node>
                   <leafNode name="channel-set-width">
                     <properties>
                       <help>VHT operating Channel width</help>
                       <completionHelp>
                         <list>0 1 2 3</list>
                       </completionHelp>
                       <valueHelp>
                         <format>0</format>
                         <description>20 or 40 MHz channel width</description>
                       </valueHelp>
                       <valueHelp>
                         <format>1</format>
                         <description>80 MHz channel width</description>
                       </valueHelp>
                       <valueHelp>
                         <format>2</format>
                         <description>160 MHz channel width</description>
                       </valueHelp>
                       <valueHelp>
                         <format>3</format>
                         <description>80+80 MHz channel width</description>
                       </valueHelp>
                       <constraint>
                         <validator name="numeric" argument="--range 0-3"/>
                       </constraint>
                     </properties>
                   </leafNode>
                   <leafNode name="ldpc">
                     <properties>
                       <help>Enable LDPC (Low Density Parity Check) coding capability</help>
                       <valueless/>
                     </properties>
                   </leafNode>
                   <leafNode name="link-adaptation">
                     <properties>
                       <help>VHT link adaptation capabilities</help>
                       <completionHelp>
                         <list>unsolicited both</list>
                       </completionHelp>
                       <valueHelp>
                         <format>unsolicited</format>
                         <description>Station provides only unsolicited VHT MFB</description>
                       </valueHelp>
                       <valueHelp>
                         <format>both</format>
                         <description>Station can provide VHT MFB in response to VHT MRQ and unsolicited VHT MFB</description>
                       </valueHelp>
                       <constraint>
                         <regex>(unsolicited|both)</regex>
                       </constraint>
                       <constraintErrorMessage>Invalid capability item</constraintErrorMessage>
                     </properties>
                   </leafNode>
                   <leafNode name="max-mpdu-exp">
                     <properties>
                       <help>Set the maximum length of A-MPDU pre-EOF padding that the station can receive</help>
                       <valueHelp>
                         <format>u32:0-7</format>
                         <description>Maximum length of A-MPDU pre-EOF padding = 2 pow(13 + x) -1 octets</description>
                       </valueHelp>
                       <constraint>
                         <validator name="numeric" argument="--range 0-7"/>
                       </constraint>
                     </properties>
                   </leafNode>
                   <leafNode name="max-mpdu">
                     <properties>
                       <help>Increase Maximum MPDU length to 7991 or 11454 octets (otherwise: 3895 octets)</help>
                       <completionHelp>
                         <list>7991 11454</list>
                       </completionHelp>
                       <valueHelp>
                         <format>7991</format>
                         <description>ncrease Maximum MPDU length to 7991 octets</description>
                       </valueHelp>
                       <valueHelp>
                         <format>11454</format>
                         <description>ncrease Maximum MPDU length to 11454 octets</description>
                       </valueHelp>
                       <constraint>
                         <regex>(7991|11454)</regex>
                       </constraint>
                     </properties>
                   </leafNode>
                   <leafNode name="short-gi">
                     <properties>
                       <help>Short GI capabilities</help>
                       <completionHelp>
                         <list>80 160</list>
                       </completionHelp>
                       <valueHelp>
                         <format>80</format>
                         <description>Short GI for 80 MHz</description>
                       </valueHelp>
                       <valueHelp>
                         <format>160</format>
                         <description>Short GI for 160 MHz</description>
                       </valueHelp>
                       <constraint>
                         <regex>(80|160)</regex>
                       </constraint>
                       <multi/>
                     </properties>
                   </leafNode>
                   <node name="stbc">
                     <properties>
                       <help>Support for sending and receiving PPDU using STBC (Space Time Block Coding)</help>
                     </properties>
                     <children>
                       <leafNode name="rx">
                         <properties>
                           <help>Enable receiving PPDU using STBC (Space Time Block Coding)</help>
                           <valueHelp>
                             <format>[1-4]+</format>
                             <description>Number of spacial streams that can use RX STBC</description>
                           </valueHelp>
                           <constraint>
                             <regex>[1-4]+</regex>
                           </constraint>
                           <constraintErrorMessage>Invalid capability item</constraintErrorMessage>
                         </properties>
                       </leafNode>
                       <leafNode name="tx">
                         <properties>
                           <help>Enable sending PPDU using STBC (Space Time Block Coding)</help>
                           <valueless/>
                         </properties>
                       </leafNode>
                     </children>
                   </node>
                   <leafNode name="tx-powersave">
                     <properties>
                       <help>Enable VHT TXOP Power Save Mode</help>
                       <valueless/>
                     </properties>
                   </leafNode>
                   <leafNode name="vht-cf">
                     <properties>
                       <help>Station supports receiving VHT variant HT Control field</help>
                       <valueless/>
                     </properties>
                   </leafNode>
                 </children>
               </node>
             </children>
           </node>
           <leafNode name="channel">
             <properties>
               <help>Wireless radio channel</help>
               <valueHelp>
                 <format>0</format>
                 <description>Automatic Channel Selection (ACS)</description>
               </valueHelp>
               <valueHelp>
                 <format>u32:1-14</format>
                 <description>2.4Ghz (802.11 b/g/n) Channel</description>
               </valueHelp>
               <valueHelp>
                 <format>u32:34-173</format>
                 <description>5Ghz (802.11 a/h/j/n/ac) Channel</description>
               </valueHelp>
               <constraint>
                 <validator name="numeric" argument="--range 0-0 --range 1-14 --range 34-173"/>
               </constraint>
             </properties>
             <defaultValue>0</defaultValue>
           </leafNode>
           <leafNode name="country-code">
             <properties>
               <help>Indicate country in which device is operating</help>
               <completionHelp>
                 <list>us eu jp de uk cn es fr ru</list>
               </completionHelp>
               <valueHelp>
                 <format>txt</format>
                 <description>ISO/IEC 3166-1 Country Code</description>
               </valueHelp>
               <constraint>
                 <regex>[a-z][a-z]</regex>
               </constraint>
               <constraintErrorMessage>Invalid ISO/IEC 3166-1 Country Code</constraintErrorMessage>
             </properties>
           </leafNode>
           #include <include/interface/description.xml.i>
           #include <include/interface/dhcp-options.xml.i>
           #include <include/interface/dhcpv6-options.xml.i>
           <leafNode name="disable-broadcast-ssid">
             <properties>
               <help>Disable broadcast of SSID from access-point</help>
               <valueless/>
             </properties>
           </leafNode>
           #include <include/interface/disable-link-detect.xml.i>
           #include <include/interface/disable.xml.i>
           #include <include/interface/vrf.xml.i>
           <leafNode name="expunge-failing-stations">
             <properties>
               <help>Disassociate stations based on excessive transmission failures</help>
               <valueless/>
             </properties>
           </leafNode>
           #include <include/interface/ipv4-options.xml.i>
           #include <include/interface/ipv6-options.xml.i>
           #include <include/interface/hw-id.xml.i>
           <leafNode name="isolate-stations">
             <properties>
               <help>Isolate stations on the AP so they cannot see each other</help>
               <valueless/>
             </properties>
           </leafNode>
           #include <include/interface/mac.xml.i>
           <leafNode name="max-stations">
             <properties>
               <help>Maximum number of wireless radio stations. Excess stations will be rejected upon authentication request.</help>
               <valueHelp>
                 <format>u32:1-2007</format>
                 <description>Number of allowed stations</description>
               </valueHelp>
               <constraint>
                 <validator name="numeric" argument="--range 1-2007"/>
               </constraint>
               <constraintErrorMessage>Number of stations must be between 1 and 2007</constraintErrorMessage>
             </properties>
           </leafNode>
           <leafNode name="mgmt-frame-protection">
             <properties>
               <help>Management Frame Protection (MFP) according to IEEE 802.11w</help>
               <completionHelp>
                 <list>disabled optional required</list>
               </completionHelp>
               <valueHelp>
                 <format>disabled</format>
                 <description>no MFP</description>
               </valueHelp>
               <valueHelp>
                 <format>optional</format>
                 <description>MFP optional</description>
               </valueHelp>
               <valueHelp>
                 <format>required</format>
                 <description>MFP enforced</description>
               </valueHelp>
               <constraint>
                 <regex>(disabled|optional|required)</regex>
               </constraint>
             </properties>
             <defaultValue>disabled</defaultValue>
           </leafNode>
           <leafNode name="mode">
             <properties>
               <help>Wireless radio mode</help>
               <completionHelp>
                 <list>a b g n ac</list>
               </completionHelp>
               <valueHelp>
                 <format>a</format>
                 <description>802.11a - 54 Mbits/sec</description>
               </valueHelp>
               <valueHelp>
                 <format>b</format>
                 <description>802.11b - 11 Mbits/sec</description>
               </valueHelp>
               <valueHelp>
                 <format>g</format>
                 <description>802.11g - 54 Mbits/sec</description>
               </valueHelp>
               <valueHelp>
                 <format>n</format>
                 <description>802.11n - 600 Mbits/sec</description>
               </valueHelp>
               <valueHelp>
                 <format>ac</format>
                 <description>802.11ac - 1300 Mbits/sec</description>
               </valueHelp>
               <constraint>
                 <regex>(a|b|g|n|ac)</regex>
               </constraint>
             </properties>
             <defaultValue>g</defaultValue>
           </leafNode>
           #include <include/interface/mirror.xml.i>
           <leafNode name="physical-device">
             <properties>
               <help>Wireless physical device</help>
               <completionHelp>
                 <script>${vyos_completion_dir}/list_wireless_phys.sh</script>
               </completionHelp>
               <constraint>
                 <validator name="wireless-phy"/>
               </constraint>
             </properties>
             <defaultValue>phy0</defaultValue>
           </leafNode>
           <leafNode name="reduce-transmit-power">
             <properties>
               <help>Transmission power reduction in dBm</help>
               <valueHelp>
                 <format>u32:0-255</format>
                 <description>TX power reduction in dBm</description>
               </valueHelp>
               <constraint>
                 <validator name="numeric" argument="--range 0-255"/>
               </constraint>
               <constraintErrorMessage>dBm value must be between 0 and 255</constraintErrorMessage>
             </properties>
           </leafNode>
           <node name="security">
             <properties>
               <help>Wireless security settings</help>
             </properties>
             <children>
               <node name="wep">
                 <properties>
                   <help>Wired Equivalent Privacy (WEP) parameters</help>
                 </properties>
                 <children>
                   <leafNode name="key">
                     <properties>
                       <help>WEP encryption key</help>
                       <valueHelp>
                         <format>txt</format>
                         <description>Wired Equivalent Privacy key</description>
                       </valueHelp>
                       <constraint>
                         <regex>([a-fA-F0-9]{10}|[a-fA-F0-9]{26}|[a-fA-F0-9]{32})</regex>
                       </constraint>
                       <constraintErrorMessage>Invalid WEP key</constraintErrorMessage>
                       <multi/>
                     </properties>
                   </leafNode>
                 </children>
               </node>
               <node name="wpa">
                 <properties>
                   <help>Wifi Protected Access (WPA) parameters</help>
                 </properties>
                 <children>
                   <leafNode name="cipher">
                     <properties>
                       <help>Cipher suite for WPA unicast packets</help>
                       <completionHelp>
                         <list>GCMP-256 GCMP CCMP-256 CCMP TKIP</list>
                       </completionHelp>
                       <valueHelp>
                         <format>GCMP-256</format>
                         <description>AES in Galois/counter mode with 256-bit key</description>
                       </valueHelp>
                       <valueHelp>
                         <format>GCMP</format>
                         <description>AES in Galois/counter mode with 128-bit key</description>
                       </valueHelp>
                       <valueHelp>
                         <format>CCMP-256</format>
                         <description>AES in Counter mode with CBC-MAC with 256-bit key</description>
                       </valueHelp>
                       <valueHelp>
                         <format>CCMP</format>
                         <description>AES in Counter mode with CBC-MAC [RFC 3610, IEEE 802.11i/D7.0] (supported on all WPA2 APs)</description>
                       </valueHelp>
                       <valueHelp>
                         <format>TKIP</format>
                         <description>Temporal Key Integrity Protocol [IEEE 802.11i/D7.0]</description>
                       </valueHelp>
                       <constraint>
                         <regex>(GCMP-256|GCMP|CCMP-256|CCMP|TKIP)</regex>
                       </constraint>
                       <constraintErrorMessage>Invalid cipher selection</constraintErrorMessage>
                       <multi/>
                     </properties>
                   </leafNode>
                   <leafNode name="group-cipher">
                     <properties>
                       <help>Cipher suite for WPA multicast and broadcast packets</help>
                       <completionHelp>
                         <list>GCMP-256 GCMP CCMP-256 CCMP TKIP</list>
                       </completionHelp>
                       <valueHelp>
                         <format>GCMP-256</format>
                         <description>AES in Galois/counter mode with 256-bit key</description>
                       </valueHelp>
                       <valueHelp>
                         <format>GCMP</format>
                         <description>AES in Galois/counter mode with 128-bit key</description>
                       </valueHelp>
                       <valueHelp>
                         <format>CCMP-256</format>
                         <description>AES in Counter mode with CBC-MAC with 256-bit key</description>
                       </valueHelp>
                       <valueHelp>
                         <format>CCMP</format>
                         <description>AES in Counter mode with CBC-MAC [RFC 3610, IEEE 802.11i/D7.0] (supported on all WPA2 APs)</description>
                       </valueHelp>
                       <valueHelp>
                         <format>TKIP</format>
                         <description>Temporal Key Integrity Protocol [IEEE 802.11i/D7.0]</description>
                       </valueHelp>
                       <constraint>
                         <regex>(GCMP-256|GCMP|CCMP-256|CCMP|TKIP)</regex>
                       </constraint>
                       <constraintErrorMessage>Invalid group cipher selection</constraintErrorMessage>
                       <multi/>
                     </properties>
                   </leafNode>
                   <leafNode name="mode">
                     <properties>
                       <help>WPA mode</help>
                       <completionHelp>
                         <list>wpa wpa2 wpa+wpa2 wpa3</list>
                       </completionHelp>
                       <valueHelp>
                         <format>wpa</format>
                         <description>WPA (IEEE 802.11i/D3.0)</description>
                       </valueHelp>
                       <valueHelp>
                         <format>wpa2</format>
                         <description>WPA2 (full IEEE 802.11i/RSN)</description>
                       </valueHelp>
                       <valueHelp>
                         <format>wpa+wpa2</format>
                         <description>Allow both WPA and WPA2</description>
                       </valueHelp>
                       <constraint>
                         <regex>(wpa|wpa2|wpa\+wpa2|wpa3)</regex>
                       </constraint>
                       <constraintErrorMessage>Unknown WPA mode</constraintErrorMessage>
                     </properties>
                     <defaultValue>wpa+wpa2</defaultValue>
                   </leafNode>
                   <leafNode name="passphrase">
                     <properties>
-                      <help>WPA personal shared pass phrase. If you are
-                using special characters in the WPA passphrase then single
-                quotes are required.</help>
+                      <help>WPA personal shared pass phrase. If you are using special characters in the WPA passphrase then single quotes are required.</help>
                       <valueHelp>
                         <format>txt</format>
                         <description>Passphrase of at least 8 but not more than 63 printable characters</description>
                       </valueHelp>
                       <constraint>
                         <regex>.{8,63}</regex>
                       </constraint>
                       <constraintErrorMessage>Invalid WPA pass phrase, must be 8 to 63 printable characters!</constraintErrorMessage>
                     </properties>
                   </leafNode>
                   #include <include/radius-server-ipv4.xml.i>
                   <node name="radius">
                     <children>
                       <tagNode name="server">
                         <children>
                           <leafNode name="accounting">
                             <properties>
                               <help>Enable RADIUS server to receive accounting info</help>
                               <valueless/>
                             </properties>
                           </leafNode>
                         </children>
                       </tagNode>
                     </children>
                   </node>
                 </children>
               </node>
             </children>
           </node>
           <leafNode name="ssid">
             <properties>
               <help>Wireless access-point service set identifier (SSID)</help>
               <constraint>
                 <regex>.{1,32}</regex>
               </constraint>
               <constraintErrorMessage>Invalid SSID</constraintErrorMessage>
             </properties>
           </leafNode>
           <leafNode name="type">
             <properties>
               <help>Wireless device type for this interface</help>
               <completionHelp>
                 <list>access-point station monitor</list>
               </completionHelp>
               <valueHelp>
                 <format>access-point</format>
                 <description>Access-point forwards packets between other nodes</description>
               </valueHelp>
               <valueHelp>
                 <format>station</format>
                 <description>Connects to another access point</description>
               </valueHelp>
               <valueHelp>
                 <format>monitor</format>
                 <description>Passively monitor all packets on the frequency/channel</description>
               </valueHelp>
               <constraint>
                 <regex>(access-point|station|monitor)</regex>
               </constraint>
               <constraintErrorMessage>Type must be access-point, station or monitor</constraintErrorMessage>
             </properties>
             <defaultValue>monitor</defaultValue>
           </leafNode>
           #include <include/interface/redirect.xml.i>
           #include <include/interface/vif.xml.i>
           #include <include/interface/vif-s.xml.i>
         </children>
       </tagNode>
     </children>
   </node>
 </interfaceDefinition>
diff --git a/scripts/build-command-templates b/scripts/build-command-templates
index 729fc864c..c8ae83d9d 100755
--- a/scripts/build-command-templates
+++ b/scripts/build-command-templates
@@ -1,334 +1,336 @@
 #!/usr/bin/env python3
 #
 #    build-command-template: converts new style command definitions in XML
 #      to the old style (bunch of dirs and node.def's) command templates
 #
 #    Copyright (C) 2017 VyOS maintainers <maintainers@vyos.net>
 #
 #    This library is free software; you can redistribute it and/or
 #    modify it under the terms of the GNU Lesser General Public
 #    License as published by the Free Software Foundation; either
 #    version 2.1 of the License, or (at your option) any later version.
 #
 #    This library is distributed in the hope that it will be useful,
 #    but WITHOUT ANY WARRANTY; without even the implied warranty of
 #    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 #    Lesser General Public License for more details.
 #
 #    You should have received a copy of the GNU Lesser General Public
 #    License along with this library; if not, write to the Free Software
 #    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301
 #    USA
 
 import sys
 import os
 import argparse
 import copy
 import functools
 
 from lxml import etree as ET
+from textwrap import fill
 
 # Defaults
 
 #validator_dir = "/usr/libexec/vyos/validators"
 validator_dir = "${vyos_validators_dir}"
 default_constraint_err_msg = "Invalid value"
 
 
 ## Get arguments
 
 parser = argparse.ArgumentParser(description='Converts new-style XML interface definitions to old-style command templates')
 parser.add_argument('--debug', help='Enable debug information output', action='store_true')
 parser.add_argument('INPUT_FILE', type=str, help="XML interface definition file")
 parser.add_argument('SCHEMA_FILE', type=str, help="RelaxNG schema file")
 parser.add_argument('OUTPUT_DIR', type=str, help="Output directory")
 
 args = parser.parse_args()
 
 input_file = args.INPUT_FILE
 schema_file = args.SCHEMA_FILE
 output_dir = args.OUTPUT_DIR
 debug = args.debug
 
 #debug = True
 
 ## Load and validate the inputs
 
 try:
     xml = ET.parse(input_file)
 except Exception as e:
     print("Failed to load interface definition file {0}".format(input_file))
     print(e)
     sys.exit(1)
 
 try:
     relaxng_xml = ET.parse(schema_file)
     validator = ET.RelaxNG(relaxng_xml)
 
     if not validator.validate(xml):
         print(validator.error_log)
         print("Interface definition file {0} does not match the schema!".format(input_file))
         sys.exit(1)
 except Exception as e:
     print("Failed to load the XML schema {0}".format(schema_file))
     print(e)
     sys.exit(1)
 
 if not os.access(output_dir, os.W_OK):
     print("The output directory {0} is not writeable".format(output_dir))
     sys.exit(1)
 
 ## If we got this far, everything must be ok and we can convert the file
 
 def make_path(l):
     path = functools.reduce(os.path.join, l)
     if debug:
         print(path)
     return path
 
 def collect_validators(ve):
     regexes = []
     regex_elements = ve.findall("regex")
     if regex_elements is not None:
         regexes = list(map(lambda e: e.text.strip().replace('\\','\\\\'), regex_elements))
     if "" in regexes:
         print("Warning: empty regex, node will be accepting any value")
 
     validator_elements = ve.findall("validator")
     validators = []
     if validator_elements is not None:
         for v in validator_elements:
             v_name = os.path.join(validator_dir, v.get("name"))
 
             # XXX: lxml returns None for empty arguments
             v_argument = None
             try:
                 v_argument = v.get("argument")
             except:
                 pass
             if v_argument is None:
                 v_argument = ""
 
             validators.append("{0} {1}".format(v_name, v_argument))
 
 
     regex_args = " ".join(map(lambda s: "--regex \\\'{0}\\\'".format(s), regexes))
     validator_args = " ".join(map(lambda s: "--exec \\\"{0}\\\"".format(s), validators))
 
     return regex_args + " " + validator_args
 
 def get_properties(p, default=None):
     props = {}
 
     if p is None:
         return props
 
     # Get the help string
     try:
         help = p.find("help").text
         if default != None:
             # DNS forwarding for instance has multiple defaults - specified as whitespace separated list
             tmp = ', '.join(default.text.split())
             help += f' (default: {tmp})'
+        help = fill(help, width=64, subsequent_indent='\t\t\t')
         props["help"] = help
     except:
         pass
 
     # Get value help strings
     try:
         vhe = p.findall("valueHelp")
         vh = []
         for v in vhe:
             format = v.find("format").text
             description = v.find("description").text
             if default != None and default.text == format:
                 description += f' (default)'
             vh.append( (format, description) )
         props["val_help"] = vh
     except:
         props["val_help"] = []
 
     # Get the constraint and constraintGroup statements
 
     error_msg = default_constraint_err_msg
     # Get the error message if it's there
     try:
         error_msg = p.find("constraintErrorMessage").text
     except:
         pass
 
     vce = p.find("constraint")
 
     distinct_validator_string = ""
     if vce is not None:
         # The old backend doesn't support multiple validators in OR mode
         # so we emulate it
 
         distinct_validator_string = collect_validators(vce)
 
     vcge = p.findall("constraintGroup")
 
     group_validator_string = ""
     if len(vcge):
         for vcg in vcge:
             group_validator_string = group_validator_string + " --grp " + collect_validators(vcg)
 
     if vce is not None or len(vcge):
         validator_script = '${vyos_libexec_dir}/validate-value'
         validator_string = "exec \"{0} {1} {2} --value \\\'$VAR(@)\\\'\"; \"{3}\"".format(validator_script, distinct_validator_string, group_validator_string, error_msg)
 
         props["constraint"] = validator_string
 
     # Get the completion help strings
     try:
         che = p.findall("completionHelp")
         ch = ""
         for c in che:
             scripts = c.findall("script")
             paths = c.findall("path")
             lists = c.findall("list")
 
             # Current backend doesn't support multiple allowed: tags
             # so we get to emulate it
             comp_exprs = []
             for i in lists:
                 comp_exprs.append(f'echo "{i.text}"')
             for i in paths:
                 comp_exprs.append(f'/bin/cli-shell-api listNodes {i.text}')
             for i in scripts:
                 comp_exprs.append(f'sh -c "{i.text}"')
             comp_help = ' && echo " " && '.join(comp_exprs)
             props["comp_help"] = comp_help
     except:
         props["comp_help"] = []
 
     # Get priority
     try:
         props["priority"] = p.find("priority").text
     except:
         pass
 
     # Get "multi"
     if p.find("multi") is not None:
         props["multi"] = True
 
     # Get "valueless"
     if p.find("valueless") is not None:
         props["valueless"] = True
 
     return props
 
 def make_node_def(props):
     # XXX: replace with a template processor if it grows
     #      out of control
 
     node_def = ""
 
     if "tag" in props:
         node_def += "tag:\n"
 
     if "multi" in props:
         node_def += "multi:\n"
 
     if "type" in props:
         # Will always be txt in practice if it's set
         node_def += "type: {0}\n".format(props["type"])
 
     if "priority" in props:
         node_def += "priority: {0}\n".format(props["priority"])
 
     if "help" in props:
         node_def += "help: {0}\n".format(props["help"])
 
     if "val_help" in props:
         for v in props["val_help"]:
             node_def += "val_help: {0}; {1}\n".format(v[0], v[1])
 
     if "comp_help" in props:
         node_def += "allowed: {0}\n".format(props["comp_help"])
 
     if "constraint" in props:
         node_def += "syntax:expression: {0}\n".format(props["constraint"])
 
     shim = '${vyshim}'
 
     if "owner" in props:
         if "tag" in props:
             node_def += "end: sudo sh -c \"{1} VYOS_TAGNODE_VALUE='$VAR(@)' {0}\"\n".format(props["owner"], shim)
         else:
             node_def += "end: sudo sh -c \"{1} {0}\"\n".format(props["owner"], shim)
 
     if debug:
         print("The contents of the node.def file:\n", node_def)
 
     return node_def
 
 def process_node(n, tmpl_dir):
     # Avoid mangling the path from the outer call
     my_tmpl_dir = copy.copy(tmpl_dir)
 
     props_elem = n.find("properties")
     children = n.find("children")
 
     name = n.get("name")
     owner = n.get("owner")
     node_type = n.tag
 
     my_tmpl_dir.append(name)
 
     if debug:
         print("Name of the node: {0}. Created directory: {1}\n".format(name, "/".join(my_tmpl_dir)), end="")
     os.makedirs(make_path(my_tmpl_dir), exist_ok=True)
 
     props = get_properties(props_elem, n.find("defaultValue"))
     if owner:
         props["owner"] = owner
     # Type should not be set for non-tag, non-leaf nodes
     # For non-valueless leaf nodes, set the type to txt: to make them have some type,
     # actual value validation is handled by constraints translated to syntax:expression:
     if node_type != "node":
         if "valueless" not in props.keys():
             props["type"] = "txt"
     if node_type == "tagNode":
         props["tag"] = "True"
 
     if node_type != "leafNode":
         if "multi" in props:
             raise ValueError("<multi/> tag is only allowed in <leafNode>")
         if "valueless" in props:
             raise ValueError("<valueless/> is only allowed in <leafNode>")
 
     nodedef_path = os.path.join(make_path(my_tmpl_dir), "node.def")
 
     # Only create the "node.def" file if it exists but is empty, or if it does
     # not exist at all. An empty node.def file could be generated by XML paths
     # that derive from one another bot having a common base structure like
     # "protocols static"
     if not os.path.exists(nodedef_path) or os.path.getsize(nodedef_path) == 0:
         with open(nodedef_path, "w") as f:
             f.write(make_node_def(props))
 
     if node_type == "node":
         inner_nodes = children.iterfind("*")
         for inner_n in inner_nodes:
             process_node(inner_n, my_tmpl_dir)
     if node_type == "tagNode":
         my_tmpl_dir.append("node.tag")
         if debug:
             print("Created path for the tagNode:", end="")
         os.makedirs(make_path(my_tmpl_dir), exist_ok=True)
         inner_nodes = children.iterfind("*")
         for inner_n in inner_nodes:
             process_node(inner_n, my_tmpl_dir)
     else:
         # This is a leaf node
         pass
 
 
 root = xml.getroot()
 
 nodes = root.iterfind("*")
 for n in nodes:
     if n.tag == "syntaxVersion":
         continue
     process_node(n, [output_dir])