Add initial set of gbp-sxp test cases
[integration/test.git] / csit / variables / gbp / ios-xe-schemas / ned@2016-03-08.yang
diff --git a/csit/variables/gbp/ios-xe-schemas/ned@2016-03-08.yang b/csit/variables/gbp/ios-xe-schemas/ned@2016-03-08.yang
new file mode 100644 (file)
index 0000000..2301af3
--- /dev/null
@@ -0,0 +1,78041 @@
+module ned {
+  namespace "urn:ios";
+  prefix ios;
+
+  import tailf-common {
+    prefix tailf;
+  }
+  import ietf-inet-types {
+    prefix inet;
+  }
+  import ietf-yang-types {
+    prefix yang;
+  }
+
+  revision 2016-03-08 {
+    description
+      "Added changes for SDA and T-Systems, mainly lisp, object-group";
+  }
+  revision 2016-02-29 {
+    description
+      "Added changes for IWAN Hackathon";
+  }
+  revision 2016-02-02 {
+    description
+      "Added changes for onep, remote-mgmt, and virtual-service";
+  }
+  revision 2016-01-27 {
+    description
+      "Added changes required from an ASR920 EFT customer";
+  }
+  revision 2016-01-13 {
+    description
+      "Added more switching changes, plus DDTS's changes";
+  }
+  revision 2015-12-09 {
+    description
+      "Added BofA changes, NOT reduced version for access switching";
+  }
+  revision 2015-12-04 {
+    description
+      "Reduced NED model for access switching";
+  }
+  revision 2015-12-03 {
+    description
+      "Added the changes for the latest Japan MOD configs";
+  }
+  revision 2015-11-23 {
+    description
+      "Added Defense of Japan changes, moved container lisp under router";
+  }
+  revision 2015-09-15 {
+    description
+      "Added a fix for service-chain related node";
+  }
+  revision 2015-09-14 {
+    description
+      "Added pfr, G8032 and ISIS features nodes";
+  }
+  revision 2015-08-19 {
+    description
+      "Native EC features added, Ipsec, AVC-NBAR(including NBAR), AVC-ART, FNF, DMVPN ,
+       EVPN, GET VPN, GRE, ZBFW ,ESON, Snort, SourceFire,lisp, nhrp and eigrp; plus OSPF max-lsa fix";
+  }
+  revision 2015-08-12 {
+    description
+      "Fixed OSPFv2/v3 multi-area cli, vxlan source-interface.";
+  }
+  revision 2015-08-06 {
+    description
+      "Added WAAS, OTV and some OSPFv3 changes";
+  }
+  revision 2015-08-05 {
+    description
+      "Added CFM and BFD feature nodes";
+  }
+  revision 2015-08-03 {
+    description
+      "Added action-list under class under policy-map, plus some OSPF changes";
+  }
+  revision 2015-07-31 {
+    description
+      "Added ethernet oam nodes";
+  }
+  revision 2015-07-30 {
+    description
+      "Added null0 next-hop for ip routes";
+  }
+  revision 2015-07-29 {
+    description
+      "Added config l2vpn nodes";
+  }
+  revision 2015-07-29 {
+    description
+      "Fixed vxlan member vni container";
+  }
+  revision 2015-07-23 {
+    description
+      "Added Bridge Domain global config nodes";
+  }
+  revision 2015-07-15 {
+    description
+      "IPv6 ACL modifications";
+  }
+  revision 2015-07-13 {
+    description
+      "Updated MPLS Traffic Engineering nodes";
+  }
+  revision 2015-07-06 {
+    description
+      "Updated service-chaining nodes";
+  }
+  revision 2015-07-01 {
+    description
+      "Addressed OSPF and OSPFv3 review comments";
+  }
+  revision 2015-07-01 {
+    description
+      "Added decimal values for each dscp enum to support
+       tranforms to the IETF model.";
+  }
+  revision 2015-06-25 {
+    description
+      "Updated class-map protocol, mpls static output lable, 
+       and ip/ipv6 route list";
+  }
+  revision 2015-06-15 {
+    description
+      "Added object-group and other ACL updates";
+  }
+  revision 2015-06-12 {
+    description
+      "Added interface nve";
+  }
+  revision 2015-06-03 {
+    description
+      "Added ip access-list,
+       Added ipv6 access-list";
+  }
+  revision 2015-05-29 {
+    description
+      "Added Route-Map match and set feature related configs";
+  }
+  revision 2015-05-19 {
+    description
+      "Added service-chain feature related configs";
+  }
+  revision 2015-05-15 {
+    description
+      "Added ATM, SONET etc changes for ASR920,
+       Added OSPF changes to pass OSPF Smartman CLIs
+        Updated BGP and MPLS sections with additional
+        details to support platform specific CLIs";
+  }
+  revision 2015-04-15 {
+    description
+      "janl: Added native container as top level
+       NED container to allow NES to register for only
+       Device YANG model content.";
+  }
+  revision 2014-11-13 {
+    description
+      "janl: Added some syslog related config.";
+  }
+  revision 2014-02-12 {
+    description
+      "Fixed show live-status for interfaces.";
+  }
+  revision 2014-02-10 {
+    description
+      "[ip] vrf forwarding fix on interfaces.\n";
+  }
+  revision 2014-02-06 {
+    description
+      "Fixed interface 'no ip address' bug
+       Preliminary IOS XE support work
+       Added 'interface Virtual-Template *'
+       Added 'interface * / peer default ip' support'
+       Expanded 'interface * / ppp' support'
+       Merged interface encapsulation config (API change)
+       Merged all fixes/adds in confd-4.3 ios-xe between r59179 and r65905.
+      ";
+  }
+  revision 2014-01-30 {
+    description
+      "Merged from confd-5.0
+       Expanded 'ip nat'";
+  }
+  revision 2014-01-28 {
+    description
+      "Fixed bugs in 'ip route'. API changes to list due to variable
+       number of keys.";
+  }
+  revision 2013-12-09 {
+    description
+      "police and policer work";
+  }
+  revision 2013-11-25 {
+    description
+      "API-cleaning for Juniper and bugfixes
+       Made cir,bc and be keywords mandatory in policy-map/class police";
+  }
+  revision 2013-11-12 {
+    description
+      "Rewrote police-map/class police command to support more combos";
+  }
+  revision 2013-10-14 {
+    description
+      "Merged all yang files to one file.";
+  }
+  revision 2013-08-15 {
+    description
+      "Added switchport commands
+       Added spanning-tree top level commands
+       Added a number of SNMP traps
+       Added support for OSPFv3
+       Added support for IPv6 prefix-lists
+      ";
+  }
+  revision 2013-08-08 {
+    description
+      "Added support for Cisco 7600 constructs.";
+  }
+  revision 2013-06-25 {
+    description
+      "Renamed YANG module, submodule and namespace.";
+  }
+  revision 2013-04-18 {
+    description
+      "Restructuring using new file ios-common0.yang and
+       augment(s) in order to fix order dependencies.
+       
+       Added model constructs for Cisco 2800.";
+  }
+
+  typedef percentage-type {
+    type uint8 {
+      tailf:info "<1-100>;;Percentage";
+      range "1..100";
+    }
+  }
+
+  typedef ipv4-prefix {
+    type string {
+      pattern "(([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\\.){3}([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])/(([0-9])|([1-2][0-9])|(3[0-2]))";
+    }
+  }
+
+  typedef ipv6-prefix {
+    type string {
+      pattern "((:|[0-9a-fA-F]{0,4}):)([0-9a-fA-F]{0,4}:){0,5}((([0-9a-fA-F]{0,4}:)?(:|[0-9a-fA-F]{0,4}))|(((25[0-5]|2[0-4][0-9]|[01]?[0-9]?[0-9])\\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9]?[0-9])))(/(([0-9])|([0-9]{2})|(1[0-1][0-9])|(12[0-8])))";
+      pattern "(([^:]+:){6}(([^:]+:[^:]+)|(.*\\..*)))|((([^:]+:)*[^:]+)?::(([^:]+:)*[^:]+)?)(/.+)";
+    }
+  }
+
+  typedef host-type {
+    type union {
+      type inet:ip-address {
+        tailf:info "";
+      }
+      type inet:domain-name {
+        tailf:info "";
+      }
+    }
+  }
+
+  typedef ipv4-host-type {
+    type union {
+      type inet:ipv4-address;
+      type inet:domain-name;
+    }
+  }
+
+  typedef host-v4v6-type {
+    type union {
+      type inet:ipv4-address {
+        tailf:info "Hostname or A.B.C.D;;ip address or host name";
+      }
+      type inet:domain-name {
+        tailf:info "";
+      }
+      type inet:ipv6-address {
+        tailf:info "X:X:X:X::X;;IPv6 address";
+      }
+    }
+  }
+
+  typedef rd-type {
+    type string {
+      tailf:info "ASN:nn or IP-address:nn;;VPN Route Distinguisher";
+      pattern "(\\d*(.\\d*)*)?:(\\d*(.\\d*)*)?";
+    }
+  }
+
+  typedef vpn-id-type {
+    type string {
+      tailf:info "OUI:VPN-Index;;, format (hex) <3 bytes OUI:4 bytes VPN_Index>";
+      pattern "[0-9a-fA-F][0-9a-fA-F]?[0-9a-fA-F]?:[0-9a-fA-F][0-9a-fA-F]?[0-9a-fA-F]?[0-9a-fA-F]?";
+    }
+  }
+
+  typedef asn-ip-type {
+    type string {
+      pattern "(([0-9]+)|((([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\\.){3}([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5]))):[0-9]+";
+      tailf:info "ASN:nn or IP-address:nn";
+    }
+  }
+
+  typedef hhmm-type {
+    type string {
+      pattern "([0-1]?[0-9]|2[0-4]):([0-5][0-9])(:[0-5][0-9])?";
+    }
+  }
+
+  typedef weekday-type {
+    type enumeration {
+      enum "Mon";
+      enum "Tue";
+      enum "Wed";
+      enum "Thu";
+      enum "Fri";
+      enum "Sat";
+      enum "Sun";
+    }
+  }
+
+  typedef month-type {
+    type enumeration {
+      enum "Jan";
+      enum "Feb";
+      enum "Mar";
+      enum "Apr";
+      enum "May";
+      enum "Jun";
+      enum "Jul";
+      enum "Aug";
+      enum "Sep";
+      enum "Oct";
+      enum "Nov";
+      enum "Dec";
+    }
+  }
+
+  typedef std-acl-type {
+    type union {
+      type uint16 {
+        tailf:info "<1-99>;;Standard IP access-list number";
+        range "1..99";
+      }
+      type uint16 {
+        tailf:info "<1300-1999>;;Standard IP access-list number (expanded range)";
+        range "1300..1999";
+      }
+      type string {
+        tailf:info "WORD;;Access-list name";
+        pattern "[a-zA-Z].*";
+      }
+    }
+  }
+
+  typedef ext-acl-type {
+    type union {
+      type uint16 {
+        tailf:info "<100-199>;;Access list number";
+        range "100..199";
+      }
+      type uint16 {
+        tailf:info "<2000-2699>;;Access list number (expanded range)";
+        range "2000..2699";
+      }
+      type string {
+        tailf:info "WORD;;IP Named Extended Access list";
+        pattern "[a-zA-Z].*";
+      }
+    }
+  }
+
+  typedef exp-acl-type {
+    type union {
+      type uint16 {
+        tailf:info "<1-199>;;IP access list (standard or extended)";
+        range "1..199";
+      }
+      type uint16 {
+        tailf:info "<1300-2699>;;IP expanded access list (standard or extended)";
+        range "1300..2699";
+      }
+      type string {
+        tailf:info "WORD;;Access-list name";
+        pattern "[a-zA-Z].*";
+      }
+    }
+  }
+
+  typedef mdt-data-list-type {
+    type union {
+      type uint16 {
+        tailf:info "<100-199>;;Access-list number";
+        range "100..199";
+      }
+      type uint16 {
+        tailf:info "<2000-2699>;;Access list number (expanded range)";
+        range "2000..2699";
+      }
+      type string {
+        tailf:info "WORD;;IP Named Extended Access list";
+        pattern "[a-fA-F].*";
+      }
+    }
+  }
+
+  typedef ldp-discovery-address-type {
+    type union {
+      type enumeration {
+        enum "interface" {
+          tailf:code-name "ldp_interface";
+          tailf:info "Use interface address for LDP transport address";
+        }
+      }
+      type inet:ipv4-address {
+        tailf:info "A.B.C.D;;IP address to use for LDP transport address";
+      }
+    }
+  }
+
+  typedef mst-cost-type {
+    type union {
+      type uint32 {
+        tailf:info "<1-200000000>;;Port path cost";
+        range "1..200000000";
+      }
+      type enumeration {
+        enum "auto" {
+          tailf:code-name "mst_cost_type_auto";
+          tailf:info "Determine cost based on media speed of this interface";
+        }
+      }
+    }
+  }
+
+  typedef spanning-tree-cost-type {
+    type union {
+      type uint32 {
+        tailf:info "<1-200000000>;;Port path cost";
+        range "1..200000000";
+      }
+      type enumeration {
+        enum "auto" {
+          tailf:code-name "spanning-tree-cost-type-auto";
+          tailf:info "Determine cost based on media speed of this interface";
+        }
+      }
+    }
+  }
+
+  typedef dscp-type {
+    type union {
+      type uint8 {
+        tailf:info "<0-63>;;Differentiated services codepoint value";
+        range "0..63";
+      }
+      type enumeration {
+        enum "af11" {
+          tailf:info "Match packets with AF11 dscp (001010)";
+          value 10;
+        }
+        enum "af12" {
+          tailf:info "Match packets with AF12 dscp (001100)";
+          value 12;
+        }
+        enum "af13" {
+          tailf:info "Match packets with AF13 dscp (001110)";
+          value 14;
+        }
+        enum "af21" {
+          tailf:info "Match packets with AF21 dscp (010010)";
+          value 18;
+        }
+        enum "af22" {
+          tailf:info "Match packets with AF22 dscp (010100)";
+          value 20;
+        }
+        enum "af23" {
+          tailf:info "Match packets with AF23 dscp (010110)";
+          value 22;
+        }
+        enum "af31" {
+          tailf:info "Match packets with AF31 dscp (011010)";
+          value 26;
+        }
+        enum "af32" {
+          tailf:info "Match packets with AF32 dscp (011100)";
+          value 28;
+        }
+        enum "af33" {
+          tailf:info "Match packets with AF33 dscp (011110)";
+          value 30;
+        }
+        enum "af41" {
+          tailf:info "Match packets with AF41 dscp (100010)";
+          value 34;
+        }
+        enum "af42" {
+          tailf:info "Match packets with AF42 dscp (100100)";
+          value 36;
+        }
+        enum "af43" {
+          tailf:info "Match packets with AF43 dscp (100110)";
+          value 38;
+        }
+        enum "cs1" {
+          tailf:info "Match packets with CS1(precedence 1) dscp (001000)";
+          value 8;
+        }
+        enum "cs2" {
+          tailf:info "Match packets with CS2(precedence 2) dscp (010000)";
+          value 16;
+        }
+        enum "cs3" {
+          tailf:info "Match packets with CS3(precedence 3) dscp (011000)";
+          value 24;
+        }
+        enum "cs4" {
+          tailf:info "Match packets with CS4(precedence 4) dscp (100000)";
+          value 32;
+        }
+        enum "cs5" {
+          tailf:info "Match packets with CS5(precedence 5) dscp (101000)";
+          value 40;
+        }
+        enum "cs6" {
+          tailf:info "Match packets with CS6(precedence 6) dscp (110000)";
+          value 48;
+        }
+        enum "cs7" {
+          tailf:info "Match packets with CS7(precedence 7) dscp (111000)";
+          value 56;
+        }
+        enum "default" {
+          tailf:code-name "dscp_default";
+          tailf:info "Match packets with default dscp (000000)";
+          value 0;
+        }
+        enum "dscp" {
+          tailf:info "Set packet dscp from dscp";
+        }
+        enum "ef" {
+          tailf:info "Match packets with EF dscp (101110)";
+          value 46;
+        }
+        enum "precedence" {
+          tailf:info "Set packet dscp from precedence";
+        }
+      }
+    }
+  }
+
+  typedef precedence-type {
+    type union {
+      type uint8 {
+        tailf:info "<0-7>;;Precedence value";
+        range "0..7";
+      }
+      type enumeration {
+        enum "critical" {
+          tailf:info "Set packets with critical precedence (5)";
+        }
+        enum "flash" {
+          tailf:info "Set packets with flash precedence (3)";
+        }
+        enum "flash-override" {
+          tailf:info "Set packets with flash override precedence (4)";
+        }
+        enum "immediate" {
+          tailf:info "Set packets with immediate precedence (2)";
+        }
+        enum "internet" {
+          tailf:code-name "prec_internet";
+          tailf:info "Set packets with internetwork control precedence (6)";
+        }
+        enum "network" {
+          tailf:info "Set packets with network control precedence (7)";
+        }
+        enum "priority" {
+          tailf:code-name "prec_priority";
+          tailf:info "Set packets with priority precedence (1)";
+        }
+        enum "routine" {
+          tailf:info "Set packets with routine precedence (0)";
+        }
+      }
+    }
+  }
+
+  typedef precedence-type2 {
+    type union {
+      type uint8 {
+        tailf:info "<0-7>;;IP precedence";
+        range "0..7";
+      }
+      type enumeration {
+        enum "rsvp" {
+          tailf:code-name "prec_rsvp";
+          tailf:info "rsvp traffic";
+        }
+      }
+    }
+  }
+
+  typedef cos_value-type {
+    type union {
+      type uint8 {
+        tailf:info "<0-7>;;new cos value";
+        range "0..7";
+      }
+      type enumeration {
+        enum "cos" {
+          tailf:info "Set packet cos from cos";
+        }
+        enum "dscp" {
+          tailf:info "Set packet cos from dscp";
+        }
+        enum "exp" {
+          tailf:info "Set packet cos from exp";
+        }
+        enum "precedence" {
+          tailf:info "Set packet cos from precedence";
+        }
+      }
+    }
+  }
+
+  typedef qos_value-type {
+    type union {
+      type uint8 {
+        tailf:info "<0-99>;;new qos-group";
+        range "0..99";
+      }
+      type enumeration {
+        enum "cos" {
+          tailf:info "Set packet qos from cos";
+        }
+        enum "dscp" {
+          tailf:info "Set packet qos from dscp";
+        }
+        enum "exp" {
+          tailf:info "Set packet qos from exp";
+        }
+        enum "precedence" {
+          tailf:info "Set packet qos from precedence";
+        }
+      }
+    }
+  }
+
+  typedef exp_value-type {
+    type union {
+      type uint8 {
+        tailf:info "<0-7>;;new exp";
+        range "0..7";
+      }
+      type enumeration {
+        enum "cos" {
+          tailf:info "Set packet exp from cos";
+        }
+        enum "dscp" {
+          tailf:info "Set packet exp from dscp";
+        }
+        enum "exp" {
+          tailf:info "Set packet exp from exp";
+        }
+        enum "precedence" {
+          tailf:info "Set packet exp from precedence";
+        }
+      }
+    }
+  }
+
+  typedef prec_value-type {
+    type union {
+      type uint8 {
+        tailf:info "<0-7>;;new precedence";
+        range "0..7";
+      }
+      type enumeration {
+        enum "cos" {
+          tailf:info "Set packet precedence from cos";
+        }
+        enum "dscp" {
+          tailf:info "Set packet precedence from dscp";
+        }
+        enum "exp" {
+          tailf:info "Set packet precedence from exp";
+        }
+        enum "precedence" {
+          tailf:info "Set packet precedence from precedence";
+        }
+      }
+    }
+  }
+
+  typedef policy-action-type {
+    type enumeration {
+      enum "bandwidth" {
+        tailf:code-name "policy_bandwidth";
+        tailf:info "Bandwidth";
+      }
+      enum "compression" {
+        tailf:info "Activate Compression";
+      }
+      enum "dbl" {
+        tailf:info "Dynamic buffer limiting";
+      }
+      enum "drop" {
+        tailf:info "Drop all packets";
+      }
+      enum "estimate" {
+        tailf:info "Estimate resources required for this class";
+      }
+      enum "fair-queue" {
+        tailf:info "Enable Flow-based Fair Queuing in this Class";
+      }
+      enum "forward" {
+        tailf:info "Forward service-path action";
+      }
+      enum "netflow-sampler" {
+        tailf:info "NetFlow action";
+      }
+      enum "police" {
+        tailf:info "Police";
+      }
+      enum "priority" {
+        tailf:code-name "policy_priority";
+        tailf:info "Strict Scheduling Priority for this Class";
+      }
+      enum "queue-limit" {
+        tailf:info "Queue Max Threshold for Tail Drop";
+      }
+      enum "random-detect" {
+        tailf:info "Enable Random Early Detection as drop policy";
+      }
+      enum "service-policy" {
+        tailf:info "Configure Flow Next";
+      }
+      enum "set" {
+        tailf:info "Set QoS values";
+      }
+      enum "shape" {
+        tailf:code-name "policy_shape";
+        tailf:info "Traffic Shaping";
+      }
+      enum "trust" {
+        tailf:info "Set trust value for the class";
+      }
+      enum "queue-buffers" {
+        tailf:info "queue buffer";
+      }
+    }
+  }
+
+  typedef access-list-standard-id-type {
+    type union {
+      type default-access-list-standard-id-type;
+      type string {
+        tailf:info "WORD;;Standard access-list name";
+      }
+    }
+  }
+
+  typedef default-access-list-standard-id-type {
+    type union {
+      type uint8 {
+        tailf:info "<1-99>;;IP Standard access list number";
+        range "1..99";
+      }
+      type uint16 {
+        tailf:info "<1300-1999>;;IP Standard expanded access list number";
+        range "1300..1999";
+      }
+    }
+  }
+
+  typedef access-list-in-out-type {
+    type enumeration {
+      enum "in" {
+        tailf:info "Filter incoming routing updates";
+      }
+      enum "out" {
+        tailf:info "Filter outgoing routing updates";
+      }
+    }
+  }
+
+  typedef redist-ospf-external-type {
+    type enumeration {
+      enum "1" {
+        tailf:info "Redistribute external type 1 routes";
+      }
+      enum "2" {
+        tailf:info "Redistribute external type 2 routes";
+      }
+    }
+  }
+
+  typedef class-name-type {
+    type union {
+      type string {
+        tailf:info "WORD;;class-map name";
+      }
+      type enumeration {
+        enum "class-default" {
+          tailf:info "System default class matching otherwise unclassified packet";
+        }
+      }
+    }
+  }
+
+  typedef access-list-type {
+    type union {
+      type uint16 {
+        range "1..199";
+        tailf:info "<1-199>;;Access list";
+      }
+      type uint16 {
+        range "1300..2699";
+        tailf:info "<1300-2699>;;Access list (expanded range)";
+      }
+    }
+  }
+
+  typedef bgp-distribute-list-type {
+    type union {
+      type uint16 {
+        range "100..199";
+        tailf:info "<100-199>;;IP access-list number";
+      }
+      type uint16 {
+        range "2000..2699";
+        tailf:info "<2000-2699>;;IP expanded access list number";
+      }
+      type string {
+        tailf:info "WORD;;Access-list name";
+        pattern "[a-zA-Z].*";
+      }
+    }
+  }
+
+  typedef bgp-distribute-list-type2 {
+    type union {
+      type uint16 {
+        range "1..199";
+        tailf:info "<1-199>;;IP access list number";
+      }
+      type uint16 {
+        range "1300..2699";
+        tailf:info "<1300-2699>;;IP access list number (expanded range)";
+      }
+      type string {
+        tailf:info "WORD;;Access-list name";
+        pattern "[a-zA-Z].*";
+      }
+    }
+  }
+
+  typedef ospf-area-type {
+    type union {
+      type uint32 {
+        range "0 .. 4294967295";
+        tailf:info "<0-4294967295>;;OSPF area ID as a decimal value";
+      }
+      type inet:ipv4-address {
+        tailf:info "A.B.C.D;;OSPF area ID in IP address format";
+      }
+    }
+  }
+
+  typedef ospf-metric-type {
+    type uint32 {
+      range "1 .. 2";
+      tailf:info "<1-2>;;OSPF Link State type";
+    }
+  }
+
+  typedef limit-dc-non-dc-type {
+    type union {
+      type uint32 {
+        range "1 .. 255";
+        tailf:info "<1-255>;;The maximum number of retransmissions";
+      }
+      type enumeration {
+        enum "disable" {
+          tailf:info "Disable the feature";
+        }
+      }
+    }
+  }
+
+  typedef default-access-list-id-type {
+    type union {
+      type uint32 {
+        range "1 .. 199";
+        tailf:info "<1-199>;;IP access list number";
+      }
+      type uint32 {
+        range "1300 .. 2699";
+        tailf:info "<1300-2699>;;IP expanded access list number";
+      }
+    }
+  }
+
+  typedef access-list-id-type {
+    type union {
+      type default-access-list-id-type;
+      type string {
+        tailf:info "WORD;;Access-list name";
+        pattern "[a-zA-Z].*";
+      }
+    }
+  }
+
+  typedef default-offset-list-id-type {
+    type union {
+      type uint32 {
+        range "0 .. 99";
+        tailf:info "<0-99>;;Access list of networks to apply offset (0 selects all networks)";
+      }
+      type uint32 {
+        range "1300 .. 1999";
+        tailf:info "<1300-1999>;;Access list of networks to apply offset (expanded range)";
+      }
+    }
+  }
+
+  typedef offset-list-id-type {
+    type union {
+      type default-offset-list-id-type;
+      type string {
+        tailf:info "WORD;;Access-list name";
+        pattern "[a-zA-Z].*";
+      }
+    }
+  }
+
+  typedef offset-list-in-out-type {
+    type enumeration {
+      enum "in" {
+        tailf:info "Perform offset on incoming updates";
+      }
+      enum "out" {
+        tailf:info "Perform offset on outgoing updates";
+      }
+    }
+  }
+
+  typedef isis-net {
+    tailf:info "XX.XXXX. ... .XXX.XX;;Network entity title (NET)";
+    type string;
+  }
+
+  typedef isis-level-type {
+    type enumeration {
+      enum "level-1" {
+        tailf:info "Level-1 only";
+      }
+      enum "level-1-2" {
+        tailf:info "Level-1-2";
+      }
+      enum "level-2" {
+        tailf:info "Level-2 only";
+      }
+    }
+  }
+
+  typedef isis-routes-level-type {
+    type enumeration {
+      enum "level-1" {
+        tailf:info "IS-IS level-1 routes only";
+      }
+      enum "level-1-2" {
+        tailf:info "IS-IS level-1 and level-2 routes";
+      }
+      enum "level-2" {
+        tailf:info "IS-IS level-2 routes only";
+      }
+    }
+  }
+
+  typedef authentication-level-type {
+    type enumeration {
+      enum "level-1" {
+        tailf:info "ISIS authentication for level-1";
+      }
+      enum "level-2" {
+        tailf:info "ISIS authentication for level-2";
+      }
+    }
+  }
+
+  typedef logging-level-type {
+    type union {
+      type uint16 {
+        tailf:info "<0-7>;;Logging severity level";
+        range "0..7";
+      }
+      type enumeration {
+        enum "alerts" {
+          tailf:info "Immediate action needed (severity=1)";
+        }
+        enum "critical" {
+          tailf:info "Critical conditions (severity=2)";
+        }
+        enum "debugging" {
+          tailf:info "Debugging messages (severity=7)";
+        }
+        enum "emergencies" {
+          tailf:info "System is unusable (severity=0)";
+        }
+        enum "errors" {
+          tailf:info "Error conditions (severity=3)";
+        }
+        enum "informational" {
+          tailf:info "Informational messages (severity=6)";
+        }
+        enum "notifications" {
+          tailf:info "Normal but significant conditions (severity=5)";
+        }
+        enum "warnings" {
+          tailf:info "Warning conditions (severity=4)";
+        }
+        enum "bogus" {
+          tailf:info "Force device refused error)";
+        }
+      }
+    }
+  }
+
+  typedef syslog-level-type {
+    type enumeration {
+      enum "alert" {
+        tailf:info "Provide alert level logs     (severity = 2)";
+      }
+      enum "crit" {
+        tailf:info "Provide critical level logs  (severity = 3)";
+      }
+      enum "debug" {
+        tailf:info "Provide all logs             (severity = 8)";
+      }
+      enum "emerg" {
+        tailf:info "Provide emergency level logs (severity = 1)";
+      }
+      enum "err" {
+        tailf:info "Provide error level logs     (severity = 4)(default)";
+      }
+      enum "info" {
+        tailf:info "Provide info level logs      (severity = 7)";
+      }
+      enum "notice" {
+        tailf:info "Provide notice level logs    (severity = 6)";
+      }
+      enum "warning" {
+        tailf:info "Provide warning level logs   (severity = 5)";
+      }
+    }
+  }
+
+  typedef operator-type {
+    type enumeration {
+      enum "eq" {
+        tailf:info "Equal to";
+      }
+      enum "ge" {
+        tailf:info "Greater than or equal to";
+      }
+      enum "gt" {
+        tailf:info "Greater than";
+      }
+      enum "le" {
+        tailf:info "Less than or equal to";
+      }
+      enum "lt" {
+        tailf:info "Less than";
+      }
+      enum "ne" {
+        tailf:info "Not equal to";
+      }
+    }
+  }
+
+  typedef police-packets-bytes-type {
+    type enumeration {
+      enum "packets" {
+        tailf:info "Treat 'burst' value as packets";
+      }
+      enum "bytes" {
+        tailf:info "Treat 'burst' value as bytes";
+      }
+    }
+  }
+
+  typedef police-pps-bps-type {
+    type enumeration {
+      enum "pps" {
+        tailf:info "pps  Treat 'rate' value in packets-per-second";
+      }
+      enum "bps" {
+        tailf:info "pps  Treat 'rate' value in bytes-per-second";
+      }
+    }
+  }
+
+  typedef police-bps-type {
+    type uint64 {
+      tailf:info "<8000-64000000000>;;Bits per second";
+      range "8000..64000000000";
+    }
+  }
+
+  typedef police-burst-type {
+    type uint32 {
+      tailf:info "<1000-512000000>;;Burst bytes";
+      range "1000..512000000";
+    }
+  }
+
+  typedef mobility-type {
+    type union {
+      type uint8 {
+        tailf:info "<0-255>;;Mobility header type value";
+      }
+      type enumeration {
+        enum "bind-acknowledgement" {
+          tailf:info "Bind Acknowledgement mobility message";
+        }
+        enum "bind-error" {
+          tailf:info "Bind Error mobility message";
+        }
+        enum "bind-refresh" {
+          tailf:info "Bind Refresh mobility message";
+        }
+        enum "bind-update" {
+          tailf:info "Bind Update mobility message";
+        }
+        enum "cot" {
+          tailf:info "CoT mobility message";
+        }
+        enum "coti" {
+          tailf:info "CoTi mobility message";
+        }
+        enum "hot" {
+          tailf:info "HoT mobility message";
+        }
+        enum "hoti" {
+          tailf:info "HoTi mobility message";
+        }
+      }
+    }
+  }
+
+  typedef acl-udp-port-type {
+    type union {
+      type uint16 {
+        tailf:info "<0-65535>;;Port number";
+      }
+      type enumeration {
+        enum "biff" {
+          tailf:info "Biff (mail notification, comsat, 512)";
+        }
+        enum "bootpc" {
+          tailf:info "Bootstrap Protocol (BOOTP) client (68)";
+        }
+        enum "bootps" {
+          tailf:info "Bootstrap Protocol (BOOTP) server (67)";
+        }
+        enum "discard" {
+          tailf:info "Discard (9)";
+        }
+        enum "dnsix" {
+          tailf:info "DNSIX security protocol auditing (195)";
+        }
+        enum "domain" {
+          tailf:info "Domain Name Service (DNS, 53)";
+        }
+        enum "echo" {
+          tailf:info "Echo (7)";
+        }
+        enum "isakmp" {
+          tailf:info "Internet Security Association and Key Management Protocol (500)";
+        }
+        enum "mobile-ip" {
+          tailf:info "Mobile IP registration (434)";
+        }
+        enum "nameserver" {
+          tailf:info "IEN116 name service (obsolete, 42)";
+        }
+        enum "netbios-dgm" {
+          tailf:info "NetBios datagram service (138)";
+        }
+        enum "netbios-ns" {
+          tailf:info "NetBios name service (137)";
+        }
+        enum "netbios-ss" {
+          tailf:info "NetBios session service (139)";
+        }
+        enum "non500-isakmp" {
+          tailf:info "Internet Security Association and Key Management Protocol (4500)";
+        }
+        enum "ntp" {
+          tailf:info "Network Time Protocol (123)";
+        }
+        enum "pim-auto-rp" {
+          tailf:info "PIM Auto-RP (496)";
+        }
+        enum "rip" {
+          tailf:info "Routing Information Protocol (router, in.routed, 520)";
+        }
+        enum "ripv6" {
+          tailf:info "Routing Information Protocol V6 (router, in.routed, 521)";
+        }
+        enum "snmp" {
+          tailf:info "Simple Network Management Protocol (161)";
+        }
+        enum "snmptrap" {
+          tailf:info "SNMP Traps (162)";
+        }
+        enum "sunrpc" {
+          tailf:info "Sun Remote Procedure Call (111)";
+        }
+        enum "syslog" {
+          tailf:info "System Logger (514)";
+        }
+        enum "tacacs" {
+          tailf:info "TAC Access Control System (49)";
+        }
+        enum "talk" {
+          tailf:info "Talk (517)";
+        }
+        enum "tftp" {
+          tailf:info "Trivial File Transfer Protocol (69)";
+        }
+        enum "time" {
+          tailf:info "Time (37)";
+        }
+        enum "who" {
+          tailf:info "Who service (rwho, 513)";
+        }
+        enum "xdmcp" {
+          tailf:info "X Display Manager Control Protocol (177)";
+        }
+      }
+    }
+  }
+
+  typedef acl-tcp-port-type {
+    type union {
+      type uint16 {
+        tailf:info "<0-65535>;;Port number";
+      }
+      type enumeration {
+        enum "bgp" {
+          tailf:info "Border Gateway Protocol (179)";
+        }
+        enum "chargen" {
+          tailf:info "Character generator (19)";
+        }
+        enum "cmd" {
+          tailf:info "Remote commands (rcmd, 514)";
+        }
+        enum "connectedapps-plain" {
+          tailf:info "ConnectedApps Cleartext (15001)";
+        }
+        enum "connectedapps-tls" {
+          tailf:info "ConnectedApps TLS (15002)";
+        }
+        enum "daytime" {
+          tailf:info "Daytime (13)";
+        }
+        enum "discard" {
+          tailf:info "Discard (9)";
+        }
+        enum "domain" {
+          tailf:info "Domain Name Service (53)";
+        }
+        enum "echo" {
+          tailf:info "Echo (7)";
+        }
+        enum "exec" {
+          tailf:info "Exec (rsh, 512)";
+        }
+        enum "finger" {
+          tailf:info "Finger (79)";
+        }
+        enum "ftp" {
+          tailf:info "File Transfer Protocol (21)";
+        }
+        enum "ftp-data" {
+          tailf:info "FTP data connections (20)";
+        }
+        enum "gopher" {
+          tailf:info "Gopher (70)";
+        }
+        enum "hostname" {
+          tailf:info "NIC hostname server (101)";
+        }
+        enum "ident" {
+          tailf:info "Ident Protocol (113)";
+        }
+        enum "irc" {
+          tailf:info "Internet Relay Chat (194)";
+        }
+        enum "klogin" {
+          tailf:info "Kerberos login (543)";
+        }
+        enum "kshell" {
+          tailf:info "Kerberos shell (544)";
+        }
+        enum "login" {
+          tailf:info "Login (rlogin, 513)";
+        }
+        enum "lpd" {
+          tailf:info "Printer service (515)";
+        }
+        enum "msrpc" {
+          tailf:info "MS Remote Procedure Call (135)";
+        }
+        enum "nntp" {
+          tailf:info "Network News Transport Protocol (119)";
+        }
+        enum "pim-auto-rp" {
+          tailf:info "PIM Auto-RP (496)";
+        }
+        enum "pop2" {
+          tailf:info "Post Office Protocol v2 (109)";
+        }
+        enum "pop3" {
+          tailf:info "Post Office Protocol v3 (110)";
+        }
+        enum "smtp" {
+          tailf:info "Simple Mail Transport Protocol (25)";
+        }
+        enum "sunrpc" {
+          tailf:info "Sun Remote Procedure Call (111)";
+        }
+        enum "syslog" {
+          tailf:info "Syslog (514)";
+        }
+        enum "tacacs" {
+          tailf:info "TAC Access Control System (49)";
+        }
+        enum "talk" {
+          tailf:info "Talk (517)";
+        }
+        enum "telnet" {
+          tailf:info "Telnet (23)";
+        }
+        enum "time" {
+          tailf:info "Time (37)";
+        }
+        enum "uucp" {
+          tailf:info "Unix-to-Unix Copy Program (540)";
+        }
+        enum "whois" {
+          tailf:info "Nicname (43)";
+        }
+        enum "www" {
+          tailf:info "World Wide Web (HTTP, 80)";
+        }
+      }
+    }
+  }
+
+  typedef bgp-as-number-type {
+    type union {
+      type uint32 {
+        tailf:info "<1-4294967295>;;Autonomous system number";
+        range "1..4294967295";
+      }
+      type string {
+        tailf:info "<1.0-XX.YY>;;Autonomous system number";
+      }
+    }
+  }
+
+  grouping vrf-route-target-grouping {
+    list export {
+      tailf:info "Export Target-VPN community";
+      description
+        "Export Target-VPN community";
+      tailf:cli-suppress-mode;
+      tailf:cli-delete-when-empty;
+      key "asn-ip";
+      leaf asn-ip {
+        type asn-ip-type {
+          tailf:info "ASN:nn or IP-address:nn;;Target VPN Extended Community";
+        }
+      }
+    }
+    list import {
+      tailf:info "Import Target-VPN community";
+      description
+        "Import Target-VPN community";
+      tailf:cli-suppress-mode;
+      tailf:cli-delete-when-empty;
+      key "asn-ip";
+      leaf asn-ip {
+        type asn-ip-type {
+          tailf:info "ASN:nn or IP-address:nn;;Target VPN Extended Community";
+        }
+      }
+    }
+  }
+
+  grouping police-action-transmit-grouping {
+    leaf transmit {
+      tailf:info "transmit packet";
+      description
+        "transmit packet";
+      type empty;
+    }
+  }
+
+  grouping police-action-drop-grouping {
+    leaf drop {
+      tailf:info "drop packet";
+      description
+        "drop packet";
+      type empty;
+    }
+  }
+
+  grouping police-conform-action-grouping {
+    container conform-set-clp-transmit {
+      tailf:cli-no-keyword;
+      tailf:cli-drop-node-name;
+      tailf:cli-flatten-container;
+      container conform-action {
+        tailf:info "action when rate is less than conform burst";
+        description
+          "action when rate is less than conform burst";
+        tailf:cli-flatten-container;
+        leaf set-clp-transmit {
+          tailf:info "set atm clp and send it";
+          description
+            "set atm clp and send it";
+          type empty;
+        }
+      }
+    }
+    container conform-set-cos-transmit {
+      tailf:cli-no-keyword;
+      tailf:cli-drop-node-name;
+      tailf:cli-flatten-container;
+      container conform-action {
+        tailf:info "action when rate is less than conform burst";
+        description
+          "action when rate is less than conform burst";
+        tailf:cli-flatten-container;
+        leaf set-cos-transmit {
+          tailf:info "rewrite packet cos and send it";
+          description
+            "rewrite packet cos and send it";
+          type cos_value-type;
+        }
+      }
+    }
+    container conform-set-cos-transmit-table {
+      tailf:cli-no-keyword;
+      tailf:cli-drop-node-name;
+      tailf:cli-flatten-container;
+      container conform-action {
+        tailf:info "action when rate is less than conform burst";
+        description
+          "action when rate is less than conform burst";
+        tailf:cli-compact-syntax;
+        tailf:cli-flatten-container;
+        tailf:cli-sequence-commands;
+        leaf set-cos-transmit {
+          tailf:info "rewrite packet cos and send it";
+          description
+            "rewrite packet cos and send it";
+          type cos_value-type;
+        }
+        leaf table {
+          tailf:info "Specify table-map";
+          description
+            "Specify table-map";
+          type leafref {
+            path "/ios:native/table-map/name";
+          }
+        }
+      }
+    }
+    container conform-set-discard-class-transmit {
+      tailf:cli-no-keyword;
+      tailf:cli-drop-node-name;
+      tailf:cli-flatten-container;
+      container conform-action {
+        tailf:info "action when rate is less than conform burst";
+        description
+          "action when rate is less than conform burst";
+        tailf:cli-flatten-container;
+        leaf set-discard-class-transmit {
+          tailf:info "set discard-class and send it";
+          description
+            "set discard-class and send it";
+          type uint8 {
+            tailf:info "<0-7>;;new discard-class";
+            range "0..7";
+          }
+        }
+      }
+    }
+    container conform-set-dscp-transmit {
+      tailf:cli-no-keyword;
+      tailf:cli-drop-node-name;
+      tailf:cli-flatten-container;
+      container conform-action {
+        tailf:info "action when rate is less than conform burst";
+        description
+          "action when rate is less than conform burst";
+        tailf:cli-flatten-container;
+        leaf set-dscp-transmit {
+          tailf:info "set dscp and send it";
+          description
+            "set dscp and send it";
+          type dscp-type;
+        }
+      }
+    }
+    container conform-set-dscp-transmit-table {
+      tailf:cli-no-keyword;
+      tailf:cli-drop-node-name;
+      tailf:cli-flatten-container;
+      container conform-action {
+        tailf:info "action when rate is less than conform burst";
+        description
+          "action when rate is less than conform burst";
+        tailf:cli-compact-syntax;
+        tailf:cli-flatten-container;
+        tailf:cli-sequence-commands;
+        leaf set-dscp-transmit {
+          tailf:info "set dscp and send it";
+          description
+            "set dscp and send it";
+          type dscp-type;
+        }
+        leaf table {
+          tailf:info "Specify table-map";
+          description
+            "Specify table-map";
+          type leafref {
+            path "/ios:native/table-map/name";
+          }
+        }
+      }
+    }
+    container conform-set-frde-transmit {
+      tailf:cli-no-keyword;
+      tailf:cli-drop-node-name;
+      tailf:cli-flatten-container;
+      container conform-action {
+        tailf:info "action when rate is less than conform burst";
+        description
+          "action when rate is less than conform burst";
+        tailf:cli-flatten-container;
+        leaf set-frde-transmit {
+          tailf:info "set FR DE and send it";
+          description
+            "set FR DE and send it";
+          type empty;
+        }
+      }
+    }
+    container conform-set-mpls-exp-imposition-transmit {
+      tailf:cli-no-keyword;
+      tailf:cli-drop-node-name;
+      tailf:cli-flatten-container;
+      container conform-action {
+        tailf:info "action when rate is less than conform burst";
+        description
+          "action when rate is less than conform burst";
+        tailf:cli-flatten-container;
+        leaf set-mpls-exp-imposition-transmit {
+          tailf:info "set exp at tag imposition and send it";
+          description
+            "set exp at tag imposition and send it";
+          type exp_value-type;
+        }
+      }
+    }
+    container conform-set-mpls-exp-imposition-transmit-table {
+      tailf:cli-no-keyword;
+      tailf:cli-drop-node-name;
+      tailf:cli-flatten-container;
+      container conform-action {
+        tailf:info "action when rate is less than conform burst";
+        description
+          "action when rate is less than conform burst";
+        tailf:cli-compact-syntax;
+        tailf:cli-flatten-container;
+        tailf:cli-sequence-commands;
+        leaf set-mpls-exp-imposition-transmit {
+          tailf:info "set exp at tag imposition and send it";
+          description
+            "set exp at tag imposition and send it";
+          type exp_value-type;
+        }
+        leaf table {
+          tailf:info "Specify table-map";
+          description
+            "Specify table-map";
+          type leafref {
+            path "/ios:native/table-map/name";
+          }
+        }
+      }
+    }
+    container conform-set-mpls-exp-topmost-transmit {
+      tailf:cli-no-keyword;
+      tailf:cli-drop-node-name;
+      tailf:cli-flatten-container;
+      container conform-action {
+        tailf:info "action when rate is less than conform burst";
+        description
+          "action when rate is less than conform burst";
+        tailf:cli-flatten-container;
+        leaf set-mpls-exp-topmost-transmit {
+          tailf:info "set exp on topmost label and send it";
+          description
+            "set exp on topmost label and send it";
+          type exp_value-type;
+        }
+      }
+    }
+    container conform-set-mpls-exp-topmost-transmit-table {
+      tailf:cli-no-keyword;
+      tailf:cli-drop-node-name;
+      tailf:cli-flatten-container;
+      container conform-action {
+        tailf:info "action when rate is less than conform burst";
+        description
+          "action when rate is less than conform burst";
+        tailf:cli-compact-syntax;
+        tailf:cli-flatten-container;
+        tailf:cli-sequence-commands;
+        leaf set-mpls-exp-topmost-transmit {
+          tailf:info "set exp on topmost label and send it";
+          description
+            "set exp on topmost label and send it";
+          type exp_value-type;
+        }
+        leaf table {
+          tailf:info "Specify table-map";
+          description
+            "Specify table-map";
+          type leafref {
+            path "/ios:native/table-map/name";
+          }
+        }
+      }
+    }
+    container conform-set-prec-transmit {
+      tailf:cli-no-keyword;
+      tailf:cli-drop-node-name;
+      tailf:cli-flatten-container;
+      container conform-action {
+        tailf:info "action when rate is less than conform burst";
+        description
+          "action when rate is less than conform burst";
+        tailf:cli-flatten-container;
+        leaf set-prec-transmit {
+          tailf:info "rewrite packet precedence and send it";
+          description
+            "rewrite packet precedence and send it";
+          type prec_value-type;
+        }
+      }
+    }
+    container conform-set-prec-transmit-table {
+      tailf:cli-no-keyword;
+      tailf:cli-drop-node-name;
+      tailf:cli-flatten-container;
+      container conform-action {
+        tailf:info "action when rate is less than conform burst";
+        description
+          "action when rate is less than conform burst";
+        tailf:cli-compact-syntax;
+        tailf:cli-flatten-container;
+        tailf:cli-sequence-commands;
+        leaf set-prec-transmit {
+          tailf:info "rewrite packet precedence and send it";
+          description
+            "rewrite packet precedence and send it";
+          type prec_value-type;
+        }
+        leaf table {
+          tailf:info "Specify table-map";
+          description
+            "Specify table-map";
+          type leafref {
+            path "/ios:native/table-map/name";
+          }
+        }
+      }
+    }
+    container conform-set-qos-transmit {
+      tailf:cli-no-keyword;
+      tailf:cli-drop-node-name;
+      tailf:cli-flatten-container;
+      container conform-action {
+        tailf:info "action when rate is less than conform burst";
+        description
+          "action when rate is less than conform burst";
+        tailf:cli-flatten-container;
+        leaf set-qos-transmit {
+          tailf:info "set qos-group and send it";
+          description
+            "set qos-group and send it";
+          type qos_value-type;
+        }
+      }
+    }
+    container conform-set-qos-transmit-table {
+      tailf:cli-no-keyword;
+      tailf:cli-drop-node-name;
+      tailf:cli-flatten-container;
+      container conform-action {
+        tailf:info "action when rate is less than conform burst";
+        description
+          "action when rate is less than conform burst";
+        tailf:cli-compact-syntax;
+        tailf:cli-flatten-container;
+        tailf:cli-sequence-commands;
+        leaf set-qos-transmit {
+          tailf:info "set qos-group and send it";
+          description
+            "set qos-group and send it";
+          type qos_value-type;
+        }
+        leaf table {
+          tailf:info "Specify table-map";
+          description
+            "Specify table-map";
+          type leafref {
+            path "/ios:native/table-map/name";
+          }
+        }
+      }
+    }
+    container conform-transmit {
+      tailf:cli-no-keyword;
+      tailf:cli-drop-node-name;
+      tailf:cli-flatten-container;
+      container conform-action {
+        tailf:info "action when rate is less than conform burst";
+        description
+          "action when rate is less than conform burst";
+        tailf:cli-flatten-container;
+        uses police-action-transmit-grouping;
+      }
+    }
+    container conform-drop {
+      tailf:cli-no-keyword;
+      tailf:cli-drop-node-name;
+      tailf:cli-flatten-container;
+      container conform-action {
+        tailf:info "action when rate is less than conform burst";
+        description
+          "action when rate is less than conform burst";
+        tailf:cli-flatten-container;
+        uses police-action-drop-grouping;
+      }
+    }
+  }
+
+  grouping police-exceed-action-grouping {
+    container exceed-dscp {
+      tailf:cli-no-keyword;
+      tailf:cli-drop-node-name;
+      tailf:cli-flatten-container;
+      container exceed-action {
+        tailf:info "action when rate is within conform and conform + exceed burst";
+        description
+          "action when rate is within conform and conform + exceed burst";
+        tailf:cli-flatten-container;
+        leaf dscp {
+          type dscp-type;
+        }
+      }
+    }
+    container exceed-set-clp-transmit {
+      tailf:cli-no-keyword;
+      tailf:cli-drop-node-name;
+      tailf:cli-flatten-container;
+      container exceed-action {
+        tailf:info "action when rate is within conform and conform + exceed burst";
+        description
+          "action when rate is within conform and conform + exceed burst";
+        tailf:cli-flatten-container;
+        leaf set-clp-transmit {
+          tailf:info "set atm clp and send it";
+          description
+            "set atm clp and send it";
+          type empty;
+        }
+      }
+    }
+    container exceed-set-cos-transmit {
+      tailf:cli-no-keyword;
+      tailf:cli-drop-node-name;
+      tailf:cli-flatten-container;
+      container exceed-action {
+        tailf:info "action when rate is within conform and conform + exceed burst";
+        description
+          "action when rate is within conform and conform + exceed burst";
+        tailf:cli-flatten-container;
+        leaf set-cos-transmit {
+          tailf:info "rewrite packet cos and send it";
+          description
+            "rewrite packet cos and send it";
+          type cos_value-type;
+        }
+      }
+    }
+    container exceed-set-discard-class-transmit {
+      tailf:cli-no-keyword;
+      tailf:cli-drop-node-name;
+      tailf:cli-flatten-container;
+      container exceed-action {
+        tailf:info "action when rate is within conform and conform + exceed burst";
+        description
+          "action when rate is within conform and conform + exceed burst";
+        tailf:cli-flatten-container;
+        leaf set-discard-class-transmit {
+          tailf:info "set discard-class and send it";
+          description
+            "set discard-class and send it";
+          type uint8 {
+            tailf:info "<0-7>;;new discard-class";
+            range "0..7";
+          }
+        }
+      }
+    }
+    container exceed-set-dscp-transmit {
+      tailf:cli-no-keyword;
+      tailf:cli-drop-node-name;
+      tailf:cli-flatten-container;
+      container exceed-action {
+        tailf:info "action when rate is within conform and conform + exceed burst";
+        description
+          "action when rate is within conform and conform + exceed burst";
+        tailf:cli-flatten-container;
+        leaf set-dscp-transmit {
+          tailf:info "set dscp and send it";
+          description
+            "set dscp and send it";
+          type dscp-type;
+        }
+        container set-dscp-transmit-c {
+          tailf:alt-name "set-dscp-transmit";
+          container dscp {
+            leaf table {
+              type enumeration {
+                enum "policed-dscp";
+              }
+            }
+          }
+        }
+      }
+    }
+    container exceed-set-frde-transmit {
+      tailf:cli-no-keyword;
+      tailf:cli-drop-node-name;
+      tailf:cli-flatten-container;
+      container exceed-action {
+        tailf:info "action when rate is within conform and conform + exceed burst";
+        description
+          "action when rate is within conform and conform + exceed burst";
+        tailf:cli-flatten-container;
+        leaf set-frde-transmit {
+          tailf:info "set FR DE and send it";
+          description
+            "set FR DE and send it";
+          type empty;
+        }
+      }
+    }
+    container exceed-set-mpls-exp-imposition-transmit {
+      tailf:cli-no-keyword;
+      tailf:cli-drop-node-name;
+      tailf:cli-flatten-container;
+      container exceed-action {
+        tailf:info "action when rate is within conform and conform + exceed burst";
+        description
+          "action when rate is within conform and conform + exceed burst";
+        tailf:cli-flatten-container;
+        leaf set-mpls-exp-imposition-transmit {
+          tailf:info "set exp at tag imposition and send it";
+          description
+            "set exp at tag imposition and send it";
+          type exp_value-type;
+        }
+      }
+    }
+    container exceed-set-mpls-exp-topmost-transmit {
+      tailf:cli-no-keyword;
+      tailf:cli-drop-node-name;
+      tailf:cli-flatten-container;
+      container exceed-action {
+        tailf:info "action when rate is within conform and conform + exceed burst";
+        description
+          "action when rate is within conform and conform + exceed burst";
+        tailf:cli-flatten-container;
+        leaf set-mpls-exp-topmost-transmit {
+          tailf:info "set exp on topmost label and send it";
+          description
+            "set exp on topmost label and send it";
+          type exp_value-type;
+        }
+      }
+    }
+    container exceed-set-prec-transmit {
+      tailf:cli-no-keyword;
+      tailf:cli-drop-node-name;
+      tailf:cli-flatten-container;
+      container exceed-action {
+        tailf:info "action when rate is within conform and conform + exceed burst";
+        description
+          "action when rate is within conform and conform + exceed burst";
+        tailf:cli-flatten-container;
+        leaf set-prec-transmit {
+          tailf:info "rewrite packet precedence and send it";
+          description
+            "rewrite packet precedence and send it";
+          type prec_value-type;
+        }
+      }
+    }
+    container exceed-set-qos-transmit {
+      tailf:cli-no-keyword;
+      tailf:cli-drop-node-name;
+      tailf:cli-flatten-container;
+      container exceed-action {
+        tailf:info "action when rate is within conform and conform + exceed burst";
+        description
+          "action when rate is within conform and conform + exceed burst";
+        tailf:cli-flatten-container;
+        leaf set-qos-transmit {
+          tailf:info "set qos-group and send it";
+          description
+            "set qos-group and send it";
+          type qos_value-type;
+        }
+      }
+    }
+    container exceed-transmit {
+      tailf:cli-no-keyword;
+      tailf:cli-drop-node-name;
+      tailf:cli-flatten-container;
+      container exceed-action {
+        tailf:info "action when rate is within conform and conform + exceed burst";
+        description
+          "action when rate is within conform and conform + exceed burst";
+        tailf:cli-flatten-container;
+        uses police-action-transmit-grouping;
+      }
+    }
+    container exceed-drop {
+      tailf:cli-no-keyword;
+      tailf:cli-drop-node-name;
+      tailf:cli-flatten-container;
+      container exceed-action {
+        tailf:info "action when rate is within conform and conform + exceed burst";
+        description
+          "action when rate is within conform and conform + exceed burst";
+        tailf:cli-flatten-container;
+        uses police-action-drop-grouping;
+      }
+    }
+  }
+
+  grouping police-violate-action-grouping {
+    container violate-set-clp-transmit {
+      tailf:cli-no-keyword;
+      tailf:cli-drop-node-name;
+      tailf:cli-flatten-container;
+      container violate-action {
+        tailf:info "action when rate is greater than conform + exceed burst";
+        description
+          "action when rate is greater than conform + exceed burst";
+        tailf:cli-flatten-container;
+        leaf set-clp-transmit {
+          tailf:info "set atm clp and send it";
+          description
+            "set atm clp and send it";
+          type empty;
+        }
+      }
+    }
+    container violate-set-cos-transmit {
+      tailf:cli-no-keyword;
+      tailf:cli-drop-node-name;
+      tailf:cli-flatten-container;
+      container violate-action {
+        tailf:info "action when rate is greater than conform + exceed burst";
+        description
+          "action when rate is greater than conform + exceed burst";
+        tailf:cli-flatten-container;
+        leaf set-cos-transmit {
+          tailf:info "rewrite packet cos and send it";
+          description
+            "rewrite packet cos and send it";
+          type cos_value-type;
+        }
+      }
+    }
+    container violate-set-discard-class-transmit {
+      tailf:cli-no-keyword;
+      tailf:cli-drop-node-name;
+      tailf:cli-flatten-container;
+      container violate-action {
+        tailf:info "action when rate is greater than conform + exceed burst";
+        description
+          "action when rate is greater than conform + exceed burst";
+        tailf:cli-flatten-container;
+        leaf set-discard-class-transmit {
+          tailf:info "set discard-class and send it";
+          description
+            "set discard-class and send it";
+          type uint8 {
+            tailf:info "<0-7>;;new discard-class";
+            range "0..7";
+          }
+        }
+      }
+    }
+    container violate-set-dscp-transmit {
+      tailf:cli-no-keyword;
+      tailf:cli-drop-node-name;
+      tailf:cli-flatten-container;
+      container violate-action {
+        tailf:info "action when rate is greater than conform + exceed burst";
+        description
+          "action when rate is greater than conform + exceed burst";
+        tailf:cli-flatten-container;
+        leaf set-dscp-transmit {
+          tailf:info "set dscp and send it";
+          description
+            "set dscp and send it";
+          type dscp-type;
+        }
+      }
+    }
+    container violate-set-frde-transmit {
+      tailf:cli-no-keyword;
+      tailf:cli-drop-node-name;
+      tailf:cli-flatten-container;
+      container violate-action {
+        tailf:info "action when rate is greater than conform + exceed burst";
+        description
+          "action when rate is greater than conform + exceed burst";
+        tailf:cli-flatten-container;
+        leaf set-frde-transmit {
+          tailf:info "set FR DE and send it";
+          description
+            "set FR DE and send it";
+          type empty;
+        }
+      }
+    }
+    container violate-set-mpls-exp-imposition-transmit {
+      tailf:cli-no-keyword;
+      tailf:cli-drop-node-name;
+      tailf:cli-flatten-container;
+      container violate-action {
+        tailf:info "action when rate is greater than conform + exceed burst";
+        description
+          "action when rate is greater than conform + exceed burst";
+        tailf:cli-flatten-container;
+        leaf set-mpls-exp-imposition-transmit {
+          tailf:info "set exp at tag imposition and send it";
+          description
+            "set exp at tag imposition and send it";
+          type exp_value-type;
+        }
+      }
+    }
+    container violate-set-mpls-exp-topmost-transmit {
+      tailf:cli-no-keyword;
+      tailf:cli-drop-node-name;
+      tailf:cli-flatten-container;
+      container violate-action {
+        tailf:info "action when rate is greater than conform + exceed burst";
+        description
+          "action when rate is greater than conform + exceed burst";
+        tailf:cli-flatten-container;
+        leaf set-mpls-exp-topmost-transmit {
+          tailf:info "set exp on topmost label and send it";
+          description
+            "set exp on topmost label and send it";
+          type exp_value-type;
+        }
+      }
+    }
+    container violate-set-prec-transmit {
+      tailf:cli-no-keyword;
+      tailf:cli-drop-node-name;
+      tailf:cli-flatten-container;
+      container violate-action {
+        tailf:info "action when rate is greater than conform + exceed burst";
+        description
+          "action when rate is greater than conform + exceed burst";
+        tailf:cli-flatten-container;
+        leaf set-prec-transmit {
+          tailf:info "rewrite packet precedence and send it";
+          description
+            "rewrite packet precedence and send it";
+          type prec_value-type;
+        }
+      }
+    }
+    container violate-set-qos-transmit {
+      tailf:cli-no-keyword;
+      tailf:cli-drop-node-name;
+      tailf:cli-flatten-container;
+      container violate-action {
+        tailf:info "action when rate is greater than conform + exceed burst";
+        description
+          "action when rate is greater than conform + exceed burst";
+        tailf:cli-flatten-container;
+        leaf set-qos-transmit {
+          tailf:info "set qos-group and send it";
+          description
+            "set qos-group and send it";
+          type qos_value-type;
+        }
+      }
+    }
+    container violate-transmit {
+      tailf:cli-no-keyword;
+      tailf:cli-drop-node-name;
+      tailf:cli-flatten-container;
+      container violate-action {
+        tailf:info "action when rate is greater than conform + exceed burst";
+        description
+          "action when rate is greater than conform + exceed burst";
+        tailf:cli-flatten-container;
+        uses police-action-transmit-grouping;
+      }
+    }
+    container violate-drop {
+      tailf:cli-no-keyword;
+      tailf:cli-drop-node-name;
+      tailf:cli-flatten-container;
+      container violate-action {
+        tailf:info "action when rate is greater than conform + exceed burst";
+        description
+          "action when rate is greater than conform + exceed burst";
+        tailf:cli-flatten-container;
+        uses police-action-drop-grouping;
+      }
+    }
+  }
+
+  grouping police-action-grouping {
+    container actions {
+      tailf:cli-break-sequence-commands;
+      tailf:cli-no-keyword;
+      tailf:cli-drop-node-name;
+      tailf:cli-flatten-container;
+      uses police-conform-action-grouping;
+      uses police-exceed-action-grouping;
+      uses police-violate-action-grouping;
+    }
+  }
+
+  grouping password-grouping {
+    container password-container {
+      tailf:cli-compact-syntax;
+      tailf:cli-flatten-container;
+      tailf:cli-sequence-commands;
+      tailf:cli-drop-node-name;
+      leaf encryption {
+        tailf:cli-drop-node-name;
+        tailf:cli-incomplete-command;
+        tailf:cli-optional-in-sequence;
+        type uint8 {
+          range "0..7";
+          tailf:info "<0-7>;;Encryption type (0 to disable encryption, 7 for proprietary)";
+        }
+        default "0";
+      }
+      leaf password {
+        tailf:cli-drop-node-name;
+        tailf:cli-trim-default;
+        type string {
+          pattern "([1-680-9a-zA-Z].*)|(0.+)|(7.+)";
+          tailf:info "LINE;;The password";
+        }
+      }
+    }
+  }
+
+  grouping distribute-list-grouping {
+    container distribute-list {
+      tailf:info "Filter networks in routing updates";
+      description
+        "Filter networks in routing updates";
+      list accesslist {
+        tailf:cli-drop-node-name;
+        tailf:cli-compact-syntax;
+        tailf:cli-suppress-mode;
+        tailf:cli-delete-when-empty;
+        tailf:cli-suppress-list-no;
+        key "in-out";
+        leaf in-out {
+          type access-list-in-out-type;
+        }
+      }
+      list accesslist-ifname {
+        tailf:cli-drop-node-name;
+        tailf:cli-compact-syntax;
+        tailf:cli-suppress-mode;
+        tailf:cli-delete-when-empty;
+        tailf:cli-suppress-list-no;
+        tailf:cli-diff-dependency "/ios:native/interface";
+        key "in-out interface";
+        leaf in-out {
+          type access-list-in-out-type;
+        }
+        leaf interface {
+          type string {
+            tailf:info "WORD;;Interface name/routing protocol name";
+          }
+        }
+        leaf interface-routing-id {
+          tailf:cli-drop-node-name;
+          type uint8 {
+            tailf:info "Interface id/routing protocol process id";
+          }
+        }
+        leaf isis-tag {
+          tailf:cli-drop-node-name;
+          type string {
+            tailf:info "WORD;;ISO routing area tag";
+          }
+        }
+        leaf vrf {
+          tailf:info "VPN Routing/Forwarding Instance";
+          description
+            "VPN Routing/Forwarding Instance";
+          type string {
+            tailf:info "WORD;;VPN Routing/Forwarding Instance (VRF) name";
+          }
+        }
+      }
+      list accesslist-prefix-gateway {
+        tailf:cli-drop-node-name;
+        tailf:cli-compact-syntax;
+        tailf:cli-suppress-mode;
+        tailf:cli-delete-when-empty;
+        tailf:cli-suppress-list-no;
+        tailf:cli-sequence-commands;
+        key "in-out";
+        leaf prefix-gateway {
+          tailf:cli-drop-node-name;
+          tailf:cli-incomplete-command;
+          mandatory true;
+          tailf:cli-prefix-key;
+          type enumeration {
+            enum "prefix" {
+              tailf:info "Filter prefixes in routing updates";
+            }
+            enum "gateway" {
+              tailf:info "Filtering incoming updates based on gateway";
+            }
+            enum "route-map" {
+              tailf:info "Filter prefixes based on the route-map";
+            }
+          }
+        }
+        leaf name {
+          tailf:cli-drop-node-name;
+          mandatory true;
+          tailf:cli-prefix-key;
+          tailf:cli-disallow-value "in|out";
+          type string {
+            tailf:info "WORD;;Name of an IP prefix-list";
+          }
+        }
+        leaf in-out {
+          type access-list-in-out-type;
+        }
+      }
+      list accesslist-prefix-gateway-ifname {
+        tailf:cli-drop-node-name;
+        tailf:cli-compact-syntax;
+        tailf:cli-suppress-mode;
+        tailf:cli-delete-when-empty;
+        tailf:cli-suppress-list-no;
+        key "in-out interface";
+        leaf prefix-gateway {
+          tailf:cli-drop-node-name;
+          tailf:cli-incomplete-command;
+          mandatory true;
+          tailf:cli-prefix-key;
+          type enumeration {
+            enum "prefix" {
+              tailf:info "Filter prefixes in routing updates";
+            }
+            enum "gateway" {
+              tailf:info "Filtering incoming updates based on gateway";
+            }
+            enum "route-map" {
+              tailf:info "Filter prefixes based on the route-map";
+            }
+          }
+        }
+        leaf name {
+          tailf:cli-drop-node-name;
+          mandatory true;
+          tailf:cli-prefix-key;
+          tailf:cli-disallow-value "in|out";
+          type string {
+            tailf:info "WORD;;Name of an IP prefix-list";
+          }
+        }
+        leaf in-out {
+          type access-list-in-out-type;
+        }
+        leaf interface {
+          type string {
+            tailf:info "WORD;;Interface name";
+          }
+        }
+        leaf interface-routing-id {
+          tailf:cli-drop-node-name;
+          type uint8 {
+            tailf:info "Interface id/routing protocol process id";
+          }
+        }
+        leaf isis-tag {
+          tailf:cli-drop-node-name;
+          type string {
+            tailf:info "WORD;;ISO routing area tag";
+          }
+        }
+        leaf vrf {
+          tailf:info "VPN Routing/Forwarding Instance";
+          description
+            "VPN Routing/Forwarding Instance";
+          type string {
+            tailf:info "WORD;;VPN Routing/Forwarding Instance (VRF) name";
+          }
+        }
+      }
+    }
+  }
+
+  grouping ipv6-router-distribute-list-grouping {
+    container distribute-list {
+      tailf:info "Filter networks in routing updates";
+      description
+        "Filter networks in routing updates";
+      list prefix-list {
+        tailf:info "Filter connections based on an IPv6 prefix-list";
+        description
+          "Filter connections based on an IPv6 prefix-list";
+        tailf:cli-suppress-mode;
+        key "name";
+        leaf name {
+          type string {
+            tailf:info "WORD;;Prefix-list name";
+          }
+        }
+        leaf in {
+          tailf:info "Filter incoming routing updates";
+          description
+            "Filter incoming routing updates";
+          type string {
+            tailf:info "WORD;;interface name";
+          }
+        }
+        leaf out {
+          tailf:info "Filter outgoing routing updates";
+          description
+            "Filter outgoing routing updates";
+          type string {
+            tailf:info "WORD;;interface name";
+          }
+        }
+      }
+    }
+  }
+
+  grouping passive-interface-grouping {
+    container passive-interface {
+      tailf:info "Suppress routing updates on an interface";
+      description
+        "Suppress routing updates on an interface";
+      choice passive-interface-choice {
+        leaf default {
+          tailf:info "Suppress routing updates on all interfaces";
+          description
+            "Suppress routing updates on all interfaces";
+          type empty;
+        }
+        leaf interface {
+          tailf:cli-drop-node-name;
+          tailf:cli-multi-value;
+          type string {
+            tailf:info "WORD;;Interface name";
+          }
+        }
+      }
+    }
+    container disable {
+      when "../passive-interface/default";
+      list passive-interface {
+        tailf:cli-suppress-mode;
+        tailf:cli-delete-when-empty;
+        tailf:cli-compact-syntax;
+        key "interface";
+        leaf interface {
+          tailf:cli-drop-node-name;
+          tailf:cli-multi-word-key;
+          type string {
+            tailf:info "WORD;;Interface name";
+          }
+        }
+      }
+    }
+  }
+
+  grouping interface-grouping {
+    choice interface-choice {
+      leaf AppNav-Compress {
+        tailf:info "Service-Context Virtual Interface Compress";
+        description
+          "Service-Context Virtual Interface Compress";
+        tailf:cli-allow-join-with-value {
+          tailf:cli-display-joined;
+        }
+        type uint16;
+        tailf:non-strict-leafref {
+          path "/ios:native/interface/AppNav-Compress/name";
+        }
+      }
+      leaf AppNav-UnCompress {
+        tailf:info "Service-Context Virtual Interface UnCompress";
+        description
+          "Service-Context Virtual Interface UnCompress";
+        tailf:cli-allow-join-with-value {
+          tailf:cli-display-joined;
+        }
+        type uint16;
+        tailf:non-strict-leafref {
+          path "/ios:native/interface/AppNav-UnCompress/name";
+        }
+      }
+      leaf ATM {
+        tailf:info "ATM interface";
+        description
+          "ATM interface";
+        tailf:cli-allow-join-with-value {
+          tailf:cli-display-joined;
+        }
+        type string {
+          tailf:info "<slot>/<subslot>/<port>;;ATM interface number";
+          pattern "([0-9]/){2}([0-9]|(ima[0-9]))(:[0-9])?";
+        }
+        tailf:non-strict-leafref {
+          path "/ios:native/interface/ATM/name";
+        }
+      }
+      container ATM-subinterface {
+        tailf:cli-no-keyword;
+        tailf:cli-drop-node-name;
+        tailf:cli-flatten-container;
+        tailf:cli-compact-syntax;
+        leaf ATM {
+          tailf:cli-allow-join-with-value {
+            tailf:cli-display-joined;
+          }
+          type string {
+            pattern "([0-9]/){2}[0-9]\\.([0-9]/){3}[0-9]";
+          }
+          tailf:non-strict-leafref {
+            path "/ios:native/interface/ATM-subinterface/ATM/name";
+          }
+        }
+      }
+      leaf ATM-ACR {
+        tailf:info "ATM-ACR interface";
+        description
+          "ATM-ACR interface";
+        tailf:cli-allow-join-with-value {
+          tailf:cli-display-joined;
+        }
+        type string {
+          tailf:info "<slot>/<subslot>/<port>;;ATM-ACR interface number";
+          pattern "[0-9]";
+        }
+        tailf:non-strict-leafref {
+          path "/ios:native/interface/ATM-ACR/name";
+        }
+      }
+      container ATM-ACRsubinterface {
+        tailf:cli-no-keyword;
+        tailf:cli-drop-node-name;
+        tailf:cli-flatten-container;
+        tailf:cli-compact-syntax;
+        leaf ATM-ACR {
+          tailf:cli-allow-join-with-value {
+            tailf:cli-display-joined;
+          }
+          type string {
+            pattern "[0-9]\\.([0-9]/){3}[0-9]";
+          }
+          tailf:non-strict-leafref {
+            path "/ios:native/interface/ATM-ACRsubinterface/ATM-ACR/name";
+          }
+        }
+      }
+      leaf BDI {
+        tailf:info "Bridge-Domain interface";
+        description
+          "Bridge-Domain interface";
+        tailf:cli-allow-join-with-value {
+          tailf:cli-display-joined;
+        }
+        type string;
+        tailf:non-strict-leafref {
+          path "/ios:native/interface/BDI/name";
+        }
+      }
+      leaf CEM {
+        tailf:info "CEM interface";
+        description
+          "CEM interface";
+        tailf:cli-allow-join-with-value {
+          tailf:cli-display-joined;
+        }
+        type string {
+          tailf:info "<slot>/<subslot>/<port>;;CEM interface number";
+          pattern "([0-9]/){2}[0-9]";
+        }
+        tailf:non-strict-leafref {
+          path "/ios:native/interface/CEM/name";
+        }
+      }
+      leaf CEM-ACR {
+        tailf:info "CEM-ACR interface";
+        description
+          "CEM-ACR interface";
+        tailf:cli-allow-join-with-value {
+          tailf:cli-display-joined;
+        }
+        type uint8 {
+          tailf:info "<0-255>;;CEM-ACR interface number";
+          range "0..255";
+        }
+        tailf:non-strict-leafref {
+          path "/ios:native/interface/CEM-ACR/name";
+        }
+      }
+      leaf Embedded-Service-Engine {
+        tailf:info "cisco embedded service engine module";
+        description
+          "cisco embedded service engine module";
+        tailf:cli-allow-join-with-value {
+          tailf:cli-display-joined;
+        }
+        type string;
+        tailf:non-strict-leafref {
+          path "/ios:native/interface/Embedded-Service-Engine/name";
+        }
+      }
+      leaf FastEthernet {
+        tailf:info "FastEthernet IEEE 802.3";
+        description
+          "FastEthernet IEEE 802.3";
+        tailf:cli-allow-join-with-value {
+          tailf:cli-display-joined;
+        }
+        type string;
+        tailf:non-strict-leafref {
+          path "/ios:native/interface/FastEthernet/name";
+        }
+      }
+      leaf GigabitEthernet {
+        tailf:info "GigabitEthernet IEEE 802.3z";
+        description
+          "GigabitEthernet IEEE 802.3z";
+        tailf:cli-allow-join-with-value {
+          tailf:cli-display-joined;
+        }
+        type string;
+        tailf:non-strict-leafref {
+          path "/ios:native/interface/GigabitEthernet/name";
+        }
+      }
+      leaf Loopback {
+        tailf:info "Loopback interface";
+        description
+          "Loopback interface";
+        tailf:cli-allow-join-with-value {
+          tailf:cli-display-joined;
+        }
+        type string;
+        tailf:non-strict-leafref {
+          path "/ios:native/interface/Loopback/name";
+        }
+      }
+      leaf Multilink {
+        tailf:info "Multilink-group interface";
+        description
+          "Multilink-group interface";
+        tailf:cli-allow-join-with-value {
+          tailf:cli-display-joined;
+        }
+        type uint16;
+        tailf:non-strict-leafref {
+          path "/ios:native/interface/Multilink/name";
+        }
+      }
+      leaf nve {
+        tailf:info "Network virtualization endpoint interface";
+        description
+          "Network virtualization endpoint interface";
+        tailf:cli-allow-join-with-value {
+          tailf:cli-display-joined;
+        }
+        type uint16;
+        tailf:non-strict-leafref {
+          path "/ios:native/interface/nve/name";
+        }
+      }
+      leaf overlay {
+        tailf:info "Overlay interface";
+        description
+          "Overlay interface";
+        tailf:cli-allow-join-with-value {
+          tailf:cli-display-joined;
+        }
+        type uint16;
+        tailf:non-strict-leafref {
+          path "/ios:native/interface/overlay/name";
+        }
+      }
+      leaf Port-channel {
+        tailf:info "Ethernet Channel of interfaces";
+        description
+          "Ethernet Channel of interfaces";
+        tailf:cli-allow-join-with-value {
+          tailf:cli-display-joined;
+        }
+        type uint32;
+        tailf:non-strict-leafref {
+          path "/ios:native/interface/Port-channel/name";
+        }
+      }
+      container Port-channel-subinterface {
+        tailf:cli-no-keyword;
+        tailf:cli-drop-node-name;
+        tailf:cli-flatten-container;
+        tailf:cli-compact-syntax;
+        leaf Port-channel {
+          tailf:cli-allow-join-with-value {
+            tailf:cli-display-joined;
+          }
+          type string;
+          tailf:non-strict-leafref {
+            path "/ios:native/interface/Port-channel-subinterface/Port-channel/name";
+          }
+        }
+      }
+      leaf pseudowire {
+        tailf:info "Pseudowire Interface";
+        description
+          "Pseudowire Interface";
+        tailf:cli-allow-join-with-value {
+          tailf:cli-display-joined;
+        }
+        type uint32;
+        tailf:non-strict-leafref {
+          path "/ios:native/interface/pseudowire/name";
+        }
+      }
+      leaf SM {
+        tailf:info "SM Interface";
+        description
+          "SM Interface";
+        tailf:cli-allow-join-with-value {
+          tailf:cli-display-joined;
+        }
+        type string;
+        tailf:non-strict-leafref {
+          path "/ios:native/interface/SM/name";
+        }
+      }
+      leaf Cellular {
+        tailf:info "Cellular Interface";
+        description
+          "Cellular Interface";
+        tailf:cli-allow-join-with-value {
+          tailf:cli-display-joined;
+        }
+        type string;
+        tailf:non-strict-leafref {
+          path "/ios:native/interface/Cellular/name";
+        }
+      }
+      leaf Serial {
+        tailf:info "Serial interface";
+        description
+          "Serial interface";
+        tailf:cli-allow-join-with-value {
+          tailf:cli-display-joined;
+        }
+        type string;
+        tailf:non-strict-leafref {
+          path "/ios:native/interface/Serial/name";
+        }
+      }
+      leaf TenGigabitEthernet {
+        tailf:info "Ten Gigabit Ethernet";
+        description
+          "Ten Gigabit Ethernet";
+        tailf:cli-allow-join-with-value {
+          tailf:cli-display-joined;
+        }
+        type string;
+        tailf:non-strict-leafref {
+          path "/ios:native/interface/TenGigabitEthernet/name";
+        }
+      }
+      leaf Tunnel {
+        tailf:info "Tunnel interface";
+        description
+          "Tunnel interface";
+        tailf:cli-allow-join-with-value {
+          tailf:cli-display-joined;
+        }
+        type uint32;
+        tailf:non-strict-leafref {
+          path "/ios:native/interface/Tunnel/name";
+        }
+      }
+      leaf Virtual-Template {
+        tailf:info "Virtual Template interface";
+        description
+          "Virtual Template interface";
+        tailf:cli-allow-join-with-value {
+          tailf:cli-display-joined;
+        }
+        type uint16 {
+          tailf:info "<1-4095>;;Virtual-Template interface number";
+        }
+        tailf:non-strict-leafref {
+          path "/ios:native/interface/Virtual-Template/name";
+        }
+      }
+      leaf Vlan {
+        tailf:info "Iosxr Vlans";
+        description
+          "Iosxr Vlans";
+        tailf:cli-allow-join-with-value {
+          tailf:cli-display-joined;
+        }
+        type uint16;
+        tailf:non-strict-leafref {
+          path "/ios:native/interface/Vlan/name";
+        }
+      }
+      leaf VirtualPortGroup {
+        tailf:info "Virtual Port Group";
+        description
+          "Virtual Port Group";
+        tailf:cli-allow-join-with-value {
+          tailf:cli-display-joined;
+        }
+        type uint16;
+        tailf:non-strict-leafref {
+          path "/ios:native/interface/VirtualPortGroup/name";
+        }
+      }
+      leaf vasileft {
+        tailf:info "vasileft";
+        description
+          "vasileft";
+        tailf:cli-allow-join-with-value {
+          tailf:cli-display-joined;
+        }
+        type uint16;
+        tailf:non-strict-leafref {
+          path "/ios:native/interface/vasileft/name";
+        }
+      }
+      leaf vasiright {
+        tailf:info "vasiright";
+        description
+          "vasiright";
+        tailf:cli-allow-join-with-value {
+          tailf:cli-display-joined;
+        }
+        type uint16;
+        tailf:non-strict-leafref {
+          path "/ios:native/interface/vasiright/name";
+        }
+      }
+    }
+  }
+
+  grouping ethernet-grouping {
+    choice ethernet-choice {
+      leaf FastEthernet {
+        tailf:info "FastEthernet IEEE 802.3";
+        description
+          "FastEthernet IEEE 802.3";
+        tailf:cli-allow-join-with-value {
+          tailf:cli-display-joined;
+        }
+        type string;
+        tailf:non-strict-leafref {
+          path "/ios:native/interface/FastEthernet/name";
+        }
+      }
+      leaf GigabitEthernet {
+        tailf:info "GigabitEthernet IEEE 802.3z";
+        description
+          "GigabitEthernet IEEE 802.3z";
+        tailf:cli-allow-join-with-value {
+          tailf:cli-display-joined;
+        }
+        type string;
+        tailf:non-strict-leafref {
+          path "/ios:native/interface/GigabitEthernet/name";
+        }
+      }
+      leaf Port-channel {
+        tailf:info "Ethernet Channel of interfaces";
+        description
+          "Ethernet Channel of interfaces";
+        tailf:cli-allow-join-with-value {
+          tailf:cli-display-joined;
+        }
+        type uint32;
+        tailf:non-strict-leafref {
+          path "/ios:native/interface/Port-channel/name";
+        }
+      }
+      leaf TenGigabitEthernet {
+        tailf:info "Ten Gigabit Ethernet";
+        description
+          "Ten Gigabit Ethernet";
+        tailf:cli-allow-join-with-value {
+          tailf:cli-display-joined;
+        }
+        type string;
+        tailf:non-strict-leafref {
+          path "/ios:native/interface/TenGigabitEthernet/name";
+        }
+      }
+    }
+  }
+
+  grouping ip-community-list-standard-grouping {
+    container deny {
+      tailf:info "Specify community to reject";
+      description
+        "Specify community to reject";
+      presence "Specify community to reject";
+      list deny-list {
+        tailf:cli-drop-node-name;
+        tailf:cli-suppress-mode;
+        tailf:cli-delete-when-empty;
+        key "expr";
+        leaf expr {
+          tailf:cli-multi-word-key {
+            tailf:cli-max-words "10";
+          }
+          type string {
+            tailf:info
+              "<1-4294967295>  community number
+               aa:nn           community number
+               internet        Internet (well-known community)
+               local-AS        Do not send outside local AS (well-known community)
+               no-advertise    Do not advertise to any peer (well-known community)
+               no-export       Do not export to next AS (well-known community)
+              ";
+            pattern "((internet)|(local\\-AS)|(no\\-advertise)|(no\\-export)|(\\d+:\\d+)|(\\d+))( (internet)|(local\\-AS)|(no\\-advertise)|(no\\-export)|(\\d+:\\d+)|(\\d+))*";
+          }
+        }
+      }
+    }
+    container permit {
+      tailf:info "Specify community to accept";
+      description
+        "Specify community to accept";
+      presence "Specify community to accept";
+      list permit-list {
+        tailf:cli-drop-node-name;
+        tailf:cli-suppress-mode;
+        tailf:cli-delete-when-empty;
+        key "expr";
+        leaf expr {
+          tailf:cli-multi-word-key {
+            tailf:cli-max-words "10";
+          }
+          type string {
+            tailf:info
+              "<1-4294967295>  community number
+               aa:nn           community number
+               internet        Internet (well-known community)
+               local-AS        Do not send outside local AS (well-known community)
+               no-advertise    Do not advertise to any peer (well-known community)
+               no-export       Do not export to next AS (well-known community)
+              ";
+            pattern "((internet)|(local-AS)|(no-advertise)|(no-export)|(\\d+:\\d+)|(\\d+))( (internet)|(local-AS)|(no-advertise)|(no-export)|(\\d+:\\d+)|(\\d+))*";
+          }
+        }
+      }
+    }
+  }
+
+  grouping ip-community-list-expanded-grouping {
+    container deny {
+      tailf:info "Specify community to reject";
+      description
+        "Specify community to reject";
+      presence "Specify community to reject";
+      list deny-list {
+        tailf:cli-suppress-mode;
+        tailf:cli-delete-when-empty;
+        tailf:cli-drop-node-name;
+        key "expr";
+        leaf expr {
+          tailf:info "LINE;;An ordered list as a regular-expression";
+          description
+            "LINE;;An ordered list as a regular-expression";
+          tailf:cli-multi-word-key {
+            tailf:cli-max-words "10";
+          }
+          type string;
+        }
+      }
+    }
+    container permit {
+      tailf:info "Specify community to accept";
+      description
+        "Specify community to accept";
+      presence "Specify community to accept";
+      list permit-list {
+        tailf:cli-suppress-mode;
+        tailf:cli-delete-when-empty;
+        tailf:cli-drop-node-name;
+        key "expr";
+        leaf expr {
+          tailf:info "LINE;;An ordered list as a regular-expression";
+          description
+            "LINE;;An ordered list as a regular-expression";
+          tailf:cli-multi-word-key {
+            tailf:cli-max-words "10";
+          }
+          type string;
+        }
+      }
+    }
+  }
+
+  grouping ip-route-options-grouping {
+    leaf metric {
+      tailf:cli-drop-node-name;
+      tailf:cli-break-sequence-commands;
+      type uint8 {
+        tailf:info "<1-255>;;Distance metric for this route";
+        range "1..255";
+      }
+    }
+    leaf forwarding-router-adr {
+      tailf:cli-drop-node-name;
+      type inet:ipv4-address {
+        tailf:info "A.B.C.D;;Forwarding router's address";
+      }
+    }
+    leaf global {
+      tailf:info "Next hop address is global";
+      description
+        "Next hop address is global";
+      type empty;
+    }
+    leaf name {
+      tailf:info "Specify name of the next hop";
+      description
+        "Specify name of the next hop";
+      type string {
+        tailf:info "WORD;;Name of the next hop";
+      }
+    }
+    leaf permanent {
+      tailf:info "permanent route";
+      description
+        "permanent route";
+      type empty;
+    }
+    leaf multicast {
+      tailf:info "multicast route";
+      description
+        "multicast route";
+      type empty;
+    }
+    leaf dhcp {
+      tailf:info "Default Gateway obtained from DHCP";
+      description
+        "Default Gateway obtained from DHCP";
+      tailf:cli-case-insensitive;
+      type empty;
+    }
+    leaf tag {
+      tailf:info "Set tag for this route";
+      description
+        "Set tag for this route";
+      type uint32 {
+        tailf:info "<1-4294967295>;;Tag value";
+        range "1..4294967295";
+      }
+    }
+    leaf track {
+      tailf:info "Install route depending on tracked item";
+      description
+        "Install route depending on tracked item";
+      type uint16 {
+        tailf:info "<1-1000>;;tracked object number";
+        range "1..1000";
+      }
+    }
+  }
+
+  grouping special-next-hop-grouping {
+    container special-next-hop {
+      tailf:cli-drop-node-name;
+      tailf:cli-delete-when-empty;
+      tailf:cli-compact-syntax;
+      tailf:cli-reset-container;
+      leaf special-hop {
+        tailf:cli-drop-node-name;
+        type enumeration {
+          tailf:info "Special next hops: null0";
+          enum "null0" {
+            tailf:info "Blackhole";
+          }
+        }
+      }
+    }
+  }
+
+  grouping ip-route-grouping {
+    list ip-route-interface-forwarding-list {
+      tailf:cli-drop-node-name;
+      tailf:cli-suppress-mode;
+      tailf:cli-delete-when-empty;
+      tailf:cli-compact-syntax;
+      tailf:cli-sequence-commands {
+        tailf:cli-reset-all-siblings;
+      }
+      key "prefix mask";
+      leaf prefix {
+        tailf:cli-disallow-value "vrf";
+        type inet:ipv4-address {
+          tailf:info "A.B.C.D;;Destination prefix";
+        }
+      }
+      leaf mask {
+        type inet:ipv4-address {
+          tailf:info "A.B.C.D;;Destination prefix mask";
+        }
+      }
+      choice interface-forwarding {
+        case interface {
+          container interface-name-list {
+            tailf:cli-drop-node-name;
+            tailf:cli-diff-dependency "/ios:native/interface";
+            tailf:cli-case-insensitive;
+            tailf:cli-sequence-commands;
+            tailf:cli-compact-syntax;
+            leaf-list intf {
+              tailf:cli-drop-node-name;
+              tailf:cli-list-syntax;
+              type union {
+                type string {
+                  tailf:info "WORD;;Interface name";
+                }
+                type enumeration {
+                  enum "dhcp" {
+                    tailf:info "Default Gateway obtained from DHCP";
+                  }
+                }
+              }
+            }
+            uses ip-route-options-grouping;
+          }
+          container interface-name {
+            tailf:cli-drop-node-name;
+            tailf:cli-diff-dependency "/ios:native/interface";
+            tailf:cli-case-insensitive;
+            tailf:cli-sequence-commands;
+            tailf:cli-compact-syntax;
+            leaf intf {
+              tailf:cli-drop-node-name;
+              type union {
+                type string {
+                  tailf:info "WORD;;Interface name";
+                }
+                type enumeration {
+                  enum "dhcp" {
+                    tailf:info "Default Gateway obtained from DHCP";
+                  }
+                }
+              }
+            }
+            uses ip-route-options-grouping;
+          }
+        }
+        case forwarding-address {
+          container next-hop {
+            tailf:cli-drop-node-name;
+            leaf addr {
+              tailf:cli-drop-node-name;
+              type union {
+                type inet:ipv4-address {
+                  tailf:info "A.B.C.D;;Forwarding router's address";
+                }
+                type enumeration {
+                  enum "multicast" {
+                    tailf:info "multicast route";
+                  }
+                }
+              }
+            }
+            uses ip-route-options-grouping;
+          }
+        }
+        case special-next-hop {
+          uses special-next-hop-grouping;
+        }
+      }
+    }
+  }
+
+  grouping ip-pim-grouping {
+    container autorp {
+      tailf:info "Configure AutoRP global operations";
+      description
+        "Configure AutoRP global operations";
+      presence "true";
+      leaf listener {
+        tailf:info "Allow AutoRP packets across sparse mode interface";
+        description
+          "Allow AutoRP packets across sparse mode interface";
+        type empty;
+      }
+    }
+    leaf register-source {
+      tailf:info "Source address for PIM Register";
+      description
+        "Source address for PIM Register";
+      tailf:cli-full-command;
+      type string {
+        tailf:info "WORD;;Interface name";
+      }
+    }
+    container rp-address {
+      tailf:info "PIM RP-address (Rendezvous Point)";
+      description
+        "PIM RP-address (Rendezvous Point)";
+      tailf:cli-compact-syntax;
+      tailf:cli-sequence-commands {
+        tailf:cli-reset-siblings;
+      }
+      leaf address {
+        tailf:cli-drop-node-name;
+        type inet:ipv4-address {
+          tailf:info "A.B.C.D;;IP address of Rendezvous-point for group";
+        }
+      }
+      leaf access-list {
+        tailf:cli-drop-node-name;
+        tailf:cli-optional-in-sequence;
+        type union {
+          type uint16 {
+            tailf:info "<1-99>;;Access-list reference for group";
+            range "1..99";
+          }
+          type uint16 {
+            tailf:info "<1300-1999>;;Access-list reference for group (expanded range)";
+            range "1300..1999";
+          }
+          type string {
+            tailf:info "WORD;;IP Named Standard Access list";
+          }
+        }
+      }
+      leaf override {
+        tailf:info "Overrides dynamically learnt RP mappings";
+        description
+          "Overrides dynamically learnt RP mappings";
+        type empty;
+      }
+    }
+    list spt-threshold {
+      tailf:info "Source-tree switching threshold";
+      description
+        "Source-tree switching threshold";
+      tailf:cli-suppress-mode;
+      tailf:cli-compact-syntax;
+      key "how group-list";
+      leaf how {
+        type enumeration {
+          enum "0" {
+            tailf:info "Always switch to source-tree";
+          }
+          enum "infinity" {
+            tailf:info "Never switch to source-tree";
+          }
+        }
+      }
+      leaf group-list {
+        tailf:info "Group address access-list";
+        description
+          "Group address access-list";
+        tailf:cli-expose-key-name;
+        type std-acl-type;
+      }
+    }
+    container ssm {
+      tailf:info "Configure Source Specific Multicast";
+      description
+        "Configure Source Specific Multicast";
+      leaf range {
+        type union {
+          type uint16 {
+            tailf:info "<1-99>;;Access list number";
+            range "1..99";
+          }
+          type string {
+            tailf:info "WORD;;IP named access list";
+            pattern "[a-zA-Z].*";
+          }
+        }
+      }
+    }
+  }
+
+  grouping ip-sla-path-jitter-grouping {
+    leaf frequency {
+      tailf:info "Frequency of an operation";
+      description
+        "Frequency of an operation";
+      tailf:cli-full-command;
+      type uint32 {
+        tailf:info "<1-604800>;;Frequency in seconds";
+        range "1..604800";
+      }
+    }
+    leaf-list lsr-path {
+      tailf:info "Loose Source Routing Path";
+      description
+        "Loose Source Routing Path";
+      tailf:cli-flat-list-syntax;
+      tailf:cli-full-command;
+      type union {
+        type string;
+        type inet:ipv4-address {
+          tailf:info "Hostname or A.B.C.D;;Hop IP Address, broadcast disallowed";
+        }
+      }
+    }
+    leaf owner {
+      tailf:info "Owner of Entry";
+      description
+        "Owner of Entry";
+      tailf:cli-multi-value;
+      tailf:cli-full-command;
+      type string {
+        tailf:info "LINE;;Owner String";
+      }
+    }
+    leaf request-data-size {
+      tailf:info "Request data size";
+      description
+        "Request data size";
+      tailf:cli-full-command;
+      type uint32 {
+        tailf:info "<0-16384>;;Number of bytes in payload";
+        range "0..16384";
+      }
+    }
+    leaf tag {
+      tailf:info "User defined tag";
+      description
+        "User defined tag";
+      tailf:cli-multi-value;
+      tailf:cli-full-command;
+      type string {
+        tailf:info "LINE;;Tag string";
+      }
+    }
+    leaf threshold {
+      tailf:info "Operation threshold in milliseconds";
+      description
+        "Operation threshold in milliseconds";
+      tailf:cli-full-command;
+      type uint32 {
+        tailf:info "<0-60000>;;Millisecond threshold value";
+        range "0..60000";
+      }
+    }
+    leaf timeout {
+      tailf:info "Timeout of an operation";
+      description
+        "Timeout of an operation";
+      tailf:cli-full-command;
+      type uint32 {
+        tailf:info "<0-604800000>;;Timeout in milliseconds";
+        range "0..604800000";
+      }
+    }
+    leaf tos {
+      tailf:info "Type Of Service";
+      description
+        "Type Of Service";
+      tailf:cli-full-command;
+      type uint8 {
+        tailf:info "<0-255>;;Type of Service Value";
+      }
+    }
+    leaf verify-data {
+      tailf:info "Verify data";
+      description
+        "Verify data";
+      tailf:cli-full-command;
+      type empty;
+    }
+    leaf vrf {
+      tailf:info "Configure IP SLAs for a VPN Routing/Forwarding instance";
+      description
+        "Configure IP SLAs for a VPN Routing/Forwarding instance";
+      tailf:cli-full-command;
+      type string {
+        tailf:info "WORD;;VPN Routing/Forwarding instance name";
+      }
+    }
+  }
+
+  grouping ip-sla-default-path-jitter-grouping {
+    leaf frequency {
+      tailf:info "Frequency of an operation";
+      description
+        "Frequency of an operation";
+      tailf:cli-full-command;
+      type empty;
+    }
+    leaf lsr-path {
+      tailf:info "Loose Source Routing Path";
+      description
+        "Loose Source Routing Path";
+      tailf:cli-full-command;
+      type empty;
+    }
+    leaf owner {
+      tailf:info "Owner of Entry";
+      description
+        "Owner of Entry";
+      tailf:cli-full-command;
+      type empty;
+    }
+    leaf request-data-size {
+      tailf:info "Request data size";
+      description
+        "Request data size";
+      tailf:cli-full-command;
+      type empty;
+    }
+    leaf tag {
+      tailf:info "User defined tag";
+      description
+        "User defined tag";
+      tailf:cli-full-command;
+      type empty;
+    }
+    leaf threshold {
+      tailf:info "Operation threshold in milliseconds";
+      description
+        "Operation threshold in milliseconds";
+      tailf:cli-full-command;
+      type empty;
+    }
+    leaf timeout {
+      tailf:info "Timeout of an operation";
+      description
+        "Timeout of an operation";
+      tailf:cli-full-command;
+      type empty;
+    }
+    leaf tos {
+      tailf:info "Type Of Service";
+      description
+        "Type Of Service";
+      tailf:cli-full-command;
+      type empty;
+    }
+    leaf verify-data {
+      tailf:info "Verify data";
+      description
+        "Verify data";
+      tailf:cli-full-command;
+      type empty;
+    }
+    leaf vrf {
+      tailf:info "Configure IP SLAs for a VPN Routing/Forwarding instance";
+      description
+        "Configure IP SLAs for a VPN Routing/Forwarding instance";
+      tailf:cli-full-command;
+      type empty;
+    }
+  }
+
+  grouping ipv6-pim-grouping {
+    container rp-address {
+      tailf:info "Configure Sparse-Mode Rendezvous Point";
+      description
+        "Configure Sparse-Mode Rendezvous Point";
+      tailf:cli-compact-syntax;
+      tailf:cli-sequence-commands {
+        tailf:cli-reset-siblings;
+      }
+      leaf address {
+        tailf:cli-drop-node-name;
+        type union {
+          type string;
+          type inet:ipv6-address {
+            tailf:info "Hostname or X:X:X:X::X;;IP name or address of Rendezvous Point";
+          }
+        }
+      }
+      leaf access-list {
+        tailf:cli-drop-node-name;
+        tailf:cli-break-sequence-commands;
+        type union {
+          type string {
+            tailf:info "WORD;;Named access list of groups that should map to given RP";
+          }
+        }
+      }
+      leaf bidir {
+        tailf:info "Specify keyword bidir to configure a bidir RP";
+        description
+          "Specify keyword bidir to configure a bidir RP";
+        tailf:cli-full-command;
+        type empty;
+      }
+    }
+  }
+
+  grouping ipv6-route-options-grouping {
+    leaf distance {
+      tailf:cli-drop-node-name;
+      type uint8 {
+        tailf:info "<1-254>;;Administrative distance";
+      }
+    }
+    leaf next-hop {
+      tailf:cli-drop-node-name;
+      description
+        "IPv6 address of next-hop";
+      type inet:ipv6-address {
+        tailf:info "X:X:X:X::X;;IPv6 address of next-hop";
+      }
+    }
+    choice type-choice {
+      leaf multicast {
+        tailf:info "Route only usable by multicast";
+        description
+          "Route only usable by multicast";
+        tailf:cli-full-command;
+        type empty;
+      }
+      leaf unicast {
+        tailf:info "Route only usable by unicast";
+        description
+          "Route only usable by unicast";
+        type empty;
+      }
+    }
+    leaf tag {
+      tailf:info "Tag value";
+      description
+        "Tag value";
+      tailf:cli-full-command;
+      type uint32 {
+        tailf:info "<0-4294967295>  Tag value";
+      }
+    }
+    leaf track {
+      tailf:info "Tracked";
+      description
+        "Tracked";
+      type uint32 {
+        tailf:info "<0-4294967295>;;Tracked object";
+      }
+    }
+  }
+
+  grouping ipv6-route-grouping {
+    list ipv6-route-list {
+      tailf:cli-drop-node-name;
+      tailf:cli-suppress-mode;
+      tailf:cli-delete-when-empty;
+      tailf:cli-compact-syntax;
+      tailf:cli-reset-container;
+      tailf:cli-incomplete-command;
+      key "prefix";
+      leaf prefix {
+        type ipv6-prefix {
+          tailf:info "X:X:X:X::X/<0-128>;;IPv6 prefix x:x::y/<z>";
+        }
+      }
+      choice ip-route-options {
+        case interface {
+          container interface-name {
+            tailf:cli-drop-node-name;
+            tailf:cli-delete-when-empty;
+            tailf:cli-compact-syntax;
+            tailf:cli-reset-container;
+            leaf name {
+              tailf:cli-drop-node-name;
+              type string {
+                tailf:info "Interface Name and number";
+              }
+            }
+            uses ipv6-route-options-grouping;
+          }
+        }
+        case next-hop {
+          container ipv6-destination-list {
+            tailf:cli-drop-node-name;
+            tailf:cli-delete-when-empty;
+            tailf:cli-compact-syntax;
+            tailf:cli-reset-container;
+            leaf destination {
+              tailf:cli-drop-node-name;
+              type inet:ipv6-address {
+                tailf:info "X:X:X:X::X;;IPv6 address of next-hop";
+              }
+            }
+            uses ipv6-route-options-grouping;
+          }
+        }
+        case special-next-hop {
+          uses special-next-hop-grouping;
+        }
+      }
+    }
+  }
+
+  grouping random-detect-grouping {
+    leaf min-threshold {
+      tailf:cli-drop-node-name;
+      tailf:cli-incomplete-command;
+      type uint16 {
+        range "1..4096";
+        tailf:info "<1-4096>;;minimum threshold (number of packets)";
+      }
+    }
+    leaf max-threshold {
+      tailf:cli-drop-node-name;
+      tailf:cli-incomplete-command;
+      type uint16 {
+        range "1..4096";
+        tailf:info "<1-4096>;;maximum threshold (number of packets)";
+      }
+    }
+    leaf denominator {
+      tailf:cli-drop-node-name;
+      type uint32 {
+        range "1..65535";
+        tailf:info "<1-65535>;;mark probability denominator";
+      }
+    }
+  }
+
+  grouping class-map-match-grouping {
+    container application {
+      tailf:info "Application to match";
+      description
+        "Application to match";
+      container application-group {
+        tailf:info "Application Group to match";
+        description
+          "Application Group to match";
+        leaf telepresence-group {
+          tailf:info "Telepresence Group";
+          description
+            "Telepresence Group";
+          tailf:cli-full-command;
+          type empty;
+        }
+        leaf vmware-group {
+          tailf:info "VMWARE Group";
+          description
+            "VMWARE Group";
+          tailf:cli-full-command;
+          type empty;
+        }
+        leaf webex-group {
+          tailf:info "WebEx Group";
+          description
+            "WebEx Group";
+          tailf:cli-full-command;
+          type empty;
+        }
+      }
+      container attribute {
+        tailf:info "Application attribute to match";
+        description
+          "Application attribute to match";
+        leaf media-type {
+          tailf:info "Media type attribute to match";
+          description
+            "Media type attribute to match";
+          type enumeration {
+            enum "audio" {
+              tailf:info "Audio";
+            }
+            enum "audio-video" {
+              tailf:info "Audio Video";
+            }
+            enum "control" {
+              tailf:info "Control";
+            }
+            enum "data" {
+              tailf:info "Data";
+            }
+            enum "video" {
+              tailf:info "Video";
+            }
+          }
+        }
+      }
+    }
+    container access-group {
+      tailf:info "Access group";
+      description
+        "Access group";
+      leaf index {
+        tailf:cli-drop-node-name;
+        type uint32 {
+          range "1..2699" {
+            tailf:info "<1-2699>;;Access list index";
+          }
+        }
+      }
+      leaf-list name {
+        tailf:info "Named Access List";
+        description
+          "Named Access List";
+        tailf:cli-list-syntax;
+        type string {
+          tailf:info "WORD;;Access List name";
+        }
+      }
+    }
+    leaf any {
+      tailf:info "Any packets";
+      description
+        "Any packets";
+      type empty;
+    }
+    leaf-list class-map {
+      tailf:info "Class map";
+      description
+        "Class map";
+      tailf:cli-list-syntax;
+      type leafref {
+        path "/ios:native/class-map/name";
+      }
+    }
+    leaf-list cos {
+      tailf:info "IEEE 802.1Q/ISL class of service/user priority values";
+      description
+        "IEEE 802.1Q/ISL class of service/user priority values";
+      tailf:cli-flat-list-syntax;
+      type uint8 {
+        range "0..7";
+        tailf:info "<0-7>;;Enter up to 4 class-of-service values separated by white-spaces";
+      }
+    }
+    container destination-address {
+      tailf:info "Destination address";
+      description
+        "Destination address";
+      leaf-list mac {
+        tailf:info "MAC address";
+        description
+          "MAC address";
+        tailf:cli-list-syntax;
+        type yang:mac-address {
+          tailf:info "H.H.H;;MAC address";
+        }
+      }
+    }
+    leaf-list discard-class {
+      tailf:info "Discard behavior identifier";
+      description
+        "Discard behavior identifier";
+      tailf:cli-list-syntax;
+      type uint8 {
+        range "0..7";
+        tailf:info "<0-7>;;Discard Class value";
+      }
+    }
+    leaf-list dscp {
+      tailf:info "Match DSCP in IP(v4) and IPv6 packets";
+      description
+        "Match DSCP in IP(v4) and IPv6 packets";
+      tailf:cli-flat-list-syntax;
+      tailf:cli-list-syntax;
+      type dscp-type;
+    }
+    leaf fr-de {
+      tailf:info "Match on Frame-relay DE bit";
+      description
+        "Match on Frame-relay DE bit";
+      type empty;
+    }
+    leaf-list fr-dlci {
+      tailf:info "Match on fr-dlci";
+      description
+        "Match on fr-dlci";
+      tailf:cli-list-syntax;
+      type uint16 {
+        range "16..1007";
+        tailf:info "<16-1007>;;frame-relay dlci number";
+      }
+    }
+    leaf-list input-interface {
+      tailf:info "Select an input interface to match";
+      description
+        "Select an input interface to match";
+      tailf:cli-list-syntax;
+      type string;
+    }
+    container ip {
+      tailf:info "IP specific values";
+      description
+        "IP specific values";
+      leaf-list dscp {
+        tailf:info "Match IP DSCP (DiffServ CodePoints)";
+        description
+          "Match IP DSCP (DiffServ CodePoints)";
+        tailf:cli-flat-list-syntax;
+        tailf:cli-list-syntax;
+        type dscp-type;
+      }
+      leaf-list precedence {
+        tailf:info "Match IP precedence";
+        description
+          "Match IP precedence";
+        tailf:cli-flat-list-syntax;
+        type precedence-type;
+      }
+      list rtp {
+        tailf:info "Match RTP port nos";
+        description
+          "Match RTP port nos";
+        key "port1 port2";
+        leaf port1 {
+          type uint16 {
+            range "2000..65535";
+            tailf:info "<2000-65535>;;Lower bound of UDP destination port";
+          }
+        }
+        leaf port2 {
+          type uint16 {
+            range "0..16383";
+            tailf:info "<0-16383>;;Range of UDP ports";
+          }
+        }
+      }
+    }
+    leaf non-client-nrt {
+      tailf:cli-full-command;
+      type empty;
+    }
+    container mpls {
+      tailf:info "Multi Protocol Label Switching specific values";
+      description
+        "Multi Protocol Label Switching specific values";
+      container experimental {
+        tailf:info "Match MPLS experimental";
+        description
+          "Match MPLS experimental";
+        leaf-list topmost {
+          tailf:info "Match MPLS experimental value on topmost label";
+          description
+            "Match MPLS experimental value on topmost label";
+          tailf:cli-flat-list-syntax;
+          type uint8 {
+            range "0..7";
+            tailf:info "<0-7>;;Enter up to 8 experimental values separated by white-spaces";
+          }
+        }
+      }
+    }
+    container packet {
+      tailf:info "Layer 3 Packet length";
+      description
+        "Layer 3 Packet length";
+      container length {
+        tailf:info "Layer 3 Packet length";
+        description
+          "Layer 3 Packet length";
+        leaf max {
+          tailf:info "Maximum length of packet";
+          description
+            "Maximum length of packet";
+          type uint16 {
+            range "1..2000";
+            tailf:info "<1-2000>;;Packet length in bytes";
+          }
+        }
+        leaf min {
+          tailf:info "Minimum length of packet";
+          description
+            "Minimum length of packet";
+          type uint16 {
+            range "1..2000";
+            tailf:info "<1-2000>;;Packet length in bytes";
+          }
+        }
+      }
+    }
+    leaf-list precedence {
+      tailf:info "Match Precedence in IP(v4) and IPv6 packets";
+      description
+        "Match Precedence in IP(v4) and IPv6 packets";
+      tailf:cli-flat-list-syntax;
+      type precedence-type;
+    }
+    container protocol {
+      tailf:info "Protocol";
+      description
+        "Protocol";
+      leaf protocols {
+        tailf:cli-drop-node-name;
+        type enumeration {
+          enum "x802-11-iapp" {
+            tailf:info "IEEE 802.11 WLANs WG IAPP";
+          }
+          enum "ace-svr" {
+            tailf:info "ACE Server/Propagation";
+          }
+          enum "aol" {
+            tailf:info "America-Online Instant Messenger";
+          }
+          enum "appleqtc" {
+            tailf:info "Apple QuickTime";
+          }
+          enum "biff" {
+            tailf:info "Bliff mail notification";
+          }
+          enum "bittorrent" {
+            tailf:info "bittorrent";
+          }
+          enum "bootpc" {
+            tailf:info "Bootstrap Protocol Client";
+          }
+          enum "bootps" {
+            tailf:info "Bootstrap Protocol Server";
+          }
+          enum "cddbp" {
+            tailf:info "CD Database Protocol";
+          }
+          enum "cifs" {
+            tailf:info "CIFS";
+          }
+          enum "cisco-fna" {
+            tailf:info "Cisco FNATIVE";
+          }
+          enum "cisco-net-mgmt" {
+            tailf:info "cisco-net-mgmt";
+          }
+          enum "cisco-svcs" {
+            tailf:info "cisco license/perf/GDP/X.25/ident svcs";
+          }
+          enum "cisco-sys" {
+            tailf:info "Cisco SYSMAINT";
+          }
+          enum "cisco-tdp" {
+            tailf:info "Cisco TDP";
+          }
+          enum "cisco-tna" {
+            tailf:info "Cisco TNATIVE";
+          }
+          enum "citriximaclient" {
+            tailf:info "Citrix IMA Client";
+          }
+          enum "clp" {
+            tailf:info "Cisco Line Protocol";
+          }
+          enum "creativepartnr" {
+            tailf:info "Creative Partnr";
+          }
+          enum "creativeserver" {
+            tailf:info "Creative Server";
+          }
+          enum "daytime" {
+            tailf:info "Daytime (RFC 867)";
+          }
+          enum "dbase" {
+            tailf:info "dBASE Unix";
+          }
+          enum "dbcontrol_agent" {
+            tailf:info "Oracle dbControl Agent po";
+          }
+          enum "ddns-v3" {
+            tailf:info "Dynamic DNS Version 3";
+          }
+          enum "dhcp-failover" {
+            tailf:info "DHCP Failover";
+          }
+          enum "directconnect" {
+            tailf:info "Direct Connect Version 2.0";
+          }
+          enum "discard" {
+            tailf:info "Discard port";
+          }
+          enum "dnsix" {
+            tailf:info "DNSIX Securit Attribute Token Map";
+          }
+          enum "echo" {
+            tailf:info "Echo port";
+          }
+          enum "entrust-svc-hdlr" {
+            tailf:info "Entrust KM/Admin Service Handler";
+          }
+          enum "entrust-svcs" {
+            tailf:info "Entrust sps/aaas/aams";
+          }
+          enum "exec" {
+            tailf:info "Remote Process Execution";
+          }
+          enum "fcip-port" {
+            tailf:info "FCIP";
+          }
+          enum "ftps" {
+            tailf:info "FTP over TLS/SSL";
+          }
+          enum "gdoi" {
+            tailf:info "GDOI";
+          }
+          enum "giop" {
+            tailf:info "Oracle GIOP/SSL";
+          }
+          enum "gtpv0" {
+            tailf:info "GPRS Tunneling Protocol Version 0";
+          }
+          enum "gtpv1" {
+            tailf:info "GPRS Tunneling Protocol Version 1";
+          }
+          enum "h225ras" {
+            tailf:info "H225 RAS over Unicast";
+          }
+          enum "h323callsigalt" {
+            tailf:info "h323 Call Signal Alternate";
+          }
+          enum "hp-alarm-mgr" {
+            tailf:info "HP Performance data alarm manager";
+          }
+          enum "hp-collector" {
+            tailf:info "HP Performance data collector";
+          }
+          enum "hp-managed-node" {
+            tailf:info "HP Performance data managed node";
+          }
+          enum "hsrp" {
+            tailf:info "Hot Standby Router Protocol";
+          }
+          enum "https" {
+            tailf:info "Secure Hypertext Transfer Protocol";
+          }
+          enum "ica" {
+            tailf:info "ica (Citrix)";
+          }
+          enum "icabrowser" {
+            tailf:info "icabrowser (Citrix)";
+          }
+          enum "ident" {
+            tailf:info "Authentication Service";
+          }
+          enum "igmpv3lite" {
+            tailf:info "IGMP over UDP for SSM";
+          }
+          enum "imap3" {
+            tailf:info "Interactive Mail Access Protocol 3";
+          }
+          enum "imaps" {
+            tailf:info "IMAP over TLS/SSL";
+          }
+          enum "ipass" {
+            tailf:info "IPASS";
+          }
+          enum "ipsec-msft" {
+            tailf:info "Microsoft IPsec NAT-T";
+          }
+          enum "irc-serv" {
+            tailf:info "IRC-SERV";
+          }
+          enum "ircs" {
+            tailf:info "IRC over TLS/SSL";
+          }
+          enum "ircu" {
+            tailf:info "IRCU";
+          }
+          enum "isakmp" {
+            tailf:info "ISAKMP";
+          }
+          enum "iscsi" {
+            tailf:info "iSCSI";
+          }
+          enum "iscsi-target" {
+            tailf:info "iSCSI port";
+          }
+          enum "kermit" {
+            tailf:info "kermit";
+          }
+          enum "ldap-admin" {
+            tailf:info "LDAP admin server port";
+          }
+          enum "ldaps" {
+            tailf:info "LDAP over TLS/SSL";
+          }
+          enum "login" {
+            tailf:info "Remote login";
+          }
+          enum "lotusmtap" {
+            tailf:info "Lotus Mail Tracking Agent Protocol";
+          }
+          enum "lotusnote" {
+            tailf:info "Lotus Note";
+          }
+          enum "mapi" {
+            tailf:info "MAPI";
+          }
+          enum "ms-ad-rep" {
+            tailf:info "MS-AD-REP";
+          }
+          enum "ms-exch-nspi" {
+            tailf:info "MS-EXCH-NSPI";
+          }
+          enum "ms-frs" {
+            tailf:info "MS-FRS";
+          }
+          enum "ms-frsapi" {
+            tailf:info "MS-FRSAPI";
+          }
+          enum "ms-rfr" {
+            tailf:info "MS-RFR";
+          }
+          enum "msn-messenger" {
+            tailf:info "MSN-MESSENGER";
+          }
+          enum "netlogon" {
+            tailf:info "NETLOGON";
+          }
+          enum "microsoft-ds" {
+            tailf:info "Microsoft-DS";
+          }
+          enum "ms-cluster-net" {
+            tailf:info "MS Cluster Net";
+          }
+          enum "ms-dotnetster" {
+            tailf:info "Microsoft .NETster Port";
+          }
+          enum "ms-sna" {
+            tailf:info "Microsoft SNA Server/Base";
+          }
+          enum "ms-sql" {
+            tailf:info "Microsoft SQL";
+          }
+          enum "ms-sql-m" {
+            tailf:info "Microsoft SQL Monitor";
+          }
+          enum "msexch-routing" {
+            tailf:info "Microsoft Exchange Routing";
+          }
+          enum "msnmsgr" {
+            tailf:info "MSN Instant Messenger";
+          }
+          enum "msrpc" {
+            tailf:info "Microsoft Remote Procedure Call";
+          }
+          enum "mysql" {
+            tailf:info "MySQL";
+          }
+          enum "n2h2server" {
+            tailf:info "N2H2 Filter Service Port";
+          }
+          enum "ncp" {
+            tailf:info "NCP (Novell)";
+          }
+          enum "net8-cman" {
+            tailf:info "Oracle Net8 Cman/Admin";
+          }
+          enum "netbios-dgm" {
+            tailf:info "NETBIOS Datagram Service";
+          }
+          enum "netbios-ns" {
+            tailf:info "NETBIOS Name Service";
+          }
+          enum "netbios-ssn" {
+            tailf:info "NETBIOS Session Service";
+          }
+          enum "netstat" {
+            tailf:info "Variant of systat";
+          }
+          enum "oem-agent" {
+            tailf:info "OEM Agent (Oracle)";
+          }
+          enum "oracle" {
+            tailf:info "Oracle";
+          }
+          enum "oracle-em-vp" {
+            tailf:info "Oracle EM/VP";
+          }
+          enum "oraclenames" {
+            tailf:info "Oracle Names";
+          }
+          enum "orasrv" {
+            tailf:info "Oracle SQL*Net v1/v2";
+          }
+          enum "pcanywheredata" {
+            tailf:info "pcANYWHEREdata";
+          }
+          enum "pcanywherestat" {
+            tailf:info "pcANYWHEREstat";
+          }
+          enum "pop3s" {
+            tailf:info "POP3 over TLS/SSL";
+          }
+          enum "pwdgen" {
+            tailf:info "Password  Generator Protocol";
+          }
+          enum "qmtp" {
+            tailf:info "Quick Mail Transfer Protocol";
+          }
+          enum "r-winsock" {
+            tailf:info "remote-winsock";
+          }
+          enum "radius" {
+            tailf:info "RADIUS & Accounting";
+          }
+          enum "rdb-dbs-disp" {
+            tailf:info "Oracle RDB";
+          }
+          enum "realmedia" {
+            tailf:info "RealNetwork's Realmedia Protocol";
+          }
+          enum "realsecure" {
+            tailf:info "ISS Real Secure Console Service Port";
+          }
+          enum "router" {
+            tailf:info "Local Routing Process";
+          }
+          enum "rsvp-encap" {
+            tailf:info "RSVP ENCAPSULATION-1/2";
+          }
+          enum "rsvp_tunnel" {
+            tailf:info "RSVP Tunnel";
+          }
+          enum "rtc-pm-port" {
+            tailf:info "Oracle RTC-PM port";
+          }
+          enum "rtelnet" {
+            tailf:info "Remote Telnet Service";
+          }
+          enum "send" {
+            tailf:info "SEND";
+          }
+          enum "shell" {
+            tailf:info "Remote command";
+          }
+          enum "sip-tls" {
+            tailf:info "SIP-TLS";
+          }
+          enum "sms" {
+            tailf:info "SMS RCINFO/XFER/CHAT";
+          }
+          enum "snmptrap" {
+            tailf:info "SNMP Trap";
+          }
+          enum "sql-net" {
+            tailf:info "SQL-NET";
+          }
+          enum "sqlserv" {
+            tailf:info "SQL Services";
+          }
+          enum "sqlsrv" {
+            tailf:info "SQL Service";
+          }
+          enum "sshell" {
+            tailf:info "SSLshell";
+          }
+          enum "ssp" {
+            tailf:info "State Sync Protocol";
+          }
+          enum "syslog-conn" {
+            tailf:info "Reliable Syslog Service";
+          }
+          enum "tacacs" {
+            tailf:info "Login Host Protocol (TACACS)";
+          }
+          enum "tacacs-ds" {
+            tailf:info "TACACS-Database Service";
+          }
+          enum "tarantella" {
+            tailf:info "Tarantella";
+          }
+          enum "tcp" {
+            tailf:info "TCP";
+          }
+          enum "telnets" {
+            tailf:info "Telnet over TLS/SSL";
+          }
+          enum "time" {
+            tailf:info "Time";
+          }
+          enum "timed" {
+            tailf:info "Time server";
+          }
+          enum "tr-rsrb" {
+            tailf:info "cisco RSRB";
+          }
+          enum "ttc" {
+            tailf:info "Oracle TTC/SSL";
+          }
+          enum "udp" {
+            tailf:info "UDP";
+          }
+          enum "uucp" {
+            tailf:info "UUCPD/UUCP-RLOGIN";
+          }
+          enum "vqp" {
+            tailf:info "VQP";
+          }
+          enum "webster" {
+            tailf:info "Network Disctionary";
+          }
+          enum "who" {
+            tailf:info "Who's service";
+          }
+          enum "wins" {
+            tailf:info "Microsoft WINS";
+          }
+          enum "x11" {
+            tailf:info "X Window System";
+          }
+          enum "xdmcp" {
+            tailf:info "XDM Control Protocol";
+          }
+          enum "ymsgr" {
+            tailf:info "Yahoo! Instant Messenger";
+          }
+          enum "aarp" {
+            tailf:info "AppleTalk ARP";
+          }
+          enum "appletalk" {
+            tailf:info "AppleTalk";
+          }
+          enum "arp" {
+            tailf:info "IP ARP";
+          }
+          enum "bgp" {
+            tailf:info "Border Gateway Protocol";
+          }
+          enum "bridge" {
+            tailf:info "Bridging";
+          }
+          enum "bstun" {
+            tailf:info "Block Serial Tunnel";
+          }
+          enum "cdp" {
+            tailf:info "Cisco Discovery Protocol";
+          }
+        }
+      }
+      container citrix {
+        tailf:info "Citrix Systems ICA protocol";
+        description
+          "Citrix Systems ICA protocol";
+        presence "enable citrix system protocol matching";
+        leaf ica-tag {
+          tailf:info "Citrix ICA tag 0-high 1-medium 2-low 3-background";
+          description
+            "Citrix ICA tag 0-high 1-medium 2-low 3-background";
+          type string {
+            tailf:info "WORD;;Enter a string as the sub-protocol parameter";
+          }
+        }
+      }
+      leaf clns {
+        tailf:info "ISO CLNS";
+        description
+          "ISO CLNS";
+        type empty;
+      }
+      leaf clns_es {
+        tailf:info "ISO CLNS End System";
+        description
+          "ISO CLNS End System";
+        type empty;
+      }
+      leaf clns_is {
+        tailf:info "ISO CLNS Intermediate System";
+        description
+          "ISO CLNS Intermediate System";
+        type empty;
+      }
+      leaf cmns {
+        tailf:info "ISO CMNS";
+        description
+          "ISO CMNS";
+        type empty;
+      }
+      leaf compressedtcp {
+        tailf:info "Compressed TCP (VJ";
+        description
+          "Compressed TCP (VJ";
+        type empty;
+      }
+      leaf cuseeme {
+        tailf:info "CU-SeeMe desktop video conference";
+        description
+          "CU-SeeMe desktop video conference";
+        type empty;
+      }
+      leaf decnet {
+        tailf:info "DECnet";
+        description
+          "DECnet";
+        type empty;
+      }
+      leaf decnet_node {
+        tailf:info "DECnet Node";
+        description
+          "DECnet Node";
+        type empty;
+      }
+      leaf decnet_router-l1 {
+        tailf:info "DECnet Router L1";
+        description
+          "DECnet Router L1";
+        type empty;
+      }
+      leaf decnet_router-l2 {
+        tailf:info "DECnet Router L2";
+        description
+          "DECnet Router L2";
+        type empty;
+      }
+      leaf dhcp {
+        tailf:info "Dynamic Host Configuration";
+        description
+          "Dynamic Host Configuration";
+        type empty;
+      }
+      leaf dlsw {
+        type empty;
+        tailf:info "Data Link Switching (Direct encapsulation only";
+      }
+      leaf dns {
+        type empty;
+        tailf:info "Domain Name Server lookup";
+      }
+      leaf edonkey {
+        type empty;
+        tailf:info "eDonkey";
+      }
+      leaf egp {
+        type empty;
+        tailf:info "Exterior Gateway Protocol";
+      }
+      leaf eigrp {
+        type empty;
+        tailf:info "Enhanced Interior Gateway Routing Protocol";
+      }
+      leaf exchange {
+        type empty;
+        tailf:info "MS-RPC for Exchange";
+      }
+      container fasttrack {
+        tailf:info "FastTrack Traffic - KaZaA, Morpheus, Grokster";
+        description
+          "FastTrack Traffic - KaZaA, Morpheus, Grokster";
+        presence "enable fasttrack matching";
+        leaf file-transfer {
+          tailf:info "File transfer stream";
+          description
+            "File transfer stream";
+          type string {
+            tailf:info "WORD;;Enter a string as the sub-protocol parameter";
+          }
+        }
+      }
+      leaf finger {
+        type empty;
+        tailf:info "Finger";
+      }
+      leaf ftp {
+        type empty;
+        tailf:info "File Transfer Protocol";
+      }
+      container gnutella {
+        tailf:info "Gnutella Version2 Traffic - BearShare, Shareeza, Morpheus";
+        description
+          "Gnutella Version2 Traffic - BearShare, Shareeza, Morpheus";
+        presence "enable gnutella matching";
+        leaf file-transfer {
+          tailf:info "File transfer stream";
+          description
+            "File transfer stream";
+          type string {
+            tailf:info "WORD;;Enter a string as the sub-protocol parameter";
+          }
+        }
+      }
+      leaf gopher {
+        type empty;
+        tailf:info "Gopher";
+      }
+      leaf gre {
+        type empty;
+        tailf:info "Generic Routing Encapsulation";
+      }
+      leaf h323 {
+        type empty;
+        tailf:info "H323 Protocol";
+      }
+      container http {
+        tailf:info "World Wide Web traffic";
+        description
+          "World Wide Web traffic";
+        presence "enable http traffic matching";
+        leaf c-header-field {
+          tailf:info "Client general Header Field";
+          description
+            "Client general Header Field";
+          type string {
+            tailf:info "WORD;;Enter a string as the sub-protocol parameter";
+          }
+        }
+        leaf host {
+          tailf:info "Server Host Name";
+          description
+            "Server Host Name";
+          type string {
+            tailf:info "WORD;;Enter a string as the sub-protocol parameter";
+          }
+        }
+        leaf mime {
+          tailf:info "Match MIME Type";
+          description
+            "Match MIME Type";
+          type string {
+            tailf:info "WORD;;Enter a string as the sub-protocol parameter";
+          }
+        }
+        leaf s-header-field {
+          tailf:info "Server general Header Field";
+          description
+            "Server general Header Field";
+          type string {
+            tailf:info "WORD;;Enter a string as the sub-protocol parameter";
+          }
+        }
+        leaf url {
+          tailf:info "Match URL String";
+          description
+            "Match URL String";
+          type string {
+            tailf:info "WORD;;Enter a string as the sub-protocol parameter";
+          }
+        }
+      }
+      leaf icmp {
+        tailf:info "Internet Control Message";
+        description
+          "Internet Control Message";
+        type empty;
+      }
+      leaf imap {
+        tailf:info "Internet Message Access Protocol";
+        description
+          "Internet Message Access Protocol";
+        type empty;
+      }
+      leaf ip {
+        tailf:info "IP";
+        description
+          "IP";
+        type empty;
+      }
+      leaf ipinip {
+        tailf:info "IP in IP (encapsulation";
+        description
+          "IP in IP (encapsulation";
+        type empty;
+      }
+      leaf ipsec {
+        tailf:info "IP Security Protocol (ESP/AH";
+        description
+          "IP Security Protocol (ESP/AH";
+        type empty;
+      }
+      leaf ipv6 {
+        tailf:info "IPV6";
+        description
+          "IPV6";
+        type empty;
+      }
+      leaf ipx {
+        tailf:info "Novell IPX";
+        description
+          "Novell IPX";
+        type empty;
+      }
+      leaf irc {
+        type empty;
+        tailf:info "Internet Relay Chat";
+        description
+          "Internet Relay Chat";
+      }
+      container kazaa2 {
+        tailf:info "Kazaa Version 2";
+        description
+          "Kazaa Version 2";
+        presence "enable kazaa version 2 matching";
+        leaf file-transfer {
+          tailf:info "File transfer stream";
+          description
+            "File transfer stream";
+          type string {
+            tailf:info "WORD;;Enter a string as the sub-protocol parameter";
+          }
+        }
+      }
+      leaf kerberos {
+        tailf:info "Kerberos";
+        description
+          "Kerberos";
+        type empty;
+      }
+      leaf l2tp {
+        tailf:info "L2F/L2TP tunnel";
+        description
+          "L2F/L2TP tunnel";
+        type empty;
+      }
+      leaf ldap {
+        tailf:info "Lightweight Directory Access Protocol";
+        description
+          "Lightweight Directory Access Protocol";
+        type empty;
+      }
+      leaf llc2 {
+        tailf:info "llc2";
+        description
+          "llc2";
+        type empty;
+      }
+      leaf mgcp {
+        tailf:info "Media Gateway Control Protocol";
+        description
+          "Media Gateway Control Protocol";
+        type empty;
+      }
+      container napster {
+        tailf:info "Napster Traffic";
+        description
+          "Napster Traffic";
+        presence "enable napster matching";
+        leaf non-std {
+          tailf:info "Non-standard port advertizements";
+          description
+            "Non-standard port advertizements";
+          type empty;
+        }
+      }
+      leaf netbios {
+        tailf:info "NetBIOS";
+        description
+          "NetBIOS";
+        type empty;
+      }
+      leaf netshow {
+        tailf:info "Microsoft Netshow";
+        description
+          "Microsoft Netshow";
+        type empty;
+      }
+      leaf nfs {
+        tailf:info "Network File System";
+        description
+          "Network File System";
+        type empty;
+      }
+      leaf nntp {
+        tailf:info "Network News Transfer Protocol";
+        description
+          "Network News Transfer Protocol";
+        type empty;
+      }
+      leaf notes {
+        tailf:info "Lotus Notes(R";
+        description
+          "Lotus Notes(R";
+        type empty;
+      }
+      leaf novadigm {
+        tailf:info "Novadigm EDM";
+        description
+          "Novadigm EDM";
+        type empty;
+      }
+      leaf ntp {
+        tailf:info "Network Time Protocol";
+        description
+          "Network Time Protocol";
+        type empty;
+      }
+      leaf ospf {
+        tailf:info "Open Shortest Path First";
+        description
+          "Open Shortest Path First";
+        type empty;
+      }
+      leaf pad {
+        tailf:info "PAD links";
+        description
+          "PAD links";
+        type empty;
+      }
+      leaf pcanywhere {
+        tailf:info "Symantec pcANYWHERE";
+        description
+          "Symantec pcANYWHERE";
+        type empty;
+      }
+      leaf pop3 {
+        tailf:info "Post Office Protocol";
+        description
+          "Post Office Protocol";
+        type empty;
+      }
+      leaf pppoe {
+        tailf:info "PPP over Ethernet";
+        description
+          "PPP over Ethernet";
+        type empty;
+      }
+      leaf pptp {
+        tailf:info "Point-to-Point Tunneling Protocol";
+        description
+          "Point-to-Point Tunneling Protocol";
+        type empty;
+      }
+      leaf printer {
+        tailf:info "print spooler/lpd";
+        description
+          "print spooler/lpd";
+        type empty;
+      }
+      leaf qllc {
+        tailf:info "qllc protocol";
+        description
+          "qllc protocol";
+        type empty;
+      }
+      leaf rcmd {
+        tailf:info "BSD r-commands (rsh, rlogin, rexec";
+        description
+          "BSD r-commands (rsh, rlogin, rexec";
+        type empty;
+      }
+      leaf rip {
+        tailf:info "Routing Information Protocol";
+        description
+          "Routing Information Protocol";
+        type empty;
+      }
+      leaf rsrb {
+        tailf:info "Remote Source-Route Bridging";
+        description
+          "Remote Source-Route Bridging";
+        type empty;
+      }
+      leaf rsvp {
+        tailf:info "Resource Reservation Protocol";
+        description
+          "Resource Reservation Protocol";
+        type empty;
+      }
+      leaf rtcp {
+        tailf:info "Real Time Control Protocol";
+        description
+          "Real Time Control Protocol";
+        type empty;
+      }
+      container rtp {
+        tailf:info "Real Time Protocol";
+        description
+          "Real Time Protocol";
+        presence "enable rtp matching";
+        leaf audio {
+          tailf:info "Match voice packets";
+          description
+            "Match voice packets";
+          type empty;
+        }
+        leaf payload-type {
+          tailf:info "Match an explicit PT";
+          description
+            "Match an explicit PT";
+          type string {
+            tailf:info "WORD;;Enter a string as the sub-protocol parameter";
+          }
+        }
+        leaf video {
+          tailf:info "Match video packets";
+          description
+            "Match video packets";
+          type empty;
+        }
+      }
+      leaf rtsp {
+        tailf:info "Real Time Streaming Protocol";
+        description
+          "Real Time Streaming Protocol";
+        type empty;
+      }
+      leaf secure-ftp {
+        tailf:info "FTP over TLS/SSL";
+        description
+          "FTP over TLS/SSL";
+        type empty;
+      }
+      leaf secure-http {
+        tailf:info "Secured HTTP";
+        description
+          "Secured HTTP";
+        type empty;
+      }
+      leaf secure-imap {
+        tailf:info "Internet Message Access Protocol over TLS/SSL";
+        description
+          "Internet Message Access Protocol over TLS/SSL";
+        type empty;
+      }
+      leaf secure-irc {
+        tailf:info "Internet Relay Chat over TLS/SSL";
+        description
+          "Internet Relay Chat over TLS/SSL";
+        type empty;
+      }
+      leaf secure-ldap {
+        tailf:info "Lightweight Directory Access Protocol over TLS/SSL";
+        description
+          "Lightweight Directory Access Protocol over TLS/SSL";
+        type empty;
+      }
+      leaf secure-nntp {
+        tailf:info "Network News Transfer Protocol over TLS/SSL";
+        description
+          "Network News Transfer Protocol over TLS/SSL";
+        type empty;
+      }
+      leaf secure-pop3 {
+        tailf:info "Post Office Protocol over TLS/SSL";
+        description
+          "Post Office Protocol over TLS/SSL";
+        type empty;
+      }
+      leaf secure-telnet {
+        tailf:info "Telnet over TLS/SSL";
+        description
+          "Telnet over TLS/SSL";
+        type empty;
+      }
+      leaf sip {
+        tailf:info "Session Initiation Protocol";
+        description
+          "Session Initiation Protocol";
+        type empty;
+      }
+      leaf skinny {
+        tailf:info "Skinny Protocol";
+        description
+          "Skinny Protocol";
+        type empty;
+      }
+      container smtp {
+        tailf:info "Simple Mail Transfer Protocol";
+        description
+          "Simple Mail Transfer Protocol";
+        leaf extended {
+          type empty;
+        }
+      }
+      leaf snapshot {
+        tailf:info "Snapshot routing support";
+        description
+          "Snapshot routing support";
+        type empty;
+      }
+      leaf snmp {
+        tailf:info "Simple Network Management Protocol";
+        description
+          "Simple Network Management Protocol";
+        type empty;
+      }
+      leaf socks {
+        tailf:info "SOCKS";
+        description
+          "SOCKS";
+        type empty;
+      }
+      leaf sqlnet {
+        tailf:info "SQL*NET for Oracle";
+        description
+          "SQL*NET for Oracle";
+        type empty;
+      }
+      leaf sqlserver {
+        tailf:info "MS SQL Server";
+        description
+          "MS SQL Server";
+        type empty;
+      }
+      leaf ssh {
+        tailf:info "Secured Shell";
+        description
+          "Secured Shell";
+        type empty;
+      }
+      leaf streamwork {
+        tailf:info "Xing Technology StreamWorks player";
+        description
+          "Xing Technology StreamWorks player";
+        type empty;
+      }
+      leaf stun {
+        tailf:info "Serial Tunnel";
+        description
+          "Serial Tunnel";
+        type empty;
+      }
+      leaf sunrpc {
+        tailf:info "Sun RPC";
+        description
+          "Sun RPC";
+        type empty;
+      }
+      leaf syslog {
+        tailf:info "System Logging Utility";
+        description
+          "System Logging Utility";
+        type empty;
+      }
+      leaf telnet {
+        tailf:info "Telnet";
+        description
+          "Telnet";
+        type empty;
+      }
+      leaf tftp {
+        tailf:info "Trivial File Transfer Protocol";
+        description
+          "Trivial File Transfer Protocol";
+        type empty;
+      }
+      leaf vdolive {
+        tailf:info "VDOLive streaming video";
+        description
+          "VDOLive streaming video";
+        type empty;
+      }
+      leaf vofr {
+        tailf:info "voice over Frame Relay packets";
+        description
+          "voice over Frame Relay packets";
+        type empty;
+      }
+      leaf winmx {
+        tailf:info "WinMx file-sharing application";
+        description
+          "WinMx file-sharing application";
+        type empty;
+      }
+      leaf xwindows {
+        tailf:info "X-Windows remote access";
+        description
+          "X-Windows remote access";
+        type empty;
+      }
+    }
+    leaf-list qos-group {
+      tailf:info "Qos-group";
+      description
+        "Qos-group";
+      tailf:cli-list-syntax;
+      type uint16 {
+        tailf:info "<0-99>;;Qos Group value";
+        range "0..99";
+      }
+    }
+    container security-group {
+      tailf:info "Security group";
+      description
+        "Security group";
+      container destination {
+        tailf:info "Destination security group";
+        description
+          "Destination security group";
+        leaf tag {
+          tailf:info "Security group tag";
+          description
+            "Security group tag";
+          type uint16 {
+            tailf:info "<1-65533>;;Security group tag id";
+          }
+        }
+      }
+      container source {
+        tailf:info "Source security group";
+        description
+          "Source security group";
+        leaf tag {
+          tailf:info "Security group tag";
+          description
+            "Security group tag";
+          type uint16 {
+            tailf:info "<1-65533>;;Security group tag id";
+          }
+        }
+      }
+    }
+    container source-address {
+      tailf:info "Source address";
+      description
+        "Source address";
+      leaf-list mac {
+        tailf:info "MAC address";
+        description
+          "MAC address";
+        tailf:cli-list-syntax;
+        type yang:mac-address {
+          tailf:info "H.H.H;;MAC address";
+        }
+      }
+    }
+    leaf-list vlan {
+      tailf:info "VLANs to match";
+      description
+        "VLANs to match";
+      tailf:cli-range-list-syntax;
+      tailf:cli-list-syntax;
+      type uint16 {
+        tailf:info "<1-4094>;;VLAN id";
+        range "1..4094";
+      }
+    }
+  }
+
+  grouping class-map-appnav-match-grouping {
+    leaf peer {
+      when "../../type = 'appnav'";
+      tailf:info "APPNAV Peer Filter";
+      description
+        "APPNAV Peer Filter";
+      type string {
+        tailf:info "H.H.H;;Device ID";
+      }
+    }
+  }
+
+  grouping class-map-appnav-not-match-grouping {
+    leaf peer {
+      when "../../../type = 'appnav'";
+      tailf:info "APPNAV Peer Filter";
+      description
+        "APPNAV Peer Filter";
+      type string {
+        tailf:info "H.H.H;;Device ID";
+      }
+    }
+  }
+
+  grouping ntp-server-grouping {
+    list server-list {
+      tailf:cli-drop-node-name;
+      tailf:cli-suppress-mode;
+      tailf:cli-delete-when-empty;
+      tailf:cli-compact-syntax;
+      tailf:cli-reset-container;
+      key "ip-address";
+      leaf ip-address {
+        tailf:cli-disallow-value "vrf";
+        type host-type {
+          tailf:info "Hostname or A.B.C.D;;IP address of peer";
+        }
+      }
+      leaf key {
+        tailf:info "Configure peer authentication key";
+        description
+          "Configure peer authentication key";
+        type uint32 {
+          tailf:info "<0-4294967295>;;Peer key number";
+        }
+      }
+      leaf prefer {
+        tailf:info "Prefer this peer when possible";
+        description
+          "Prefer this peer when possible";
+        type empty;
+      }
+      leaf version {
+        tailf:info "    Configure NTP version";
+        description
+          "    Configure NTP version";
+        type uint8 {
+          tailf:info "<1-3>;;NTP version number";
+        }
+      }
+    }
+  }
+
+  grouping line-grouping {
+    container access-class {
+      tailf:info "Filter connections based on an IP access list";
+      description
+        "Filter connections based on an IP access list";
+      tailf:cli-compact-syntax;
+      tailf:cli-sequence-commands;
+      tailf:cli-reset-container;
+      tailf:cli-flatten-container;
+      list acccess-list {
+        tailf:cli-drop-node-name;
+        tailf:cli-compact-syntax;
+        tailf:cli-reset-container;
+        tailf:cli-suppress-mode;
+        tailf:cli-delete-when-empty;
+        key "direction";
+        leaf direction {
+          type enumeration {
+            enum "in" {
+              tailf:info "Filter incoming connections";
+            }
+            enum "out" {
+              tailf:info "Filter outgoing connections";
+            }
+          }
+        }
+        leaf access-list {
+          tailf:cli-drop-node-name;
+          tailf:cli-prefix-key;
+          type exp-acl-type;
+          mandatory true;
+        }
+        leaf vrf-also {
+          tailf:info "Same access list is applied for all VRFs";
+          description
+            "Same access list is applied for all VRFs";
+          type empty;
+        }
+      }
+    }
+    leaf no-activation-character {
+      tailf:alt-name "activation-character";
+      tailf:cli-boolean-no;
+      tailf:cli-trim-default;
+      type boolean;
+    }
+    leaf activation-character {
+      tailf:info "Define the activation character";
+      description
+        "Define the activation character";
+      tailf:cli-no-value-on-delete;
+      type union {
+        type string;
+        type uint8 {
+          tailf:info "CHAR or <0-127>;;Activation character or its decimal equivalent";
+          range "0..127";
+        }
+      }
+    }
+    leaf escape-character {
+      tailf:info "Change the current line's escape character";
+      description
+        "Change the current line's escape character";
+      type union {
+        type uint8 {
+          tailf:info "ASCII decimal equivalent";
+        }
+        type enumeration {
+          enum "BREAK" {
+            tailf:info "Cause escape on BREAK";
+          }
+          enum "DEFAULT" {
+            tailf:info "Use default escape character";
+          }
+          enum "NONE" {
+            tailf:info "Disable escape entirely";
+          }
+        }
+      }
+    }
+    choice exec-choice {
+      container no-exec {
+        tailf:cli-drop-node-name;
+        leaf exec {
+          tailf:info "Configure EXEC";
+          description
+            "Configure EXEC";
+          tailf:cli-boolean-no;
+          tailf:cli-trim-default;
+          type boolean;
+          default "true";
+        }
+      }
+      container exec {
+        tailf:info "Configure EXEC";
+        tailf:cli-incomplete-command;
+        tailf:cli-incomplete-no;
+        container prompt {
+          tailf:info "EXEC prompt";
+          leaf timestamp {
+            tailf:info "Print timestamps for show commands";
+            type empty;
+          }
+        }
+      }
+    }
+    container exec-timeout {
+      tailf:info "Set the EXEC timeout";
+      description
+        "Set the EXEC timeout";
+      tailf:cli-sequence-commands;
+      tailf:cli-compact-syntax;
+      leaf minutes {
+        tailf:info "<0-35791>;;Timeout in minutes";
+        description
+          "<0-35791>;;Timeout in minutes";
+        tailf:cli-drop-node-name;
+        type uint32;
+      }
+      leaf seconds {
+        tailf:info "<0-2147483>;;Timeout in seconds";
+        description
+          "<0-2147483>;;Timeout in seconds";
+        tailf:cli-drop-node-name;
+        type uint32;
+      }
+    }
+    container history {
+      tailf:info "Enable and control the command history function";
+      description
+        "Enable and control the command history function";
+      presence "true";
+      leaf size {
+        tailf:info "Set history buffer size";
+        description
+          "Set history buffer size";
+        type uint8 {
+          tailf:info "<0-256>;;Size of history buffer";
+        }
+      }
+    }
+    container ip {
+      tailf:info "IP options";
+      description
+        "IP options";
+      leaf netmask-format {
+        tailf:info "Change display of netmasks";
+        description
+          "Change display of netmasks";
+        type enumeration {
+          enum "bit-count" {
+            tailf:info "Display netmask as number of significant bits";
+          }
+          enum "decimal" {
+            tailf:info "Display netmask in dotted decimal";
+          }
+          enum "hexadecimal" {
+            tailf:info "Display netmask in hexadecimal";
+          }
+        }
+      }
+    }
+    leaf length {
+      tailf:info "Set number of lines on a screen";
+      description
+        "Set number of lines on a screen";
+      type uint16 {
+        tailf:info "<0-512>;;Number of lines on screen (0 for no pausing)";
+        range "0..512";
+      }
+    }
+    leaf line {
+      type uint8;
+    }
+    container logging {
+      tailf:info "Modify message logging facilities";
+      description
+        "Modify message logging facilities";
+      container synchronous {
+        tailf:info "Synchronized message output";
+        description
+          "Synchronized message output";
+        presence "true";
+      }
+    }
+    container login {
+      tailf:info "Enable password checking";
+      description
+        "Enable password checking";
+      tailf:cli-delete-when-empty;
+      presence "true";
+      leaf local {
+        type empty;
+      }
+      leaf authentication {
+        type string;
+      }
+    }
+    leaf monitor {
+      type empty;
+    }
+    container password {
+      tailf:info "Set a password";
+      description
+        "Set a password";
+      tailf:cli-compact-syntax;
+      tailf:cli-sequence-commands;
+      uses password-07-grouping;
+    }
+    container privilege {
+      tailf:info "Change privilege level for line";
+      description
+        "Change privilege level for line";
+      leaf level {
+        tailf:info "Assign default privilege level for line";
+        description
+          "Assign default privilege level for line";
+        type uint8 {
+          tailf:info "<0-15>;;Default privilege level for line";
+          range "0..15";
+        }
+      }
+    }
+    container session-timeout {
+      tailf:info "Set interval for closing connection when there is no input traffic";
+      description
+        "Set interval for closing connection when there is no input traffic";
+      tailf:cli-sequence-commands;
+      tailf:cli-compact-syntax;
+      leaf session-timeout-value {
+        tailf:cli-drop-node-name;
+        type uint16 {
+          tailf:info "<0-35791>;;Session timeout interval in minutes";
+          range "0..35791";
+        }
+      }
+      leaf output {
+        tailf:info "Include output traffic as well as input traffic";
+        description
+          "Include output traffic as well as input traffic";
+        type empty;
+      }
+    }
+    leaf stopbits {
+      tailf:info "Set async line stop bits";
+      description
+        "Set async line stop bits";
+      type enumeration {
+        enum "1" {
+          tailf:info "One stop bit";
+        }
+        enum "1.5" {
+          tailf:info "One and one-half stop bits";
+        }
+        enum "2" {
+          tailf:info "Two stop bits";
+        }
+      }
+    }
+    container telnet {
+      tailf:info "Telnet protocol-specific configuration";
+      description
+        "Telnet protocol-specific configuration";
+      leaf transparent {
+        tailf:info "Send a CR as a CR followed by a NULL instead of a CR followed by a LF";
+        description
+          "Send a CR as a CR followed by a NULL instead of a CR followed by a LF";
+        type empty;
+      }
+    }
+    container transport {
+      tailf:info "Define transport protocols for line";
+      description
+        "Define transport protocols for line";
+      tailf:cli-incomplete-no;
+      leaf-list input {
+        tailf:info "Define which protocols to use when connecting to the terminal server";
+        description
+          "Define which protocols to use when connecting to the terminal server";
+        ordered-by user;
+        tailf:cli-flat-list-syntax;
+        tailf:cli-no-value-on-delete;
+        type enumeration {
+          enum "acercon" {
+            tailf:info "Remote console for ACE-based blade";
+          }
+          enum "all" {
+            tailf:info "All protocols";
+          }
+          enum "lapb-ta";
+          enum "lat" {
+            tailf:info "DEC LAT protocol";
+          }
+          enum "mop" {
+            tailf:info "DEC MOP Remote Console Protocol";
+          }
+          enum "nasi" {
+            tailf:info "NASI protocol";
+          }
+          enum "none" {
+            tailf:info "No protocols";
+          }
+          enum "pad" {
+            tailf:info "X.3 PAD";
+          }
+          enum "rlogin" {
+            tailf:info "Unix rlogin protocol";
+          }
+          enum "ssh" {
+            tailf:info "TCP/IP SSH protocol";
+          }
+          enum "telnet" {
+            tailf:info "TCP/IP Telnet protocol";
+          }
+          enum "udptn" {
+            tailf:info "UDPTN async via UDP protocol";
+          }
+          enum "v120";
+        }
+      }
+      leaf-list output {
+        tailf:info "Define which protocols to use for outgoing connections";
+        description
+          "Define which protocols to use for outgoing connections";
+        tailf:cli-flat-list-syntax;
+        tailf:cli-no-value-on-delete;
+        ordered-by user;
+        type enumeration {
+          enum "acercon" {
+            tailf:info "Remote console for ACE-based blade";
+          }
+          enum "all" {
+            tailf:info "All protocols";
+          }
+          enum "lapb-ta";
+          enum "lat" {
+            tailf:info "DEC LAT protocol";
+          }
+          enum "mop" {
+            tailf:info "DEC MOP Remote Console Protocol";
+          }
+          enum "nasi" {
+            tailf:info "NASI protocol";
+          }
+          enum "none" {
+            tailf:info "No protocols";
+          }
+          enum "pad" {
+            tailf:info "X.3 PAD";
+          }
+          enum "rlogin" {
+            tailf:info "Unix rlogin protocol";
+          }
+          enum "ssh" {
+            tailf:info "TCP/IP SSH protocol";
+          }
+          enum "telnet" {
+            tailf:info "TCP/IP Telnet protocol";
+          }
+          enum "udptn" {
+            tailf:info "UDPTN async via UDP protocol";
+          }
+          enum "v120";
+        }
+      }
+      leaf preferred {
+        tailf:info "Specify the preferred protocol to use";
+        description
+          "Specify the preferred protocol to use";
+        tailf:cli-no-value-on-delete;
+        type enumeration {
+          enum "none" {
+            tailf:info "No protocols";
+          }
+          enum "ssh" {
+            tailf:info "TCP/IP SSH protocol";
+          }
+          enum "telnet" {
+            tailf:info "TCP/IP Telnet protocol";
+          }
+        }
+      }
+    }
+  }
+
+  grouping queue-size-grouping {
+    leaf queue-size-1 {
+      tailf:cli-drop-node-name;
+      type uint8 {
+        tailf:info "<1-100>;;enter percent of queue size between 1 and 100";
+        range "1..100";
+      }
+    }
+    leaf queue-size-2 {
+      tailf:cli-drop-node-name;
+      type uint8 {
+        tailf:info "<1-100>;;enter percent of queue size between 1 and 100";
+        range "1..100";
+      }
+    }
+    leaf queue-size-3 {
+      tailf:cli-drop-node-name;
+      type uint8 {
+        tailf:info "<1-100>;;enter percent of queue size between 1 and 100";
+        range "1..100";
+      }
+    }
+    leaf queue-size-4 {
+      tailf:cli-drop-node-name;
+      type uint8 {
+        tailf:info "<1-100>;;enter percent of queue size between 1 and 100";
+        range "1..100";
+      }
+    }
+    leaf queue-size-5 {
+      tailf:cli-drop-node-name;
+      type uint8 {
+        tailf:info "<1-100>;;enter percent of queue size between 1 and 100";
+        range "1..100";
+      }
+    }
+    leaf queue-size-6 {
+      tailf:cli-drop-node-name;
+      type uint8 {
+        tailf:info "<1-100>;;enter percent of queue size between 1 and 100";
+        range "1..100";
+      }
+    }
+    leaf queue-size-7 {
+      tailf:cli-drop-node-name;
+      type uint8 {
+        tailf:info "<1-100>;;enter percent of queue size between 1 and 100";
+        range "1..100";
+      }
+    }
+    leaf queue-size-8 {
+      tailf:cli-drop-node-name;
+      type uint8 {
+        tailf:info "<1-100>;;enter percent of queue size between 1 and 100";
+        range "1..100";
+      }
+    }
+  }
+
+  grouping authentication-ipsec-grouping {
+    container ipsec {
+      tailf:info "Use IPsec authentication";
+      description
+        "Use IPsec authentication";
+      leaf spi {
+        tailf:info "Set the SPI (Security Parameters Index)";
+        description
+          "Set the SPI (Security Parameters Index)";
+        tailf:cli-incomplete-command;
+        type uint64 {
+          tailf:info "<256-4294967295>;;SPI";
+          range "256..4294967295";
+        }
+      }
+      container md5 {
+        tailf:info "Use MD5 authentication";
+        description
+          "Use MD5 authentication";
+        container key-string {
+          tailf:cli-drop-node-name;
+          tailf:cli-compact-syntax;
+          leaf encrypt {
+            tailf:cli-drop-node-name;
+            type enumeration {
+              enum "0" {
+                tailf:info "The key is not encrypted (plain text)";
+              }
+              enum "7" {
+                tailf:info "The key is encrypted";
+              }
+            }
+          }
+          leaf string {
+            tailf:cli-drop-node-name;
+            type string {
+              tailf:info "Hex-string  MD5 key (32 chars)";
+            }
+          }
+        }
+      }
+      container sha1 {
+        tailf:info "Use SHA-1 authentication";
+        description
+          "Use SHA-1 authentication";
+        container key-string {
+          tailf:cli-drop-node-name;
+          tailf:cli-compact-syntax;
+          leaf encrypt {
+            tailf:cli-drop-node-name;
+            type enumeration {
+              enum "0" {
+                tailf:info "The key is not encrypted (plain text)";
+              }
+              enum "7" {
+                tailf:info "The key is encrypted";
+              }
+            }
+          }
+          leaf string {
+            tailf:cli-drop-node-name;
+            type string {
+              tailf:info "Hex-string  SHA-1 key (40 chars)";
+            }
+          }
+        }
+      }
+    }
+  }
+
+  grouping interface-xconnect-grouping {
+    choice xconnect-choice {
+      container xconnect {
+        tailf:cli-add-mode;
+        tailf:cli-mode-name "config-if-xconn";
+        tailf:cli-compact-syntax;
+        tailf:cli-sequence-commands;
+        tailf:cli-incomplete-command;
+        leaf address {
+          tailf:cli-drop-node-name;
+          tailf:cli-incomplete-command;
+          tailf:cli-hide-in-submode;
+          type inet:ipv4-address {
+            tailf:info "A.B.C.D;;IP address of peer";
+          }
+        }
+        leaf vcid {
+          tailf:cli-drop-node-name;
+          tailf:cli-incomplete-command;
+          tailf:cli-hide-in-submode;
+          type uint32 {
+            tailf:info "<1-4294967295>;;Enter VC ID value";
+            range "1..4294967295";
+          }
+        }
+        leaf encapsulation {
+          tailf:info "Data encapsulation method";
+          description
+            "Data encapsulation method";
+          tailf:cli-hide-in-submode;
+          type enumeration {
+            enum "mpls" {
+              tailf:info "Use MPLS encapsulation";
+            }
+            enum "l2tpv3" {
+              tailf:info "Use L2TPv3 encapsulation";
+            }
+          }
+        }
+        leaf manual {
+          tailf:info "Manually configure L2TP session parameters";
+          description
+            "Manually configure L2TP session parameters";
+          tailf:cli-optional-in-sequence;
+          tailf:cli-hide-in-submode;
+          type empty;
+        }
+        leaf pw-class {
+          tailf:info "Optional pseudowire-class to use for advanced configuration";
+          description
+            "Optional pseudowire-class to use for advanced configuration";
+          tailf:cli-optional-in-sequence;
+          tailf:cli-hide-in-submode;
+          type string {
+            tailf:info "WORD;;Pseudowire-class name";
+          }
+        }
+        leaf sequencing {
+          tailf:info "Configure sequencing options for xconnect";
+          description
+            "Configure sequencing options for xconnect";
+          tailf:cli-full-command;
+          tailf:cli-hide-in-submode;
+          when "../encapsulation = 'l2tpv3'";
+          type enumeration {
+            enum "both" {
+              tailf:info "Transmit and receive sequence numbers";
+            }
+            enum "receive" {
+              tailf:info "Receive sequence numbers";
+            }
+            enum "transmit" {
+              tailf:info "Transmit sequence numbers";
+            }
+          }
+        }
+        container backup {
+          tailf:cli-break-sequence-commands;
+          tailf:info "Xconnect backup configuration commands";
+          description
+            "Xconnect backup configuration commands";
+          container peer {
+            tailf:info "Backup pseudowire";
+            description
+              "Backup pseudowire";
+            tailf:cli-compact-syntax;
+            tailf:cli-sequence-commands {
+              tailf:cli-reset-siblings;
+            }
+            leaf peer-router-ip-addr {
+              tailf:cli-drop-node-name;
+              tailf:cli-incomplete-command;
+              type inet:ipv4-address {
+                tailf:info "A.B.C.D;;IP address of peer";
+              }
+            }
+            leaf vcid {
+              tailf:cli-drop-node-name;
+              type uint32 {
+                tailf:info "<1-4294967295>;;Enter VC ID value";
+                range "1..4294967295";
+              }
+            }
+            leaf pw-class {
+              tailf:cli-optional-in-sequence;
+              type string {
+                tailf:info "Optional Pseudowire-class to use for backup pseudowire";
+              }
+            }
+            leaf priority {
+              tailf:info "Optional priority to use for backup pseudowire.";
+              description
+                "Optional priority to use for backup pseudowire.";
+              type uint8 {
+                tailf:info "Peer priority";
+                range "1..10";
+              }
+            }
+          }
+          container delay {
+            tailf:info "backup delay time";
+            description
+              "backup delay time";
+            tailf:cli-compact-syntax;
+            tailf:cli-sequence-commands {
+              tailf:cli-reset-siblings;
+            }
+            leaf min {
+              tailf:cli-drop-node-name;
+              type uint32;
+            }
+            leaf max {
+              tailf:cli-drop-node-name;
+              type uint32;
+            }
+          }
+        }
+        leaf mtu {
+          tailf:info "set XCONNECT Maximum Transfer Unit";
+          type uint32 {
+            tailf:info "<64-1500>;;per Xconnect MTU size in bytes";
+          }
+        }
+      }
+      container xconnect-pw-class {
+        tailf:cli-drop-node-name;
+        container xconnect {
+          tailf:info "Xconnect commands";
+          description
+            "Xconnect commands";
+          tailf:cli-add-mode;
+          tailf:cli-mode-name "config-if-xconn";
+          tailf:cli-sequence-commands;
+          tailf:cli-compact-syntax;
+          leaf address {
+            tailf:cli-drop-node-name;
+            tailf:cli-incomplete-command;
+            tailf:cli-hide-in-submode;
+            type inet:ipv4-address {
+              tailf:info "A.B.C.D;;IP address of peer";
+            }
+          }
+          leaf vcid {
+            tailf:cli-drop-node-name;
+            tailf:cli-incomplete-command;
+            tailf:cli-hide-in-submode;
+            type uint32 {
+              tailf:info "<1-4294967295>;;Enter VC ID value";
+              range "1..4294967295";
+            }
+          }
+          leaf pw-class {
+            tailf:info "Pseudowire-class to use for encapsulation and protocol configuration";
+            description
+              "Pseudowire-class to use for encapsulation and protocol configuration";
+            tailf:cli-full-command;
+            tailf:cli-hide-in-submode;
+            type string {
+              tailf:info "WORD;;Pseudowire-class name";
+            }
+          }
+          container udp {
+            tailf:info "UDP";
+            description
+              "UDP";
+            container port {
+              tailf:info "UDP ports";
+              description
+                "UDP ports";
+              tailf:cli-compact-syntax;
+              leaf local {
+                type uint32 {
+                  tailf:info "UDP local port number";
+                }
+              }
+              leaf remote {
+                type uint32 {
+                  tailf:info "UDP remote port number";
+                }
+              }
+            }
+          }
+        }
+      }
+    }
+  }
+
+  grouping interface-atm-grouping {
+    container ip {
+      tailf:info "IP address";
+      description
+        "IP address";
+      leaf address {
+        type inet:ipv4-address {
+          tailf:info "A.B.C.D;;Virtual IP address";
+        }
+      }
+    }
+    container atm {
+      tailf:info "ATM";
+      description
+        "ATM";
+      leaf bandwidth {
+        tailf:info "ATM bandwith";
+        description
+          "ATM bandwith";
+        type enumeration {
+          enum "dynamic";
+        }
+      }
+      leaf enable-ilmi-trap {
+        tailf:info "Enable-ilmi-trap";
+        description
+          "Enable-ilmi-trap";
+        tailf:cli-boolean-no;
+        tailf:cli-trim-default;
+        type boolean;
+        default "true";
+      }
+      list pvp {
+        tailf:info "PVP";
+        description
+          "PVP";
+        tailf:cli-mode-name "config-if-atm-pvp";
+        key "pvp-number";
+        leaf pvp-number {
+          tailf:info "PVP number";
+          description
+            "PVP number";
+          tailf:cli-drop-node-name;
+          type uint16 {
+            tailf:info "PVP number";
+          }
+        }
+        leaf l2transport {
+          tailf:cli-hide-in-submode;
+          type empty;
+        }
+        uses interface-xconnect-grouping;
+      }
+    }
+    leaf load-interval {
+      tailf:info "Load interval";
+      description
+        "Load interval";
+      type uint32 {
+        tailf:info "Load interval";
+      }
+    }
+    list cem {
+      tailf:info "CEM";
+      description
+        "CEM";
+      tailf:cli-mode-name "config-if-cem";
+      key "number";
+      leaf number {
+        type uint32 {
+          tailf:info "CEM number";
+        }
+      }
+      uses interface-xconnect-grouping;
+    }
+    list pvc {
+      tailf:info "PVC";
+      description
+        "PVC";
+      tailf:cli-mode-name "config-if-pvc";
+      key "local-vpi-vci";
+      leaf local-vpi-vci {
+        tailf:info "Vpi and vci";
+        description
+          "Vpi and vci";
+        type string {
+          tailf:info "<vpi>/<vci>";
+        }
+      }
+      leaf remote-vpi-vci {
+        tailf:info "Vpi and vci";
+        description
+          "Vpi and vci";
+        tailf:cli-hide-in-submode;
+        tailf:cli-drop-node-name;
+        type string {
+          tailf:info "<vpi>/<vci>";
+        }
+      }
+      leaf l2transport {
+        tailf:cli-hide-in-submode;
+        type empty;
+      }
+      leaf ubr {
+        tailf:info "UBR";
+        description
+          "UBR";
+        type uint32 {
+          tailf:info "UBR";
+        }
+      }
+      uses interface-xconnect-grouping;
+    }
+  }
+
+  grouping sonet-grouping {
+    leaf framing {
+      tailf:info "SONET framing";
+      description
+        "SONET framing";
+      type enumeration {
+        enum "sonet" {
+          tailf:info "sonet framing";
+        }
+        enum "sdh" {
+          tailf:info "sdh framing";
+        }
+      }
+    }
+    leaf shutdown {
+      type empty;
+    }
+    container clock {
+      tailf:info "SONET clock";
+      description
+        "SONET clock";
+      leaf source {
+        tailf:info "SONET clock source";
+        description
+          "SONET clock source";
+        type enumeration {
+          enum "internal" {
+            tailf:info "Clock its sent data from its internal clock";
+          }
+          enum "line" {
+            tailf:info
+              "Clock its sent data from a clock recovered from the
+               receive data stream of the line";
+          }
+        }
+      }
+    }
+    container aug {
+      tailf:info "AUG";
+      description
+        "AUG";
+      leaf mapping {
+        type enumeration {
+          enum "au-3" {
+            tailf:info "AU-3";
+          }
+          enum "au-4" {
+            tailf:info "AU-4";
+          }
+        }
+      }
+    }
+    list au-3 {
+      tailf:info "AU-3";
+      description
+        "AU-3";
+      tailf:cli-mode-name "config-au3Path";
+      key "number";
+      leaf number {
+        tailf:info "AU-3 number";
+        description
+          "AU-3 number";
+        tailf:cli-drop-node-name;
+        type int8 {
+          range "1..3";
+        }
+      }
+      container overhead {
+        tailf:info "overhead";
+        description
+          "overhead";
+        tailf:cli-no-keyword;
+        tailf:cli-sequence-commands;
+        tailf:cli-compact-syntax;
+        leaf byte {
+          tailf:cli-drop-node-name;
+          type enumeration {
+            enum "j1" {
+              tailf:info "J1";
+            }
+          }
+        }
+        leaf length {
+          type uint8;
+        }
+      }
+      container mode {
+        tailf:info "mode";
+        description
+          "mode";
+        tailf:cli-no-keyword;
+        tailf:cli-sequence-commands;
+        tailf:cli-compact-syntax;
+        leaf mapping {
+          tailf:cli-drop-node-name;
+          type enumeration {
+            enum "c-11" {
+              tailf:info "C-11 mode";
+            }
+            enum "c-12" {
+              tailf:info "C-12 mode";
+            }
+            enum "c-2" {
+              tailf:info "C-2 mode";
+            }
+          }
+        }
+      }
+    }
+    container au-4-atm {
+      tailf:cli-drop-node-name;
+      container au-4 {
+        tailf:info "AU-4";
+        description
+          "AU-4";
+        tailf:cli-compact-syntax;
+        tailf:cli-sequence-commands;
+        leaf number {
+          tailf:info "AU-4 number";
+          description
+            "AU-4 number";
+          tailf:cli-drop-node-name;
+          type int8 {
+            range "1..3";
+          }
+        }
+        leaf atm {
+          type empty;
+        }
+      }
+    }
+    list au-4 {
+      tailf:info "AU-4";
+      description
+        "AU-4";
+      tailf:cli-mode-name "config-au4Path";
+      key "number tug-3";
+      leaf number {
+        tailf:info "AU-4 number";
+        description
+          "AU-4 number";
+        type int8 {
+          range "1..3";
+        }
+      }
+      leaf tug-3 {
+        tailf:info "TUG-3";
+        description
+          "TUG-3";
+        tailf:cli-expose-key-name;
+        type int8 {
+          tailf:info "TUG-3 number";
+          range "1..3";
+        }
+      }
+      leaf mode {
+        tailf:info "mode";
+        description
+          "mode";
+        type enumeration {
+          enum "c-11" {
+            tailf:info "C-11 mode";
+          }
+          enum "c-12" {
+            tailf:info "C-12 mode";
+          }
+          enum "c-2" {
+            tailf:info "C-2 mode";
+          }
+          enum "c-3" {
+            tailf:info "C-3 mode";
+          }
+          enum "c-4" {
+            tailf:info "C-4 mode";
+          }
+          enum "e3" {
+            tailf:info "e3 mode";
+          }
+        }
+      }
+      leaf cem-group {
+        tailf:info "CEM group";
+        description
+          "CEM group";
+        type int32 {
+          tailf:info "CEM group number";
+        }
+      }
+      choice framing-choice {
+        case unframed-case {
+          leaf unframed {
+            tailf:info "Unframed";
+            description
+              "Unframed";
+            type empty;
+          }
+        }
+        case framing-case {
+          leaf framing {
+            type enumeration {
+              enum "unframed";
+            }
+          }
+        }
+      }
+      container cem-group-timeslots {
+        tailf:cli-drop-node-name;
+        list tug-2 {
+          tailf:info "TUG-2";
+          description
+            "TUG-2";
+          tailf:cli-suppress-mode;
+          tailf:cli-compact-syntax;
+          tailf:cli-sequence-commands;
+          key "number e1 cem-group";
+          leaf number {
+            tailf:info "TUG-2 number";
+            description
+              "TUG-2 number";
+            type int8 {
+              range "1..7";
+            }
+          }
+          leaf e1 {
+            tailf:info "E1";
+            description
+              "E1";
+            tailf:cli-expose-key-name;
+            type int8 {
+              tailf:info "E1 number";
+              range "1..3";
+            }
+          }
+          leaf cem-group {
+            tailf:info "CEM group";
+            description
+              "CEM group";
+            tailf:cli-expose-key-name;
+            type int32 {
+              tailf:info "CEM group number";
+            }
+          }
+          leaf timeslots {
+            tailf:info "Time slots";
+            description
+              "Time slots";
+            type string {
+              tailf:info "<1-31>-<1-31>;;Time slot number";
+            }
+          }
+        }
+      }
+      container channel-group-timeslots {
+        tailf:cli-drop-node-name;
+        list tug-2 {
+          tailf:info "TUG-2";
+          description
+            "TUG-2";
+          tailf:cli-suppress-mode;
+          tailf:cli-compact-syntax;
+          tailf:cli-sequence-commands;
+          key "number e1 channel-group";
+          leaf number {
+            tailf:info "TUG-2 number";
+            description
+              "TUG-2 number";
+            type int8 {
+              range "1..7";
+            }
+          }
+          leaf e1 {
+            tailf:info "E1";
+            description
+              "E1";
+            tailf:cli-expose-key-name;
+            type int8 {
+              tailf:info "E1 number";
+              range "1..3";
+            }
+          }
+          leaf channel-group {
+            tailf:info "Channel group";
+            description
+              "Channel group";
+            tailf:cli-expose-key-name;
+            type int32 {
+              tailf:info "Channel group number";
+            }
+          }
+          leaf timeslots {
+            tailf:info "Time slots";
+            description
+              "Time slots";
+            type string {
+              tailf:info "<1-31>-<1-31>;;Time slot number";
+            }
+          }
+        }
+      }
+      container cem-group-unframed {
+        tailf:cli-drop-node-name;
+        list tug-2 {
+          tailf:info "TUG-2";
+          description
+            "TUG-2";
+          tailf:cli-suppress-mode;
+          tailf:cli-compact-syntax;
+          tailf:cli-sequence-commands;
+          key "number e1 cem-group";
+          leaf number {
+            tailf:info "TUG-2 number";
+            description
+              "TUG-2 number";
+            type int8 {
+              range "1..7";
+            }
+          }
+          leaf e1 {
+            tailf:info "E1";
+            description
+              "E1";
+            tailf:cli-expose-key-name;
+            type int8 {
+              tailf:info "E1 number";
+              range "1..3";
+            }
+          }
+          leaf cem-group {
+            tailf:cli-expose-key-name;
+            tailf:info "CEM group";
+            description
+              "CEM group";
+            type int32 {
+              tailf:info "CEM group number";
+            }
+          }
+          leaf unframed {
+            tailf:info "Unframed";
+            description
+              "Unframed";
+            type empty;
+          }
+        }
+      }
+      container framing-unframed {
+        tailf:cli-drop-node-name;
+        list tug-2 {
+          tailf:info "TUG-2";
+          description
+            "TUG-2";
+          tailf:cli-suppress-mode;
+          tailf:cli-compact-syntax;
+          tailf:cli-sequence-commands;
+          key "number e1";
+          leaf number {
+            tailf:info "TUG-2 number";
+            description
+              "TUG-2 number";
+            type int8 {
+              range "1..7";
+            }
+          }
+          leaf e1 {
+            tailf:info "E1";
+            description
+              "E1";
+            tailf:cli-expose-key-name;
+            type int8 {
+              tailf:info "E1 number";
+              range "1..3";
+            }
+          }
+          leaf framing {
+            type enumeration {
+              enum "unframed";
+            }
+          }
+        }
+      }
+      container cem-group-atm {
+        tailf:cli-drop-node-name;
+        list tug-2 {
+          tailf:info "TUG-2";
+          description
+            "TUG-2";
+          tailf:cli-suppress-mode;
+          tailf:cli-compact-syntax;
+          tailf:cli-sequence-commands;
+          key "number e1";
+          leaf number {
+            tailf:info "TUG-2 number";
+            description
+              "TUG-2 number";
+            type int8 {
+              range "1..7";
+            }
+          }
+          leaf e1 {
+            tailf:info "E1";
+            description
+              "E1";
+            tailf:cli-expose-key-name;
+            type int8 {
+              tailf:info "E1 number";
+              range "1..3";
+            }
+          }
+          leaf atm {
+            type empty;
+          }
+        }
+      }
+      container ima-group {
+        tailf:cli-drop-node-name;
+        list tug-2 {
+          tailf:info "TUG-2";
+          description
+            "TUG-2";
+          tailf:cli-suppress-mode;
+          tailf:cli-compact-syntax;
+          tailf:cli-sequence-commands;
+          key "number e1 ima-group";
+          leaf number {
+            tailf:info "TUG-2 number";
+            description
+              "TUG-2 number";
+            type int8 {
+              range "1..7";
+            }
+          }
+          leaf e1 {
+            tailf:info "E1";
+            description
+              "E1";
+            tailf:cli-expose-key-name;
+            type int8 {
+              tailf:info "E1 number";
+              range "1..3";
+            }
+          }
+          leaf ima-group {
+            tailf:cli-expose-key-name;
+            tailf:info "IMA group";
+            description
+              "IMA group";
+            type int32 {
+              tailf:info "IMA group number";
+            }
+          }
+        }
+      }
+    }
+    container aps {
+      tailf:info "SONET APS";
+      description
+        "SONET APS";
+      container group {
+        tailf:info "SONET APS group";
+        description
+          "SONET APS group";
+        leaf group-number {
+          tailf:cli-drop-node-name;
+          type uint8;
+        }
+        leaf acr {
+          tailf:info "ACR";
+          description
+            "ACR";
+          type int8 {
+            tailf:info "ACR number";
+          }
+        }
+      }
+      leaf working {
+        tailf:info "Working line";
+        description
+          "Working line";
+        type int8 {
+          tailf:info "Working line number";
+        }
+      }
+      container protect {
+        tailf:info "Protect line";
+        description
+          "Protect line";
+        tailf:cli-compact-syntax;
+        leaf number {
+          tailf:cli-drop-node-name;
+          type int8 {
+            tailf:info "Working line number";
+          }
+        }
+        leaf ip-addr {
+          tailf:cli-drop-node-name;
+          type inet:ipv4-address {
+            tailf:info "A.B.C.D;;IP address of peer";
+          }
+        }
+      }
+      leaf hspw-icrm-grp {
+        type uint8;
+      }
+      container interchassis {
+        leaf group {
+          type uint8;
+        }
+      }
+    }
+  }
+
+  grouping interface-ospf-encryption-grouping {
+    container encryption {
+      tailf:info "Enable encryption";
+      description
+        "Enable encryption";
+      leaf null {
+        tailf:info "No IPsec encryption on this interface";
+        description
+          "No IPsec encryption on this interface";
+        type empty;
+      }
+      container ipsec {
+        tailf:info "Use IPsec encryption";
+        description
+          "Use IPsec encryption";
+        tailf:cli-sequence-commands;
+        leaf spi {
+          tailf:info "Set the SPI (Security Parameters Index)";
+          description
+            "Set the SPI (Security Parameters Index)";
+          type uint64 {
+            tailf:info "<256-4294967295>  SPI";
+          }
+        }
+        leaf esp {
+          tailf:info "Use ESP encapsulation";
+          description
+            "Use ESP encapsulation";
+          type empty;
+        }
+        container ipsec_3des {
+          tailf:alt-name "3des";
+          tailf:info "Use 3DES encryption";
+          description
+            "Use 3DES encryption";
+          tailf:cli-optional-in-sequence;
+          container key-string {
+            tailf:cli-drop-node-name;
+            tailf:cli-compact-syntax;
+            leaf encrypt {
+              tailf:cli-drop-node-name;
+              type enumeration {
+                enum "0" {
+                  tailf:info "The key is not encrypted (plain text)";
+                }
+                enum "7" {
+                  tailf:info "The key is encrypted";
+                }
+              }
+            }
+            leaf string {
+              tailf:cli-drop-node-name;
+              type string {
+                tailf:info "Hex-string  192bit key (48 chars)";
+              }
+            }
+          }
+        }
+        container aes-cbc {
+          tailf:info "Use AES-CBC encryption";
+          description
+            "Use AES-CBC encryption";
+          tailf:cli-optional-in-sequence;
+          container aes-cbc-128 {
+            tailf:alt-name "128";
+            tailf:info "Use 128 bit key";
+            description
+              "Use 128 bit key";
+            container key-string {
+              tailf:cli-drop-node-name;
+              tailf:cli-compact-syntax;
+              leaf encrypt {
+                tailf:cli-drop-node-name;
+                type enumeration {
+                  enum "0" {
+                    tailf:info "The key is not encrypted (plain text)";
+                  }
+                  enum "7" {
+                    tailf:info "The key is encrypted";
+                  }
+                }
+              }
+              leaf string {
+                tailf:cli-drop-node-name;
+                type string {
+                  tailf:info "Hex-string  128bit key (32 chars)";
+                }
+              }
+            }
+          }
+          container aes-cbc-192 {
+            tailf:alt-name "192";
+            tailf:info "Use 192 bit key";
+            description
+              "Use 192 bit key";
+            container key-string {
+              tailf:cli-drop-node-name;
+              tailf:cli-compact-syntax;
+              leaf encrypt {
+                tailf:cli-drop-node-name;
+                type enumeration {
+                  enum "0" {
+                    tailf:info "The key is not encrypted (plain text)";
+                  }
+                  enum "7" {
+                    tailf:info "The key is encrypted";
+                  }
+                }
+              }
+              leaf string {
+                tailf:cli-drop-node-name;
+                type string {
+                  tailf:info "Hex-string  192bit key (48 chars)";
+                }
+              }
+            }
+          }
+          container aes-cbc-256 {
+            tailf:alt-name "256";
+            tailf:info "Use 256 bit key";
+            description
+              "Use 256 bit key";
+            container key-string {
+              tailf:cli-drop-node-name;
+              tailf:cli-compact-syntax;
+              leaf encrypt {
+                tailf:cli-drop-node-name;
+                type enumeration {
+                  enum "0" {
+                    tailf:info "The key is not encrypted (plain text)";
+                  }
+                  enum "7" {
+                    tailf:info "The key is encrypted";
+                  }
+                }
+              }
+              leaf string {
+                tailf:cli-drop-node-name;
+                type string {
+                  tailf:info "Hex-string  256bit key (64 chars)";
+                }
+              }
+            }
+          }
+        }
+      }
+    }
+  }
+
+  grouping interface-ospf-neighbor-grouping {
+    list neighbor {
+      tailf:info "OSPF neighbor";
+      description
+        "OSPF neighbor";
+      tailf:cli-suppress-mode;
+      tailf:cli-delete-when-empty;
+      tailf:cli-incomplete-command;
+      ordered-by user;
+      must "count(*) > 1" {
+        tailf:dependency ".";
+      }
+      key "id";
+      leaf id {
+        type inet:ipv6-address {
+          tailf:info "X:X:X:X::X;;Neighbor link-local IPv6 address";
+        }
+      }
+      leaf cost {
+        tailf:info "OSPF cost for point-to-multipoint neighbor";
+        description
+          "OSPF cost for point-to-multipoint neighbor";
+        type uint16 {
+          tailf:info "<1-65535>;;Metric";
+          range "1..65535";
+        }
+      }
+      container database-filter {
+        tailf:info "Filter OSPF LSA during synchronization and flooding for point-to-multipoint neighbor";
+        description
+          "Filter OSPF LSA during synchronization and flooding for point-to-multipoint neighbor";
+        choice database {
+          leaf all {
+            tailf:info "Filter all LSA";
+            description
+              "Filter all LSA";
+            type enumeration {
+              enum "out" {
+                tailf:info "Outgoing LSA";
+              }
+            }
+          }
+        }
+      }
+      leaf poll-interval {
+        tailf:info "OSPF dead-router polling interval";
+        description
+          "OSPF dead-router polling interval";
+        type uint32 {
+          tailf:info "<0-65535>;;Seconds";
+          range "0..65535";
+        }
+      }
+      leaf priority {
+        tailf:info "OSPF priority of non-broadcast neighbor";
+        description
+          "OSPF priority of non-broadcast neighbor";
+        type uint8 {
+          tailf:info "<0-255>;;Priority";
+          range "0..255";
+        }
+      }
+    }
+  }
+
+  grouping interface-ospf-network-grouping {
+    container network {
+      tailf:info "Network type";
+      description
+        "Network type";
+      leaf broadcast {
+        tailf:info "Specify OSPF broadcast multi-access network";
+        description
+          "Specify OSPF broadcast multi-access network";
+        tailf:cli-full-command;
+        type empty;
+      }
+      leaf manet {
+        tailf:info "Specify MANET OSPF interface type";
+        description
+          "Specify MANET OSPF interface type";
+        tailf:cli-full-command;
+        type empty;
+      }
+      leaf non-broadcast {
+        tailf:info "Specify OSPF NBMA network";
+        description
+          "Specify OSPF NBMA network";
+        tailf:cli-full-command;
+        type empty;
+      }
+      container point-to-multipoint {
+        tailf:info "Specify OSPF point-to-multipoint network";
+        description
+          "Specify OSPF point-to-multipoint network";
+        presence "true";
+        leaf non-broadcast {
+          tailf:info "Specify non-broadcast point-to-mpoint network";
+          description
+            "Specify non-broadcast point-to-mpoint network";
+          type empty;
+        }
+      }
+      leaf point-to-point {
+        tailf:info "Specify OSPF point-to-point network";
+        description
+          "Specify OSPF point-to-point network";
+        tailf:cli-full-command;
+        type empty;
+      }
+    }
+  }
+
+  grouping interface-ospf-prefix-suppression-grouping {
+    container prefix-suppression {
+      tailf:info "OSPF prefix suppression";
+      description
+        "OSPF prefix suppression";
+      presence "true";
+      leaf disable {
+        tailf:info "Disable prefix suppression";
+        description
+          "Disable prefix suppression";
+        type empty;
+      }
+    }
+  }
+
+  grouping interface-ospf-priority-grouping {
+    leaf priority {
+      tailf:info "Router priority";
+      description
+        "Router priority";
+      type uint8 {
+        tailf:info "<0-255>;;Priority";
+        range "0..255";
+      }
+    }
+  }
+
+  grouping interface-ospf-retransmit-interval-grouping {
+    leaf retransmit-interval {
+      tailf:info "Time between retransmitting lost link state advertisements";
+      description
+        "Time between retransmitting lost link state advertisements";
+      type uint32 {
+        tailf:info "<1-65535>;;Seconds";
+        range "1..65535";
+      }
+    }
+  }
+
+  grouping interface-ospf-transmit-delay-grouping {
+    leaf transmit-delay {
+      tailf:info "Link state transmit delay";
+      description
+        "Link state transmit delay";
+      type uint32 {
+        tailf:info "<1-65535>;;Seconds";
+        range "1..65535";
+      }
+    }
+  }
+
+  grouping interface-ospf-bfd-grouping {
+    container bfd {
+      tailf:info "Enable BFD on this interface";
+      description
+        "Enable BFD on this interface";
+      presence "true";
+      leaf disable {
+        tailf:info "Disable BFD on this interface";
+        description
+          "Disable BFD on this interface";
+        type empty;
+      }
+    }
+  }
+
+  grouping interface-ospfv3-cost-grouping {
+    container cost {
+      tailf:info "Route cost of this interface";
+      description
+        "Route cost of this interface";
+      leaf value {
+        tailf:cli-full-command;
+        tailf:cli-drop-node-name;
+        type uint32 {
+          tailf:info "<1-65535>;;Route cost of this interface";
+          range "1..65535";
+        }
+      }
+      container dynamic {
+        tailf:info "Specify dynamic cost options";
+        description
+          "Specify dynamic cost options";
+        presence "true";
+        leaf default {
+          tailf:info "Specify default link metric value";
+          description
+            "Specify default link metric value";
+          type uint32 {
+            tailf:info "<0-65535>;;Default link metric on this interface";
+            range "0..65535";
+          }
+        }
+        container hysteresis {
+          tailf:info "Specify hysteresis value for LSA dampening";
+          description
+            "Specify hysteresis value for LSA dampening";
+          presence "true";
+          leaf percent {
+            tailf:info "Specify hysteresis percent changed";
+            description
+              "Specify hysteresis percent changed";
+            tailf:cli-full-command;
+            type uint8 {
+              tailf:info "<1-100>;;Route cost percent changed";
+              range "1..100";
+            }
+          }
+          leaf threshold {
+            tailf:info "Specify hysteresis threshold value";
+            description
+              "Specify hysteresis threshold value";
+            tailf:cli-full-command;
+            type uint32 {
+              tailf:info "<0-65535>;;Significant route cost increment";
+              range "0..65535";
+            }
+          }
+        }
+        container weight {
+          tailf:info "Specify weight to be placed on individual metrics";
+          description
+            "Specify weight to be placed on individual metrics";
+          container L2-factor {
+            tailf:info "Specify weight to be given to L2-factor metric";
+            description
+              "Specify weight to be given to L2-factor metric";
+            presence "true";
+            leaf value {
+              tailf:cli-drop-node-name;
+              type uint8 {
+                tailf:info "<0-100>;;Percentage weight of L2-factor metric";
+                range "0..100";
+              }
+            }
+          }
+          container latency {
+            tailf:info "Specify weight to be given to latency metric";
+            description
+              "Specify weight to be given to latency metric";
+            presence "true";
+            leaf value {
+              tailf:cli-drop-node-name;
+              type uint8 {
+                tailf:info "<0-100>;;Percentage weight of latency metric";
+                range "0..100";
+              }
+            }
+          }
+          container resources {
+            tailf:info "Specify weight to be given to resources metric";
+            description
+              "Specify weight to be given to resources metric";
+            presence "true";
+            leaf value {
+              tailf:cli-drop-node-name;
+              type uint8 {
+                tailf:info "<0-100>;;Percentage weight of resources metric";
+                range "0..100";
+              }
+            }
+          }
+          container throughput {
+            tailf:info "Specify weight to be given to throughput metric";
+            description
+              "Specify weight to be given to throughput metric";
+            presence "true";
+            leaf value {
+              tailf:cli-drop-node-name;
+              type uint8 {
+                tailf:info "<0-100>;;Percentage weight of throughput metric";
+                range "0..100";
+              }
+            }
+          }
+        }
+      }
+    }
+  }
+
+  grouping interface-ospf-dead-interval-grouping {
+    leaf dead-interval {
+      tailf:info "Interval after which a neighbor is declared dead";
+      description
+        "Interval after which a neighbor is declared dead";
+      type uint16 {
+        tailf:info "<1-65535>;;Seconds";
+        range "1..65535";
+      }
+    }
+  }
+
+  grouping interface-ospf-hello-interval-grouping {
+    leaf hello-interval {
+      tailf:info "Time between HELLO packets";
+      description
+        "Time between HELLO packets";
+      type uint32 {
+        tailf:info "<1-65535>;;Seconds";
+        range "1..65535";
+      }
+    }
+  }
+
+  grouping interface-ospfv3-manet-grouping {
+    container manet {
+      tailf:info "Mobile Adhoc Networking options";
+      description
+        "Mobile Adhoc Networking options";
+      container peering {
+        tailf:info "MANET Peering options";
+        description
+          "MANET Peering options";
+        container cost {
+          tailf:info "Redundant path cost improvement required to peer";
+          description
+            "Redundant path cost improvement required to peer";
+          leaf percent {
+            tailf:info "Relative incremental path cost";
+            description
+              "Relative incremental path cost";
+            tailf:cli-full-command;
+            type uint8 {
+              tailf:info "<0-100>;;Required incremental path cost improvement";
+              range "0..100";
+            }
+          }
+          leaf threshold {
+            tailf:info "Absolute incremental path cost";
+            description
+              "Absolute incremental path cost";
+            tailf:cli-full-command;
+            type uint32 {
+              tailf:info "<0-65535>;;Required incremental path cost improvement";
+              range "0..65535";
+            }
+          }
+        }
+        leaf link-metrics {
+          tailf:info "Require link metrics";
+          description
+            "Require link metrics";
+          type uint32 {
+            tailf:info "<0-65535>;;Minimum link cost threshold";
+            range "0..65535";
+          }
+        }
+      }
+    }
+  }
+
+  grouping interface-ospfv3-process-id-grouping {
+    container authentication {
+      tailf:info "Enable authentication";
+      description
+        "Enable authentication";
+      leaf key-chain {
+        tailf:info "Use a key-chain for cryptographic authentication keys";
+        description
+          "Use a key-chain for cryptographic authentication keys";
+        tailf:cli-full-command;
+        type string {
+          tailf:info "WORD;;Key-chain name";
+        }
+      }
+      leaf null {
+        tailf:cli-full-command;
+        tailf:info "Use no authentication";
+        description
+          "Use no authentication";
+        type empty;
+      }
+    }
+    uses interface-ospf-bfd-grouping;
+    uses interface-ospfv3-cost-grouping;
+    container database-filter {
+      tailf:info "Filter OSPF LSA during synchronization and flooding";
+      description
+        "Filter OSPF LSA during synchronization and flooding";
+      choice database {
+        leaf all {
+          tailf:info "Filter all LSA";
+          description
+            "Filter all LSA";
+          type enumeration {
+            enum "out" {
+              tailf:info "Outgoing LSA";
+            }
+          }
+        }
+        leaf disable {
+          tailf:info "Disable LSA Filter on this interface";
+          description
+            "Disable LSA Filter on this interface";
+          type empty;
+        }
+      }
+    }
+    uses interface-ospf-dead-interval-grouping;
+    container demand-circuit {
+      tailf:info "OSPF demand circuit";
+      description
+        "OSPF demand circuit";
+      presence "true";
+      leaf disable {
+        tailf:cli-full-command;
+        tailf:info "Disable demand circuit on this interface";
+        description
+          "Disable demand circuit on this interface";
+        type empty;
+      }
+      leaf ignore {
+        tailf:cli-full-command;
+        tailf:info "Ignore demand circuit auto-negotiation requests";
+        description
+          "Ignore demand circuit auto-negotiation requests";
+        type empty;
+      }
+    }
+    container flood-reduction {
+      tailf:info "OSPF Flood Reduction";
+      description
+        "OSPF Flood Reduction";
+      presence "true";
+      leaf disable {
+        tailf:info "Disable Flood Reduction on this interface";
+        type empty;
+      }
+    }
+    uses interface-ospf-hello-interval-grouping;
+    uses interface-ospfv3-manet-grouping;
+    container mtu-ignore {
+      tailf:info "Ignores the MTU in DBD packets";
+      description
+        "Ignores the MTU in DBD packets";
+      presence "true";
+      leaf disable {
+        tailf:info "Disable Ingore MTU on this interface";
+        description
+          "Disable Ingore MTU on this interface";
+        type empty;
+      }
+    }
+    container multi-area {
+      tailf:info "Set the OSPF multi-area ID";
+      description
+        "Set the OSPF multi-area ID";
+      tailf:cli-sequence-commands;
+      tailf:cli-compact-syntax;
+      leaf id {
+        tailf:cli-drop-node-name;
+        type union {
+          type uint32 {
+            tailf:info "<0-4294967295>;;OSPF multi-area ID as a decimal value";
+            range "0..4294967295";
+          }
+          type inet:ipv4-address {
+            tailf:info "A.B.C.D;;OSPF multi-area ID in IP address format";
+          }
+        }
+      }
+      leaf cost {
+        tailf:info "Interface cost";
+        description
+          "Interface cost";
+        tailf:cli-optional-in-sequence;
+        tailf:cli-full-command;
+        type uint32 {
+          tailf:info " <1-65535>;;Cost";
+          range "1..65535";
+        }
+      }
+      leaf disable {
+        tailf:info "disable OSPF multi-area";
+        description
+          "disable OSPF multi-area";
+        tailf:cli-optional-in-sequence;
+        tailf:cli-full-command;
+        type empty;
+      }
+    }
+    uses interface-ospf-neighbor-grouping;
+    uses interface-ospf-network-grouping;
+    uses interface-ospf-prefix-suppression-grouping;
+    uses interface-ospf-priority-grouping;
+    uses interface-ospf-retransmit-interval-grouping;
+    container shutdown {
+      tailf:info "Shut down the interface in OSPFv3";
+      description
+        "Shut down the interface in OSPFv3";
+      presence "true";
+      leaf disable {
+        tailf:info "Disable inherited shutdown";
+        description
+          "Disable inherited shutdown";
+        type empty;
+      }
+    }
+    uses interface-ospf-transmit-delay-grouping;
+  }
+
+  grouping interface-ip-monitor-grouping {
+    container monitor {
+      tailf:info "Apply a Flow Monitor";
+      description
+        "Apply a Flow Monitor";
+      tailf:cli-sequence-commands;
+      tailf:cli-compact-syntax;
+      leaf name {
+        tailf:cli-drop-node-name;
+        type string {
+          tailf:info "name;;User defined";
+        }
+      }
+      leaf way {
+        tailf:cli-drop-node-name;
+        type enumeration {
+          enum "input" {
+            tailf:info "Apply Flow Monitor on input traffic";
+          }
+          enum "multicast" {
+            tailf:info "Apply Flow Monitor on multicast traffic";
+          }
+          enum "output" {
+            tailf:info "Apply Flow Monitor on output traffic";
+          }
+          enum "sampler" {
+            tailf:info "Optional Sampler to apply to this Flow Monitor";
+          }
+          enum "unicast" {
+            tailf:info "Apply Flow Monitor on unicast traffic";
+          }
+        }
+      }
+      leaf next {
+        tailf:cli-drop-node-name;
+        when "../way = 'multicast' or ../way = 'unicast'";
+        type enumeration {
+          enum "input" {
+            tailf:info "Apply Flow Monitor on input traffic";
+          }
+          enum "output" {
+            tailf:info "Apply Flow Monitor on output traffic";
+          }
+        }
+      }
+    }
+  }
+
+  grouping interface-ip-wccp-group-listen-grouping {
+    leaf group-listen {
+      tailf:info "Listen for multicasted WCCP protocol packets";
+      description
+        "Listen for multicasted WCCP protocol packets";
+      tailf:cli-full-command;
+      type empty;
+    }
+    container redirect {
+      tailf:info "Set packet redirection options for the service";
+      description
+        "Set packet redirection options for the service";
+      leaf in {
+        tailf:info "Redirect to a Cache Engine appropriate inbound packets";
+        description
+          "Redirect to a Cache Engine appropriate inbound packets";
+        tailf:cli-full-command;
+        type empty;
+      }
+      leaf out {
+        tailf:info "Redirect to a Cache Engine appropriate outbound packets";
+        description
+          "Redirect to a Cache Engine appropriate outbound packets";
+        tailf:cli-full-command;
+        type empty;
+      }
+    }
+  }
+
+  grouping interface-ip-wccp-grouping {
+    list wccp-list {
+      tailf:cli-drop-node-name;
+      tailf:cli-suppress-mode;
+      key "id";
+      leaf id {
+        type uint8 {
+          tailf:info "<0-254>;;Dynamically defined service identifier number";
+          range "0..254";
+        }
+      }
+      uses interface-ip-wccp-group-listen-grouping;
+    }
+    container web-cache {
+      tailf:info "Standard web caching service";
+      description
+        "Standard web caching service";
+      uses interface-ip-wccp-group-listen-grouping;
+    }
+  }
+
+  grouping interface-common-grouping {
+    container cemoudp {
+      tailf:info "cemoudp";
+      description
+        "cemoudp";
+      container reserve {
+        leaf acr {
+          type uint8;
+        }
+      }
+    }
+    container crypto {
+      tailf:info "Encryption/Decryption commands";
+      description
+        "Encryption/Decryption commands";
+      container map {
+        tailf:info "Assign a Crypto Map";
+        description
+          "Assign a Crypto Map";
+        tailf:cli-sequence-commands;
+        tailf:cli-compact-syntax;
+        leaf tag {
+          tailf:cli-drop-node-name;
+          type string {
+            tailf:info "WORD;;Crypto Map tag";
+          }
+        }
+        leaf redundancy {
+          tailf:info "enable redundancy";
+          description
+            "enable redundancy";
+          tailf:cli-optional-in-sequence;
+          type string {
+            tailf:info "WORD  Name of IP Redundancy Group";
+          }
+        }
+        leaf stateful {
+          tailf:info "enable stateful failover";
+          description
+            "enable stateful failover";
+          tailf:cli-optional-in-sequence;
+          type empty;
+        }
+      }
+      container ipsec {
+        tailf:info "Set IPSec parameters";
+        description
+          "Set IPSec parameters";
+        leaf df-bit {
+          tailf:info "Handling of encapsulated DF bit.";
+          description
+            "Handling of encapsulated DF bit.";
+          type enumeration {
+            enum "clear" {
+              tailf:info "Clear DF bit for encapsulated packets.";
+            }
+            enum "copy" {
+              tailf:info "Copy DF bit from inner for encapsulated packets.";
+            }
+            enum "set" {
+              tailf:info "Set DF bit for encapsulated packets.";
+            }
+          }
+        }
+        leaf fragmentation {
+          tailf:info "Handling of fragmentation of near-MTU sized packets";
+          description
+            "Handling of fragmentation of near-MTU sized packets";
+          type enumeration {
+            enum "after-encryption" {
+              tailf:info "Perform fragmentation of large packets after IPSec encapsulation";
+            }
+            enum "before-encryption" {
+              tailf:info "Perform fragmentation of large packets before IPSec encapsulation.";
+            }
+          }
+        }
+      }
+    }
+    leaf description {
+      tailf:info "Interface specific description";
+      description
+        "Interface specific description";
+      tailf:cli-multi-value;
+      tailf:cli-full-command;
+      type string {
+        length "0..240";
+      }
+    }
+    container mab {
+      presence "true";
+      leaf eap {
+        type empty;
+      }
+    }
+    container l2protocol-tunnel {
+      tailf:info "Tunnel Layer2 protocols";
+      description
+        "Tunnel Layer2 protocols";
+      tailf:cli-delete-when-empty;
+      presence "true";
+      leaf cdp {
+        tailf:info "Cisco Discovery Protocol";
+        description
+          "Cisco Discovery Protocol";
+        type empty;
+      }
+      container drop-threshold {
+        tailf:info "Set drop threshold for protocol packets";
+        description
+          "Set drop threshold for protocol packets";
+        leaf packet-rate {
+          tailf:cli-drop-node-name;
+          type uint16 {
+            tailf:info "<1-4096>;;Packets/sec rate beyond which protocol packets will be dropped";
+            range "1..4096";
+          }
+        }
+        leaf cdp {
+          tailf:info "Cisco Discovery Protocol";
+          description
+            "Cisco Discovery Protocol";
+          type uint16 {
+            tailf:info "<1-4096>;;Packets/sec rate beyond which protocol packets will be dropped";
+            range "1..4096";
+          }
+        }
+        leaf stp {
+          tailf:info "Spanning Tree Protocol";
+          description
+            "Spanning Tree Protocol";
+          type uint16 {
+            tailf:info "<1-4096>;;Packets/sec rate beyond which protocol packets will be dropped";
+            range "1..4096";
+          }
+        }
+        leaf vtp {
+          tailf:info "Vlan Trunking Protocol";
+          description
+            "Vlan Trunking Protocol";
+          type uint16 {
+            tailf:info "<1-4096>;;Packets/sec rate beyond which protocol packets will be dropped";
+            range "1..4096";
+          }
+        }
+      }
+      container shutdown-threshold {
+        tailf:info "Set shutdown threshold for protocol packets";
+        description
+          "Set shutdown threshold for protocol packets";
+        leaf packet-rate {
+          tailf:cli-drop-node-name;
+          type uint16 {
+            tailf:info "<1-4096>;;Packets/sec rate beyond which interface is put to err-disable";
+            range "1..4096";
+          }
+        }
+        leaf cdp {
+          tailf:info "Cisco Discovery Protocol";
+          description
+            "Cisco Discovery Protocol";
+          type uint16 {
+            tailf:info "<1-4096>;;Packets/sec rate beyond which interface is put to err-disable";
+            range "1..4096";
+          }
+        }
+        leaf stp {
+          tailf:info "Spanning Tree Protocol";
+          description
+            "Spanning Tree Protocol";
+          type uint16 {
+            tailf:info "<1-4096>;;Packets/sec rate beyond which interface is put to err-disable";
+            range "1..4096";
+          }
+        }
+        leaf vtp {
+          tailf:info "Vlan Trunking Protocol";
+          description
+            "Vlan Trunking Protocol";
+          type uint16 {
+            tailf:info "<1-4096>;;Packets/sec rate beyond which interface is put to err-disable";
+            range "1..4096";
+          }
+        }
+      }
+      leaf stp {
+        tailf:info "Spanning Tree Protocol";
+        description
+          "Spanning Tree Protocol";
+        type empty;
+      }
+      leaf vtp {
+        tailf:info "Vlan Trunking Protocol";
+        description
+          "Vlan Trunking Protocol";
+        type empty;
+      }
+    }
+    container encapsulation {
+      tailf:info "Set encapsulation type for an interface";
+      description
+        "Set encapsulation type for an interface";
+      container dot1Q {
+        tailf:info "IEEE 802.1Q Virtual LAN";
+        description
+          "IEEE 802.1Q Virtual LAN";
+        tailf:cli-sequence-commands;
+        tailf:cli-compact-syntax;
+        leaf vlan-id {
+          tailf:cli-drop-node-name;
+          type uint16 {
+            tailf:info "<1-4094>;;IEEE 802.1Q VLAN ID required";
+            range "1..4094";
+          }
+        }
+        leaf native {
+          tailf:info "Make this as native vlan";
+          description
+            "Make this as native vlan";
+          type empty;
+        }
+      }
+      container isl {
+        tailf:info "Inter Switch Link - Virtual LAN encapsulation";
+        description
+          "Inter Switch Link - Virtual LAN encapsulation";
+        tailf:cli-sequence-commands;
+        tailf:cli-compact-syntax;
+        leaf vlan-id {
+          tailf:cli-drop-node-name;
+          type uint16 {
+            tailf:info "<1-4095>;;Virtual LAN Identifier.";
+            range "1..4095";
+          }
+        }
+      }
+      container ppp {
+        tailf:info "Point-to-Point protocol";
+        description
+          "Point-to-Point protocol";
+        presence "true";
+      }
+      container slip {
+        tailf:info "Serial Line IP";
+        description
+          "Serial Line IP";
+        presence "true";
+      }
+      container frame-relay {
+        tailf:info "Frame Relay networks";
+        description
+          "Frame Relay networks";
+        tailf:cli-delete-when-empty;
+        presence "true";
+        leaf ietf {
+          tailf:info "Use RFC1490/RFC2427 encapsulation";
+          description
+            "Use RFC1490/RFC2427 encapsulation";
+          type empty;
+        }
+      }
+    }
+    container fair-queue-conf {
+      tailf:cli-no-keyword;
+      tailf:cli-drop-node-name;
+      when "not(../name[contains(.,'.')])" {
+        tailf:dependency "../name";
+      }
+      leaf fair-queue {
+        tailf:cli-boolean-no;
+        tailf:cli-trim-default;
+        type boolean;
+      }
+    }
+    container fair-queue {
+      tailf:info "Enable Fair Queuing on an Interface";
+      description
+        "Enable Fair Queuing on an Interface";
+      tailf:cli-incomplete-no;
+      leaf incomplete {
+        type empty;
+      }
+    }
+    container flowcontrol {
+      tailf:info "Configure flow operation.";
+      description
+        "Configure flow operation.";
+      leaf receive {
+        tailf:info "Configure receiving flow operation";
+        description
+          "Configure receiving flow operation";
+        type enumeration {
+          enum "desired" {
+            tailf:info "Allow but do not require flow-control packets on port";
+          }
+          enum "off" {
+            tailf:info "Disable flow-control packets on port";
+          }
+          enum "on" {
+            tailf:info "Enable flow-control packets on port";
+          }
+        }
+      }
+      leaf send {
+        tailf:info "Configure sending flow operation";
+        description
+          "Configure sending flow operation";
+        type enumeration {
+          enum "desired" {
+            tailf:info "Allow but do not require flow-control packets on port";
+          }
+          enum "off" {
+            tailf:info "Disable flow-control packets on port";
+          }
+          enum "on" {
+            tailf:info "Enable flow-control packets on port";
+          }
+        }
+      }
+    }
+    choice keepalive-choice {
+      leaf keepalive {
+        tailf:info "Enable keepalive";
+        description
+          "Enable keepalive";
+        tailf:cli-boolean-no;
+        type boolean;
+      }
+      container keepalive-settings {
+        tailf:cli-drop-node-name;
+        container keepalive {
+          tailf:info "Enable keepalive";
+          description
+            "Enable keepalive";
+          tailf:cli-sequence-commands;
+          tailf:cli-compact-syntax;
+          presence "true";
+          leaf period {
+            tailf:cli-drop-node-name;
+            type uint16 {
+              tailf:info "<0-32767>;;Keepalive period (default 10 seconds)";
+              range "0..32767";
+            }
+          }
+          leaf retries {
+            tailf:cli-drop-node-name;
+            tailf:cli-optional-in-sequence;
+            type uint8 {
+              tailf:info "<1-255>;;Keepalive retries";
+            }
+          }
+        }
+      }
+    }
+    container lisp {
+      tailf:info "Locator/ID Separation Protocol";
+      description
+        "Locator/ID Separation Protocol";
+      leaf extended-subnet-mode {
+        tailf:info "Configures to enable extended subnet mode on the interface";
+        description
+          "Configures to enable extended subnet mode on the interface";
+        tailf:cli-full-command;
+        type empty;
+      }
+      container mobility {
+        tailf:info "Configures to allow EID mobility on interface";
+        description
+          "Configures to allow EID mobility on interface";
+        container dynamic-eid {
+          tailf:cli-drop-node-name;
+          tailf:cli-sequence-commands;
+          tailf:cli-compact-syntax;
+          leaf dynamic-eid-name {
+            tailf:cli-drop-node-name;
+            type string {
+              tailf:info "WORD;;Name of the dynamic-EID to use";
+            }
+          }
+          leaf nbr-proxy-reply {
+            tailf:info "Neighbor proxy reply behavior for dynamic EID group";
+            description
+              "Neighbor proxy reply behavior for dynamic EID group";
+            tailf:cli-optional-in-sequence;
+            tailf:cli-incomplete-command;
+            type empty;
+          }
+          leaf requests {
+            tailf:info "Send neighbor proxy reply after reaching request threshold";
+            description
+              "Send neighbor proxy reply after reaching request threshold";
+            tailf:cli-optional-in-sequence;
+            type uint8 {
+              tailf:info "<0-5>;;Requests threshold, 1 is the default";
+              range "0..5";
+            }
+          }
+        }
+        container discover {
+          tailf:info "Configure mobility dynamic EID discover settings";
+          description
+            "Configure mobility dynamic EID discover settings";
+          leaf arp {
+            tailf:info "Dynamic EID discover through ARP events on this interface";
+            description
+              "Dynamic EID discover through ARP events on this interface";
+            type empty;
+          }
+        }
+        container liveness {
+          tailf:info "Configure mobility liveness settings";
+          description
+            "Configure mobility liveness settings";
+          leaf test {
+            tailf:info "Perform liveness test on dynamic-EID discovered on this interface";
+            description
+              "Perform liveness test on dynamic-EID discovered on this interface";
+            tailf:cli-trim-default;
+            tailf:cli-boolean-no;
+            type boolean;
+          }
+          leaf ttl {
+            tailf:info "Configures the TTL in the liveness test packet";
+            description
+              "Configures the TTL in the liveness test packet";
+            type uint8 {
+              tailf:info "<2-255>;;TTL in liveness test packet";
+              range "2..255";
+            }
+          }
+        }
+      }
+    }
+    container snmp {
+      tailf:info "Modify SNMP interface parameters";
+      description
+        "Modify SNMP interface parameters";
+      container ifindex {
+        tailf:info "Persist ifindex for the interface";
+        description
+          "Persist ifindex for the interface";
+        choice ifindex-choice {
+          leaf persist {
+            tailf:info "Enable/Disable ifIndex persistence ";
+            description
+              "Enable/Disable ifIndex persistence ";
+            type empty;
+          }
+          leaf clear {
+            tailf:info "Clear Enable/Disable ifIndex persistence";
+            description
+              "Clear Enable/Disable ifIndex persistence";
+            tailf:cli-trim-default;
+            tailf:cli-boolean-no;
+            type boolean;
+          }
+        }
+      }
+      container trap {
+        tailf:info "Allow a specific SNMP trap";
+        description
+          "Allow a specific SNMP trap";
+        leaf link-status {
+          tailf:info "Allow SNMP LINKUP and LINKDOWN traps";
+          description
+            "Allow SNMP LINKUP and LINKDOWN traps";
+          tailf:cli-boolean-no;
+          tailf:cli-trim-default;
+          tailf:cli-full-command;
+          type boolean;
+        }
+        container link-status-capas {
+          tailf:cli-drop-node-name;
+          container link-status {
+            tailf:info "Allow SNMP LINKUP and LINKDOWN traps";
+            description
+              "Allow SNMP LINKUP and LINKDOWN traps";
+            container permit {
+              tailf:info "Permit the following capability";
+              description
+                "Permit the following capability";
+              leaf duplicates {
+                tailf:info "Permit duplicate SNMP LINKUP and LINKDOWN traps";
+                description
+                  "Permit duplicate SNMP LINKUP and LINKDOWN traps";
+                type empty;
+              }
+            }
+          }
+        }
+      }
+    }
+    container bfd {
+      tailf:info "BFD interface configuration commands";
+      description
+        "BFD interface configuration commands";
+      leaf echo {
+        tailf:info "Use echo adjunct as bfd detection mechanism";
+        description
+          "Use echo adjunct as bfd detection mechanism";
+        type empty;
+      }
+      leaf template {
+        tailf:info "BFD template";
+        description
+          "BFD template";
+        type string {
+          tailf:info "WORD;;bfd template name";
+        }
+      }
+      container interval {
+        tailf:info "Transmit interval between BFD packets";
+        description
+          "Transmit interval between BFD packets";
+        tailf:cli-reset-container;
+        tailf:cli-compact-syntax;
+        tailf:cli-sequence-commands;
+        leaf msecs {
+          tailf:cli-drop-node-name;
+          tailf:cli-incomplete-command;
+          type uint16 {
+            tailf:info "<100-999>;;Milliseconds";
+            range "100..999";
+          }
+        }
+        leaf min_rx {
+          tailf:info "Minimum receive interval capability";
+          description
+            "Minimum receive interval capability";
+          tailf:cli-incomplete-command;
+          type uint16 {
+            tailf:info "<100-999>;;Milliseconds";
+            range "100..999";
+          }
+        }
+        leaf multiplier {
+          tailf:info "Multiplier value used to compute holddown";
+          description
+            "Multiplier value used to compute holddown";
+          type uint8 {
+            tailf:info "<3-50>;;value used to multiply the interval";
+            range "3..50";
+          }
+        }
+      }
+    }
+    container bandwidth {
+      tailf:info "Set bandwidth informational parameter";
+      description
+        "Set bandwidth informational parameter";
+      container receive {
+        tailf:info "Specify receive-side bandwidth";
+        description
+          "Specify receive-side bandwidth";
+        tailf:cli-compact-syntax;
+        leaf inherit {
+          tailf:info "Specify how bandwidth is inherited";
+          description
+            "Specify how bandwidth is inherited";
+          type empty;
+        }
+        leaf kilobits {
+          tailf:cli-drop-node-name;
+          type uint32 {
+            tailf:info "<1-10000000>;;Bandwidth in kilobits";
+            range "1..10000000";
+          }
+        }
+      }
+      container inherit {
+        tailf:info "Specify how bandwidth is inherited";
+        description
+          "Specify how bandwidth is inherited";
+        presence "true";
+        leaf kilobits {
+          tailf:cli-drop-node-name;
+          type uint32 {
+            tailf:info "<1-10000000>;;Bandwidth in kilobits";
+            range "1..10000000";
+          }
+        }
+      }
+      leaf qos-reference {
+        tailf:info "Reference bandwidth for QOS";
+        description
+          "Reference bandwidth for QOS";
+        type uint32 {
+          tailf:info "<1-10000000>;;Bandwidth in kilobits";
+          range "1..10000000";
+        }
+      }
+      leaf kilobits {
+        tailf:cli-drop-node-name;
+        type uint32 {
+          tailf:info "<1-10000000>;;Bandwidth in kilobits";
+          range "1..10000000";
+        }
+      }
+    }
+    container cdp {
+      tailf:info "CDP interface subcommands";
+      description
+        "CDP interface subcommands";
+      leaf enable {
+        tailf:info "Enable CDP on interface";
+        description
+          "Enable CDP on interface";
+        tailf:cli-boolean-no;
+        tailf:cli-trim-default;
+        tailf:cli-full-command;
+        type boolean;
+      }
+      container tlv {
+        tailf:info "Enable exchange of specific tlv information";
+        description
+          "Enable exchange of specific tlv information";
+        container app {
+          tailf:info "Enable/Configure Application TLV";
+          description
+            "Enable/Configure Application TLV";
+          tailf:cli-display-separated;
+          tailf:cli-compact-syntax;
+          tailf:cli-reset-container;
+          tailf:cli-sequence-commands;
+          presence "true";
+          leaf tlvtype {
+            tailf:info "Configure APP TLV";
+            description
+              "Configure APP TLV";
+            tailf:cli-incomplete-command;
+            type uint16 {
+              tailf:info "Configure App TLV Type information";
+              range "1001..65535";
+            }
+          }
+          leaf value {
+            tailf:info "Configure App TLV Value information";
+            description
+              "Configure App TLV Value information";
+            type string {
+              tailf:info "WORD;;Configure App TLV value information";
+            }
+          }
+        }
+        leaf server-location {
+          tailf:info "Enable CDP location server on interface";
+          description
+            "Enable CDP location server on interface";
+          tailf:cli-full-command;
+          type empty;
+        }
+        leaf location {
+          tailf:info "Exchange location information";
+          description
+            "Exchange location information";
+          tailf:cli-full-command;
+          type empty;
+        }
+      }
+    }
+    container dampening {
+      tailf:info "Enable event dampening";
+      description
+        "Enable event dampening";
+      presence "true";
+      leaf dampening-time {
+        tailf:cli-drop-node-name;
+        tailf:cli-delete-container-on-delete;
+        tailf:info "<1-30>;;Half-life time for penalty";
+        description
+          "<1-30>;;Half-life time for penalty";
+        type uint16 {
+          range "1..30";
+        }
+      }
+    }
+    leaf if-state {
+      type enumeration {
+        enum "nhrp";
+      }
+    }
+    leaf delay {
+      tailf:info "Specify interface throughput delay";
+      description
+        "Specify interface throughput delay";
+      type uint32 {
+        tailf:info "<1-16777215>;;Throughput delay (tens of microseconds)";
+        range "1..16777215";
+      }
+    }
+    container domain {
+      tailf:info "Specify a domain";
+      description
+        "Specify a domain";
+      tailf:cli-compact-syntax;
+      leaf name {
+        tailf:cli-drop-node-name;
+        type string {
+          tailf:info "WORD;;Domain name";
+        }
+      }
+      leaf path {
+        tailf:info "Specify a service provider for this interface";
+        description
+          "Specify a service provider for this interface";
+        type string {
+          tailf:info "WORD;;Specify the color of service provider";
+        }
+      }
+      leaf internet-bound {
+        tailf:display-when "../path";
+        tailf:info "Specify Internet-bound interface";
+        description
+          "Specify Internet-bound interface";
+        type empty;
+      }
+      leaf path-id {
+        tailf:display-when "../path";
+        tailf:info "Specify service provider path-id for this interface";
+        description
+          "Specify service provider path-id for this interface";
+        type uint8 {
+          tailf:info "<1-255>;;service provider path-id value";
+        }
+      }
+      leaf path-last-resort {
+        tailf:display-when "../path";
+        tailf:info "Specify if you want this interface to be a path of last resort";
+        description
+          "Specify if you want this interface to be a path of last resort";
+        type empty;
+      }
+      leaf zero-sla {
+        tailf:display-when "../path";
+        tailf:info "Specify if you want this interface to be a 0-sla interface";
+        description
+          "Specify if you want this interface to be a 0-sla interface";
+        type empty;
+      }
+    }
+    container hold-queue {
+      tailf:info "Set hold queue depth";
+      description
+        "Set hold queue depth";
+      tailf:cli-compact-syntax;
+      tailf:cli-reset-container;
+      tailf:cli-sequence-commands;
+      leaf queue-length {
+        tailf:cli-drop-node-name;
+        type uint16 {
+          tailf:info "<0-4096>;;Queue length";
+          range "0..4096";
+        }
+      }
+      leaf direction {
+        tailf:cli-drop-node-name;
+        type enumeration {
+          enum "in" {
+            tailf:info "Input queue";
+          }
+          enum "out" {
+            tailf:info "Output queue";
+          }
+        }
+      }
+    }
+    container mpls {
+      tailf:info "Configure MPLS interface parameters";
+      description
+        "Configure MPLS interface parameters";
+      container accounting {
+        tailf:info "Enable MPLS accounting on this interface";
+        description
+          "Enable MPLS accounting on this interface";
+        container experimental {
+          tailf:info "Count packets by MPLS experimental value on this interface";
+          description
+            "Count packets by MPLS experimental value on this interface";
+          leaf input {
+            tailf:info "received packets";
+            description
+              "received packets";
+            type empty;
+          }
+          leaf output {
+            tailf:info "transmitted packets";
+            description
+              "transmitted packets";
+            type empty;
+          }
+        }
+      }
+      container bgp {
+        tailf:info "MPLS BGP";
+        description
+          "MPLS BGP";
+        leaf forwarding {
+          tailf:info "Configure MPLS forwarding for directly connected BGP peers";
+          description
+            "Configure MPLS forwarding for directly connected BGP peers";
+          type empty;
+        }
+      }
+      leaf ip {
+        tailf:info "Configure dynamic MPLS forwarding for IP";
+        description
+          "Configure dynamic MPLS forwarding for IP";
+        tailf:cli-full-command;
+        type empty;
+      }
+      container label {
+        tailf:info "Label properties";
+        description
+          "Label properties";
+        leaf protocol {
+          tailf:info "Configure label/tag distribution protocol (LDP/TDP)";
+          description
+            "Configure label/tag distribution protocol (LDP/TDP)";
+          type enumeration {
+            enum "both" {
+              tailf:info "Use LDP or TDP (Adapt to peer on multiaccess interface)";
+            }
+            enum "ldp" {
+              tailf:code-name "lab_ldp";
+              tailf:info "Use LDP (default)";
+            }
+            enum "tdp" {
+              tailf:code-name "lab_tdp";
+              tailf:info "Use TDP";
+            }
+          }
+        }
+      }
+      container ldp {
+        tailf:info "Configure Label Distribution Protocol (LDP) parameters";
+        description
+          "Configure Label Distribution Protocol (LDP) parameters";
+        container discovery {
+          tailf:info "Configure interface LDP Discovery parameters";
+          description
+            "Configure interface LDP Discovery parameters";
+          leaf transport-address {
+            tailf:info "Specify interface LDP transport address";
+            description
+              "Specify interface LDP transport address";
+            type ldp-discovery-address-type;
+          }
+        }
+      }
+      leaf mtu {
+        tailf:info "Set MPLS Maximum Transmission Unit";
+        description
+          "Set MPLS Maximum Transmission Unit";
+        tailf:cli-full-command;
+        type union {
+          type uint16 {
+            range "1501..1524";
+            tailf:info "<1501-1524>;;MTU (baby giants bytes)";
+          }
+          type uint16 {
+            range "64..1500";
+            tailf:info "<64-1500>;;MTU (bytes)";
+          }
+          type uint16 {
+            tailf:info "<64-9216>;;MTU size in bytes";
+            range "64..9216";
+          }
+        }
+      }
+      container traffic-eng {
+        tailf:info "Configure Traffic Engineering parameters";
+        description
+          "Configure Traffic Engineering parameters";
+        leaf administrative-weight {
+          tailf:info "Set the administrative weight for the interface";
+          description
+            "Set the administrative weight for the interface";
+          tailf:cli-full-command;
+          type uint32 {
+            range "0..4294967295";
+            tailf:info "<0-4294967295>;;Weight";
+          }
+        }
+        leaf attribute-flags {
+          tailf:info "Set user-defined interface attibute flags";
+          description
+            "Set user-defined interface attibute flags";
+          tailf:cli-full-command;
+          type string {
+            tailf:info "<0x0-0xFFFFFFFF>;;Attribute flags";
+          }
+        }
+        leaf backup-path {
+          tailf:info "Configure an MPLS TE backup for this interface";
+          description
+            "Configure an MPLS TE backup for this interface";
+          type string {
+            tailf:info "Tunnel;;Tunnel interface";
+          }
+        }
+        container flooding {
+          tailf:info "Set flooding parameters";
+          description
+            "Set flooding parameters";
+          container thresholds {
+            tailf:info "Set flooding thresholds";
+            description
+              "Set flooding thresholds";
+            leaf-list down {
+              tailf:info "Set the thresholds for decreased resource availability";
+              description
+                "Set the thresholds for decreased resource availability";
+              tailf:cli-flat-list-syntax;
+              type uint8 {
+                range "0..100";
+                tailf:info "<0-100>;;decreased bandwidth usage (percent)";
+              }
+            }
+            leaf-list up {
+              tailf:info "Set the thresholds for increased resource availability";
+              description
+                "Set the thresholds for increased resource availability";
+              tailf:cli-flat-list-syntax;
+              type uint8 {
+                range "0..100";
+                tailf:info "<0-100>;;increased bandwidth usage (percent)";
+              }
+            }
+          }
+        }
+        leaf tunnels {
+          tailf:info "enable MPLS Traffic Engineering tunnels";
+          description
+            "enable MPLS Traffic Engineering tunnels";
+          tailf:cli-full-command;
+          type empty;
+        }
+      }
+    }
+    choice vrf-choice {
+      container ip-vrf {
+        tailf:cli-no-keyword;
+        tailf:cli-drop-node-name;
+        container ip {
+          container vrf {
+            leaf forwarding {
+              tailf:info "Configure forwarding table";
+              description
+                "Configure forwarding table";
+              type string {
+                tailf:info "WORD;;VRF name";
+              }
+              tailf:non-strict-leafref {
+                path "/ios:native/ip/vrf/name";
+              }
+            }
+          }
+        }
+      }
+      container vrf {
+        tailf:info "VPN Routing/Forwarding parameters on the interface";
+        description
+          "VPN Routing/Forwarding parameters on the interface";
+        leaf forwarding {
+          tailf:info "Configure forwarding table";
+          description
+            "Configure forwarding table";
+          type string {
+            tailf:info "WORD;;VRF name";
+          }
+          tailf:non-strict-leafref {
+            path "/ios:native/vrf/definition/name";
+          }
+        }
+      }
+    }
+    container ip {
+      tailf:info "Interface Internet Protocol config commands";
+      description
+        "Interface Internet Protocol config commands";
+      container access-group {
+        tailf:info "Specify access control for packets";
+        description
+          "Specify access control for packets";
+        container in {
+          tailf:cli-drop-node-name;
+          tailf:cli-incomplete-command;
+          tailf:cli-sequence-commands;
+          tailf:cli-compact-syntax;
+          choice apply-type {
+            case apply-common {
+              container common-acl {
+                tailf:cli-drop-node-name;
+                tailf:cli-incomplete-command;
+                tailf:cli-sequence-commands;
+                tailf:cli-compact-syntax;
+                tailf:cli-flatten-container;
+                leaf common {
+                  tailf:info "specify ipv4 common ACL for packet filtering";
+                  description
+                    "specify ipv4 common ACL for packet filtering";
+                  tailf:cli-incomplete-command;
+                  type exp-acl-type;
+                  mandatory true;
+                }
+                leaf in {
+                  tailf:cli-full-command;
+                  tailf:info "inbound packets";
+                  description
+                    "inbound packets";
+                  type empty;
+                }
+              }
+            }
+            case apply-intf {
+              container acl {
+                tailf:cli-drop-node-name;
+                tailf:cli-incomplete-command;
+                tailf:cli-sequence-commands;
+                tailf:cli-compact-syntax;
+                tailf:cli-flatten-container;
+                leaf acl-name {
+                  tailf:cli-drop-node-name;
+                  tailf:cli-incomplete-command;
+                  type exp-acl-type;
+                  mandatory true;
+                }
+                leaf in {
+                  tailf:cli-full-command;
+                  tailf:info "inbound packets";
+                  description
+                    "inbound packets";
+                  type empty;
+                }
+              }
+            }
+          }
+        }
+        container out {
+          tailf:cli-drop-node-name;
+          tailf:cli-incomplete-command;
+          tailf:cli-sequence-commands;
+          tailf:cli-compact-syntax;
+          choice apply-type {
+            case apply-common {
+              container common-acl {
+                tailf:cli-drop-node-name;
+                tailf:cli-incomplete-command;
+                tailf:cli-sequence-commands;
+                tailf:cli-compact-syntax;
+                tailf:cli-flatten-container;
+                leaf common {
+                  tailf:info "specify ipv4 common ACL for packet filtering";
+                  description
+                    "specify ipv4 common ACL for packet filtering";
+                  tailf:cli-incomplete-command;
+                  type exp-acl-type;
+                  mandatory true;
+                }
+                leaf out {
+                  tailf:cli-full-command;
+                  tailf:info "outbound packets";
+                  description
+                    "outbound packets";
+                  type empty;
+                }
+              }
+            }
+            case apply-intf {
+              container acl {
+                tailf:cli-drop-node-name;
+                tailf:cli-incomplete-command;
+                tailf:cli-sequence-commands;
+                tailf:cli-compact-syntax;
+                tailf:cli-flatten-container;
+                leaf acl-name {
+                  tailf:cli-drop-node-name;
+                  tailf:cli-incomplete-command;
+                  type exp-acl-type;
+                  mandatory true;
+                }
+                leaf out {
+                  tailf:cli-full-command;
+                  tailf:info "outbound packets";
+                  description
+                    "outbound packets";
+                  type empty;
+                }
+              }
+            }
+          }
+        }
+      }
+      container arp {
+        tailf:info "Configure ARP features";
+        description
+          "Configure ARP features";
+        container inspection {
+          tailf:info "Arp Inspection configuration";
+          description
+            "Arp Inspection configuration";
+          container limit {
+            tailf:info "Configure Rate limit of incoming ARP packets";
+            description
+              "Configure Rate limit of incoming ARP packets";
+            leaf none {
+              tailf:info "No limit";
+              description
+                "No limit";
+              tailf:cli-full-command;
+              type empty;
+            }
+            leaf rate {
+              tailf:info "Rate Limit";
+              description
+                "Rate Limit";
+              type uint32 {
+                tailf:info "<0-2048>;;Packets per second";
+              }
+            }
+          }
+          leaf trust {
+            tailf:info "Configure Trust state";
+            description
+              "Configure Trust state";
+            tailf:cli-full-command;
+            type empty;
+          }
+        }
+      }
+      container vrf {
+        tailf:info "VPN Routing/Forwarding parameters on the interface";
+        description
+          "VPN Routing/Forwarding parameters on the interface";
+        leaf receive {
+          tailf:info "Add Interface Address into VRF Table";
+          description
+            "Add Interface Address into VRF Table";
+          tailf:cli-full-command;
+          type string {
+            tailf:info "WORD;;Table name";
+          }
+        }
+        leaf sitemap {
+          tailf:info "Configure route-map for routesreceived from this site";
+          description
+            "Configure route-map for routesreceived from this site";
+          tailf:cli-full-command;
+          type string {
+            tailf:info "WORD;;Name of the route-map";
+          }
+        }
+      }
+      choice address-choice {
+        leaf unnumbered {
+          tailf:info "Enable IP processing without an explicit address";
+          description
+            "Enable IP processing without an explicit address";
+          type string;
+        }
+        container no-address {
+          tailf:cli-drop-node-name;
+          leaf address {
+            tailf:cli-boolean-no;
+            tailf:cli-trim-default;
+            type boolean;
+            default "true";
+          }
+        }
+        container address {
+          tailf:info "Set the IP address of an interface";
+          description
+            "Set the IP address of an interface";
+          tailf:cli-incomplete-command;
+          tailf:cli-incomplete-no;
+          choice address-choice {
+            case fixed-case {
+              container primary {
+                tailf:cli-drop-node-name;
+                tailf:cli-sequence-commands;
+                tailf:cli-compact-syntax;
+                tailf:cli-incomplete-command;
+                tailf:cli-incomplete-no;
+                leaf address {
+                  tailf:cli-incomplete-command;
+                  tailf:cli-drop-node-name;
+                  tailf:cli-incomplete-no;
+                  tailf:cli-diff-dependency "/ios:native/vrf/definition/address-family/ipv4";
+                  tailf:cli-diff-dependency "../../../../vrf/forwarding";
+                  mandatory true;
+                  type inet:ipv4-address {
+                    tailf:info "A.B.C.D;;IP address";
+                  }
+                }
+                leaf mask {
+                  tailf:cli-drop-node-name;
+                  mandatory true;
+                  type inet:ipv4-address {
+                    tailf:info "A.B.C.D;;IP subnet mask";
+                  }
+                }
+              }
+              list secondary {
+                key "address";
+                tailf:cli-incomplete-command;
+                tailf:cli-sequence-commands;
+                tailf:cli-compact-syntax;
+                tailf:cli-drop-node-name;
+                tailf:cli-suppress-mode;
+                tailf:cli-incomplete-no;
+                leaf address {
+                  tailf:cli-incomplete-no;
+                  type inet:ipv4-address {
+                    tailf:info "A.B.C.D;;IP address";
+                  }
+                }
+                leaf mask {
+                  tailf:cli-drop-node-name;
+                  tailf:cli-incomplete-command;
+                  mandatory true;
+                  type inet:ipv4-address {
+                    tailf:info "A.B.C.D;;IP subnet mask";
+                  }
+                }
+                leaf secondary {
+                  tailf:info "Make this IP address a secondary address";
+                  description
+                    "Make this IP address a secondary address";
+                  type empty;
+                }
+              }
+            }
+            case dhcp-case {
+              container dhcp {
+                tailf:info "IP Address negotiated via DHCP";
+                description
+                  "IP Address negotiated via DHCP";
+                presence "IP Address negotiated via DHCP";
+                tailf:cli-sequence-commands;
+                container client-id {
+                  tailf:info "Specify client-id to use";
+                  description
+                    "Specify client-id to use";
+                  tailf:cli-flatten-container;
+                  tailf:cli-optional-in-sequence;
+                  tailf:cli-diff-dependency "/ios:native/interface";
+                  uses ethernet-grouping;
+                }
+                leaf hostname {
+                  tailf:info "Specify value for hostname option";
+                  description
+                    "Specify value for hostname option";
+                  type string {
+                    tailf:info "WORD;;hostname string";
+                  }
+                }
+              }
+            }
+          }
+        }
+      }
+      leaf directed-broadcast {
+        tailf:info "Enable forwarding of directed broadcasts";
+        description
+          "Enable forwarding of directed broadcasts";
+        type exp-acl-type;
+      }
+      container flow {
+        tailf:info "NetFlow related commands";
+        description
+          "NetFlow related commands";
+        leaf ingress {
+          tailf:info "Enable inbound NetFlow";
+          description
+            "Enable inbound NetFlow";
+          type empty;
+        }
+        leaf egress {
+          tailf:info "Enable outbound NetFlow";
+          description
+            "Enable outbound NetFlow";
+          type empty;
+        }
+        uses interface-ip-monitor-grouping;
+      }
+      container hello-interval {
+        tailf:info "Configures EIGRP-IPv4 hello interval";
+        description
+          "Configures EIGRP-IPv4 hello interval";
+        tailf:cli-sequence-commands;
+        tailf:cli-compact-syntax;
+        leaf eigrp {
+          tailf:info "Enhanced Interior Gateway Routing Protocol (EIGRP)";
+          description
+            "Enhanced Interior Gateway Routing Protocol (EIGRP)";
+          type uint16 {
+            tailf:info "<1-65535>;;AS number";
+          }
+        }
+        leaf seconds {
+          tailf:cli-drop-node-name;
+          description
+            "Seconds between hello transmissions";
+          type uint16 {
+            tailf:info "<1-65535>;;Seconds between hello transmissions";
+          }
+        }
+      }
+      container authentication {
+        tailf:info "authentication subcommands";
+        description
+          "authentication subcommands";
+        container key-chain {
+          tailf:info "key-chain";
+          description
+            "key-chain";
+          tailf:cli-sequence-commands;
+          tailf:cli-compact-syntax;
+          leaf eigrp {
+            tailf:info "Enhanced Interior Gateway Routing Protocol (EIGRP)";
+            description
+              "Enhanced Interior Gateway Routing Protocol (EIGRP)";
+            type uint16 {
+              tailf:info "<1-65535>;;AS number";
+            }
+          }
+          leaf name {
+            tailf:cli-drop-node-name;
+            description
+              "name of key-chain";
+            type string {
+              tailf:info "WORD;;name of key-chain";
+            }
+          }
+        }
+        container mode {
+          tailf:info "mode";
+          description
+            "mode";
+          tailf:cli-sequence-commands;
+          tailf:cli-compact-syntax;
+          leaf eigrp {
+            tailf:info "Enhanced Interior Gateway Routing Protocol (EIGRP)";
+            description
+              "Enhanced Interior Gateway Routing Protocol (EIGRP)";
+            type uint16 {
+              tailf:info "<1-65535>;;AS number";
+            }
+          }
+          leaf md5 {
+            tailf:info "Keyed message digest";
+            description
+              "Keyed message digest";
+            type empty;
+          }
+        }
+      }
+      container hold-time {
+        tailf:info "Configures EIGRP-IPv4 hold time";
+        description
+          "Configures EIGRP-IPv4 hold time";
+        tailf:cli-sequence-commands;
+        tailf:cli-compact-syntax;
+        leaf eigrp {
+          tailf:info "Enhanced Interior Gateway Routing Protocol (EIGRP)";
+          description
+            "Enhanced Interior Gateway Routing Protocol (EIGRP)";
+          type uint16 {
+            tailf:info "<1-65535>;;AS number";
+          }
+        }
+        leaf seconds {
+          tailf:cli-drop-node-name;
+          description
+            "Seconds before neighbor is considered down";
+          type uint16 {
+            tailf:info "<1-65535>;;Seconds before neighbor is considered down";
+          }
+        }
+      }
+      container helper-address {
+        tailf:info "Specify a destination address for UDP broadcasts";
+        description
+          "Specify a destination address for UDP broadcasts";
+        tailf:cli-compact-syntax;
+        tailf:cli-sequence-commands {
+          tailf:cli-reset-siblings;
+        }
+        choice helper-choice {
+          leaf global {
+            tailf:info "Helper-address is global";
+            description
+              "Helper-address is global";
+            tailf:cli-optional-in-sequence;
+            type empty;
+          }
+          leaf vrf {
+            tailf:info "VRF name for helper-address (if different from interface VRF)";
+            description
+              "VRF name for helper-address (if different from interface VRF)";
+            tailf:cli-optional-in-sequence;
+            tailf:cli-diff-dependency "/ios:native/ip/vrf";
+            tailf:cli-diff-dependency "/ios:native/vrf/definition";
+            type string {
+              tailf:info "WORD;;VPN Routing/Forwarding instance name";
+            }
+          }
+        }
+        leaf address {
+          tailf:cli-drop-node-name;
+          type inet:ipv4-address {
+            tailf:info "A.B.C.D;;IP destination address";
+          }
+        }
+      }
+      container nbar {
+        tailf:info "Network-Based Application Recognition";
+        description
+          "Network-Based Application Recognition";
+        container protocol-discovery {
+          tailf:info "Enable protocol discovery for both ipv4 and ipv6";
+          description
+            "Enable protocol discovery for both ipv4 and ipv6";
+          presence "true";
+          leaf ipv4-ipv6 {
+            tailf:cli-drop-node-name;
+            type enumeration {
+              enum "ipv4" {
+                tailf:info "Enable protocol discovery only for ipv4";
+              }
+              enum "ipv6" {
+                tailf:info "Enable protocol discovery only for ipv6";
+              }
+            }
+          }
+        }
+      }
+      container nhrp {
+        tailf:info "NHRP interface subcommands";
+        description
+          "NHRP interface subcommands";
+        container attribute {
+          tailf:info "NHRP attribute set";
+          description
+            "NHRP attribute set";
+          container set {
+            tailf:info "attribute set";
+            description
+              "attribute set";
+            list attr-type {
+              tailf:cli-drop-node-name;
+              tailf:cli-suppress-mode;
+              key "attr-type";
+              leaf attr-type {
+                tailf:info "attribute type";
+                description
+                  "attribute type";
+                type string;
+              }
+              leaf attr-val {
+                tailf:info "attribute value";
+                description
+                  "attribute value";
+                tailf:cli-drop-node-name;
+                type string;
+              }
+            }
+          }
+        }
+        leaf authentication {
+          tailf:info "Authentication string";
+          description
+            "authentication string";
+          type string;
+        }
+        container cache {
+          tailf:info "NHRP Cache related commands.";
+          description
+            "NHRP Cache related commands.";
+          leaf non-authoritative {
+            tailf:info "Mark cache entries non-authoritative";
+            description
+              "Mark cache entries non-authoritative";
+            type empty;
+          }
+        }
+        leaf connect {
+          tailf:info "NHRP resolution request connect";
+          description
+            "NHRP event request id";
+          type uint16 {
+            range "1..65535";
+          }
+        }
+        leaf group {
+          type string;
+        }
+        leaf holdtime {
+          tailf:info "Advertised holdtime";
+          description
+            "Number of seconds";
+          type uint16 {
+            range "1..65535";
+          }
+        }
+        container interest {
+          tailf:info "Specify an access list";
+          description
+            "Specify an access list";
+          leaf acl-range {
+            tailf:info "IP access list";
+            description
+              "IP access list";
+            tailf:cli-drop-node-name;
+            type uint8 {
+              range "1..199";
+            }
+          }
+          leaf none {
+            tailf:info "No traffic is interesting.";
+            description
+              "No traffic is interesting.";
+            type empty;
+          }
+        }
+        container map {
+          tailf:info "Map dest IP addresses to NBMA addresses";
+          description
+            "Map dest IP addresses to NBMA addresses";
+          list dest-ipv4 {
+            tailf:cli-drop-node-name;
+            tailf:cli-suppress-mode;
+            key "dest-ipv4";
+            leaf dest-ipv4 {
+              tailf:info "IP address of destination";
+              description
+                "IP address of destination";
+              type inet:ipv4-address;
+            }
+            list nbma-ipv4 {
+              tailf:cli-drop-node-name;
+              tailf:cli-suppress-mode;
+              key "nbma-ipv4";
+              leaf nbma-ipv4 {
+                tailf:info "IP NBMA address";
+                description
+                  "IP NBMA address";
+                type inet:ipv4-address;
+              }
+              leaf ipv4 {
+                tailf:cli-drop-node-name;
+                type inet:ipv4-address;
+              }
+              leaf ipv6 {
+                tailf:cli-drop-node-name;
+                type inet:ipv6-address;
+              }
+            }
+            list dest-mask {
+              tailf:cli-drop-node-name;
+              tailf:cli-suppress-mode;
+              key "dest-mask";
+              leaf dest-mask {
+                tailf:info "IP mask of destination";
+                description
+                  "IP mask of destination";
+                type inet:ipv4-address;
+              }
+              leaf ipv4 {
+                tailf:cli-drop-node-name;
+                type inet:ipv4-address;
+              }
+              leaf ipv6 {
+                tailf:cli-drop-node-name;
+                type inet:ipv6-address;
+              }
+            }
+            leaf nbma-ipv6 {
+              tailf:cli-drop-node-name;
+              type inet:ipv6-address;
+            }
+          }
+          container multicast {
+            tailf:info "Use this NBMA mapping for broadcasts/multicasts";
+            description
+              "Use this NBMA mapping for broadcasts/multicasts";
+            leaf ipv4 {
+              tailf:cli-drop-node-name;
+              type inet:ipv4-address;
+            }
+            leaf ipv6 {
+              tailf:cli-drop-node-name;
+              type inet:ipv6-address;
+            }
+            leaf dynamic {
+              tailf:info "Dynamically learn destinations from client registrations on hub";
+              description
+                "Dynamically learn destinations from client registrations on hub";
+              type empty;
+            }
+          }
+          list group {
+            tailf:cli-suppress-mode;
+            key "name";
+            leaf name {
+              type string;
+            }
+            container service-policy {
+              leaf output {
+                description
+                  "Policy";
+                type string;
+              }
+            }
+          }
+        }
+        container max-send {
+          tailf:info "Rate limit NHRP traffic";
+          description
+            "Rate limit NHRP traffic";
+          list pkt-count {
+            tailf:cli-drop-node-name;
+            tailf:cli-suppress-mode;
+            key "pkt-count";
+            leaf pkt-count {
+              tailf:info "Packet count";
+              description
+                "Packet count";
+              type uint16 {
+                range "1..65535";
+              }
+            }
+            leaf every {
+              tailf:info "Specify interval over which to throttle";
+              description
+                "Interval in seconds";
+              type uint16 {
+                range "10..65535";
+              }
+            }
+          }
+        }
+        leaf network-id {
+          tailf:info "NBMA network identifier";
+          description
+            "Network identifier";
+          type uint32 {
+            range "1..4294967295";
+          }
+        }
+        container nhs {
+          tailf:info "Specify a next hop server";
+          description
+            "Specify a next hop server";
+          list ipv4 {
+            tailf:cli-drop-node-name;
+            tailf:cli-suppress-mode;
+            key "ipv4";
+            leaf ipv4 {
+              tailf:info "Protocol IP address of NHS";
+              description
+                "Protocol IP address of NHS";
+              type inet:ipv4-address;
+            }
+            leaf cluster {
+              tailf:info "NHS cluster, don't specify for default cluster";
+              description
+                "NHS cluster number";
+              type uint8 {
+                range "0..10";
+              }
+            }
+            container nbma {
+              tailf:info "NBMA of NHS";
+              description
+                "NBMA of NHS";
+              list ipv4 {
+                tailf:cli-drop-node-name;
+                tailf:cli-suppress-mode;
+                key "ipv4";
+                leaf ipv4 {
+                  tailf:info "IPv4 address";
+                  description
+                    "IPv4 address";
+                  type inet:ipv4-address;
+                }
+                leaf cluster {
+                  tailf:info "NHS cluster, don't specify for default cluster";
+                  description
+                    "NHS cluster number";
+                  type uint8 {
+                    range "0..10";
+                  }
+                }
+                container multicast {
+                  tailf:info "Use this NBMA mapping for broadcasts/multicasts";
+                  description
+                    "Use this NBMA mapping for broadcasts/multicasts";
+                  presence "true";
+                  leaf cluster {
+                    tailf:info "NHS cluster, don't specify for default cluster";
+                    description
+                      "NHS cluster number";
+                    type uint8 {
+                      range "0..10";
+                    }
+                  }
+                  container priority {
+                    tailf:info "NHS priority, don't specify for default priority";
+                    description
+                      "NHS priority, don't specify for default priority";
+                    list prior {
+                      tailf:cli-drop-node-name;
+                      tailf:cli-suppress-mode;
+                      key "prior";
+                      leaf prior {
+                        tailf:info "NHS priority, range = 0 to 255, 0 is the highest";
+                        description
+                          "NHS priority, range = 0 to 255, 0 is the highest";
+                        type uint8 {
+                          range "0..255";
+                        }
+                      }
+                      leaf cluster {
+                        tailf:info "NHS cluster, don't specify for default cluster";
+                        description
+                          "NHS cluster number";
+                        type uint8 {
+                          range "0..10";
+                        }
+                      }
+                    }
+                  }
+                }
+                container priority {
+                  tailf:info "NHS priority, don't specify for default priority";
+                  description
+                    "NHS priority, don't specify for default priority";
+                  list pri {
+                    tailf:cli-drop-node-name;
+                    tailf:cli-suppress-mode;
+                    key "pri";
+                    leaf pri {
+                      tailf:info "NHS priority, range = 0 to 255, 0 is the highest";
+                      description
+                        "NHS priority, range = 0 to 255, 0 is the highest";
+                      type uint8 {
+                        range "0..255";
+                      }
+                    }
+                    leaf cluster {
+                      tailf:info "NHS cluster, don't specify for default cluster";
+                      description
+                        "NHS cluster number";
+                      type uint8 {
+                        range "0..10";
+                      }
+                    }
+                  }
+                }
+              }
+              list nhs-fqdn {
+                tailf:cli-drop-node-name;
+                tailf:cli-suppress-mode;
+                key "nhs-fqdn";
+                leaf nhs-fqdn {
+                  tailf:info "NHS FQDN string";
+                  description
+                    "NHS FQDN string";
+                  type string;
+                }
+                leaf cluster {
+                  tailf:info "NHS cluster, don't specify for default cluster";
+                  description
+                    "NHS cluster number";
+                  type uint8 {
+                    range "0..10";
+                  }
+                }
+                container multicast {
+                  tailf:info "Use this NBMA mapping for broadcasts/multicasts";
+                  description
+                    "Use this NBMA mapping for broadcasts/multicasts";
+                  presence "true";
+                  leaf cluster {
+                    tailf:info "NHS cluster, don't specify for default cluster";
+                    description
+                      "NHS cluster number";
+                    type uint8 {
+                      range "0..10";
+                    }
+                  }
+                  container priority {
+                    tailf:info "NHS priority, don't specify for default priority";
+                    description
+                      "NHS priority, don't specify for default priority";
+                    list mc-pri {
+                      tailf:cli-drop-node-name;
+                      tailf:cli-suppress-mode;
+                      key "mc-pri";
+                      leaf mc-pri {
+                        tailf:info "NHS priority, range = 0 to 255, 0 is the highest";
+                        description
+                          "NHS priority, range = 0 to 255, 0 is the highest";
+                        type uint8 {
+                          range "0..255";
+                        }
+                      }
+                      leaf cluster {
+                        tailf:info "NHS cluster, don't specify for default cluster";
+                        description
+                          "NHS cluster number";
+                        type uint8 {
+                          range "0..10";
+                        }
+                      }
+                    }
+                  }
+                }
+                container priority {
+                  tailf:info "NHS priority, don't specify for default priority";
+                  description
+                    "NHS priority, don't specify for default priority";
+                  list nhs-pri {
+                    tailf:cli-drop-node-name;
+                    tailf:cli-suppress-mode;
+                    key "nhs-pri";
+                    leaf nhs-pri {
+                      tailf:info "NHS priority, range = 0 to 255, 0 is the highest";
+                      description
+                        "NHS priority, range = 0 to 255, 0 is the highest";
+                      type uint8 {
+                        range "0..255";
+                      }
+                    }
+                    leaf cluster {
+                      tailf:info "NHS cluster, don't specify for default cluster";
+                      description
+                        "NHS cluster number";
+                      type uint8 {
+                        range "0..10";
+                      }
+                    }
+                  }
+                }
+              }
+              list ipv6 {
+                tailf:cli-drop-node-name;
+                tailf:cli-suppress-mode;
+                key "ipv6";
+                leaf ipv6 {
+                  tailf:info "IPv6 address";
+                  description
+                    "IPv6 address";
+                  type inet:ipv6-address;
+                }
+                leaf cluster {
+                  tailf:info "NHS cluster, don't specify for default cluster";
+                  description
+                    "NHS cluster number";
+                  type uint8 {
+                    range "0..10";
+                  }
+                }
+                container multicast {
+                  tailf:info "Use this NBMA mapping for broadcasts/multicasts";
+                  description
+                    "Use this NBMA mapping for broadcasts/multicasts";
+                  presence "true";
+                  leaf cluster {
+                    tailf:info "NHS cluster, don't specify for default cluster";
+                    description
+                      "NHS cluster number";
+                    type uint8 {
+                      range "0..10";
+                    }
+                  }
+                  container priority {
+                    tailf:info "NHS priority, don't specify for default priority";
+                    description
+                      "NHS priority, don't specify for default priority";
+                    list mc-pri {
+                      tailf:cli-drop-node-name;
+                      tailf:cli-suppress-mode;
+                      key "mc-pri";
+                      leaf mc-pri {
+                        tailf:info "NHS priority, range = 0 to 255, 0 is the highest";
+                        description
+                          "NHS priority, range = 0 to 255, 0 is the highest";
+                        type uint8 {
+                          range "0..255";
+                        }
+                      }
+                      leaf cluster {
+                        tailf:info "NHS cluster, don't specify for default cluster";
+                        description
+                          "NHS cluster number";
+                        type uint8 {
+                          range "0..10";
+                        }
+                      }
+                    }
+                  }
+                }
+                container priority {
+                  tailf:info "NHS priority, don't specify for default priority";
+                  description
+                    "NHS priority, don't specify for default priority";
+                  list mc-prior {
+                    tailf:cli-drop-node-name;
+                    tailf:cli-suppress-mode;
+                    key "mc-prior";
+                    leaf mc-prior {
+                      tailf:info "NHS priority, range = 0 to 255, 0 is the highest";
+                      description
+                        "NHS priority, range = 0 to 255, 0 is the highest";
+                      type uint8 {
+                        range "0..255";
+                      }
+                    }
+                    leaf cluster {
+                      tailf:info "NHS cluster, don't specify for default cluster";
+                      description
+                        "NHS cluster number";
+                      type uint8 {
+                        range "0..10";
+                      }
+                    }
+                  }
+                }
+              }
+            }
+            container priority {
+              tailf:info "NHS priority, don't specify for default priority";
+              description
+                "NHS priority, don't specify for default priority";
+              list pri-range {
+                tailf:cli-drop-node-name;
+                tailf:cli-suppress-mode;
+                key "pri-range";
+                leaf pri-range {
+                  tailf:info "NHS priority, range = 0 to 255, 0 is the highest";
+                  description
+                    "NHS priority, range = 0 to 255, 0 is the highest";
+                  type uint8 {
+                    range "0..255";
+                  }
+                }
+                leaf cluster {
+                  tailf:info "NHS cluster, don't specify for default cluster";
+                  description
+                    "NHS cluster number";
+                  type uint8 {
+                    range "0..10";
+                  }
+                }
+              }
+            }
+          }
+          container cluster {
+            tailf:info "NHS Redundancy cluster configurations";
+            description
+              "NHS Redundancy cluster configurations";
+            list clus-num {
+              tailf:cli-drop-node-name;
+              tailf:cli-suppress-mode;
+              key "clus-num";
+              leaf clus-num {
+                tailf:info "NHS cluster number";
+                description
+                  "NHS cluster number";
+                type uint8 {
+                  range "0..10";
+                }
+              }
+              leaf max-connections {
+                tailf:info "Max-connections value";
+                description
+                  "Max-connections value";
+                type uint8 {
+                  range "0..255";
+                }
+              }
+            }
+          }
+          container dynamic {
+            tailf:info "NHS protocol address dynamically learnt";
+            description
+              "NHS protocol address dynamically learnt";
+            container nbma {
+              tailf:info "NBMA of NHS";
+              description
+                "NBMA of NHS";
+              list ipv4 {
+                description
+                  "NBMA of NHS";
+                tailf:cli-drop-node-name;
+                tailf:cli-suppress-mode;
+                key "ipv4";
+                leaf ipv4 {
+                  tailf:info "IPv4 address";
+                  description
+                    "IPv4 address";
+                  type inet:ipv4-address;
+                }
+                leaf cluster {
+                  tailf:info "NHS cluster, don't specify for default cluster";
+                  description
+                    "NHS cluster number";
+                  type uint8 {
+                    range "0..10";
+                  }
+                }
+                container multicast {
+                  tailf:info "Use this NBMA mapping for broadcasts/multicasts";
+                  description
+                    "Use this NBMA mapping for broadcasts/multicasts";
+                  presence "true";
+                  leaf cluster {
+                    tailf:info "NHS cluster, don't specify for default cluster";
+                    description
+                      "NHS cluster number";
+                    type uint8 {
+                      range "0..10";
+                    }
+                  }
+                  container priority {
+                    tailf:info "NHS priority, don't specify for default priority";
+                    description
+                      "NHS priority, don't specify for default priority";
+                    list dyn-pri {
+                      tailf:cli-drop-node-name;
+                      tailf:cli-suppress-mode;
+                      key "dyn-pri";
+                      leaf dyn-pri {
+                        tailf:info "NHS priority, range = 0 to 255, 0 is the highest";
+                        description
+                          "NHS priority, range = 0 to 255, 0 is the highest";
+                        type uint8 {
+                          range "0..255";
+                        }
+                      }
+                      leaf cluster {
+                        tailf:info "NHS cluster, don't specify for default cluster";
+                        description
+                          "NHS cluster number";
+                        type uint8 {
+                          range "0..10";
+                        }
+                      }
+                    }
+                  }
+                }
+                container priority {
+                  tailf:info "NHS priority, don't specify for default priority";
+                  description
+                    "NHS priority, don't specify for default priority";
+                  list n-prior {
+                    tailf:cli-drop-node-name;
+                    tailf:cli-suppress-mode;
+                    key "n-prior";
+                    leaf n-prior {
+                      tailf:info "NHS priority, range = 0 to 255, 0 is the highest";
+                      description
+                        "NHS priority, range = 0 to 255, 0 is the highest";
+                      type uint8 {
+                        range "0..255";
+                      }
+                    }
+                    leaf cluster {
+                      tailf:info "NHS cluster, don't specify for default cluster";
+                      description
+                        "NHS cluster number";
+                      type uint8 {
+                        range "0..10";
+                      }
+                    }
+                  }
+                }
+              }
+              list dyn-fqdn {
+                tailf:cli-drop-node-name;
+                tailf:cli-suppress-mode;
+                key "dyn-fqdn";
+                leaf dyn-fqdn {
+                  tailf:info "NHS FQDN string";
+                  description
+                    "NHS FQDN string";
+                  type string;
+                }
+                leaf cluster {
+                  tailf:info "NHS cluster, don't specify for default cluster";
+                  description
+                    "NHS cluster number";
+                  type uint8 {
+                    range "0..10";
+                  }
+                }
+                container multicast {
+                  tailf:info "Use this NBMA mapping for broadcasts/multicasts";
+                  description
+                    "Use this NBMA mapping for broadcasts/multicasts";
+                  presence "true";
+                  leaf cluster {
+                    tailf:info "NHS cluster, don't specify for default cluster";
+                    description
+                      "NHS cluster number";
+                    type uint8 {
+                      range "0..10";
+                    }
+                  }
+                  container priority {
+                    tailf:info "NHS priority, don't specify for default priority";
+                    description
+                      "NHS priority, don't specify for default priority";
+                    list dyn-mc-pri {
+                      tailf:cli-drop-node-name;
+                      tailf:cli-suppress-mode;
+                      key "dyn-mc-pri";
+                      leaf dyn-mc-pri {
+                        tailf:info "NHS priority, range = 0 to 255, 0 is the highest";
+                        description
+                          "NHS priority, range = 0 to 255, 0 is the highest";
+                        type uint8 {
+                          range "0..255";
+                        }
+                      }
+                      leaf cluster {
+                        tailf:info "NHS cluster, don't specify for default cluster";
+                        description
+                          "NHS cluster number";
+                        type uint8 {
+                          range "0..10";
+                        }
+                      }
+                    }
+                  }
+                }
+                container priority {
+                  tailf:info "NHS priority, don't specify for default priority";
+                  description
+                    "NHS priority, don't specify for default priority";
+                  list dp {
+                    tailf:cli-drop-node-name;
+                    tailf:cli-suppress-mode;
+                    key "dp";
+                    leaf dp {
+                      tailf:info "NHS priority, range = 0 to 255, 0 is the highest";
+                      description
+                        "NHS priority, range = 0 to 255, 0 is the highest";
+                      type uint8 {
+                        range "0..255";
+                      }
+                    }
+                    leaf cluster {
+                      tailf:info "NHS cluster, don't specify for default cluster";
+                      description
+                        "NHS cluster number";
+                      type uint8 {
+                        range "0..10";
+                      }
+                    }
+                  }
+                }
+              }
+              list ipv6 {
+                tailf:cli-drop-node-name;
+                tailf:cli-suppress-mode;
+                key "ipv6";
+                leaf ipv6 {
+                  tailf:info "IPv6 address";
+                  description
+                    "IPv6 address";
+                  type inet:ipv6-address;
+                }
+                leaf cluster {
+                  tailf:info "NHS cluster, don't specify for default cluster";
+                  description
+                    "NHS cluster number";
+                  type uint8 {
+                    range "0..10";
+                  }
+                }
+                container multicast {
+                  tailf:info "Use this NBMA mapping for broadcasts/multicasts";
+                  description
+                    "Use this NBMA mapping for broadcasts/multicasts";
+                  presence "true";
+                  leaf cluster {
+                    tailf:info "NHS cluster, don't specify for default cluster";
+                    description
+                      "NHS cluster number";
+                    type uint8 {
+                      range "0..10";
+                    }
+                  }
+                  container priority {
+                    tailf:info "NHS priority, don't specify for default priority";
+                    description
+                      "NHS priority, don't specify for default priority";
+                    list v6-pri {
+                      tailf:cli-drop-node-name;
+                      tailf:cli-suppress-mode;
+                      key "v6-pri";
+                      leaf v6-pri {
+                        tailf:info "NHS priority, range = 0 to 255, 0 is the highest";
+                        description
+                          "NHS priority, range = 0 to 255, 0 is the highest";
+                        type uint8 {
+                          range "0..255";
+                        }
+                      }
+                      leaf cluster {
+                        tailf:info "NHS cluster, don't specify for default cluster";
+                        description
+                          "NHS cluster number";
+                        type uint8 {
+                          range "0..10";
+                        }
+                      }
+                    }
+                  }
+                }
+                container priority {
+                  tailf:info "NHS priority, don't specify for default priority";
+                  description
+                    "NHS priority, don't specify for default priority";
+                  list v6-pri2 {
+                    tailf:cli-drop-node-name;
+                    tailf:cli-suppress-mode;
+                    key "v6-pri2";
+                    leaf v6-pri2 {
+                      tailf:info "NHS priority, range = 0 to 255, 0 is the highest";
+                      description
+                        "NHS priority, range = 0 to 255, 0 is the highest";
+                      type uint8 {
+                        range "0..255";
+                      }
+                    }
+                    leaf cluster {
+                      tailf:info "NHS cluster, don't specify for default cluster";
+                      description
+                        "NHS cluster number";
+                      type uint8 {
+                        range "0..10";
+                      }
+                    }
+                  }
+                }
+              }
+            }
+          }
+          leaf fallback {
+            tailf:info "NHS Redundancy Fallback time";
+            description
+              "NHS Redundancy Fallback time, 0 -60 seconds";
+            type uint8 {
+              range "0..60";
+            }
+          }
+        }
+        leaf record {
+          tailf:info "Allow NHRP record option";
+          description
+            "Allow NHRP record option";
+          type empty;
+        }
+        container redirect {
+          tailf:info "Enable NHRP redirect traffic indication";
+          description
+            "Enable NHRP redirect traffic indication";
+          presence "true";
+          leaf timeout {
+            tailf:info "Specify interval over which to throttle";
+            description
+              "Interval in seconds";
+            type uint8 {
+              range "2..30";
+            }
+          }
+        }
+        container registration {
+          tailf:info "Settings for registration packets.";
+          description
+            "Settings for registration packets.";
+          leaf no-unique {
+            tailf:info "Do not set the 'Unique' flag in registration requests.";
+            description
+              "Do not set the 'Unique' flag in registration requests.";
+            type empty;
+          }
+          leaf timeout {
+            tailf:info "Time between periodic Registration messages";
+            description
+              "Number of seconds";
+            type uint16 {
+              range "1..65535";
+            }
+          }
+        }
+        container reject {
+          tailf:info "NHRP resolution reject request";
+          description
+            "NHRP resolution reject request";
+          list reqid {
+            tailf:cli-drop-node-name;
+            tailf:cli-suppress-mode;
+            key "reqid";
+            leaf reqid {
+              tailf:info "reqid value";
+              description
+                "reqid value";
+              type uint16 {
+                range "1..65535";
+              }
+            }
+            leaf rej-secs {
+              tailf:info "Number of seconds";
+              description
+                "Number of seconds";
+              tailf:cli-drop-node-name;
+              type uint16 {
+                range "0..65535";
+              }
+            }
+          }
+        }
+        container responder {
+          tailf:info "Responder interface";
+          description
+            "Responder interface";
+          leaf res-int {
+            tailf:info "Virtual ACR interface";
+            description
+              "Virtual ACR interface";
+            tailf:cli-drop-node-name;
+            type string;
+          }
+          leaf Analysis-Module {
+            tailf:info "Cisco network analysis service module";
+            description
+              "Analysis-Module interface number";
+            type uint8;
+          }
+          leaf Fcpa {
+            tailf:info "Fiber Channel";
+            description
+              "Fcpa interface number";
+            type uint8;
+          }
+          leaf SBC {
+            tailf:info "Session Border Controller";
+            description
+              "SBC interface number";
+            type uint32 {
+              range "0..2147483647";
+            }
+          }
+          leaf SONET_ACR {
+            tailf:info "Virtual SONET-ACR controller";
+            description
+              "SONET_ACR interface number";
+            type uint8;
+          }
+          leaf TB-controller {
+            tailf:info "Telecom-Bus Clock Controller";
+            description
+              "Telecom-Bus Clock Controller";
+            tailf:cli-drop-node-name;
+            type string;
+          }
+          leaf Service-Engine {
+            tailf:info "Cisco service engine module";
+            description
+              "Service-Engine interface number";
+            type uint8;
+          }
+          leaf Tunnel {
+            tailf:info "Tunnel interface";
+            description
+              "Tunnel interface number";
+            type uint32 {
+              range "0..2147483647";
+            }
+          }
+          leaf Tunnel-tp {
+            tailf:info "MPLS Transport Profile interface";
+            description
+              "Tunnel-tp interface number";
+            type uint16 {
+              range "0..65535";
+            }
+          }
+          leaf VPN {
+            tailf:info "VPN interface";
+            description
+              "VPN interface number";
+            type uint32 {
+              range "0..2147483647";
+            }
+          }
+          leaf Virtual-TokenRing {
+            tailf:info "Virtual TokenRing";
+            description
+              "Virtual-TokenRing interface number";
+            type uint32 {
+              range "0..2147483647";
+            }
+          }
+          leaf VirtualPortGroup {
+            tailf:info "Virtual Port Group";
+            description
+              "VirtualPortGroup interface number";
+            type uint8 {
+              range "0..31";
+            }
+          }
+          leaf Vlan {
+            tailf:info "Catalyst Vlans";
+            description
+              "Vlan interface number";
+            type uint16 {
+              range "1..4095";
+            }
+          }
+          leaf ucse {
+            tailf:info "Cisco ucse server";
+            description
+              "ucse interface number";
+            type uint8;
+          }
+          leaf vasileft {
+            tailf:info "VasiLeft interface";
+            description
+              "vasileft interface number";
+            type uint16 {
+              range "1..2000";
+            }
+          }
+          leaf vasiright {
+            tailf:info "VasiRight interface";
+            description
+              "vasiright interface number";
+            type uint16 {
+              range "1..2000";
+            }
+          }
+        }
+        container server-only {
+          tailf:info "Disable NHRP requests";
+          description
+            "Disable NHRP requests";
+          presence "true";
+          leaf non-caching {
+            tailf:info "Do not create NHRP cache entries";
+            description
+              "Do not create NHRP cache entries";
+            type empty;
+          }
+        }
+        container shortcut {
+          tailf:info "Enable shortcut switching";
+          description
+            "Enable shortcut switching";
+          presence "true";
+          leaf virtual-template {
+            tailf:info "Virtual template interface number";
+            description
+              "Virtual template number";
+            type uint16 {
+              range "1..4095";
+            }
+          }
+        }
+        container trigger-svc {
+          tailf:info "Create NHRP cut-through based on traffic load";
+          description
+            "Create NHRP cut-through based on traffic load";
+          list kbps {
+            tailf:cli-drop-node-name;
+            tailf:cli-suppress-mode;
+            key "kbps";
+            leaf kbps {
+              tailf:info "Trigger rate in kbps";
+              description
+                "Trigger rate in kbps";
+              type uint32 {
+                range "1..4294967295";
+              }
+            }
+            leaf tear-kbps {
+              tailf:info "Teardown rate in kbps";
+              description
+                "Teardown rate in kbps";
+              tailf:cli-drop-node-name;
+              type uint32 {
+                range "0..4294967295";
+              }
+            }
+          }
+        }
+        leaf use {
+          tailf:info "Specify usage count for sending requests";
+          description
+            "Number of packets to cause NHRP request";
+          type uint16 {
+            range "1..65535";
+          }
+        }
+      }
+      container ospf {
+        tailf:info "OSPF interface commands";
+        description
+          "OSPF interface commands";
+        list process-id {
+          tailf:cli-drop-node-name;
+          tailf:cli-suppress-mode;
+          tailf:cli-delete-when-empty;
+          tailf:cli-compact-syntax;
+          tailf:cli-incomplete-command;
+          tailf:cli-reset-container;
+          tailf:cli-sequence-commands;
+          key "id";
+          leaf id {
+            type uint16 {
+              tailf:info "<1-65535>;;Process ID";
+            }
+          }
+          leaf area {
+            type ospf-area-type;
+          }
+          leaf secondaries {
+            tailf:info "Include or exclude secondary IP addresses";
+            description
+              "Include or exclude secondary IP addresses";
+            type empty;
+          }
+          leaf none {
+            tailf:info "Do not include secondary IP addresses";
+            description
+              "Do not include secondary IP addresses";
+            type empty;
+          }
+        }
+        container authentication {
+          tailf:info "Enable authentication";
+          description
+            "Enable authentication";
+          presence "Enable authentication";
+          container key-chain {
+            tailf:info "Use a key-chain for cryptographic authentication keys";
+            description
+              "Use a key-chain for cryptographic authentication keys";
+            tailf:cli-compact-syntax;
+            leaf name {
+              tailf:cli-drop-node-name;
+              type string {
+                tailf:info " WORD  Key chain name";
+              }
+            }
+          }
+          leaf message-digest {
+            tailf:info "Use message-digest authentication";
+            description
+              "Use message-digest authentication";
+            type empty;
+          }
+          leaf null {
+            tailf:info "Use no authentication";
+            description
+              "Use no authentication";
+            type empty;
+          }
+        }
+        uses ospf-authentication-key-grouping;
+        leaf network {
+          tailf:info "Network type";
+          description
+            "Network type";
+          type enumeration {
+            enum "broadcast" {
+              tailf:info "Specify OSPF broadcast multi-access network";
+            }
+            enum "non-broadcast" {
+              tailf:info "Specify OSPF NBMA network";
+            }
+            enum "point-to-multipoint" {
+              tailf:info "Specify OSPF point-to-multipoint network";
+            }
+            enum "point-to-point" {
+              tailf:info "Specify OSPF point-to-point network";
+            }
+          }
+        }
+        uses interface-ospf-bfd-grouping;
+        leaf cost {
+          tailf:info "Interface cost";
+          description
+            "Interface cost";
+          type uint16 {
+            tailf:info "<1-65535>;;Cost";
+            range "1..65535";
+          }
+        }
+        container database-filter {
+          tailf:info "Filter OSPF LSA during synchronization and flooding";
+          description
+            "Filter OSPF LSA during synchronization and flooding";
+          tailf:cli-compact-syntax;
+          tailf:cli-sequence-commands;
+          leaf all {
+            tailf:info "Filter all LSA";
+            description
+              "Filter all LSA";
+            type empty;
+          }
+          leaf out {
+            tailf:info "Outgoing LSA";
+            description
+              "Outgoing LSA";
+            type empty;
+          }
+        }
+        container dead-interval {
+          tailf:info "Interval after which a neighbor is declared dead";
+          description
+            "Interval after which a neighbor is declared dead";
+          leaf value {
+            tailf:cli-drop-node-name;
+            type uint32 {
+              tailf:info "<1-65535>;;Seconds";
+              range "1..65535";
+            }
+          }
+          container minimal {
+            tailf:info "Set to 1 second";
+            description
+              "Set to 1 second";
+            leaf hello-multiplier {
+              tailf:info "Set multiplier for Hellos";
+              description
+                "Set multiplier for Hellos";
+              type uint8 {
+                tailf:info "<3-20>;;Number of Hellos sent within 1 second";
+              }
+            }
+          }
+        }
+        container demand-circuit {
+          tailf:info "OSPF Demand Circuit";
+          description
+            "OSPF Demand Circuit";
+          presence "true";
+          leaf ignore {
+            tailf:info "Ignore demand circuit auto-negotiation requests";
+            description
+              "Ignore demand circuit auto-negotiation requests";
+            type empty;
+          }
+        }
+        container fast-reroute {
+          tailf:info "LFA FastReroute parameters";
+          description
+            "LFA FastReroute parameters";
+          container per-prefix {
+            tailf:info "Per-prefix LFA FRR parameters";
+            description
+              "Per-prefix LFA FRR parameters";
+            container candidate {
+              tailf:info "If interface can be protecting";
+              description
+                "If interface can be protecting";
+              presence "true";
+              leaf disable {
+                tailf:info "Disable LFA FRR interface protection";
+                description
+                  "Disable LFA FRR interface protection";
+                type empty;
+              }
+            }
+            container protection {
+              tailf:info "If interface can be protected";
+              description
+                "If interface can be protected";
+              presence "true";
+              leaf disable {
+                tailf:info "Disable LFA FRR interface protection";
+                description
+                  "Disable LFA FRR interface protection";
+                type empty;
+              }
+            }
+          }
+        }
+        leaf flood-reduction {
+          tailf:info "OSPF Flood Reduction";
+          description
+            "OSPF Flood Reduction";
+          type empty;
+        }
+        uses interface-ospf-hello-interval-grouping;
+        container lls {
+          tailf:info "Link-local Signaling (LLS) support";
+          description
+            "Link-local Signaling (LLS) support";
+          presence "true";
+          leaf disable {
+            tailf:info "disable LLS";
+            description
+              "disable LLS";
+            type empty;
+          }
+        }
+        list message-digest-key {
+          tailf:info "Set message digest key";
+          description
+            "Set message digest key";
+          tailf:cli-suppress-mode;
+          tailf:cli-delete-when-empty;
+          tailf:cli-incomplete-command;
+          key "id";
+          leaf id {
+            tailf:cli-suppress-range;
+            type uint8 {
+              range "1 .. 255";
+              tailf:info "<1-255>;;Key ID";
+            }
+          }
+          container md5 {
+            tailf:info "Use MD5 algorithm";
+            description
+              "Use MD5 algorithm";
+            tailf:cli-sequence-commands;
+            tailf:cli-compact-syntax;
+            leaf auth-type {
+              tailf:cli-drop-node-name;
+              tailf:cli-optional-in-sequence;
+              type uint8 {
+                range "0 .. 7";
+                tailf:info "<0-7>;;Encryption type (0 for not yet encrypted, 7 for proprietary)";
+              }
+            }
+            leaf auth-key {
+              tailf:cli-drop-node-name;
+              tailf:cli-full-command;
+              tailf:cli-multi-value;
+              type string {
+                tailf:info "LINE;;The OSPF password (key) (maximum 16 characters)";
+              }
+            }
+          }
+        }
+        leaf mtu-ignore {
+          tailf:info "Ignores the MTU in DBD packets";
+          description
+            "Ignores the MTU in DBD packets";
+          type empty;
+        }
+        container multi-area {
+          tailf:info "Set the OSPF multi-area ID";
+          description
+            "Set the OSPF multi-area ID";
+          tailf:cli-sequence-commands;
+          tailf:cli-compact-syntax;
+          leaf id {
+            tailf:cli-drop-node-name;
+            type union {
+              type uint32 {
+                tailf:info "<0-4294967295>;;OSPF multi-area ID as a decimal value";
+                range "0..4294967295";
+              }
+              type inet:ipv4-address {
+                tailf:info "A.B.C.D;;OSPF multi-area ID in IP address format";
+              }
+            }
+          }
+          leaf cost {
+            tailf:info "Interface cost";
+            description
+              "Interface cost";
+            tailf:cli-optional-in-sequence;
+            type uint32 {
+              tailf:info " <1-65535>;;Cost";
+              range "1..65535";
+            }
+          }
+        }
+        uses interface-ospf-prefix-suppression-grouping;
+        uses interface-ospf-priority-grouping;
+        leaf resync-timeout {
+          tailf:info "Interval after which adjacency is reset if oob-resync is not started";
+          description
+            "Interval after which adjacency is reset if oob-resync is not started";
+          type uint32 {
+            tailf:info "<1-65535>;;Seconds";
+            range "1..65535";
+          }
+        }
+        uses interface-ospf-retransmit-interval-grouping;
+        leaf shutdown {
+          tailf:info "Set OSPF protocol's state to disable under current interface";
+          description
+            "Set OSPF protocol's state to disable under current interface";
+          type empty;
+        }
+        uses interface-ospf-transmit-delay-grouping;
+        container ttl-security {
+          tailf:info "TTL security check";
+          description
+            "TTL security check";
+          presence "true";
+          leaf diable {
+            tailf:info "disable TTL security check";
+            description
+              "disable TTL security check";
+            type empty;
+          }
+          leaf hops {
+            tailf:info "IP hops";
+            description
+              "IP hops";
+            type uint8 {
+              tailf:info "<1-254>  maximum number of hops allowed";
+              range "1..254";
+            }
+          }
+        }
+      }
+      container pim {
+        tailf:info "PIM interface commands";
+        description
+          "PIM interface commands";
+        container accept-register {
+          leaf list {
+            type string;
+          }
+        }
+        leaf sparse-mode {
+          tailf:info "Enable PIM sparse-mode operation";
+          description
+            "Enable PIM sparse-mode operation";
+          type empty;
+        }
+        leaf nbma-mode {
+          tailf:info "Enable PIM nbma-mode operation";
+          description
+            "Enable PIM nbma-mode operation";
+          type empty;
+        }
+        leaf dr-priority {
+          tailf:info "PIM router DR priority";
+          description
+            "PIM router DR priority";
+          type uint32 {
+            tailf:info "<0-4294967294>;;DR priority, preference given to larger value";
+          }
+        }
+        container query-interval {
+          tailf:info "PIM router query interval";
+          description
+            "PIM router query interval";
+          tailf:cli-sequence-commands;
+          tailf:cli-compact-syntax;
+          leaf interval {
+            tailf:cli-drop-node-name;
+            type uint16 {
+              tailf:info "<1-65535>;;Query interval in seconds or milliseconds";
+            }
+          }
+          leaf msec {
+            tailf:info "Query interval in milliseconds";
+            description
+              "Query interval in milliseconds";
+            tailf:cli-optional-in-sequence;
+            type empty;
+          }
+        }
+        leaf spt-threshold {
+          type enumeration {
+            enum "infinity";
+          }
+        }
+      }
+      container policy {
+        tailf:info "Enable policy routing";
+        description
+          "Enable policy routing";
+        leaf route-map {
+          tailf:info "Policy route-map";
+          description
+            "Policy route-map";
+          type string {
+            tailf:info "WORD;;Route map name";
+          }
+        }
+      }
+      leaf local-proxy-arp {
+        tailf:info "Enable local-proxy ARP";
+        description
+          "Enable local-proxy ARP";
+        type empty;
+      }
+      leaf proxy-arp {
+        tailf:info "Enable proxy ARP";
+        description
+          "Enable proxy ARP";
+        tailf:cli-boolean-no;
+        tailf:cli-trim-default;
+        type boolean;
+      }
+      container route-cache-conf {
+        tailf:cli-no-keyword;
+        tailf:cli-drop-node-name;
+        leaf route-cache {
+          tailf:cli-boolean-no;
+          tailf:cli-trim-default;
+          type boolean;
+        }
+      }
+      container route-cache {
+        tailf:info "Enable fast-switching cache for outgoing packets";
+        description
+          "Enable fast-switching cache for outgoing packets";
+        tailf:cli-incomplete-no;
+        leaf cef {
+          tailf:info "Enable Cisco Express Forwarding";
+          description
+            "Enable Cisco Express Forwarding";
+          tailf:cli-boolean-no;
+          tailf:cli-trim-default;
+          type boolean;
+        }
+        leaf flow {
+          tailf:info "Enable Flow fast-switching cache";
+          description
+            "Enable Flow fast-switching cache";
+          tailf:cli-boolean-no;
+          tailf:cli-trim-default;
+          type boolean;
+        }
+        leaf policy {
+          tailf:info "Enable fast-switching policy cache for outgoing packets";
+          description
+            "Enable fast-switching policy cache for outgoing packets";
+          tailf:cli-boolean-no;
+          tailf:cli-trim-default;
+          type boolean;
+        }
+        leaf same-interface {
+          tailf:info "Enable fast-switching on the same interface";
+          description
+            "Enable fast-switching on the same interface";
+          tailf:cli-boolean-no;
+          tailf:cli-trim-default;
+          type boolean;
+        }
+      }
+      container router {
+        tailf:info "IP router interface commands";
+        description
+          "IP router interface commands";
+        container isis {
+          tailf:info "IS-IS Routing for IP";
+          description
+            "IS-IS Routing for IP";
+          presence "true";
+          leaf tag {
+            tailf:cli-drop-node-name;
+            type string {
+              tailf:info "WORD;;Routing process tag";
+            }
+          }
+        }
+      }
+      container igmp {
+        tailf:info "IGMP interface commands";
+        description
+          "IGMP interface commands";
+        container static-group {
+          tailf:info "IGMP static multicast group";
+          description
+            "IGMP static multicast group";
+          list groups {
+            tailf:cli-suppress-mode;
+            tailf:cli-delete-when-empty;
+            tailf:cli-drop-node-name;
+            key "name";
+            leaf name {
+              tailf:cli-suppress-range;
+              type union {
+                type inet:ipv4-address {
+                  tailf:info "A.B.C.D;;IP group address";
+                }
+                type enumeration {
+                  enum "*" {
+                    tailf:info "Populated for all groups";
+                  }
+                }
+              }
+            }
+          }
+          list class-map {
+            tailf:info "Class map of type multicast-flows";
+            description
+              "Class map of type multicast-flows";
+            key "id";
+            leaf id {
+              type leafref {
+                path "/ios:native/class-map/name";
+              }
+            }
+          }
+        }
+        leaf version {
+          tailf:info "IGMP version";
+          description
+            "IGMP version";
+          type uint8 {
+            tailf:info "<1-3>;;version number";
+            range "1..3";
+          }
+        }
+      }
+      leaf redirects {
+        tailf:info "Enable sending ICMP Redirect messages";
+        description
+          "Enable sending ICMP Redirect messages";
+        tailf:cli-boolean-no;
+        tailf:cli-trim-default;
+        type boolean;
+      }
+      leaf unreachables {
+        tailf:info "Enable sending ICMP Unreachable messages";
+        description
+          "Enable sending ICMP Unreachable messages";
+        tailf:cli-boolean-no;
+        tailf:cli-trim-default;
+        type boolean;
+      }
+      container tcp {
+        tailf:info "TCP header compression and other parameters";
+        description
+          "TCP header compression and other parameters";
+        leaf adjust-mss {
+          tailf:info "Adjust the mss of transit packets";
+          description
+            "Adjust the mss of transit packets";
+          type uint16 {
+            tailf:info "<500-1460>;;Maximum segment size in bytes";
+            range "500..1460";
+          }
+        }
+      }
+      container virtual-reassembly {
+        tailf:cli-compact-syntax;
+        leaf max-reassemblies {
+          type uint32;
+        }
+        leaf max-fragments {
+          type uint32;
+        }
+        leaf timeout {
+          type uint32;
+        }
+        leaf drop-fragments {
+          type empty;
+        }
+        leaf in {
+          type empty;
+        }
+      }
+      container dhcp {
+        tailf:info "Configure DHCP parameters for this interface";
+        description
+          "Configure DHCP parameters for this interface";
+        container relay {
+          tailf:info "DHCP relay configuration parameters";
+          description
+            "DHCP relay configuration parameters";
+          container information {
+            tailf:info "DHCP relay information option";
+            description
+              "DHCP relay information option";
+            container check-reply {
+              tailf:info "Validate relay information in BOOTREPLY";
+              description
+                "Validate relay information in BOOTREPLY";
+              presence "true";
+              leaf none {
+                tailf:info "Set to none";
+                description
+                  "Set to none";
+                type empty;
+              }
+            }
+            container option {
+              tailf:info "DHCP relay information option";
+              description
+                "DHCP relay information option";
+              leaf subscriber-id {
+                tailf:info "Subscriber identifier sub option";
+                description
+                  "Subscriber identifier sub option";
+                type string {
+                  tailf:info "WORD;;Subscriber identifier string";
+                }
+              }
+            }
+            container option-insert {
+              tailf:info "Insert relay information in BOOTREQUEST";
+              description
+                "Insert relay information in BOOTREQUEST";
+              presence "true";
+              leaf none {
+                tailf:info "Set to none";
+                description
+                  "Set to none";
+                type empty;
+              }
+            }
+            leaf policy-action {
+              tailf:info "Define reforwarding policy";
+              description
+                "Define reforwarding policy";
+              type enumeration {
+                enum "drop" {
+                  tailf:info "Do not forward BOOTREQUEST message";
+                }
+                enum "encapsulate" {
+                  tailf:info "Encapsulate existing information";
+                }
+                enum "keep" {
+                  tailf:info "Leave existing information alone";
+                }
+                enum "replace" {
+                  tailf:info "Replace existing information";
+                }
+              }
+            }
+            leaf trusted {
+              tailf:info "Received DHCP packet may contain relay info option with zero giaddr";
+              description
+                "Received DHCP packet may contain relay info option with zero giaddr";
+              type empty;
+            }
+          }
+        }
+        container snooping {
+          tailf:info "DHCP Snooping";
+          description
+            "DHCP Snooping";
+          container limit {
+            tailf:info "DHCP Snooping limit";
+            description
+              "DHCP Snooping limit";
+            leaf rate {
+              tailf:info "DHCP Snooping limit";
+              description
+                "DHCP Snooping limit";
+              type uint16 {
+                tailf:info "<1-2048>;;DHCP snooping rate limit";
+                range "1..2048";
+              }
+            }
+          }
+          leaf trust {
+            tailf:info "DHCP Snooping trust config";
+            description
+              "DHCP Snooping trust config";
+            type empty;
+          }
+          list vlan {
+            tailf:info "DHCP Snooping vlan";
+            description
+              "DHCP Snooping vlan";
+            key "id";
+            max-elements "1";
+            leaf id {
+              tailf:cli-drop-node-name;
+              type uint16 {
+                tailf:info "<1-4094>;;DHCP Snooping vlan";
+                range "1..4094";
+              }
+            }
+            container information {
+              tailf:info "DHCP Snooping information";
+              description
+                "DHCP Snooping information";
+              container option {
+                tailf:info "DHCP Snooping information option";
+                description
+                  "DHCP Snooping information option";
+                container format-type {
+                  tailf:info "Option 82 information format";
+                  description
+                    "Option 82 information format";
+                  container circuit-id {
+                    tailf:info "Circuit id option 82 format";
+                    description
+                      "Circuit id option 82 format";
+                    leaf string {
+                      tailf:info "User defined string for circuit id";
+                      description
+                        "User defined string for circuit id";
+                      type string {
+                        tailf:info "WORD;;Use string for circuit id (3-63 chars)";
+                        length "3..63";
+                      }
+                    }
+                  }
+                }
+              }
+            }
+          }
+        }
+      }
+      leaf mtu {
+        tailf:info "Set IP Maximum Transmission Unit";
+        description
+          "Set IP Maximum Transmission Unit";
+        type uint16 {
+          tailf:info "<68-9198>;;MTU (bytes)";
+          range "68..9198";
+        }
+      }
+      leaf mroute-cache {
+        tailf:info "Enable switching cache for incoming multicast packets";
+        description
+          "Enable switching cache for incoming multicast packets";
+        tailf:cli-boolean-no;
+        tailf:cli-trim-default;
+        type boolean;
+      }
+      container nat {
+        tailf:info "NAT interface commands";
+        description
+          "NAT interface commands";
+        leaf allow-static-host {
+          tailf:info "Allow static-ip clients";
+          description
+            "Allow static-ip clients";
+          type empty;
+        }
+        leaf enable {
+          tailf:info "Enable Address Translation (NVI)";
+          description
+            "Enable Address Translation (NVI)";
+          type empty;
+        }
+        choice nat-choice {
+          leaf inside {
+            tailf:info "Inside interface for address translation";
+            description
+              "Inside interface for address translation";
+            type empty;
+          }
+          leaf outside {
+            tailf:info "Outside interface for address translation";
+            description
+              "Outside interface for address translation";
+            type empty;
+          }
+        }
+      }
+      container rsvp {
+        tailf:info "RSVP Interface Commands";
+        description
+          "RSVP Interface Commands";
+        container bandwidth {
+          tailf:info "RSVP Reservable Bandwidth (kbps)";
+          description
+            "RSVP Reservable Bandwidth (kbps)";
+          tailf:cli-reset-container;
+          presence "true";
+        }
+        container signalling {
+          tailf:info "IP RSVP signalling";
+          description
+            "IP RSVP signalling";
+          leaf hello {
+            tailf:info "Enable neighbor-down detection";
+            description
+              "Enable neighbor-down detection";
+            type empty;
+          }
+          leaf blockade {
+            tailf:info "(Re)sets time duration of blockade state";
+            description
+              "(Re)sets time duration of blockade state";
+            type empty;
+          }
+          leaf dscp {
+            tailf:info "DSCP for RSVP signalling messages";
+            description
+              "DSCP for RSVP signalling messages";
+            type empty;
+          }
+          leaf fast-local-repair {
+            tailf:info "Fast Local Repair parameters";
+            description
+              "Fast Local Repair parameters";
+            type empty;
+          }
+        }
+        container resource-provider {
+          tailf:info "RSVP resource provider";
+          description
+            "RSVP resource provider";
+          choice resource-provider-choice {
+            leaf none {
+              tailf:info "Associates NO resources with reservations";
+              description
+                "Associates NO resources with reservations";
+              type empty;
+            }
+            leaf wfq {
+              tailf:info "Associates WFQ resources with reservations";
+              description
+                "Associates WFQ resources with reservations";
+              type enumeration {
+                enum "interface" {
+                  tailf:info "Associates WFQ queues and bandwidth at the interface level with reservations";
+                }
+                enum "pvc" {
+                  tailf:info "Associates WFQ queues and bandwidth at the PVC level with reservations";
+                }
+              }
+            }
+          }
+        }
+      }
+      container verify {
+        tailf:info "Enable per packet validation";
+        description
+          "Enable per packet validation";
+        leaf source {
+          tailf:info "Validation of source address";
+          description
+            "Validation of source address";
+          type empty;
+        }
+        container unicast {
+          tailf:info "Enable per packet validation for unicast";
+          description
+            "Enable per packet validation for unicast";
+          container reverse-path {
+            tailf:info "Reverse path validation of source address (old command format)";
+            description
+              "Reverse path validation of source address (old command format)";
+            presence "true";
+          }
+          container source {
+            tailf:info "Validation of source address";
+            description
+              "Validation of source address";
+            tailf:cli-compact-syntax;
+            tailf:cli-sequence-commands {
+              tailf:cli-reset-all-siblings;
+            }
+            leaf reachable-via {
+              tailf:info "Specify reachability check to apply to the source address";
+              description
+                "Specify reachability check to apply to the source address";
+              type enumeration {
+                enum "any" {
+                  tailf:info "Source is reachable via any interface";
+                }
+                enum "rx" {
+                  tailf:info "Source is reachable via interface on which packet was received";
+                }
+              }
+            }
+            leaf allow-self-ping {
+              tailf:cli-break-sequence-commands;
+              tailf:info "Allow router to ping itself (opens vulnerability in verification)";
+              description
+                "Allow router to ping itself (opens vulnerability in verification)";
+              type empty;
+            }
+            leaf allow-default {
+              tailf:info "Allow default route to match when checking source address";
+              description
+                "Allow default route to match when checking source address";
+              type empty;
+            }
+          }
+        }
+      }
+      container wccp {
+        tailf:info "WCCP IPv4 interface commands";
+        description
+          "WCCP IPv4 interface commands";
+        uses interface-ip-wccp-grouping;
+        container redirect {
+          tailf:info "Set packet redirection options";
+          description
+            "Set packet redirection options";
+          container exclude {
+            tailf:info "Exclude packets from redirection";
+            description
+              "Exclude packets from redirection";
+            leaf in {
+              tailf:info "Exclude inbound packets from outbound redirection";
+              description
+                "Exclude inbound packets from outbound redirection";
+              type empty;
+            }
+          }
+        }
+        list vrf {
+          tailf:info "Configure WCCP for a VRF";
+          description
+            "Configure WCCP for a VRF";
+          tailf:cli-suppress-mode;
+          key "name";
+          leaf name {
+            type string {
+              tailf:info "WORD;;VRF name";
+            }
+          }
+          uses interface-ip-wccp-grouping;
+        }
+      }
+    }
+    container ipv6 {
+      tailf:info "IPv6 interface subcommands";
+      description
+        "IPv6 interface subcommands";
+      container address {
+        tailf:info "Configure IPv6 address on interface";
+        description
+          "Configure IPv6 address on interface";
+        choice address-choice {
+          case autoconfig-case {
+            container autoconfig {
+              tailf:info "Obtain address using autoconfiguration";
+              description
+                "Obtain address using autoconfiguration";
+              presence "true";
+              leaf default {
+                tailf:info "Insert default route";
+                description
+                  "Insert default route";
+                type empty;
+              }
+            }
+          }
+          case manual-case {
+            list prefix-list {
+              tailf:cli-drop-node-name;
+              tailf:cli-suppress-mode;
+              tailf:cli-delete-when-empty;
+              key "prefix";
+              leaf prefix {
+                type ios:ipv6-prefix {
+                  tailf:info "X:X:X:X::X/<0-128>;;IPv6 prefix";
+                }
+              }
+              leaf anycast {
+                tailf:info "Configure as an anycast";
+                description
+                  "Configure as an anycast";
+                tailf:cli-full-command;
+                type empty;
+              }
+              leaf eui-64 {
+                tailf:info "Use eui-64 interface identifier";
+                description
+                  "Use eui-64 interface identifier";
+                tailf:cli-full-command;
+                type empty;
+              }
+            }
+          }
+          case link-local-case {
+            list link-local-address {
+              tailf:cli-drop-node-name;
+              tailf:cli-suppress-mode;
+              tailf:cli-delete-when-empty;
+              key "address";
+              leaf address {
+                type inet:ipv6-address {
+                  tailf:info "X:X:X:X::X;;IPv6 link-local address";
+                }
+              }
+              leaf link-local {
+                tailf:info "Use link-local address";
+                description
+                  "Use link-local address";
+                tailf:cli-full-command;
+                type empty;
+              }
+            }
+          }
+        }
+      }
+      leaf enable {
+        tailf:info "Enable IPv6 on interface";
+        description
+          "Enable IPv6 on interface";
+        type empty;
+      }
+      container flow {
+        tailf:info "NetFlow related commands";
+        description
+          "NetFlow related commands";
+        leaf ingress {
+          tailf:info "Enable inbound NetFlow";
+          description
+            "Enable inbound NetFlow";
+          type empty;
+        }
+        leaf egress {
+          tailf:info "Enable outbound NetFlow";
+          description
+            "Enable outbound NetFlow";
+          type empty;
+        }
+        uses interface-ip-monitor-grouping;
+      }
+      container ospf {
+        tailf:info "OSPF interface commands";
+        description
+          "OSPF interface commands";
+        list process {
+          tailf:cli-suppress-mode;
+          tailf:cli-delete-when-empty;
+          tailf:cli-drop-node-name;
+          tailf:cli-compact-syntax;
+          tailf:cli-sequence-commands {
+            tailf:cli-reset-siblings;
+          }
+          key "id";
+          leaf id {
+            type uint16 {
+              tailf:info "<1-65535>;;Process ID";
+              range "1..65535";
+            }
+          }
+          leaf area {
+            tailf:info "Set the OSPF area ID";
+            description
+              "Set the OSPF area ID";
+            type union {
+              type uint32 {
+                tailf:info "<0-4294967295>;;OSPF area ID as a decimal value";
+                range "0..4294967295";
+              }
+              type inet:ipv4-address {
+                tailf:info "A.B.C.D;;OSPF area ID in IP address format";
+              }
+            }
+          }
+          leaf instance {
+            tailf:info "Set the OSPF instance";
+            description
+              "Set the OSPF instance";
+            type union {
+              type uint8 {
+                tailf:info "<0-31>;;Instance ID";
+                range "0..31";
+              }
+              type uint8 {
+                tailf:info "<32-255>;;Instance ID (DEPRECATED!)";
+                range "32..255";
+              }
+            }
+          }
+        }
+        container authentication {
+          tailf:info "Enable authentication";
+          description
+            "Enable authentication";
+          leaf null {
+            tailf:info "Use no authentication";
+            description
+              "Use no authentication";
+            type empty;
+          }
+          uses authentication-ipsec-grouping;
+        }
+        uses interface-ospf-bfd-grouping;
+        leaf cost {
+          tailf:info "Route cost of this interface";
+          description
+            "Route cost of this interface";
+          type uint16 {
+            tailf:info "<1-65535>;;Route cost of this interface";
+            range "1..65535";
+          }
+        }
+        container database-filter {
+          tailf:info "Filter OSPF LSA during synchronization and flooding";
+          description
+            "Filter OSPF LSA during synchronization and flooding";
+          choice database {
+            leaf all {
+              tailf:info "Filter all LSA";
+              description
+                "Filter all LSA";
+              type enumeration {
+                enum "out" {
+                  tailf:info "Outgoing LSA";
+                }
+              }
+            }
+            leaf disable {
+              tailf:info "Disable LSA Filter on this interface";
+              description
+                "Disable LSA Filter on this interface";
+              type empty;
+            }
+          }
+        }
+        uses interface-ospf-dead-interval-grouping;
+        container demand-circuit {
+          tailf:info "OSPF demand circuit";
+          description
+            "OSPF demand circuit";
+          presence "true";
+          leaf disable {
+            tailf:info "Disable demand circuit on this interface";
+            description
+              "Disable demand circuit on this interface";
+            tailf:cli-full-command;
+            type empty;
+          }
+          leaf ignore {
+            tailf:info "Ignore demand circuit auto-negotiation requests";
+            description
+              "Ignore demand circuit auto-negotiation requests";
+            tailf:cli-full-command;
+            type empty;
+          }
+        }
+        uses interface-ospf-encryption-grouping;
+        container flood-reduction {
+          tailf:info "OSPF Flood Reduction";
+          description
+            "OSPF Flood Reduction";
+          presence "true";
+          leaf disable {
+            tailf:info "Disable Flood Reduction on this interface";
+            description
+              "Disable Flood Reduction on this interface";
+            type empty;
+          }
+        }
+        uses interface-ospf-hello-interval-grouping;
+        container mtu-ignore {
+          tailf:info "Ignores the MTU in DBD packets";
+          description
+            "Ignores the MTU in DBD packets";
+          presence "true";
+          leaf disable {
+            tailf:info "Disable Ingore MTU on this interface";
+            description
+              "Disable Ingore MTU on this interface";
+            type empty;
+          }
+        }
+        uses interface-ospf-neighbor-grouping;
+        uses interface-ospf-network-grouping;
+        uses interface-ospf-priority-grouping;
+        uses interface-ospf-retransmit-interval-grouping;
+        container shutdown {
+          tailf:info "Shut down the interface in OSPFv3";
+          description
+            "Shut down the interface in OSPFv3";
+          presence "true";
+          leaf disable {
+            tailf:info "Disable inherited shutdown";
+            description
+              "Disable inherited shutdown";
+            type empty;
+          }
+        }
+        uses interface-ospf-transmit-delay-grouping;
+      }
+      leaf mtu {
+        tailf:info "Set IPv6 Maximum Transmission Unit";
+        description
+          "Set IPv6 Maximum Transmission Unit";
+        type uint16 {
+          tailf:info "<1280-9198>;;MTU (bytes)";
+          range "1280..9198";
+        }
+      }
+      leaf redirects {
+        tailf:info "Enable sending ICMP Redirect messages";
+        description
+          "Enable sending ICMP Redirect messages";
+        tailf:cli-boolean-no;
+        tailf:cli-trim-default;
+        type boolean;
+      }
+      list rip {
+        tailf:info "Configure RIP routing protocol";
+        description
+          "Configure RIP routing protocol";
+        tailf:cli-suppress-mode;
+        key "id";
+        leaf id {
+          type string {
+            tailf:info "WORD;;User selected string identifying this RIP process";
+          }
+        }
+        leaf enable {
+          tailf:info "Enable/disable RIP routing";
+          description
+            "Enable/disable RIP routing";
+          tailf:cli-full-command;
+          type empty;
+        }
+        container default-information {
+          tailf:info "Configure handling of default route";
+          description
+            "Configure handling of default route";
+          tailf:cli-compact-syntax;
+          tailf:cli-sequence-commands;
+          leaf route {
+            tailf:cli-drop-node-name;
+            type enumeration {
+              enum "only" {
+                tailf:info "Advertise only the default route";
+              }
+              enum "originate" {
+                tailf:info "Originate the default route";
+              }
+            }
+          }
+          leaf metric {
+            tailf:info "Default route metric";
+            description
+              "Default route metric";
+            tailf:cli-optional-in-sequence;
+            type uint8 {
+              tailf:info "<1-15>;;Metric value";
+              range "1..15";
+            }
+          }
+        }
+      }
+      choice ipv6-pim-choice {
+        container no-pim {
+          tailf:cli-drop-node-name;
+          leaf pim {
+            tailf:info "PIM interface commands";
+            description
+              "PIM interface commands";
+            tailf:cli-boolean-no;
+            tailf:cli-trim-default;
+            type boolean;
+          }
+        }
+        container pim {
+          tailf:info "PIM interface commands";
+          description
+            "PIM interface commands";
+          leaf bfd {
+            tailf:info "Configure BFD";
+            description
+              "Configure BFD";
+            tailf:cli-full-command;
+            type empty;
+          }
+          container bsr {
+            tailf:info "Configure BSR";
+            description
+              "Configure BSR";
+            leaf border {
+              tailf:info "Border of PIM BSR domain";
+              description
+                "Border of PIM BSR domain";
+              type empty;
+            }
+          }
+          leaf dr-priority {
+            tailf:info "PIM Hello DR priority";
+            description
+              "PIM Hello DR priority";
+            tailf:cli-full-command;
+            type uint32 {
+              tailf:info "<0-4294967295>;;Hello DR priority, preference given to larger value";
+            }
+          }
+        }
+      }
+      container traffic-filter {
+        tailf:info "Access control list for packets";
+        description
+          "Access control list for packets";
+        tailf:cli-compact-syntax;
+        tailf:cli-sequence-commands;
+        leaf access-list {
+          tailf:cli-drop-node-name;
+          type string {
+            tailf:info "WORD;;Access-list name";
+          }
+        }
+        leaf direction {
+          tailf:cli-drop-node-name;
+          type enumeration {
+            enum "in" {
+              tailf:info "inbound packets";
+            }
+            enum "out" {
+              tailf:info "outbound packets";
+            }
+          }
+        }
+      }
+    }
+    leaf load-interval {
+      tailf:info "Specify interval for load calculation for an interface";
+      description
+        "Specify interval for load calculation for an interface";
+      type uint16 {
+        tailf:info "<30-600>;;Load interval delay in seconds";
+        range "0..600";
+      }
+    }
+    container logging {
+      tailf:info "Configure logging for interface";
+      description
+        "Configure logging for interface";
+      container event {
+        tailf:info "Interface events";
+        description
+          "Interface events";
+        leaf bundle-status {
+          tailf:info "BUNDLE/UNBUNDLE messages";
+          description
+            "BUNDLE/UNBUNDLE messages";
+          tailf:cli-full-command;
+          type empty;
+        }
+        leaf link-status {
+          tailf:info "UPDOWN and CHANGE messages";
+          description
+            "UPDOWN and CHANGE messages";
+          tailf:cli-full-command;
+          type empty;
+        }
+        leaf trunk-status {
+          tailf:info "TRUNK status messages";
+          description
+            "TRUNK status messages";
+          tailf:cli-full-command;
+          type empty;
+        }
+        leaf nfas-status {
+          tailf:info "NFAS D-channel status messages";
+          description
+            "NFAS D-channel status messages";
+          tailf:cli-full-command;
+          type empty;
+        }
+        container spanning-tree {
+          tailf:info "Spanning-tree Interface events";
+          description
+            "Spanning-tree Interface events";
+          presence "true";
+          leaf status {
+            tailf:info "Spanning-tree state change messages";
+            description
+              "Spanning-tree state change messages";
+            tailf:cli-full-command;
+            type empty;
+          }
+        }
+        container subif-link-status {
+          tailf:info "Sub-interface UPDOWN and CHANGE messages";
+          description
+            "Sub-interface UPDOWN and CHANGE messages";
+          presence "true";
+          leaf ignore-bulk {
+            tailf:info "Do not log messages when the main interface is transitioning";
+            description
+              "Do not log messages when the main interface is transitioning";
+            tailf:cli-full-command;
+            type empty;
+          }
+        }
+      }
+    }
+    container mdix {
+      leaf auto {
+        tailf:cli-full-command;
+        tailf:cli-boolean-no;
+        tailf:cli-trim-default;
+        type boolean;
+      }
+    }
+    container mop {
+      leaf enabled {
+        tailf:cli-full-command;
+        tailf:cli-boolean-no;
+        tailf:cli-trim-default;
+        type boolean;
+      }
+    }
+    leaf max-reserved-bandwidth {
+      tailf:info "Maximum Reservable Bandwidth on an Interface";
+      description
+        "Maximum Reservable Bandwidth on an Interface";
+      tailf:cli-full-command;
+      type uint8 {
+        tailf:info "<1-100>;;Max. reservable bandwidth as percent of interface bandwidth";
+        range "1..100";
+      }
+    }
+    container mls {
+      tailf:info "mls sub/interface commands";
+      description
+        "mls sub/interface commands";
+      container qos {
+        tailf:info "qos command keyword";
+        description
+          "qos command keyword";
+        leaf channel-consistency {
+          tailf:info "enable or disable qos consistency checks";
+          description
+            "enable or disable qos consistency checks";
+          tailf:cli-full-command;
+          tailf:cli-boolean-no;
+          tailf:cli-trim-default;
+          type boolean;
+        }
+        leaf trust {
+          tailf:info "trust keyword";
+          description
+            "trust keyword";
+          tailf:cli-full-command;
+          type enumeration {
+            enum "cos" {
+              tailf:info "cos keyword";
+            }
+            enum "device" {
+              tailf:info "trusted device class";
+            }
+            enum "dscp" {
+              tailf:info "dscp keyword";
+            }
+            enum "ip-precedence" {
+              tailf:info "ip-precedence keyword";
+            }
+          }
+        }
+        leaf trust-device {
+          tailf:cli-drop-node-name;
+          when "../trust = 'device'";
+          type enumeration {
+            enum "cisco-phone" {
+              tailf:info "Cisco IP Phone";
+            }
+            enum "cts" {
+              tailf:info "Cisco-telepresence";
+            }
+            enum "ip-camera" {
+              tailf:info "Cisco video surveillance camera";
+            }
+            enum "media-player" {
+              tailf:info "Cisco Digital Media Player";
+            }
+          }
+        }
+        leaf vlan-based {
+          tailf:info "vlan-based keyword";
+          description
+            "vlan-based keyword";
+          tailf:cli-full-command;
+          type empty;
+        }
+      }
+    }
+    leaf mtu {
+      tailf:info "Set the interface Maximum Transmission Unit (MTU)";
+      description
+        "Set the interface Maximum Transmission Unit (MTU)";
+      tailf:cli-full-command;
+      type uint16 {
+        range "64..18000";
+        tailf:info "<64-18000>;;MTU size in bytes";
+      }
+    }
+    container ospfv3 {
+      tailf:info "OSPFv3 interface commands";
+      description
+        "OSPFv3 interface commands";
+      list process-id {
+        tailf:cli-drop-node-name;
+        tailf:cli-suppress-mode;
+        tailf:cli-delete-when-empty;
+        tailf:cli-reset-container;
+        key "id";
+        leaf id {
+          type uint16 {
+            tailf:info "<1-65535>;;Process ID";
+          }
+        }
+        uses interface-ospfv3-process-id-grouping;
+        container ipv4 {
+          tailf:info "Specify parameters for IPv4";
+          description
+            "Specify parameters for IPv4";
+          list area {
+            tailf:cli-suppress-mode;
+            tailf:info "Set the OSPF area ID";
+            description
+              "Set the OSPF area ID";
+            key "id";
+            leaf id {
+              type ospf-area-type;
+            }
+            leaf instance {
+              tailf:info "Set the OSPF instance";
+              description
+                "Set the OSPF instance";
+              type uint8 {
+                tailf:info "<64-95>;;Instance ID";
+                range "64..95";
+              }
+            }
+          }
+          uses interface-ospfv3-process-id-grouping;
+        }
+        container ipv6 {
+          tailf:info "Specify parameters for IPv6";
+          description
+            "Specify parameters for IPv6";
+          list area {
+            tailf:cli-suppress-mode;
+            tailf:info "Set the OSPF area ID";
+            description
+              "Set the OSPF area ID";
+            key "id";
+            leaf id {
+              type ospf-area-type;
+            }
+            leaf instance {
+              tailf:info "Set the OSPF instance";
+              description
+                "Set the OSPF instance";
+              type uint8 {
+                tailf:info "<0-31>;;Instance ID";
+                range "0..31";
+              }
+            }
+          }
+          uses interface-ospfv3-process-id-grouping;
+        }
+      }
+      container authentication {
+        tailf:info "Enable authentication";
+        description
+          "Enable authentication";
+        leaf key-chain {
+          tailf:info "Use a key-chain for cryptographic authentication keys";
+          description
+            "Use a key-chain for cryptographic authentication keys";
+          tailf:cli-full-command;
+          type string {
+            tailf:info "WORD;;Key-chain name";
+          }
+        }
+        leaf null {
+          tailf:cli-full-command;
+          tailf:info "Use no authentication";
+          description
+            "Use no authentication";
+          type empty;
+        }
+        uses authentication-ipsec-grouping;
+      }
+      uses interface-ospf-bfd-grouping;
+      uses interface-ospfv3-cost-grouping;
+      container database-filter {
+        tailf:info "Filter OSPF LSA during synchronization and flooding";
+        description
+          "Filter OSPF LSA during synchronization and flooding";
+        leaf all {
+          tailf:info "Filter all LSA";
+          description
+            "Filter all LSA";
+          type enumeration {
+            enum "out" {
+              tailf:info "Outgoing LSA";
+            }
+          }
+        }
+      }
+      uses interface-ospf-dead-interval-grouping;
+      container demand-circuit {
+        tailf:info "OSPF Demand Circuit";
+        description
+          "OSPF Demand Circuit";
+        presence "true";
+        leaf ignore {
+          tailf:info "Ignore demand circuit auto-negotiation requests";
+          description
+            "Ignore demand circuit auto-negotiation requests";
+          type empty;
+        }
+      }
+      uses interface-ospf-encryption-grouping;
+      leaf flood-reduction {
+        tailf:info "OSPF Flood Reduction";
+        description
+          "OSPF Flood Reduction";
+        type empty;
+      }
+      uses interface-ospf-hello-interval-grouping;
+      uses interface-ospfv3-manet-grouping;
+      leaf mtu-ignore {
+        tailf:info "Ignores the MTU in DBD packets";
+        description
+          "Ignores the MTU in DBD packets";
+        type empty;
+      }
+      container multi-area {
+        tailf:info "Set the OSPF multi-area ID";
+        description
+          "Set the OSPF multi-area ID";
+        tailf:cli-sequence-commands;
+        leaf id {
+          tailf:cli-drop-node-name;
+          type ospf-area-type;
+        }
+        leaf cost {
+          tailf:info "Interface cost";
+          description
+            "Interface cost";
+          tailf:cli-optional-in-sequence;
+          type uint32 {
+            tailf:info " <1-65535>;;Cost";
+            range "1..65535";
+          }
+        }
+      }
+      uses interface-ospf-neighbor-grouping;
+      uses interface-ospf-network-grouping;
+      uses interface-ospf-prefix-suppression-grouping;
+      uses interface-ospf-priority-grouping;
+      uses interface-ospf-retransmit-interval-grouping;
+      leaf shutdown {
+        tailf:info "Shut down the interface in OSPFv3";
+        description
+          "Shut down the interface in OSPFv3";
+        type empty;
+      }
+      uses interface-ospf-transmit-delay-grouping;
+    }
+    container power {
+      container inline {
+        leaf consumption {
+          tailf:cli-full-command;
+          type uint16 {
+            range "4000..15400";
+          }
+        }
+        leaf never {
+          type empty;
+        }
+      }
+    }
+    container interface_qos {
+      tailf:alt-name "qos";
+      container trust {
+        leaf device {
+          type enumeration {
+            enum "cisco-phone";
+          }
+        }
+      }
+    }
+    container service-policy {
+      tailf:info "Configure QoS Service Policy";
+      description
+        "Configure QoS Service Policy";
+      leaf history {
+        tailf:cli-full-command;
+        tailf:info "Keep history of QoS metrics";
+        description
+          "Keep history of QoS metrics";
+        type empty;
+      }
+      leaf input {
+        tailf:cli-full-command;
+        tailf:info "Assign policy-map to the input of an interface";
+        description
+          "Assign policy-map to the input of an interface";
+        type string {
+          tailf:info "WORD;;policy-map name";
+        }
+        tailf:non-strict-leafref {
+          path "/ios:native/policy-map/name";
+        }
+      }
+      leaf output {
+        tailf:cli-full-command;
+        tailf:info "Assign policy-map to the output of an interface";
+        description
+          "Assign policy-map to the output of an interface";
+        type string {
+          tailf:info "WORD;;policy-map name";
+        }
+        tailf:non-strict-leafref {
+          path "/ios:native/policy-map/name";
+        }
+      }
+      container type {
+        tailf:info "Configure CPL Service Policy";
+        description
+          "Configure CPL Service Policy";
+        container performance-monitor {
+          tailf:info "Configure media monitor service-policy type";
+          description
+            "Configure media monitor service-policy type";
+          tailf:cli-sequence-commands;
+          tailf:cli-compact-syntax;
+          leaf direction {
+            tailf:cli-drop-node-name;
+            type enumeration {
+              enum "input" {
+                tailf:info "Assign policy-map to the input of an interfcae";
+              }
+              enum "output" {
+                tailf:info "Assign policy-map to the output of an interfcae";
+              }
+            }
+          }
+          leaf name {
+            tailf:cli-drop-node-name;
+            type string {
+              tailf:info "WORD;;policy-map name";
+            }
+            tailf:non-strict-leafref {
+              path "/ios:native/policy-map/name";
+            }
+          }
+        }
+        container service-chain {
+          tailf:info "Configure Service-chain Service Policy";
+          description
+            "Configure Service-chain Service Policy";
+          tailf:cli-sequence-commands;
+          tailf:cli-compact-syntax;
+          leaf direction {
+            tailf:cli-drop-node-name;
+            type enumeration {
+              enum "input" {
+                tailf:info "Assign policy-map to the input of an interfcae";
+              }
+              enum "output" {
+                tailf:info "Assign policy-map to the output of an interfcae";
+              }
+            }
+          }
+          leaf name {
+            tailf:cli-drop-node-name;
+            type string {
+              tailf:info "WORD;;policy-map name";
+            }
+            tailf:non-strict-leafref {
+              path "/ios:native/policy-map/name";
+            }
+          }
+        }
+      }
+    }
+    leaf service-insertion {
+      tailf:info "Service-insertion AppNav Controller";
+      description
+        "Service-insertion AppNav Controller";
+      type enumeration {
+        enum "waas" {
+          tailf:info "Enable Service-insertion";
+        }
+      }
+    }
+    leaf shutdown {
+      tailf:info "Shutdown the selected interface";
+      description
+        "Shutdown the selected interface";
+      tailf:cli-full-command;
+      type empty;
+    }
+    container standby {
+      tailf:info "HSRP interface configuration commands";
+      description
+        "HSRP interface configuration commands";
+      leaf version {
+        tailf:info "HSRP version";
+        description
+          "HSRP version";
+        tailf:cli-full-command;
+        type enumeration {
+          tailf:info "<1-2>;;Version number";
+          enum "1";
+          enum "2";
+        }
+      }
+      leaf bfd {
+        tailf:info "Enable HSRP BFD";
+        description
+          "Enable HSRP BFD";
+        type empty;
+      }
+      container delay {
+        tailf:info "HSRP initialisation delay";
+        description
+          "HSRP initialisation delay";
+        tailf:cli-compact-syntax;
+        leaf minimum {
+          tailf:info "Minimum delay";
+          description
+            "Minimum delay";
+          type uint16 {
+            tailf:info "<0-10000>;;Delay in seconds";
+            range "0..10000";
+          }
+        }
+        leaf reload {
+          tailf:info "Delay after reload";
+          description
+            "Delay after reload";
+          type uint16 {
+            tailf:info "<0-10000>;;Delay in seconds";
+            range "0..10000";
+          }
+        }
+      }
+      leaf mac-refresh {
+        tailf:info "Refresh MAC cache on switch by periodically sending packet from virtual mac address";
+        description
+          "Refresh MAC cache on switch by periodically sending packet from virtual mac address";
+        type uint8 {
+          tailf:info "<0-255>;;Interval to refresh MAC cache";
+          range "0..255";
+        }
+      }
+      container use-bia {
+        tailf:info "HSRP uses interface's burned in address";
+        description
+          "HSRP uses interface's burned in address";
+        presence "true";
+        container scope {
+          tailf:info "Specify the scope of use-bia";
+          description
+            "Specify the scope of use-bia";
+          leaf interface {
+            tailf:info "Use-bia applies to all groups on this interface or sub-interface";
+            description
+              "Use-bia applies to all groups on this interface or sub-interface";
+            type empty;
+          }
+        }
+      }
+      list standby-list {
+        tailf:cli-drop-node-name;
+        tailf:cli-suppress-mode;
+        tailf:cli-delete-when-empty;
+        tailf:cli-incomplete-command;
+        key "group-number";
+        leaf group-number {
+          tailf:cli-suppress-range;
+          type uint16 {
+            tailf:info "<0-255>;;group number";
+          }
+        }
+        container authentication {
+          tailf:info "Authentication";
+          description
+            "Authentication";
+          choice auth {
+            leaf word {
+              tailf:cli-drop-node-name;
+              tailf:cli-disallow-value "md5|text";
+              type string {
+                tailf:info "WORD;;Plain text authentication string (8 chars max)";
+              }
+            }
+            container md5 {
+              tailf:info "Use MD5 authentication";
+              description
+                "Use MD5 authentication";
+              leaf key-chain {
+                tailf:info "Set key chain";
+                description
+                  "Set key chain";
+                type string {
+                  tailf:info "WORD;;Name of key-chain";
+                }
+              }
+              container key-string {
+                tailf:info "Set key string";
+                description
+                  "Set key string";
+                tailf:cli-compact-syntax;
+                leaf encrypt {
+                  tailf:cli-drop-node-name;
+                  type enumeration {
+                    enum "0" {
+                      tailf:info "Specifies an UNENCRYPTED key string will follow";
+                    }
+                    enum "7" {
+                      tailf:info "Specifies a HIDDEN key string will follow";
+                    }
+                  }
+                }
+                leaf string {
+                  tailf:cli-drop-node-name;
+                  type string {
+                    tailf:info "WORD;;Key string (64 chars max)";
+                  }
+                }
+                leaf timeout {
+                  tailf:info "Set timeout";
+                  description
+                    "Set timeout";
+                  type uint16 {
+                    tailf:info "<0-32767>;;Timeout until only accepting new key (seconds)";
+                    range "0..32767";
+                  }
+                }
+              }
+            }
+            leaf text {
+              tailf:info "Plain text authentication";
+              description
+                "Plain text authentication";
+              type string {
+                tailf:info "WORD;;Plain text authentication string (8 chars max)";
+              }
+            }
+          }
+        }
+        leaf follow {
+          tailf:info "Name of HSRP group to follow";
+          description
+            "Name of HSRP group to follow";
+          type string {
+            tailf:info "WORD;;name string (25 chars. max)";
+          }
+        }
+        container ip {
+          tailf:info "Enable HSRP and set the virtual IP address";
+          description
+            "Enable HSRP and set the virtual IP address";
+          tailf:cli-sequence-commands;
+          tailf:cli-compact-syntax;
+          presence "true";
+          leaf address {
+            tailf:cli-drop-node-name;
+            type inet:ipv4-address {
+              tailf:info "A.B.C.D;;Virtual IP address";
+            }
+          }
+          leaf secondary {
+            tailf:info "Make this IP address a secondary virtual IP address";
+            description
+              "Make this IP address a secondary virtual IP address";
+            type empty;
+          }
+        }
+        leaf ipv6 {
+          tailf:info "Enable HSRP IPv6";
+          description
+            "Enable HSRP IPv6";
+          type union {
+            type inet:ipv6-address {
+              tailf:info "X:X:X:X::X;;IPv6 link-local address";
+            }
+            type ios:ipv6-prefix;
+            type enumeration {
+              enum "autoconfig" {
+                tailf:info "Obtain address using autoconfiguration";
+              }
+            }
+          }
+        }
+        leaf mac-address {
+          tailf:info "Virtual MAC address";
+          description
+            "Virtual MAC address";
+          type string {
+            tailf:info "H.H.H;;MAC address";
+          }
+        }
+        leaf name {
+          tailf:info "Redundancy name string";
+          description
+            "Redundancy name string";
+          tailf:cli-full-command;
+          type string {
+            tailf:info "WORD;;name string";
+          }
+        }
+        container preempt {
+          tailf:info "Overthrow lower priority Active routers";
+          description
+            "Overthrow lower priority Active routers";
+          presence "true";
+          container delay {
+            tailf:info "Wait before preempting";
+            description
+              "Wait before preempting";
+            tailf:cli-compact-syntax;
+            leaf minimum {
+              tailf:info "Delay at least this long";
+              description
+                "Delay at least this long";
+              type uint16 {
+                tailf:info "<0-3600>;;Number of seconds for minimum delay";
+                range "0..3600";
+              }
+            }
+            leaf reload {
+              tailf:info "Delay after reload";
+              description
+                "Delay after reload";
+              type uint16 {
+                tailf:info "<0-3600>;;Number of seconds for reload delay";
+                range "0..3600";
+              }
+            }
+            leaf sync {
+              tailf:info "Wait for IP redundancy client";
+              description
+                "Wait for IP redundancy client";
+              type uint16 {
+                tailf:info "<0-3600>;;Number of seconds for sync delay";
+                range "0..3600";
+              }
+            }
+          }
+        }
+        leaf priority {
+          tailf:info "Priority level";
+          description
+            "Priority level";
+          tailf:cli-full-command;
+          type uint8 {
+            tailf:info "<0-255>;;Priority value";
+          }
+        }
+        container redirect {
+          tailf:info "Configure sending of ICMP Redirect messages with an HSRP virtual IP address as the gateway IP address";
+          description
+            "Configure sending of ICMP Redirect messages with an HSRP virtual IP address as the gateway IP address";
+          container advertisement {
+            tailf:info "Redirect advertisement messages";
+            description
+              "Redirect advertisement messages";
+            container authentication {
+              tailf:info "Authentication";
+              description
+                "Authentication";
+              container md5 {
+                tailf:info "Use MD5 authentication";
+                description
+                  "Use MD5 authentication";
+                leaf key-chain {
+                  tailf:info "Set key chain";
+                  description
+                    "Set key chain";
+                  type string {
+                    tailf:info "WORD;;Name of key-chain";
+                  }
+                }
+                container key-string {
+                  tailf:info "Set key string";
+                  description
+                    "Set key string";
+                  tailf:cli-compact-syntax;
+                  tailf:cli-sequence-commands {
+                    tailf:cli-reset-siblings;
+                  }
+                  leaf encrypt {
+                    tailf:cli-drop-node-name;
+                    type enumeration {
+                      enum "0" {
+                        tailf:info "Specifies an UNENCRYPTED key string will follow";
+                      }
+                      enum "7" {
+                        tailf:info "Specifies a HIDDEN key string will follow";
+                      }
+                    }
+                  }
+                  leaf string {
+                    tailf:cli-drop-node-name;
+                    type string {
+                      tailf:info "WORD;;Key string (64 chars max)";
+                    }
+                  }
+                  leaf timeout {
+                    tailf:info "Set timeout";
+                    description
+                      "Set timeout";
+                    type uint16 {
+                      tailf:info "<0-32767>;;Timeout until only accepting new key (seconds)";
+                      range "0..32767";
+                    }
+                  }
+                }
+              }
+            }
+          }
+          container timers {
+            tailf:info "Adjust redirect timers";
+            description
+              "Adjust redirect timers";
+            tailf:cli-compact-syntax;
+            tailf:cli-sequence-commands {
+              tailf:cli-reset-siblings;
+            }
+            leaf advertisement {
+              tailf:cli-drop-node-name;
+              type uint16 {
+                tailf:info "<10-180>;;Passive router advertisement interval in seconds";
+                range "10..180";
+              }
+            }
+            leaf holddown {
+              tailf:cli-drop-node-name;
+              type uint16 {
+                tailf:info "<30-3600>;;Passive router holddown interval in seconds";
+                range "30..3600";
+              }
+            }
+          }
+          leaf unknown {
+            tailf:info "Redirect to non-HSRP routers";
+            description
+              "Redirect to non-HSRP routers";
+            type empty;
+          }
+        }
+        container timers {
+          tailf:info "Hello and hold timers";
+          description
+            "Hello and hold timers";
+          tailf:cli-compact-syntax;
+          tailf:cli-sequence-commands {
+            tailf:cli-reset-siblings;
+          }
+          container hello-interval {
+            tailf:cli-drop-node-name;
+            tailf:cli-flatten-container;
+            tailf:cli-compact-syntax;
+            choice hello-interval-choice {
+              leaf seconds {
+                tailf:cli-drop-node-name;
+                tailf:cli-incomplete-command;
+                type uint8 {
+                  tailf:info "<1-254>;;Hello interval in seconds";
+                  range "1..254";
+                }
+              }
+              leaf msec {
+                tailf:info "Specify hello interval in milliseconds";
+                description
+                  "Specify hello interval in milliseconds";
+                tailf:cli-incomplete-command;
+                type uint16 {
+                  tailf:info "<15-999>;;Hello interval in milliseconds";
+                  range "15..999";
+                }
+              }
+            }
+          }
+          container hold-time {
+            tailf:cli-drop-node-name;
+            tailf:cli-flatten-container;
+            tailf:cli-compact-syntax;
+            choice hold-time-choice {
+              leaf seconds {
+                tailf:cli-drop-node-name;
+                type uint8 {
+                  tailf:info "<1-255>;;Hold time in seconds";
+                  range "1..255";
+                }
+              }
+              leaf msec {
+                tailf:info "Specify hold time in milliseconds";
+                description
+                  "Specify hold time in milliseconds";
+                type uint16 {
+                  tailf:info "<50-3000>;;Hello interval in milliseconds";
+                  range "50..3000";
+                }
+              }
+            }
+          }
+        }
+        list track {
+          tailf:info "Priority tracking";
+          description
+            "Priority tracking";
+          tailf:cli-suppress-mode;
+          key "number";
+          leaf number {
+            type uint16 {
+              tailf:info "<1-1000>;;Tracked object number";
+              range "1..1000";
+            }
+          }
+          leaf decrement {
+            tailf:info "Priority decrement";
+            description
+              "Priority decrement";
+            tailf:cli-full-command;
+            type uint8 {
+              tailf:info "<1-255>;;Decrement value";
+            }
+          }
+          leaf shutdown {
+            tailf:info "Shutdown group";
+            description
+              "Shutdown group";
+            tailf:cli-full-command;
+            type empty;
+          }
+        }
+      }
+    }
+    container storm-control {
+      tailf:info "storm configuration";
+      description
+        "storm configuration";
+      container action {
+        tailf:info "Action to take for storm..control;";
+        description
+          "Action to take for storm..control;";
+        leaf level {
+          tailf:info "Set storm suppression level on this interface";
+          description
+            "Set storm suppression level on this interface";
+          type decimal64 {
+            fraction-digits 2;
+            tailf:info "<0-100>;;Enter Integer part of level as percentage of bandwidth";
+            range "0..100";
+          }
+        }
+      }
+      container broadcast {
+        tailf:info "Broadcast address storm control";
+        description
+          "Broadcast address storm control";
+        leaf level {
+          tailf:info "Set storm suppression level on this interface";
+          description
+            "Set storm suppression level on this interface";
+          type decimal64 {
+            fraction-digits 2;
+            tailf:info "<0-100>;;Enter Integer part of level as percentage of bandwidth";
+            range "0..100";
+          }
+        }
+      }
+      container multicast {
+        tailf:info "Multicast address storm control";
+        description
+          "Multicast address storm control";
+        leaf level {
+          tailf:info "Set storm suppression level on this interface";
+          description
+            "Set storm suppression level on this interface";
+          type decimal64 {
+            fraction-digits 2;
+            tailf:info "<0-100>;;Enter Integer part of level as percentage of bandwidth";
+            range "0..100";
+          }
+        }
+      }
+      container unicast {
+        tailf:info "Unicast address storm control";
+        description
+          "Unicast address storm control";
+        leaf level {
+          tailf:info "Set storm suppression level on this interface";
+          description
+            "Set storm suppression level on this interface";
+          type decimal64 {
+            fraction-digits 2;
+            tailf:info "<0-100>;;Enter Integer part of level as percentage of bandwidth";
+            range "0..100";
+          }
+        }
+      }
+    }
+    container utd {
+      tailf:info "UTD support on this interface";
+      description
+        "UTD support on this interface";
+      leaf enable {
+        tailf:info "Enable threat defense on this interface";
+        description
+          "Enable threat defense on this interface";
+        type empty;
+      }
+    }
+    container wrr-queue {
+      tailf:info "Configure weighted round-robin xmt queues";
+      description
+        "Configure weighted round-robin xmt queues";
+      container bandwidth {
+        tailf:info "Configure WRR minimum bandwidth with weights or percentages";
+        description
+          "Configure WRR minimum bandwidth with weights or percentages";
+        tailf:cli-compact-syntax;
+        tailf:cli-sequence-commands {
+          tailf:cli-reset-siblings;
+        }
+        choice bandwidth-choice {
+          case a {
+            leaf weight-1 {
+              tailf:cli-drop-node-name;
+              type uint8 {
+                tailf:info "<0-255>;;enter bandwidth weight";
+                range "0..255";
+              }
+            }
+            leaf weight-2 {
+              tailf:cli-drop-node-name;
+              type uint8 {
+                tailf:info "<0-255>;;enter bandwidth weight";
+                range "0..255";
+              }
+            }
+            leaf weight-3 {
+              tailf:cli-drop-node-name;
+              type uint8 {
+                tailf:info "<0-255>;;enter bandwidth weight";
+                range "0..255";
+              }
+            }
+            leaf weight-4 {
+              tailf:cli-drop-node-name;
+              type uint8 {
+                tailf:info "<0-255>;;enter bandwidth weight";
+                range "0..255";
+              }
+            }
+            leaf weight-5 {
+              tailf:cli-drop-node-name;
+              type uint8 {
+                tailf:info "<0-255>;;enter bandwidth weight";
+                range "0..255";
+              }
+            }
+            leaf weight-6 {
+              tailf:cli-drop-node-name;
+              type uint8 {
+                tailf:info "<0-255>;;enter bandwidth weight";
+                range "0..255";
+              }
+            }
+            leaf weight-7 {
+              tailf:cli-drop-node-name;
+              type uint8 {
+                tailf:info "<0-255>;;enter bandwidth weight";
+                range "0..255";
+              }
+            }
+          }
+          case b {
+            container percent {
+              tailf:cli-compact-syntax;
+              tailf:cli-sequence-commands {
+                tailf:cli-reset-siblings;
+              }
+              leaf percent-1 {
+                tailf:cli-drop-node-name;
+                type uint8 {
+                  tailf:info "<0-100>;;enter bandwidth percent";
+                  range "0..100";
+                }
+              }
+              leaf percent-2 {
+                tailf:cli-drop-node-name;
+                type uint8 {
+                  tailf:info "<0-100>;;enter bandwidth percent";
+                  range "0..100";
+                }
+              }
+              leaf percent-3 {
+                tailf:cli-drop-node-name;
+                type uint8 {
+                  tailf:info "<0-100>;;enter bandwidth percent";
+                  range "0..100";
+                }
+              }
+              leaf percent-4 {
+                tailf:cli-drop-node-name;
+                type uint8 {
+                  tailf:info "<0-100>;;enter bandwidth percent";
+                  range "0..100";
+                }
+              }
+              leaf percent-5 {
+                tailf:cli-drop-node-name;
+                type uint8 {
+                  tailf:info "<0-100>;;enter bandwidth percent";
+                  range "0..100";
+                }
+              }
+              leaf percent-6 {
+                tailf:cli-drop-node-name;
+                type uint8 {
+                  tailf:info "<0-100>;;enter bandwidth percent";
+                  range "0..100";
+                }
+              }
+              leaf percent-7 {
+                tailf:cli-drop-node-name;
+                type uint8 {
+                  tailf:info "<0-100>;;enter bandwidth percent";
+                  range "0..100";
+                }
+              }
+            }
+          }
+        }
+      }
+      list cos-map {
+        tailf:info "Configure cos-map for a queue threshold";
+        description
+          "Configure cos-map for a queue threshold";
+        tailf:cli-suppress-mode;
+        tailf:cli-delete-when-empty;
+        tailf:cli-compact-syntax;
+        tailf:cli-sequence-commands {
+          tailf:cli-reset-siblings;
+        }
+        key "queue-id threshold-id";
+        leaf queue-id {
+          type uint8 {
+            tailf:info "<1-3>;;enter cos-map queue id";
+            range "1..3";
+          }
+        }
+        leaf threshold-id {
+          type uint8 {
+            tailf:info "<1-8>;;enter cos-map threshhold id";
+            range "1..8";
+          }
+        }
+        leaf-list cos-values {
+          tailf:cli-drop-node-name;
+          tailf:cli-flat-list-syntax;
+          max-elements "8";
+          type uint8 {
+            tailf:info "<0-7>;;cos values separated by spaces (up to 8 values total)";
+            range "0..7";
+          }
+        }
+      }
+      container queue-limit {
+        tailf:info "Configure queue-limit";
+        description
+          "Configure queue-limit";
+        tailf:cli-compact-syntax;
+        tailf:cli-sequence-commands {
+          tailf:cli-reset-siblings;
+        }
+        leaf weight-a {
+          tailf:cli-drop-node-name;
+          type uint8 {
+            tailf:info "<0-100>;;enter queue size weight";
+            range "0..100";
+          }
+        }
+        leaf weight-b {
+          tailf:cli-drop-node-name;
+          type uint8 {
+            tailf:info "<0-100>;;enter queue size weight";
+            range "0..100";
+          }
+        }
+        leaf weight-c {
+          tailf:cli-drop-node-name;
+          type uint8 {
+            tailf:info "<0-100>;;enter queue size weight";
+            range "0..100";
+          }
+        }
+      }
+      container random-detect {
+        tailf:info "Configure random-detect";
+        description
+          "Configure random-detect";
+        list max-threshold {
+          tailf:info "Max threshold for WRED";
+          description
+            "Max threshold for WRED";
+          tailf:cli-suppress-mode;
+          tailf:cli-delete-when-empty;
+          tailf:cli-compact-syntax;
+          tailf:cli-sequence-commands {
+            tailf:cli-reset-siblings;
+          }
+          key "id";
+          leaf id {
+            type uint8 {
+              tailf:info "<1-3>;;enter queue id";
+              range "1..3";
+            }
+          }
+          uses queue-size-grouping;
+        }
+        list min-threshold {
+          tailf:info "Min threshold for WRED";
+          description
+            "Min threshold for WRED";
+          tailf:cli-suppress-mode;
+          tailf:cli-delete-when-empty;
+          tailf:cli-compact-syntax;
+          tailf:cli-sequence-commands {
+            tailf:cli-reset-siblings;
+          }
+          key "id";
+          leaf id {
+            type uint8 {
+              tailf:info "<1-3>;;enter queue id";
+              range "1..3";
+            }
+          }
+          uses queue-size-grouping;
+        }
+      }
+      list threshold {
+        tailf:info "Configure queue tail-drop thresholds";
+        description
+          "Configure queue tail-drop thresholds";
+        tailf:cli-suppress-mode;
+        tailf:cli-delete-when-empty;
+        tailf:cli-compact-syntax;
+        tailf:cli-sequence-commands {
+          tailf:cli-reset-siblings;
+        }
+        key "id";
+        leaf id {
+          type uint8 {
+            tailf:info "<1-3>;;enter queue id";
+            range "1..3";
+          }
+        }
+        uses queue-size-grouping;
+      }
+    }
+    container priority-queue {
+      tailf:info "Configure priority scheduling";
+      description
+        "Configure priority scheduling";
+      container cos-map {
+        tailf:info "Configure cos-map for a queue";
+        description
+          "Configure cos-map for a queue";
+        tailf:cli-compact-syntax;
+        tailf:cli-sequence-commands {
+          tailf:cli-reset-siblings;
+        }
+        leaf id {
+          tailf:cli-drop-node-name;
+          type uint8;
+        }
+        leaf-list cos-values {
+          tailf:cli-drop-node-name;
+          tailf:cli-flat-list-syntax;
+          max-elements "8";
+          type uint8 {
+            tailf:info "<0-7>;;cos values separated by spaces (up to 8 values total)";
+            range "0..7";
+          }
+        }
+      }
+      leaf out {
+        tailf:info "egress priority queue";
+        description
+          "egress priority queue";
+        tailf:cli-full-command;
+        type empty;
+      }
+    }
+    container rep {
+      tailf:info "Resilient Ethernet Protocol characteristics";
+      description
+        "Resilient Ethernet Protocol characteristics";
+      container block {
+        tailf:info "Block port & VLANs for VLAN Load-balancing";
+        description
+          "Block port & VLANs for VLAN Load-balancing";
+        container port {
+          tailf:info "Specify port for VLAN Load-balancing";
+          description
+            "Specify port for VLAN Load-balancing";
+          tailf:cli-sequence-commands {
+            tailf:cli-reset-siblings;
+          }
+          tailf:cli-compact-syntax;
+          choice port-choice {
+            leaf neighbor-offset {
+              tailf:cli-drop-node-name;
+              type int16 {
+                tailf:info "<-256 - 256>;;Neighbor offset";
+                range "-256..256";
+              }
+            }
+            leaf id {
+              tailf:info "REP port ID";
+              description
+                "REP port ID";
+              type string {
+                tailf:info "WORD;;REP port ID (16 digit hexadecimal number)";
+              }
+            }
+            leaf preferred {
+              tailf:info "Preferred flag";
+              description
+                "Preferred flag";
+              type empty;
+            }
+          }
+          leaf vlan {
+            tailf:info "VLANs to block";
+            description
+              "VLANs to block";
+            type union {
+              type string {
+                tailf:info "WORD;;VLAN list (1-4094) ex: 1-65,72,300-320";
+              }
+              type enumeration {
+                enum "all" {
+                  tailf:info "All VLANs";
+                }
+              }
+            }
+          }
+        }
+      }
+      container preempt {
+        tailf:info "Preemption options";
+        description
+          "Preemption options";
+        leaf delay {
+          tailf:info "Delay timer in seconds";
+          description
+            "Delay timer in seconds";
+          type uint16 {
+            tailf:info "<15-300>;;number of seconds before automatic preemption takes place";
+            range "15..300";
+          }
+        }
+      }
+      container segment {
+        tailf:info "REP segment ID";
+        description
+          "REP segment ID";
+        tailf:cli-compact-syntax;
+        tailf:cli-sequence-commands {
+          tailf:cli-reset-siblings;
+        }
+        leaf id {
+          tailf:cli-drop-node-name;
+          type uint16 {
+            tailf:info "<1-1024>;;Between 1 and 1024";
+            range "1..1024";
+          }
+        }
+        leaf edge {
+          tailf:info "Edge Port";
+          description
+            "Edge Port";
+          tailf:cli-optional-in-sequence;
+          type empty;
+        }
+        leaf primary {
+          tailf:info "Primary Edge Port";
+          description
+            "Primary Edge Port";
+          tailf:cli-optional-in-sequence;
+          when "../edge" {
+            tailf:dependency "../edge";
+          }
+          type empty;
+        }
+        leaf preferred {
+          tailf:info "Preferred Alternate Port";
+          description
+            "Preferred Alternate Port";
+          type empty;
+        }
+      }
+      container stcn {
+        tailf:info "Segment Topology Change Notification";
+        description
+          "Segment Topology Change Notification";
+        leaf segment {
+          tailf:info "for REP segment";
+          description
+            "for REP segment";
+          type string {
+            tailf:info "WORD;;segment ID list (1-1024) ex: 1-3,6-9";
+          }
+        }
+        leaf stp {
+          tailf:info "for STP network";
+          description
+            "for STP network";
+          type empty;
+        }
+      }
+    }
+    container rcv-queue {
+      tailf:info "Configure receive queue(s)";
+      description
+        "Configure receive queue(s)";
+      list cos-map {
+        tailf:info "Configure cos-map for a queue threshold";
+        description
+          "Configure cos-map for a queue threshold";
+        tailf:cli-suppress-mode;
+        tailf:cli-delete-when-empty;
+        tailf:cli-compact-syntax;
+        tailf:cli-sequence-commands {
+          tailf:cli-reset-siblings;
+        }
+        key "queue-id threshold-id";
+        leaf queue-id {
+          type uint8 {
+            tailf:info "<1-3>;;enter cos-map queue id";
+            range "1..3";
+          }
+        }
+        leaf threshold-id {
+          type uint8 {
+            tailf:info "<1-8>;;enter cos-map threshhold id";
+            range "1..8";
+          }
+        }
+        leaf-list cos-values {
+          tailf:cli-drop-node-name;
+          tailf:cli-flat-list-syntax;
+          max-elements "8";
+          type uint8 {
+            tailf:info "<0-7>;;cos values separated by spaces (up to 8 values total)";
+            range "0..7";
+          }
+        }
+      }
+    }
+    container udld {
+      tailf:info "Configure UDLD enabled or disabled and ignore global UDLD setting";
+      description
+        "Configure UDLD enabled or disabled and ignore global UDLD setting";
+      container port {
+        tailf:info "Enable UDLD protocol on this interface despite global UDLD setting";
+        description
+          "Enable UDLD protocol on this interface despite global UDLD setting";
+        tailf:cli-delete-when-empty;
+        presence "true";
+        choice port-choice {
+          leaf aggressive {
+            tailf:info "Enable UDLD protocol in aggressive mode on this interface despite global UDLD setting";
+            description
+              "Enable UDLD protocol in aggressive mode on this interface despite global UDLD setting";
+            type empty;
+          }
+          leaf disable {
+            tailf:info "Disable UDLD protocol on this interface despite global UDLD setting";
+            description
+              "Disable UDLD protocol on this interface despite global UDLD setting";
+            type empty;
+          }
+        }
+      }
+    }
+    container peer {
+      tailf:info "Peer parameters for point to point interfaces";
+      description
+        "Peer parameters for point to point interfaces";
+      container default {
+        tailf:info "Specify default parameters";
+        description
+          "Specify default parameters";
+        container ip {
+          tailf:info "Specify default IP parameters";
+          description
+            "Specify default IP parameters";
+          container address {
+            tailf:info "Specify default IP address";
+            description
+              "Specify default IP address";
+            choice address-choice {
+              leaf dhcp {
+                tailf:info "Use DHCP proxy client mechanism to allocate a peer IP address";
+                description
+                  "Use DHCP proxy client mechanism to allocate a peer IP address";
+                type empty;
+              }
+              container dhcp-pool {
+                tailf:info "Use local DHCP pools to allocate a peer IP address";
+                description
+                  "Use local DHCP pools to allocate a peer IP address";
+                presence "true";
+                leaf pools {
+                  tailf:cli-drop-node-name;
+                  tailf:cli-multi-value;
+                  type string {
+                    tailf:info "LINE;;List of one or more DHCP address pools";
+                  }
+                }
+              }
+              container pool {
+                tailf:info "Use IP pool mechanism to allocate a peer IP address";
+                description
+                  "Use IP pool mechanism to allocate a peer IP address";
+                presence "true";
+                leaf pools {
+                  tailf:cli-drop-node-name;
+                  tailf:cli-multi-value;
+                  type string {
+                    tailf:info "LINE;;List of one or more DHCP address pools";
+                  }
+                }
+              }
+            }
+          }
+        }
+      }
+    }
+    container performance {
+      tailf:info "Global performance monitor configuration";
+      description
+        "Global performance monitor configuration";
+      container monitor {
+        tailf:info "monitor";
+        description
+          "monitor";
+        leaf-list context {
+          tailf:info "Select ezPM context";
+          description
+            "Select ezPM context";
+          tailf:cli-list-syntax;
+          type string;
+        }
+      }
+    }
+  }
+
+  grouping interface-tunnel-grouping {
+    container nhrp {
+      tailf:info "NHRP Interface commands";
+      description
+        "NHRP Interface commands";
+      container event-publisher {
+        tailf:info "Enable NHRP smart spoke feature";
+        description
+          "Enable NHRP smart spoke feature";
+        leaf max-event-timeout {
+          tailf:info "Advertised expiry time for nhrp ed event";
+          description
+            "Number of seconds";
+          type uint8 {
+            range "1..22";
+          }
+        }
+      }
+      leaf group {
+        tailf:info "NHRP group name";
+        description
+          "group name string";
+        type string;
+      }
+      container map {
+        tailf:info "Map group name to QoS service policy";
+        description
+          "Map group name to QoS service policy";
+        container group {
+          tailf:info "NHRP group mapping";
+          description
+            "NHRP group mapping";
+          list nhrp-name {
+            tailf:cli-drop-node-name;
+            tailf:cli-suppress-mode;
+            key "nhrp-name";
+            leaf nhrp-name {
+              tailf:info "NHRP group name";
+              description
+                "NHRP group name";
+              type string;
+            }
+            container service-policy {
+              tailf:info "QoS service-policy";
+              description
+                "QoS service-policy";
+              leaf output {
+                tailf:info "apply QoS service policy in the output direction";
+                description
+                  "QoS policy-map name";
+                type string;
+              }
+            }
+          }
+        }
+      }
+      leaf route-watch {
+        tailf:info "Enable NHRP route watch";
+        description
+          "Enable NHRP route watch";
+        tailf:cli-boolean-no;
+        tailf:cli-trim-default;
+        tailf:cli-full-command;
+        type boolean;
+      }
+    }
+    container tunnel {
+      tailf:info "protocol-over-protocol tunneling";
+      description
+        "protocol-over-protocol tunneling";
+      container tun-6rd {
+        tailf:alt-name "6rd";
+        tailf:info "set tunnel 6rd parameters";
+        description
+          "set tunnel 6rd parameters";
+        leaf br {
+          tailf:info "Border Relay parameters";
+          description
+            "Border Relay parameters";
+          type inet:ipv4-address {
+            tailf:info "A.B.C.D;;BR IPv4 address";
+          }
+        }
+        container ipv4 {
+          tailf:info "Common IPv4 transport source parameters";
+          description
+            "Common IPv4 transport source parameters";
+          leaf prefix-len {
+            tailf:info "Common IPv4 transport source prefix length";
+            description
+              "Common IPv4 transport source prefix length";
+            type uint8 {
+              tailf:info "<0-31>;;Length in number of bits";
+            }
+          }
+          leaf suffix-len {
+            tailf:info "Common IPv4 transport source suffix length";
+            description
+              "Common IPv4 transport source suffix length";
+            type uint8 {
+              tailf:info "<0-31>;;Length in number of bits";
+            }
+          }
+        }
+        leaf prefix {
+          tailf:info "Provider selected common IPv6 prefix";
+          description
+            "Provider selected common IPv6 prefix";
+          type inet:ipv6-prefix {
+            tailf:info "X:X:X:X::X/<0-128>;;IPv6 prefix x:x::y/<z>";
+          }
+        }
+        leaf reverse-map-check {
+          tailf:info "Enable source IP address and port verification";
+          description
+            "Enable source IP address and port verification";
+          type empty;
+        }
+      }
+      container bandwidth {
+        tailf:info "Set tunnel bandwidth informational parameter";
+        description
+          "Set tunnel bandwidth informational parameter";
+        leaf receive {
+          tailf:info "Receive bandwidth";
+          description
+            "Receive bandwidth";
+          type uint32 {
+            tailf:info "<1-10000000>;;Bandwidth in kilobits";
+          }
+        }
+        leaf transmit {
+          tailf:info "Transmit bandwidth";
+          description
+            "Transmit bandwidth";
+          type uint32 {
+            tailf:info "<1-10000000>;;Bandwidth in kilobits";
+          }
+        }
+      }
+      leaf checksum {
+        tailf:info "enable end to end checksumming of packets";
+        description
+          "enable end to end checksumming of packets";
+        type empty;
+      }
+      leaf source {
+        tailf:info "source of tunnel packets";
+        description
+          "source of tunnel packets";
+        type string;
+      }
+      leaf destination {
+        tailf:info "destination of tunnel";
+        description
+          "destination of tunnel";
+        type host-v4v6-type;
+      }
+      container dst-port {
+        tailf:info "tunnel destination port";
+        description
+          "tunnel destination port";
+        choice dst-port-choice {
+          case port-num-case {
+            leaf port-num {
+              tailf:cli-drop-node-name;
+              type uint16 {
+                tailf:info "<0-65535>;;tunnel destination port number";
+              }
+            }
+          }
+          case dynamic-case {
+            leaf dynamic {
+              tailf:info "Set Destination Port Dynamically";
+              description
+                "Set Destination Port Dynamically";
+              type empty;
+            }
+          }
+        }
+      }
+      container endpoint {
+        tailf:info "Set endpoint parameter";
+        description
+          "Set endpoint parameter";
+        container service-policy {
+          tailf:info "Set service-policy";
+          description
+            "Set service-policy";
+          leaf output {
+            tailf:info "apply QoS service policy in the output direction";
+            description
+              "apply QoS service policy in the output direction";
+            type string {
+              tailf:info "WORD;;QoS policy-map name";
+            }
+          }
+        }
+      }
+      leaf entropy {
+        tailf:info "Compute hash (entropy) on payload and propagate to tunnel header";
+        description
+          "Compute hash (entropy) on payload and propagate to tunnel header";
+        type empty;
+      }
+      container fixup {
+        tailf:info "fixup on tunnel interface";
+        description
+          "fixup on tunnel interface";
+        leaf nat {
+          tailf:info "enable post nat fixup ";
+          description
+            "enable post nat fixup ";
+          type empty;
+        }
+      }
+      container flow {
+        tailf:info "flow options";
+        description
+          "flow options";
+        leaf egress-records {
+          tailf:info "enable egress flow records ";
+          description
+            "enable egress flow records ";
+          type empty;
+        }
+      }
+      leaf key {
+        tailf:info "security or selector key";
+        description
+          "security or selector key";
+        type uint64 {
+          tailf:info "<0-4294967295>;;key";
+          range "0..4294967295";
+        }
+      }
+      container mode {
+        tailf:info "tunnel encapsulation method";
+        description
+          "tunnel encapsulation method";
+        choice mode-choice {
+          container ipsec {
+            tailf:info "IPSec tunnel encapsulation";
+            description
+              "IPSec tunnel encapsulation";
+            container ipv4 {
+              tailf:info "over IPv4";
+              description
+                "over IPv4";
+              tailf:cli-delete-when-empty;
+              presence "true";
+            }
+            container ipv6 {
+              tailf:info "over IPv6";
+              description
+                "over IPv6";
+              tailf:cli-delete-when-empty;
+              presence "true";
+            }
+          }
+          container mpls {
+            tailf:info "MPLS encapsulations";
+            description
+              "MPLS encapsulations";
+            container traffic-eng {
+              tailf:info "Traffic engineering tunnels";
+              description
+                "Traffic engineering tunnels";
+              tailf:cli-delete-when-empty;
+              presence "true";
+              leaf gre-ip {
+                type empty;
+              }
+            }
+          }
+          container ethernet {
+            tailf:info "Ethernet over gre";
+            description
+              "Ethernet over gre";
+            leaf gre {
+              tailf:info "Ethernet over gre";
+              description
+                "Ethernet over gre";
+              type enumeration {
+                enum "ipv4" {
+                  tailf:info "over ipv4";
+                }
+                enum "ipv6" {
+                  tailf:info "over ipv6";
+                }
+              }
+            }
+          }
+          container gre {
+            tailf:info "generic route encapsulation protocol";
+            description
+              "generic route encapsulation protocol";
+            leaf ip {
+              tailf:info "over IP";
+              description
+                "over IP";
+              tailf:cli-full-command;
+              type empty;
+            }
+            leaf ipv6 {
+              tailf:info "over IPv6";
+              description
+                "over IPv6";
+              tailf:cli-full-command;
+              type empty;
+            }
+            container multipoint {
+              tailf:info "over IPv4 (multipoint)";
+              description
+                "over IPv4 (multipoint)";
+              presence "true";
+              leaf ipv6 {
+                tailf:info "over IPv6";
+                description
+                  "over IPv6";
+                tailf:cli-full-command;
+                type empty;
+              }
+            }
+          }
+          container ipip {
+            tailf:info "IP over IP encapsulation";
+            description
+              "IP over IP encapsulation";
+            presence "true";
+            leaf decapsulate-any {
+              tailf:info "Incoming traffic only";
+              description
+                "Incoming traffic only";
+              tailf:cli-full-command;
+              type empty;
+            }
+          }
+          leaf ipv6 {
+            tailf:info "Generic packet tunneling in IPv6";
+            description
+              "Generic packet tunneling in IPv6";
+            tailf:cli-full-command;
+            type empty;
+          }
+          container ipv6ip {
+            tailf:info "IPv6 over IP encapsulation";
+            description
+              "IPv6 over IP encapsulation";
+            presence "true";
+            leaf auto-6rd {
+              tailf:alt-name "6rd";
+              tailf:info "IPv6 automatic tunnelling using 6rd";
+              description
+                "IPv6 automatic tunnelling using 6rd";
+              tailf:cli-full-command;
+              type empty;
+            }
+            leaf auto-6to4 {
+              tailf:alt-name "6to4";
+              tailf:info "IPv6 automatic tunnelling using 6to4";
+              description
+                "IPv6 automatic tunnelling using 6to4";
+              tailf:cli-full-command;
+              type empty;
+            }
+            leaf isatap {
+              tailf:info "IPv6 automatic tunnelling using ISATAP";
+              description
+                "IPv6 automatic tunnelling using ISATAP";
+              tailf:cli-full-command;
+              type empty;
+            }
+          }
+          leaf udp {
+            tailf:info "UDP encapsulation protocol";
+            description
+              "UDP encapsulation protocol";
+            type enumeration {
+              enum "ip" {
+                tailf:info "over ip";
+              }
+              enum "multipoint" {
+                tailf:info "over IPv4 (multipoint)";
+              }
+            }
+          }
+        }
+      }
+      container network-id {
+        tailf:info "Set network-id";
+        description
+          "Set network-id";
+        tailf:cli-sequence-commands;
+        tailf:cli-compact-syntax;
+        leaf id {
+          tailf:cli-drop-node-name;
+          type uint16 {
+            tailf:info "<1-65535>;;network id";
+          }
+        }
+        leaf nexthop {
+          tailf:info "nexthop";
+          description
+            "nexthop";
+          type inet:ipv4-address {
+            tailf:info "A.B.C.D;;Next Hop Address";
+          }
+        }
+        leaf qos {
+          tailf:info "QoS profile";
+          description
+            "QoS profile";
+          tailf:cli-break-sequence-commands;
+          type string {
+            tailf:info "WORD;;QoS profile name";
+          }
+        }
+        leaf weight {
+          tailf:info "weight";
+          description
+            "weight";
+          type uint16 {
+            tailf:info "<1-65535>;;weight";
+          }
+        }
+      }
+      container path-mtu-discovery {
+        tailf:info "Enable Path MTU Discovery on tunnel";
+        description
+          "Enable Path MTU Discovery on tunnel";
+        presence "true";
+      }
+      container protection {
+        tailf:info "Enable tunnel protection";
+        description
+          "Enable tunnel protection";
+        container ipsec {
+          tailf:info "Use ipsec to protect this tunnel interface";
+          description
+            "Use ipsec to protect this tunnel interface";
+          leaf profile {
+            tailf:info "Determine the ipsec policy profile to use.";
+            description
+              "Determine the ipsec policy profile to use.";
+            type string {
+              tailf:info "WORD;;IPSec policy profile";
+            }
+          }
+        }
+      }
+      container mpls {
+        container traffic-eng {
+          container affinity {
+            tailf:cli-sequence-commands {
+              tailf:cli-reset-siblings;
+            }
+            tailf:cli-compact-syntax;
+            leaf attributes {
+              tailf:cli-drop-node-name;
+              type string;
+            }
+            leaf mask {
+              type string;
+            }
+          }
+          container auto-bw {
+            tailf:info "Specify mpls tunnel should automatically change bw";
+            description
+              "Specify mpls tunnel should automatically change bw";
+            leaf max-bw {
+              tailf:info "Set the Maximum Bandwidth for auto-bw on this tunnel";
+              description
+                "Set the Maximum Bandwidth for auto-bw on this tunnel";
+              type uint32 {
+                tailf:info "<0-4294967295>;; Maximum kb/s that tunnel can be auto set to";
+                range "0..4294967295";
+              }
+            }
+          }
+          container autoroute {
+            leaf announce {
+              tailf:cli-full-command;
+              type empty;
+            }
+          }
+          container priority {
+            tailf:cli-sequence-commands {
+              tailf:cli-reset-siblings;
+            }
+            tailf:cli-compact-syntax;
+            leaf setup-priority {
+              tailf:cli-drop-node-name;
+              type uint8 {
+                range "0..7";
+              }
+            }
+            leaf hold-priority {
+              tailf:cli-drop-node-name;
+              type uint8 {
+                range "0..7";
+              }
+            }
+          }
+          leaf bandwidth {
+            tailf:cli-full-command;
+            type uint32;
+          }
+          list path-option {
+            tailf:cli-suppress-mode;
+            tailf:cli-delete-when-empty;
+            tailf:cli-sequence-commands {
+              tailf:cli-reset-siblings;
+            }
+            tailf:cli-compact-syntax;
+            key "id";
+            leaf id {
+              type uint32;
+            }
+            choice path-option-choice {
+              container dynamic {
+                presence "true";
+              }
+              container protect {
+                presence "true";
+              }
+              container explicit {
+                tailf:cli-compact-syntax;
+                choice explicit-choice {
+                  leaf name {
+                    type string;
+                  }
+                  leaf identifier {
+                    type uint32;
+                  }
+                }
+              }
+            }
+            container lockdown {
+              presence "true";
+            }
+          }
+          container fast-reroute {
+            presence "true";
+          }
+        }
+      }
+      leaf raw-packet-interface {
+        tailf:info "physical interface for all packets entering itto be tunneled and for all packets entering the tunnel to exit";
+        description
+          "physical interface for all packets entering itto be tunneled and for all packets entering the tunnel to exit";
+        type string;
+      }
+      container rbscp {
+        tailf:info "Set tunnel RBSCP parameters";
+        description
+          "Set tunnel RBSCP parameters";
+        leaf ack-split {
+          tailf:info "ACK splitting";
+          description
+            "ACK splitting";
+          type uint8 {
+            tailf:info "<1-32>;;Split number";
+            range "1..32";
+          }
+        }
+        leaf delay {
+          tailf:info "enable delay";
+          description
+            "enable delay";
+          type empty;
+        }
+        leaf input-drop {
+          tailf:info "max tunnel queue size (number of bw*delay)";
+          description
+            "max tunnel queue size (number of bw*delay)";
+          type uint8 {
+            tailf:info "<1-10>;;Number of bw*delay products";
+            range "1..10";
+          }
+        }
+        leaf long-drop {
+          tailf:info "Drop non-transmitted packets w/excessive delay";
+          description
+            "Drop non-transmitted packets w/excessive delay";
+          type empty;
+        }
+        leaf report {
+          tailf:info "enable SCTP report chunk";
+          description
+            "enable SCTP report chunk";
+          type empty;
+        }
+        leaf window-stuff {
+          tailf:info "Window stuffing";
+          description
+            "Window stuffing";
+          type uint8 {
+            tailf:info "<1-20>;;Window step up size";
+            range "1..20";
+          }
+        }
+      }
+      leaf snooping {
+        tailf:info "Snooping on tunnel";
+        description
+          "Snooping on tunnel";
+        type enumeration {
+          enum "enable" {
+            tailf:info "Enable tunnel snooping";
+          }
+        }
+      }
+      container src-port {
+        tailf:info "tunnel source port";
+        description
+          "tunnel source port";
+        choice src-port-choice {
+          case port-num-case {
+            leaf port-num {
+              tailf:cli-drop-node-name;
+              type uint16 {
+                tailf:info "<0-65535>;;tunnel source port number";
+              }
+            }
+          }
+          case dynamic-case {
+            leaf dynamic {
+              tailf:info "Set Source Port Dynamically";
+              description
+                "Set Source Port Dynamically";
+              type empty;
+            }
+          }
+        }
+      }
+      leaf tos {
+        tailf:info "set type of sevice byte";
+        description
+          "set type of sevice byte";
+        type uint8 {
+          tailf:info "<0-255>;;tos";
+        }
+      }
+      leaf ttl {
+        tailf:info "set time to live";
+        description
+          "set time to live";
+        type uint8 {
+          tailf:info "<1-255>;;ttl";
+        }
+      }
+      container udlr {
+        tailf:info "associate tunnel with unidirectional interface";
+        description
+          "associate tunnel with unidirectional interface";
+        leaf address-resolution {
+          tailf:info "Enable ARP and NHRP over a UDLR Tunnel";
+          description
+            "Enable ARP and NHRP over a UDLR Tunnel";
+          type empty;
+        }
+        leaf receive-only {
+          tailf:info "Tunnel is receive-only capable";
+          description
+            "Tunnel is receive-only capable";
+          type string;
+        }
+        leaf send-only {
+          tailf:info "Tunnel is send-only capable";
+          description
+            "Tunnel is send-only capable";
+          type string;
+        }
+      }
+      container vlan {
+        tailf:info "Set vlan-id for ethernet over gre mode";
+        description
+          "Set vlan-id for ethernet over gre mode";
+        tailf:cli-sequence-commands;
+        tailf:cli-compact-syntax;
+        leaf id1 {
+          tailf:cli-drop-node-name;
+          type uint16 {
+            tailf:info "<1-4094>;;vlan-id";
+          }
+        }
+        leaf hyphen {
+          tailf:alt-name "-";
+          tailf:cli-break-sequence-commands;
+          type empty;
+        }
+        leaf id2 {
+          tailf:cli-drop-node-name;
+          type uint16 {
+            tailf:info "<1-4094>;;vlan-id";
+          }
+        }
+      }
+      leaf vrf {
+        tailf:info "set tunnel vrf membership";
+        description
+          "set tunnel vrf membership";
+        type string {
+          tailf:info "WORD;;vrf table name";
+        }
+      }
+    }
+  }
+
+  grouping interface-ethernet-carrier-delay-grouping {
+    choice delay-choice {
+      leaf seconds {
+        tailf:cli-drop-node-name;
+        type uint8 {
+          tailf:info "<0-60>;;Carrier Transitions delay seconds";
+          range "0..60";
+        }
+      }
+      leaf msec {
+        tailf:info "delay specified in milliseconds";
+        description
+          "delay specified in milliseconds";
+        type uint16 {
+          tailf:info "<0-1000>;;Carrier Transitions delay milliseconds";
+          range "0..1000";
+        }
+      }
+    }
+  }
+
+  grouping interface-ethernet-service-instance-l2protocol-grouping {
+    leaf-list protocol {
+      tailf:cli-drop-node-name;
+      tailf:cli-flat-list-syntax;
+      type enumeration {
+        enum "R4" {
+          tailf:info "Reserved Protocol using DA Mac 0180.C200.0004";
+        }
+        enum "R5" {
+          tailf:info "Reserved Protocol using DA Mac 0180.C200.0005";
+        }
+        enum "R6" {
+          tailf:info "Reserved Protocol using DA Mac 0180.C200.0006";
+        }
+        enum "R8" {
+          tailf:info "Reserved Protocol using DA Mac 0180.C200.0008";
+        }
+        enum "R9" {
+          tailf:info "Reserved Protocol using DA Mac 0180.C200.0009";
+        }
+        enum "RA" {
+          tailf:info "Reserved Protocol using DA Mac 0180.C200.000A";
+        }
+        enum "RB" {
+          tailf:info "Reserved Protocol using DA Mac 0180.C200.000B";
+        }
+        enum "RC" {
+          tailf:info "Reserved Protocol using DA Mac 0180.C200.000C";
+        }
+        enum "RD" {
+          tailf:info "Reserved Protocol using DA Mac 0180.C200.000D";
+        }
+        enum "RF" {
+          tailf:info "Reserved Protocol using DA Mac 0180.C200.000F";
+        }
+        enum "cdp" {
+          tailf:info "Cisco Discovery Protocol";
+        }
+        enum "dtp" {
+          tailf:info "Dynamic Trunking Protocol";
+        }
+        enum "elmi" {
+          tailf:info "ELMI Protocol";
+        }
+        enum "esmc" {
+          tailf:info "ESMC Protocol";
+        }
+        enum "lacp" {
+          tailf:info "LACP Protocol";
+        }
+        enum "lldp" {
+          tailf:info "Link Layer Discovery Protocol";
+        }
+        enum "loam" {
+          tailf:info "Link OAM Protocol";
+        }
+        enum "pagp" {
+          tailf:info "Port Aggregation Protocol";
+        }
+        enum "ptppd" {
+          tailf:info "PTP Peer Delay Protocol";
+        }
+        enum "stp" {
+          tailf:info "Spanning Tree Protocol";
+        }
+        enum "udld" {
+          tailf:info "UDLD Protocol";
+        }
+        enum "vtp" {
+          tailf:info "Vlan Trunking Protocol";
+        }
+      }
+    }
+  }
+
+  grouping interface-ethernet-grouping {
+    container carrier-delay {
+      tailf:info "Specify delay for interface transitions";
+      description
+        "Specify delay for interface transitions";
+      uses interface-ethernet-carrier-delay-grouping;
+      container down {
+        tailf:info "Carrier Down Transitions";
+        description
+          "Carrier Down Transitions";
+        uses interface-ethernet-carrier-delay-grouping;
+      }
+      container up {
+        tailf:info "Carrier Up Transitions";
+        description
+          "Carrier Up Transitions";
+        uses interface-ethernet-carrier-delay-grouping;
+      }
+    }
+    container channel-group {
+      tailf:info "Add this interface to an Etherchannel group";
+      description
+        "Add this interface to an Etherchannel group";
+      tailf:cli-sequence-commands {
+        tailf:cli-reset-siblings;
+      }
+      tailf:cli-compact-syntax;
+      leaf number {
+        tailf:cli-drop-node-name;
+        type uint16 {
+          tailf:info "<1-512>;;Channel group number";
+          range "1..512";
+        }
+      }
+      leaf mode {
+        tailf:info "Etherchannel Mode of the interface";
+        description
+          "Etherchannel Mode of the interface";
+        type enumeration {
+          enum "active" {
+            tailf:info "Enable LACP unconditionally";
+          }
+          enum "auto" {
+            tailf:info "Enable PAgP only if a PAgP device is detected";
+          }
+          enum "desirable" {
+            tailf:info "Enable PAgP unconditionally";
+          }
+          enum "on" {
+            tailf:info "Enable Etherchannel only";
+          }
+          enum "passive" {
+            tailf:info "Enable LACP only if a LACP device is detected";
+          }
+        }
+      }
+      leaf non-silent {
+        tailf:info "Start negotiation only after data packets received";
+        description
+          "Start negotiation only after data packets received";
+        tailf:cli-break-sequence-commands;
+        type empty;
+      }
+      leaf link {
+        tailf:info "Assign a link identifier used for load-balancing";
+        description
+          "Assign a link identifier used for load-balancing";
+        type uint8 {
+          tailf:info "<1-4>;;Channel group load-balancing link identifier";
+          range "1..4";
+        }
+      }
+    }
+    leaf channel-protocol {
+      tailf:info "Select the channel protocol (LACP, PAgP)";
+      description
+        "Select the channel protocol (LACP, PAgP)";
+      type enumeration {
+        enum "lacp" {
+          tailf:info "Prepare interface for LACP protocol";
+        }
+        enum "pagp" {
+          tailf:info "Prepare interface for PAgP protocol";
+        }
+      }
+    }
+    container ethernet {
+      tailf:info "Ethernet interface parameters";
+      description
+        "Ethernet interface parameters";
+      container oam {
+        tailf:info "To enable Ethernet Link OAM";
+        description
+          "To enable Ethernet Link OAM";
+        presence "true";
+        container link-monitor {
+          tailf:info "Ethernet OAM Link Monitor";
+          description
+            "Ethernet OAM Link Monitor";
+          container frame {
+            tailf:info "Errored frames in a period measured by time";
+            description
+              "Errored frames in a period measured by time";
+            container threshold {
+              tailf:info "Errored frame threshold";
+              description
+                "Errored frame threshold";
+              container high {
+                tailf:info "High Threshold";
+                description
+                  "High Threshold";
+                leaf thresh {
+                  tailf:info "Set the high errored frame threshold in number of frames";
+                  description
+                    "Set the high errored frame threshold in number of frames";
+                  tailf:cli-drop-node-name;
+                  type uint16 {
+                    range "1..65535";
+                  }
+                }
+                leaf none {
+                  tailf:info "Disable high threshold";
+                  description
+                    "Disable high threshold";
+                  type empty;
+                }
+              }
+              leaf low {
+                tailf:info "Low threshold";
+                description
+                  "Set the low errored frame threshold in number of frames";
+                type uint16 {
+                  range "0..65535";
+                }
+              }
+            }
+            leaf window {
+              tailf:info "Window size of the polling period";
+              description
+                "Set window size in multiple of 100 milliseconds (will be rounded off to second)";
+              type uint16 {
+                range "10..600";
+              }
+            }
+          }
+          container frame-period {
+            tailf:info "Errored frames in a period measured by number of frames";
+            description
+              "Errored frames in a period measured by number of frames";
+            container threshold {
+              tailf:info "Errored frame-period threshold";
+              description
+                "Errored frame-period threshold";
+              container high {
+                tailf:info "High Threshold";
+                description
+                  "High Threshold";
+                leaf f-thresh {
+                  tailf:info "Set the high errored frame-period threshold in number of frames";
+                  description
+                    "Set the high errored frame-period threshold in number of frames";
+                  tailf:cli-drop-node-name;
+                  type uint16 {
+                    range "1..65535";
+                  }
+                }
+                leaf none {
+                  tailf:info "Disable high threshold";
+                  description
+                    "Disable high threshold";
+                  type empty;
+                }
+              }
+              leaf low {
+                tailf:info "Low threshold";
+                description
+                  "Set the low errored frame-period threshold in number of frames";
+                type uint16 {
+                  range "0..65535";
+                }
+              }
+            }
+            leaf window {
+              tailf:info "Window size of a polling period";
+              description
+                "Set window size in number of 10000 frames";
+              type uint16 {
+                range "1..65535";
+              }
+            }
+          }
+          container frame-seconds {
+            tailf:info "Errored frame seconds in a period";
+            description
+              "Errored frame seconds in a period";
+            container threshold {
+              tailf:info "Errored frame-seconds threshold";
+              description
+                "Errored frame-seconds threshold";
+              container high {
+                tailf:info "High Threshold";
+                description
+                  "High Threshold";
+                leaf e-thresh {
+                  tailf:info "Set the high errored frame-seconds threshold in number of seconds";
+                  description
+                    "Set the high errored frame-seconds threshold in number of seconds";
+                  tailf:cli-drop-node-name;
+                  type uint16 {
+                    range "1..900";
+                  }
+                }
+                leaf none {
+                  tailf:info "Disable high threshold";
+                  description
+                    "Disable high threshold";
+                  type empty;
+                }
+              }
+              leaf low {
+                tailf:info "Low threshold";
+                description
+                  "Set the low errored frame-seconds threshold in number of seconds";
+                type uint16 {
+                  range "1..900";
+                }
+              }
+            }
+            leaf window {
+              tailf:info "Window size of a polling period";
+              description
+                "Set window size in multiple of 100 milliseconds (will be rounded off to second)";
+              type uint16 {
+                range "100..9000";
+              }
+            }
+          }
+          container high-threshold {
+            tailf:info "Additional high threshold configuration";
+            description
+              "Additional high threshold configuration";
+            container action {
+              tailf:info "Specifiy an action when the high threshold is crossed";
+              description
+                "Specifiy an action when the high threshold is crossed";
+              leaf error-disable-interface {
+                tailf:info "Error-disable the interface";
+                description
+                  "Error-disable the interface";
+                type empty;
+              }
+            }
+          }
+          leaf on {
+            tailf:info "Enable link monitoring on the interface";
+            description
+              "Enable link monitoring on the interface";
+            type empty;
+          }
+          container receive-crc {
+            tailf:info "Received frames with CRC errors in a period";
+            description
+              "Received frames with CRC errors in a period";
+            container threshold {
+              tailf:info "Errored frame-seconds threshold";
+              description
+                "Errored frame-seconds threshold";
+              container high {
+                tailf:info "High Threshold";
+                description
+                  "High Threshold";
+                leaf crc-thresh {
+                  tailf:info "Set the high received crc error threshold in number of frames";
+                  description
+                    "Set the high received crc error threshold in number of frames";
+                  tailf:cli-drop-node-name;
+                  type uint16 {
+                    range "1..65535";
+                  }
+                }
+                leaf none {
+                  tailf:info "Disable high threshold";
+                  description
+                    "Disable high threshold";
+                  type empty;
+                }
+              }
+              leaf low {
+                tailf:info "Low threshold";
+                description
+                  "Set the low received crc error threshold in number of frames";
+                type uint16 {
+                  range "0..65535";
+                }
+              }
+            }
+            leaf window {
+              tailf:info "Window size of a polling period";
+              description
+                "Set window size in multiple of 100 milliseconds (will be rounded off to second)";
+              type uint16 {
+                range "10..1800";
+              }
+            }
+          }
+          leaf supported {
+            tailf:info "Support link monitoring on the interface";
+            description
+              "Support link monitoring on the interface";
+            type empty;
+          }
+          container symbol-period {
+            tailf:info "Errored symbols in a period";
+            description
+              "Errored symbols in a period";
+            container threshold {
+              tailf:info "Error symbol-period threshold";
+              description
+                "Error symbol-period threshold";
+              container high {
+                tailf:info "High Threshold";
+                description
+                  "High Threshold";
+                leaf err-thresh {
+                  tailf:info "Set the high error symbol-period threshold in number of symbols";
+                  description
+                    "Set the high error symbol-period threshold in number of symbols";
+                  tailf:cli-drop-node-name;
+                  type uint16 {
+                    range "1..65535";
+                  }
+                }
+                leaf none {
+                  tailf:info "Disable high threshold";
+                  description
+                    "Disable high threshold";
+                  type empty;
+                }
+              }
+              leaf low {
+                tailf:info "Low threshold";
+                description
+                  "Set the low error symbol-period threshold in number of symbols";
+                type uint16 {
+                  range "0..65535";
+                }
+              }
+            }
+            leaf window {
+              tailf:info "Window size of the polling period";
+              description
+                "Set window size in number of 1048576 symbols";
+              type uint16 {
+                range "1..65535";
+              }
+            }
+          }
+        }
+        leaf max-rate {
+          type uint8 {
+            tailf:info "Maximum number of OAM PDUs sent per second";
+            range "1..10";
+          }
+        }
+        leaf min-rate {
+          type uint8 {
+            tailf:info "Minimum transmission rate in seconds";
+            range "1..10";
+          }
+        }
+        leaf mode {
+          type enumeration {
+            enum "active" {
+              tailf:info "Active OAM client mode";
+            }
+            enum "passive" {
+              tailf:info "Passive OAM client mode";
+            }
+          }
+        }
+        container remote-failure {
+          tailf:info "Ethernet OAM remote failure indication";
+          description
+            "Ethernet OAM remote failure indication";
+          container critical-event {
+            tailf:info "Critical event";
+            description
+              "Critical event";
+            container action {
+              tailf:info "Specifiy an action when a remote failure is detected";
+              description
+                "Specifiy an action when a remote failure is detected";
+              leaf error-disable-interface {
+                tailf:info "Error-disable the interface";
+                description
+                  "Error-disable the interface";
+                type empty;
+              }
+            }
+          }
+          container dying-gasp {
+            tailf:info "Dying gasp";
+            description
+              "Dying gasp";
+            container action {
+              tailf:info "Specifiy an action when a remote failure is detected";
+              description
+                "Specifiy an action when a remote failure is detected";
+              presence "true";
+              leaf error-disable-interface {
+                tailf:info "Error-disable the interface";
+                description
+                  "Error-disable the interface";
+                type empty;
+              }
+            }
+          }
+          container link-fault {
+            tailf:info "Link fault";
+            description
+              "Link fault";
+            container action {
+              tailf:info "Specifiy an action when a remote failure is detected";
+              description
+                "Specifiy an action when a remote failure is detected";
+              presence "true";
+              leaf error-disable-interface {
+                tailf:info "Error-disable the interface";
+                description
+                  "Error-disable the interface";
+                type empty;
+              }
+            }
+          }
+        }
+        container remote-loopback {
+          tailf:info "Ethernet OAM Remote Loopback";
+          description
+            "Ethernet OAM Remote Loopback";
+          leaf supported {
+            tailf:info "Support remote loopback functionality";
+            description
+              "Support remote loopback functionality";
+            type empty;
+          }
+          leaf timeout {
+            tailf:info "Master loopback timeout setting";
+            description
+              "Set timeout value in number of seconds";
+            type uint8 {
+              range "1..10";
+            }
+          }
+        }
+        leaf timeout {
+          type uint8 {
+            tailf:info "OAM client timeout in seconds";
+            range "2..30";
+          }
+        }
+      }
+    }
+    container negotiation {
+      tailf:info "Select autonegotiation mode";
+      description
+        "Select autonegotiation mode";
+      leaf auto {
+        tailf:info "Enable link autonegotiation";
+        description
+          "Enable link autonegotiation";
+        tailf:cli-boolean-no;
+        tailf:cli-trim-default;
+        tailf:cli-full-command;
+        type boolean;
+      }
+    }
+    container synchronous {
+      tailf:info "Synchronous";
+      description
+        "Synchronous";
+      leaf mode {
+        tailf:info "Mode";
+        description
+          "Mode";
+        type empty;
+      }
+    }
+    leaf duplex {
+      tailf:info "Configure duplex operation.";
+      description
+        "Configure duplex operation.";
+      type enumeration {
+        enum "auto" {
+          tailf:code-name "duplex_auto";
+          tailf:info "Enable AUTO duplex configuration";
+        }
+        enum "full" {
+          tailf:code-name "duplex_full";
+          tailf:info "Force full duplex operation";
+        }
+        enum "half" {
+          tailf:code-name "duplex_half";
+          tailf:info "Force half-duplex operation";
+        }
+      }
+    }
+    container speed {
+      tailf:info "Configure speed operation.";
+      description
+        "Configure speed operation.";
+      tailf:cli-compact-syntax;
+      leaf auto {
+        tailf:info "Enable AUTO speed configuration";
+        description
+          "Enable AUTO speed configuration";
+        type empty;
+      }
+      leaf value-10 {
+        tailf:alt-name "10";
+        tailf:info "10 Mbps operation";
+        description
+          "10 Mbps operation";
+        type empty;
+      }
+      leaf value-100 {
+        tailf:alt-name "100";
+        tailf:info "100 Mbps operation";
+        description
+          "100 Mbps operation";
+        type empty;
+      }
+      leaf value-1000 {
+        tailf:alt-name "1000";
+        tailf:info "1000 Mbps operation";
+        description
+          "1000 Mbps operation";
+        type empty;
+      }
+      leaf nonegotiate {
+        type empty;
+      }
+    }
+    container xconnect {
+      tailf:info "Xconnect commands";
+      description
+        "Xconnect commands";
+      tailf:cli-sequence-commands;
+      tailf:cli-compact-syntax;
+      leaf address {
+        tailf:cli-drop-node-name;
+        tailf:cli-incomplete-command;
+        type inet:ipv4-address {
+          tailf:info "A.B.C.D;;IP address of peer";
+        }
+      }
+      leaf vcid {
+        tailf:cli-drop-node-name;
+        tailf:cli-incomplete-command;
+        type uint32 {
+          tailf:info "<1-4294967295>;;Enter VC ID value";
+          range "1..4294967295";
+        }
+      }
+      leaf encapsulation {
+        tailf:info "Data encapsulation method";
+        description
+          "Data encapsulation method";
+        tailf:cli-optional-in-sequence;
+        type enumeration {
+          enum "mpls" {
+            tailf:code-name "encap_mpls";
+            tailf:info "Use MPLS encapsulation";
+          }
+          enum "l2tpv3" {
+            tailf:info "Use L2TPv3 encapsulation";
+          }
+        }
+      }
+      leaf manual {
+        tailf:info "Manually configure L2TP session parameters";
+        description
+          "Manually configure L2TP session parameters";
+        tailf:cli-optional-in-sequence;
+        when "../encapsulation = 'l2tpv3'";
+        type empty;
+      }
+      leaf sequence {
+        tailf:info "Configure sequencing options for xconnect";
+        description
+          "Configure sequencing options for xconnect";
+        tailf:cli-full-command;
+        tailf:cli-optional-in-sequence;
+        when "../encapsulation = 'l2tpv3'";
+        type enumeration {
+          enum "both" {
+            tailf:info "Transmit and receive sequence numbers";
+          }
+          enum "receive" {
+            tailf:info "Receive sequence numbers";
+          }
+          enum "transmit" {
+            tailf:info "Transmit sequence numbers";
+          }
+        }
+      }
+      leaf pw-class {
+        tailf:info "Pseudowire-class to use for encapsulation and protocol configuration";
+        description
+          "Pseudowire-class to use for encapsulation and protocol configuration";
+        type string {
+          tailf:info "WORD;;Pseudowire-class name";
+        }
+      }
+    }
+    container plim {
+      tailf:info "Configure features on the PLIM";
+      description
+        "Configure features on the PLIM";
+      container ethernet {
+        tailf:info "Configure features on the ethernet interface";
+        description
+          "Configure features on the ethernet interface";
+        container vlan {
+          tailf:info "vlan specific features";
+          description
+            "vlan specific features";
+          container filter {
+            tailf:info "Configure VLAN filtering";
+            description
+              "Configure VLAN filtering";
+            leaf disable {
+              tailf:info "Configure the interface to accept all VLAN traffic";
+              description
+                "Configure the interface to accept all VLAN traffic";
+              type empty;
+            }
+          }
+        }
+      }
+      container qos {
+        tailf:info "QoS on the PLIM";
+        description
+          "QoS on the PLIM";
+        container input {
+          tailf:info "Configure PLIM QoS at the input of an interface";
+          description
+            "Configure PLIM QoS at the input of an interface";
+          container queue {
+            tailf:info "Queue number";
+            description
+              "Queue number";
+            choice priority {
+              case low {
+                container zero {
+                  tailf:alt-name "0";
+                  tailf:info "Low priority queue";
+                  description
+                    "Low priority queue";
+                  container pause {
+                    tailf:info "Pause Frame generation and threshold";
+                    description
+                      "Pause Frame generation and threshold";
+                    leaf enable {
+                      tailf:info "Enable pause-frame generation";
+                      description
+                        "Enable pause-frame generation";
+                      tailf:cli-boolean-no;
+                      tailf:cli-trim-default;
+                      tailf:cli-full-command;
+                      type boolean;
+                    }
+                    leaf threshold {
+                      tailf:info "Threshold as a percent of queue limit for pause frame generation";
+                      description
+                        "Threshold as a percent of queue limit for pause frame generation";
+                      type uint8 {
+                        tailf:info "<0-99>;;Percentage of queue limit";
+                        range "0..99";
+                      }
+                    }
+                  }
+                }
+              }
+              case high {
+                container strict-priority {
+                  tailf:info "High priority queue";
+                  description
+                    "High priority queue";
+                  container pause {
+                    tailf:info "Pause Frame generation and threshold";
+                    description
+                      "Pause Frame generation and threshold";
+                    leaf enable {
+                      tailf:info "Enable pause-frame generation";
+                      description
+                        "Enable pause-frame generation";
+                      tailf:cli-boolean-no;
+                      tailf:cli-trim-default;
+                      tailf:cli-full-command;
+                      type boolean;
+                    }
+                    leaf threshold {
+                      tailf:info "Threshold as a percent of queue limit for pause frame generation";
+                      description
+                        "Threshold as a percent of queue limit for pause frame generation";
+                      type uint8 {
+                        tailf:info "<0-99>;;Percentage of queue limit";
+                        range "0..99";
+                      }
+                    }
+                  }
+                }
+              }
+            }
+          }
+        }
+      }
+    }
+    container pppoe {
+      tailf:info "pppoe interface subcommands";
+      description
+        "pppoe interface subcommands";
+      container enable {
+        tailf:info "Enable pppoe";
+        description
+          "Enable pppoe";
+        presence "true";
+        leaf group {
+          tailf:info "attach a BBA group";
+          description
+            "attach a BBA group";
+          type union {
+            type string {
+              tailf:info "WORD;;BBA Group name";
+            }
+            type enumeration {
+              enum "global" {
+                tailf:info "Attach global PPPoE group";
+              }
+            }
+          }
+        }
+      }
+      leaf max-sessions {
+        tailf:info "Maximum PPPOE sessions";
+        description
+          "Maximum PPPOE sessions";
+        type uint16 {
+          tailf:info "<1-4085>;;Maximum PPPOE sessions";
+          range "1..4085";
+        }
+      }
+    }
+    container service {
+      tailf:info "Configure Ether Service";
+      description
+        "Configure Ether Service";
+      list instance {
+        tailf:info "Configure Ether Service Instance";
+        description
+          "Configure Ether Service Instance";
+        tailf:cli-mode-name "config-if-srv";
+        tailf:cli-incomplete-command;
+        tailf:cli-sequence-commands;
+        key "id";
+        leaf id {
+          type uint32 {
+            tailf:info "<1-4000>;;Service Instance Identifier";
+            range "1..4000";
+          }
+        }
+        leaf trunk {
+          tailf:info "Trunk Service Instance";
+          description
+            "Trunk Service Instance";
+          tailf:cli-optional-in-sequence;
+          tailf:cli-prefix-key;
+          type empty;
+        }
+        leaf GigabitEthernet {
+          tailf:info "Configure an GigabitEthernet Instance";
+          description
+            "Configure an GigabitEthernet Instance";
+          tailf:cli-optional-in-sequence;
+          tailf:cli-hide-in-submode;
+          type empty;
+        }
+        leaf ethernet {
+          tailf:info "Configure an Ethernet Instance";
+          description
+            "Configure an Ethernet Instance";
+          tailf:cli-hide-in-submode;
+          type empty;
+        }
+        leaf ethernet-evc-name {
+          tailf:cli-drop-node-name;
+          tailf:cli-hide-in-submode;
+          type string {
+            tailf:info "WORD;;Attach an EVC to the service instance";
+          }
+        }
+        leaf description {
+          tailf:cli-break-sequence-commands;
+          tailf:info "Service instance specific description";
+          description
+            "Service instance specific description";
+          tailf:cli-multi-value;
+          tailf:cli-full-command;
+          type string {
+            tailf:info "LINE;;Up to 240 characters describing this service instance";
+            length "0..240";
+          }
+        }
+        leaf evc-name {
+          tailf:cli-drop-node-name;
+          tailf:cli-hide-in-submode;
+          type string {
+            tailf:info "WORD;;Attach an EVC to the service instance";
+            length "1..100";
+          }
+        }
+        container encapsulation {
+          tailf:info "Configure ethernet frame match criteria";
+          description
+            "Configure ethernet frame match criteria";
+          leaf default {
+            tailf:info "catch-all unconfigured encapsulation";
+            description
+              "catch-all unconfigured encapsulation";
+            tailf:cli-full-command;
+            type empty;
+          }
+          container dot1ad {
+            tailf:info "802.1ad - Provider Bridges";
+            description
+              "802.1ad - Provider Bridges";
+            tailf:cli-sequence-commands;
+            tailf:cli-compact-syntax;
+            leaf-list id {
+              tailf:cli-drop-node-name;
+              tailf:cli-range-list-syntax;
+              type union {
+                type uint16 {
+                  tailf:info "<1-4094>;;VLAN id";
+                  range "1..4094";
+                }
+                type enumeration {
+                  enum "any" {
+                    tailf:info "For all VLANS [1-4094]";
+                  }
+                }
+                type string;
+              }
+            }
+            leaf-list cos {
+              tailf:info "CoS value to use for CFM packets";
+              description
+                "CoS value to use for CFM packets";
+              tailf:cli-break-sequence-commands;
+              tailf:cli-range-list-syntax;
+              type uint8 {
+                tailf:info "<0-7>;;CoS value";
+                range "0..7";
+              }
+            }
+            leaf-list dot1q {
+              tailf:info "Second tag (dot1q)";
+              description
+                "Second tag (dot1q)";
+              tailf:cli-range-list-syntax;
+              type union {
+                type uint16 {
+                  tailf:info "<1-4094>;;VLAN id";
+                  range "1..4094";
+                }
+                type enumeration {
+                  enum "any" {
+                    tailf:info "For all VLANS [1-4094]";
+                  }
+                }
+                type string;
+              }
+            }
+            container cos2 {
+              tailf:cli-drop-node-name;
+              tailf:cli-flatten-container;
+              leaf-list cos {
+                tailf:info "CoS value to use for CFM packets";
+                description
+                  "CoS value to use for CFM packets";
+                tailf:cli-range-list-syntax;
+                type uint8 {
+                  tailf:info "<0-7>;;CoS value";
+                  range "0..7";
+                }
+              }
+            }
+            leaf-list etype {
+              tailf:info "payload ethertype after Vlan Field";
+              description
+                "payload ethertype after Vlan Field";
+              tailf:cli-range-list-syntax;
+              type enumeration {
+                enum "ipv4" {
+                  tailf:info "IPv4";
+                }
+                enum "ipv6" {
+                  tailf:info "IPv6";
+                }
+                enum "pppoe-all" {
+                  tailf:info "PPPoE ALL";
+                }
+                enum "pppoe-discovery" {
+                  tailf:info "PPPoE Discovery Stage";
+                }
+                enum "pppoe-session" {
+                  tailf:info "PPPoE Session Stage";
+                }
+              }
+            }
+            leaf exact {
+              tailf:info "payload Ethertype does not include 802.1q/802.1ad Tags.";
+              description
+                "payload Ethertype does not include 802.1q/802.1ad Tags.";
+              tailf:cli-full-command;
+              type empty;
+            }
+          }
+          container dot1q {
+            tailf:info "IEEE 802.1Q Virtual LAN or S-VLAN";
+            description
+              "IEEE 802.1Q Virtual LAN or S-VLAN";
+            tailf:cli-compact-syntax;
+            tailf:cli-sequence-commands {
+              tailf:cli-reset-siblings;
+            }
+            leaf-list id {
+              tailf:cli-drop-node-name;
+              tailf:cli-range-list-syntax;
+              type union {
+                type uint16 {
+                  tailf:info "<1-4094>;;VLAN id";
+                  range "1..4094";
+                }
+                type enumeration {
+                  enum "any" {
+                    tailf:info "For all VLANS [1-4094]";
+                  }
+                }
+                type string;
+              }
+            }
+            leaf-list cos {
+              tailf:info "cos Vlan";
+              description
+                "cos Vlan";
+              tailf:cli-range-list-syntax;
+              tailf:cli-break-sequence-commands;
+              type uint8 {
+                tailf:info "<0-7>;;cos values";
+                range "0..7";
+              }
+            }
+            leaf-list second-dot1q {
+              tailf:info "inner 802.1Q Virtual LAN or C-VLAN";
+              description
+                "inner 802.1Q Virtual LAN or C-VLAN";
+              tailf:cli-range-list-syntax;
+              type union {
+                type uint16 {
+                  tailf:info "<1-4094>;;VLAN id";
+                  range "1..4094";
+                }
+                type enumeration {
+                  enum "any" {
+                    tailf:info "For all VLANS [1-4094]";
+                  }
+                }
+                type string;
+              }
+            }
+            container cos2 {
+              tailf:cli-drop-node-name;
+              tailf:cli-flatten-container;
+              leaf-list cos {
+                tailf:info "cos Vlan";
+                description
+                  "cos Vlan";
+                tailf:cli-range-list-syntax;
+                type uint8 {
+                  tailf:info "<0-7>;;cos values";
+                  range "0..7";
+                }
+              }
+            }
+            leaf-list etype {
+              tailf:info "payload ethertype after Vlan Field";
+              description
+                "payload ethertype after Vlan Field";
+              tailf:cli-range-list-syntax;
+              type enumeration {
+                enum "ipv4" {
+                  tailf:info "IPv4";
+                }
+                enum "ipv6" {
+                  tailf:info "IPv6";
+                }
+                enum "pppoe-all" {
+                  tailf:info "PPPoE ALL";
+                }
+                enum "pppoe-discovery" {
+                  tailf:info "PPPoE Discovery Stage";
+                }
+                enum "pppoe-session" {
+                  tailf:info "PPPoE Session Stage";
+                }
+              }
+            }
+            leaf exact {
+              tailf:info "payload Ethertype does not include 802.1q/802.1ad Tags.";
+              description
+                "payload Ethertype does not include 802.1q/802.1ad Tags.";
+              tailf:cli-full-command;
+              type empty;
+            }
+            leaf vlan-type {
+              tailf:info "Vlan Protocol Type";
+              description
+                "Vlan Protocol Type";
+              type enumeration {
+                enum "0x88A8" {
+                  tailf:info "vlan protocol type 0x88A8";
+                }
+                enum "0x9100" {
+                  tailf:info "vlan protocol type 0x9100";
+                }
+                enum "0x9200" {
+                  tailf:info "vlan protocol type 0x9200";
+                }
+              }
+            }
+          }
+          container priority-tagged {
+            tailf:info "Priority tagged EFP";
+            description
+              "Priority tagged EFP";
+            container cos-container {
+              tailf:cli-drop-node-name;
+              tailf:cli-compact-syntax;
+              tailf:cli-sequence-commands;
+              leaf-list cos {
+                tailf:info "cos Vlan";
+                description
+                  "cos Vlan";
+                tailf:cli-range-list-syntax;
+                type uint8 {
+                  tailf:info "<0-7>;;cos values";
+                  range "0..7";
+                }
+              }
+            }
+            leaf-list etype {
+              tailf:info "payload ethertype after Vlan Field";
+              description
+                "payload ethertype after Vlan Field";
+              tailf:cli-range-list-syntax;
+              type enumeration {
+                enum "ipv4" {
+                  tailf:info "IPv4";
+                }
+                enum "ipv6" {
+                  tailf:info "IPv6";
+                }
+                enum "pppoe-all" {
+                  tailf:info "PPPoE ALL";
+                }
+                enum "pppoe-discovery" {
+                  tailf:info "PPPoE Discovery Stage";
+                }
+                enum "pppoe-session" {
+                  tailf:info "PPPoE Session Stage";
+                }
+              }
+            }
+          }
+          container untagged {
+            tailf:info "Untagged encapsulation";
+            description
+              "Untagged encapsulation";
+            presence "true";
+          }
+        }
+        container ip {
+          tailf:info "Interface Internet Protocol config commands";
+          description
+            "Interface Internet Protocol config commands";
+          container acl {
+            tailf:cli-drop-node-name;
+            tailf:cli-compact-syntax;
+            tailf:cli-sequence-commands;
+            leaf access-group {
+              tailf:info "Specify access control for packets";
+              description
+                "Specify access control for packets";
+              type exp-acl-type;
+            }
+            leaf in {
+              tailf:info "inbound packets";
+              description
+                "inbound packets";
+              tailf:cli-break-sequence-commands;
+              type empty;
+            }
+            leaf out {
+              tailf:info "outbound packets";
+              description
+                "outbound packets";
+              type empty;
+            }
+          }
+          container dhcp {
+            tailf:info "DHCP";
+            description
+              "DHCP";
+            container relay {
+              tailf:info "DHCP relay";
+              description
+                "DHCP relay";
+              container information {
+                tailf:info "DHCP relay information";
+                description
+                  "DHCP relay information";
+                container option {
+                  tailf:info "DHCP relay information option";
+                  description
+                    "DHCP relay information option";
+                  leaf subscriber-id {
+                    tailf:info "DHCP relay information option subscriber-id";
+                    description
+                      "DHCP relay information option subscriber-id";
+                    type string {
+                      tailf:info "WORD;;subscriber-id string";
+                    }
+                  }
+                }
+              }
+            }
+          }
+          container verify {
+            tailf:info "verify";
+            description
+              "verify";
+            tailf:cli-compact-syntax;
+            tailf:cli-sequence-commands;
+            leaf source {
+              tailf:info "source address";
+              description
+                "source address";
+              type empty;
+            }
+            leaf vlan {
+              tailf:info "vlan specification";
+              description
+                "vlan specification";
+              type empty;
+            }
+            leaf dhcp-snooping {
+              tailf:info "snooping enable vlan";
+              description
+                "snooping enable vlan";
+              type empty;
+            }
+            leaf port-security {
+              tailf:info "port security";
+              description
+                "port security";
+              tailf:cli-optional-in-sequence;
+              type empty;
+            }
+          }
+        }
+        container ipv6 {
+          tailf:info "IPv6 interface subcommands";
+          description
+            "IPv6 interface subcommands";
+          tailf:cli-compact-syntax;
+          tailf:cli-sequence-commands;
+          leaf traffic-filter {
+            tailf:info "Access control list for packets";
+            description
+              "Access control list for packets";
+            type string {
+              tailf:info "WORD;;ACL name";
+            }
+          }
+          leaf in {
+            tailf:info "inbound packets";
+            description
+              "inbound packets";
+            tailf:cli-break-sequence-commands;
+            type empty;
+          }
+          leaf out {
+            tailf:info "outbound packets";
+            description
+              "outbound packets";
+            type empty;
+          }
+        }
+        container rewrite {
+          tailf:info "Configure ethernet rewrite criteria";
+          description
+            "Configure ethernet rewrite criteria";
+          container ingress {
+            tailf:info "Ingress Rewrite";
+            description
+              "Ingress Rewrite";
+            container tag {
+              tailf:info "Configure Rewrite Tag";
+              description
+                "Configure Rewrite Tag";
+              container pop {
+                tailf:info "Pop the tag";
+                description
+                  "Pop the tag";
+                tailf:cli-compact-syntax;
+                tailf:cli-sequence-commands;
+                leaf way {
+                  tailf:cli-drop-node-name;
+                  type enumeration {
+                    enum "1" {
+                      tailf:info "Pop the outermost tag";
+                    }
+                    enum "2" {
+                      tailf:info "Pop two outermost tags";
+                    }
+                  }
+                }
+                leaf mode {
+                  tailf:cli-drop-node-name;
+                  type enumeration {
+                    enum "symmetric" {
+                      tailf:info "Tag egress packets as specified in encapsulation";
+                    }
+                  }
+                }
+              }
+              container push {
+                tailf:info "Rewrite Operation of push";
+                description
+                  "Rewrite Operation of push";
+                tailf:cli-compact-syntax;
+                tailf:cli-sequence-commands;
+                leaf dot1q {
+                  tailf:info "Push dot1q tag";
+                  description
+                    "Push dot1q tag";
+                  type uint16 {
+                    tailf:info "<1-4094>;;VLAN id";
+                    range "1..4094";
+                  }
+                }
+                leaf mode {
+                  tailf:cli-drop-node-name;
+                  type enumeration {
+                    enum "symmetric" {
+                      tailf:info "Tag egress packets as specified in encapsulation";
+                    }
+                  }
+                }
+              }
+              container translate {
+                tailf:info "Translate Tag";
+                description
+                  "Translate Tag";
+                container t1-to-1 {
+                  tailf:info "Translate 1-to-1";
+                  description
+                    "Translate 1-to-1";
+                  tailf:alt-name "1-to-1";
+                  tailf:cli-compact-syntax;
+                  tailf:cli-sequence-commands;
+                  leaf dot1q {
+                    tailf:info "Ethertype dot1q of the translation";
+                    description
+                      "Ethertype dot1q of the translation";
+                    type uint16 {
+                      tailf:info "<1-4094>;;VLAN id";
+                      range "1..4094";
+                    }
+                  }
+                  leaf mode {
+                    tailf:cli-drop-node-name;
+                    type enumeration {
+                      enum "symmetric" {
+                        tailf:info "Tag egress packets as specified in encapsulation";
+                      }
+                    }
+                  }
+                }
+                container t1-to-2 {
+                  tailf:info "Translate 1-to-2";
+                  description
+                    "Translate 1-to-2";
+                  tailf:alt-name "1-to-2";
+                  tailf:cli-compact-syntax;
+                  tailf:cli-sequence-commands;
+                  leaf dot1q {
+                    tailf:info "Translate ethertype of dot1q";
+                    description
+                      "Translate ethertype of dot1q";
+                    type uint16 {
+                      tailf:info "<1-4094>;;VLAN id";
+                      range "1..4094";
+                    }
+                  }
+                  leaf second-dot1q {
+                    tailf:info "Second dot1q tag";
+                    description
+                      "Second dot1q tag";
+                    type uint16 {
+                      tailf:info "<1-4094>;;VLAN id";
+                      range "1..4094";
+                    }
+                  }
+                  leaf mode {
+                    tailf:cli-drop-node-name;
+                    type enumeration {
+                      enum "symmetric" {
+                        tailf:info "Tag egress packets as specified in encapsulation";
+                      }
+                    }
+                  }
+                }
+                container t2-to-1 {
+                  tailf:info "Translate 2-to-1";
+                  description
+                    "Translate 2-to-1";
+                  tailf:alt-name "2-to-1";
+                  tailf:cli-compact-syntax;
+                  tailf:cli-sequence-commands;
+                  leaf dot1q {
+                    tailf:info "Ethertype dot1q of the translation";
+                    description
+                      "Ethertype dot1q of the translation";
+                    type uint16 {
+                      tailf:info "<1-4094>;;VLAN id";
+                      range "1..4094";
+                    }
+                  }
+                  leaf mode {
+                    tailf:cli-drop-node-name;
+                    type enumeration {
+                      enum "symmetric" {
+                        tailf:info "Tag egress packets as specified in encapsulation";
+                      }
+                    }
+                  }
+                }
+                container t2-to-2 {
+                  tailf:info "Translate 2-to-2";
+                  description
+                    "Translate 2-to-2";
+                  tailf:alt-name "2-to-2";
+                  tailf:cli-compact-syntax;
+                  tailf:cli-sequence-commands;
+                  leaf dot1q {
+                    tailf:info "Translate ethertype of dot1q";
+                    description
+                      "Translate ethertype of dot1q";
+                    type uint16 {
+                      tailf:info "<1-4094>;;VLAN id";
+                      range "1..4094";
+                    }
+                  }
+                  leaf second-dot1q {
+                    tailf:info "Second dot1q tag";
+                    description
+                      "Second dot1q tag";
+                    type uint16 {
+                      tailf:info "<1-4094>;;VLAN id";
+                      range "1..4094";
+                    }
+                  }
+                  leaf mode {
+                    tailf:cli-drop-node-name;
+                    type enumeration {
+                      enum "symmetric" {
+                        tailf:info "Tag egress packets as specified in encapsulation";
+                      }
+                    }
+                  }
+                }
+              }
+            }
+          }
+        }
+        leaf group {
+          tailf:cli-full-command;
+          type uint32;
+        }
+        container errdisable {
+          tailf:info "Configure error disable";
+          description
+            "Configure error disable";
+          container recovery {
+            tailf:info "enable auto recovery";
+            description
+              "enable auto recovery";
+            container cause {
+              tailf:info "error disable cause";
+              description
+                "error disable cause";
+              leaf mac-security {
+                tailf:info "mac-security violation";
+                description
+                  "mac-security violation";
+                type uint32 {
+                  tailf:info "<30-86400>;;timer interval(sec)";
+                  range "30..86400";
+                }
+              }
+            }
+          }
+        }
+        container ethernet-container {
+          tailf:cli-drop-node-name;
+          container ethernet {
+            tailf:info "ethernet";
+            description
+              "ethernet";
+            container lmi {
+              tailf:info "Configure ether lmi parameters";
+              description
+                "Configure ether lmi parameters";
+              container ce-vlan {
+                tailf:info "Configure ether lmi customer vlans";
+                description
+                  "Configure ether lmi customer vlans";
+                container map {
+                  tailf:info "Configure ether lmi ce-vlan/evc map";
+                  description
+                    "Configure ether lmi ce-vlan/evc map";
+                  container vlan-range {
+                    tailf:cli-drop-node-name;
+                    tailf:cli-sequence-commands;
+                    tailf:cli-compact-syntax;
+                    leaf vlan-id {
+                      tailf:cli-drop-node-name;
+                      type uint16 {
+                        tailf:info "<1-4094>;;VLAN id";
+                        range "1..4094";
+                      }
+                    }
+                    leaf comma {
+                      tailf:info "comma";
+                      description
+                        "comma";
+                      tailf:alt-name ",";
+                      tailf:cli-break-sequence-commands;
+                      type uint16 {
+                        tailf:info "<1-4094>;;VLAN id";
+                        range "1..4094";
+                      }
+                    }
+                    leaf hyphen {
+                      tailf:info "hyphen";
+                      description
+                        "hyphen";
+                      tailf:alt-name "-";
+                      type uint16 {
+                        tailf:info "<1-4094>;;VLAN id";
+                        range "1..4094";
+                      }
+                    }
+                  }
+                  leaf any {
+                    tailf:info "For all VLANS [untagged,1-4094]";
+                    description
+                      "For all VLANS [untagged,1-4094]";
+                    type empty;
+                  }
+                  leaf default {
+                    tailf:info "Default EFP";
+                    description
+                      "Default EFP";
+                    type empty;
+                  }
+                  leaf untagged {
+                    tailf:info "Untagged frames";
+                    description
+                      "Untagged frames";
+                    type empty;
+                  }
+                }
+              }
+            }
+            container loopback {
+              tailf:info "Ethernet Dataplane Loopback";
+              description
+                "Ethernet Dataplane Loopback";
+              container permit {
+                tailf:info "Allow data plane loopback to be activated";
+                description
+                  "Allow data plane loopback to be activated";
+                leaf external {
+                  tailf:info "Allow to loopback the traffic from the wire";
+                  description
+                    "Allow to loopback the traffic from the wire";
+                  type empty;
+                }
+                leaf internal {
+                  tailf:info "Allow to loopback the traffic from the relay";
+                  description
+                    "Allow to loopback the traffic from the relay";
+                  type empty;
+                }
+              }
+            }
+          }
+        }
+        container snmp {
+          tailf:info "Modify SNMP service instance parameters";
+          description
+            "Modify SNMP service instance parameters";
+          container trap {
+            tailf:info "Allow a specific SNMP trap";
+            description
+              "Allow a specific SNMP trap";
+            leaf link-status {
+              tailf:info "Allow SNMP LINKUP and LINKDOWN traps";
+              description
+                "Allow SNMP LINKUP and LINKDOWN traps";
+              type empty;
+            }
+          }
+          container ifindex {
+            tailf:info "Persist ifindex for the service instance";
+            description
+              "Persist ifindex for the service instance";
+            leaf persist {
+              tailf:info "Enable/Disable ifIndex persistence";
+              description
+                "Enable/Disable ifIndex persistence";
+              type empty;
+            }
+          }
+        }
+        container bridge-domain {
+          tailf:info "Bridge-domain";
+          description
+            "Bridge-domain";
+          tailf:cli-compact-syntax;
+          tailf:cli-sequence-commands {
+            tailf:cli-reset-all-siblings;
+          }
+          leaf bridge-id {
+            tailf:cli-drop-node-name;
+            type uint16 {
+              tailf:info "<1-16384>;;Bridge-domain number";
+            }
+          }
+          container split-horizon {
+            tailf:info "Configure this port as a member of a split horizon group";
+            description
+              "Configure this port as a member of a split horizon group";
+            tailf:cli-optional-in-sequence;
+            leaf group {
+              tailf:info "Split-horizon group";
+              description
+                "Split-horizon group";
+              type uint8 {
+                tailf:info "<0-13>;;Split-horizon group number";
+                range "0..13";
+              }
+            }
+          }
+          leaf from-encapsulation {
+            tailf:info "from-encapsulation";
+            description
+              "from-encapsulation";
+            type empty;
+          }
+        }
+        container mac {
+          tailf:info "Commands for MAC Address-based features";
+          description
+            "Commands for MAC Address-based features";
+          container security {
+            tailf:info "MAC Security commands";
+            description
+              "MAC Security commands";
+            tailf:cli-display-separated;
+            tailf:cli-delete-when-empty;
+            presence "true";
+            container maximum {
+              tailf:info "Configure an upper bound";
+              description
+                "Configure an upper bound";
+              leaf addresses {
+                tailf:info "Maximum addresses that can be learnt on this service instance";
+                description
+                  "Maximum addresses that can be learnt on this service instance";
+                type uint16 {
+                  tailf:info "<1-1000>;;Address count";
+                  range "1..1000";
+                }
+              }
+            }
+            leaf violation {
+              tailf:info "Configure the response when a MAC security policy is violated";
+              description
+                "Configure the response when a MAC security policy is violated";
+              tailf:cli-full-command;
+              type enumeration {
+                enum "protect" {
+                  tailf:info "Protect mode - don't report violations, drop violating frames";
+                }
+                enum "restrict" {
+                  tailf:info "Restrict mode - report violations, drop violating frames";
+                }
+              }
+            }
+          }
+        }
+        container service-policy {
+          tailf:info "Attach a policy-map to an EFP";
+          description
+            "Attach a policy-map to an EFP";
+          list input {
+            tailf:info "service policy input";
+            description
+              "service policy input";
+            tailf:cli-suppress-mode;
+            tailf:cli-delete-when-empty;
+            key "name";
+            leaf name {
+              type string {
+                tailf:info "WORD;;input Policy-map name";
+              }
+              tailf:non-strict-leafref {
+                path "/ios:native/policy-map/name";
+              }
+            }
+          }
+          list output {
+            tailf:info "service policy output";
+            description
+              "service policy output";
+            tailf:cli-suppress-mode;
+            tailf:cli-delete-when-empty;
+            key "name";
+            leaf name {
+              type string {
+                tailf:info "WORD;;output Policy-map name";
+              }
+              tailf:non-strict-leafref {
+                path "/ios:native/policy-map/name";
+              }
+            }
+          }
+        }
+        leaf shutdown {
+          tailf:info "Take the Service Instance out of Service";
+          description
+            "Take the Service Instance out of Service";
+          tailf:cli-full-command;
+          type empty;
+        }
+        uses interface-xconnect-grouping;
+        container cfm {
+          tailf:info "Ethernet CFM EFP subcommands";
+          description
+            "Ethernet CFM EFP subcommands";
+          container encapsulation {
+            tailf:info "Configure CFM ethernet frame encapsulation";
+            description
+              "Configure CFM ethernet frame encapsulation";
+            container dot1ad {
+              tailf:info "802.1ad - Provider Bridges";
+              description
+                "802.1ad - Provider Bridges";
+              tailf:cli-sequence-commands;
+              tailf:cli-compact-syntax;
+              leaf vlan-id {
+                tailf:cli-drop-node-name;
+                type uint16 {
+                  tailf:info "<1-4094>;;VLAN id";
+                  range "1..4094";
+                }
+              }
+              leaf cos {
+                tailf:info "CoS value to use for CFM packets";
+                description
+                  "CoS value to use for CFM packets";
+                tailf:cli-break-sequence-commands;
+                type uint8 {
+                  tailf:info "<0-7>;;CoS value";
+                  range "0..7";
+                }
+              }
+              leaf dot1q {
+                tailf:info "Second tag (dot1q)";
+                description
+                  "Second tag (dot1q)";
+                type uint16 {
+                  tailf:info "<1-4094>;;VLAN id";
+                  range "1..4094";
+                }
+              }
+            }
+            container dot1q {
+              tailf:info "IEEE 802.1Q Virtual LAN or S-VLAN";
+              description
+                "IEEE 802.1Q Virtual LAN or S-VLAN";
+              tailf:cli-sequence-commands;
+              tailf:cli-compact-syntax;
+              leaf vlan-id {
+                tailf:cli-drop-node-name;
+                type uint16 {
+                  tailf:info "<1-4094>;;VLAN id";
+                  range "1..4094";
+                }
+              }
+              leaf cos {
+                tailf:info "CoS value to use for CFM packets";
+                description
+                  "CoS value to use for CFM packets";
+                tailf:cli-break-sequence-commands;
+                type uint8 {
+                  tailf:info "<0-7>;;CoS value";
+                  range "0..7";
+                }
+              }
+              leaf second-dot1q {
+                tailf:info "inner 802.1Q Virtual LAN or C-VLAN";
+                description
+                  "inner 802.1Q Virtual LAN or C-VLAN";
+                type uint16 {
+                  tailf:info "<1-4094>;;VLAN id";
+                  range "1..4094";
+                }
+              }
+            }
+          }
+          container mep {
+            tailf:info "Maintenance End Point";
+            description
+              "Maintenance End Point";
+            tailf:cli-sequence-commands;
+            tailf:cli-compact-syntax;
+            leaf domain {
+              tailf:info "Configure a domain for this mep";
+              description
+                "Configure a domain for this mep";
+              type string {
+                tailf:info "WORD;;maintenance domain name";
+              }
+            }
+            leaf mpid {
+              tailf:info "Maintenance End Point Identifier";
+              description
+                "Maintenance End Point Identifier";
+              type uint16 {
+                tailf:info "<1-8191>;;Maintenance End Point Identifier";
+                range "1..8191";
+              }
+            }
+          }
+          container mip {
+            tailf:info "Maintenance Intermediate Point";
+            description
+              "Maintenance Intermediate Point";
+            leaf level {
+              tailf:info "Maintenance Level";
+              description
+                "Maintenance Level";
+              type uint8 {
+                tailf:info "<0-7>;;maintenance level number";
+              }
+            }
+          }
+        }
+        container l2protocol {
+          tailf:info "Configure l2 control protocol processing";
+          description
+            "Configure l2 control protocol processing";
+          container peer {
+            tailf:info "peer L2 control protocol packets as data";
+            description
+              "peer L2 control protocol packets as data";
+            presence "true";
+            uses interface-ethernet-service-instance-l2protocol-grouping;
+          }
+          container forward {
+            tailf:info "forward L2 control protocol packets as data";
+            description
+              "forward L2 control protocol packets as data";
+            presence "true";
+            uses interface-ethernet-service-instance-l2protocol-grouping;
+          }
+          container tunnel {
+            tailf:info "tunnel L2 control protocol packets as data";
+            description
+              "tunnel L2 control protocol packets as data";
+            presence "true";
+            uses interface-ethernet-service-instance-l2protocol-grouping;
+          }
+        }
+      }
+    }
+  }
+
+  grouping interface-zone-member-grouping {
+    container zone-member {
+      tailf:info "Apply zone name";
+      description
+        "Apply zone name";
+      leaf security {
+        tailf:info "Security zone";
+        description
+          "Security zone";
+        type string;
+        tailf:non-strict-leafref {
+          path "/ios:native/zone/security/id";
+        }
+      }
+    }
+  }
+
+  grouping interface-cellular-grouping {
+    container dialer {
+      leaf in-band {
+        type empty;
+      }
+      leaf idle-timeout {
+        type uint32;
+      }
+      leaf string {
+        type string;
+      }
+      leaf watch-group {
+        type uint32;
+      }
+    }
+    container async {
+      leaf mode {
+        type enumeration {
+          enum "interactive";
+        }
+      }
+    }
+  }
+
+  grouping interface-pointtopoint-grouping {
+    container ppp {
+      tailf:info "Point-to-Point Protocol";
+      description
+        "Point-to-Point Protocol";
+      leaf accounting {
+        tailf:info "Set PPP network accounting method";
+        description
+          "Set PPP network accounting method";
+        type union {
+          type string {
+            tailf:info "WORD;;Named accounting list.";
+          }
+          type enumeration {
+            enum "default" {
+              tailf:info "The default accounting list.";
+            }
+          }
+        }
+      }
+      container chap {
+        tailf:info "Set CHAP authentication parameters";
+        description
+          "Set CHAP authentication parameters";
+        leaf hostname {
+          tailf:info "Set alternate CHAP hostname";
+          description
+            "Set alternate CHAP hostname";
+          type string {
+            tailf:info "WORD;;Alternate CHAP hostname";
+          }
+        }
+        leaf challenge-length {
+          tailf:info "Challenge Length for CHAP";
+          description
+            "Challenge Length for CHAP";
+          type uint8 {
+            tailf:info "<16-63>  Minimum length for CHAP challenge";
+            range "16..63";
+          }
+        }
+      }
+      container authentication {
+        tailf:info "Set PPP link authentication method";
+        description
+          "Set PPP link authentication method";
+        tailf:cli-compact-syntax;
+        tailf:cli-sequence-commands;
+        leaf method {
+          tailf:cli-drop-node-name;
+          type enumeration {
+            enum "chap" {
+              tailf:info "Challenge Handshake Authentication Protocol (CHAP)";
+            }
+            enum "eap" {
+              tailf:info "Extensible Authentication Protocol (EAP)";
+            }
+            enum "ms-chap" {
+              tailf:info "Microsoft Challenge Handshake Authentication Protocol (MS-CHAP)";
+            }
+            enum "ms-chap-v2" {
+              tailf:info "Microsoft CHAP Version 2 (MS-CHAP-V2)";
+            }
+            enum "pap" {
+              tailf:info "Password Authentication Protocol (PAP)";
+            }
+          }
+        }
+        leaf list-name {
+          tailf:cli-break-sequence-commands;
+          tailf:cli-drop-node-name;
+          type string {
+            tailf:info "WORD;;Use an authentication list with this name";
+          }
+          tailf:cli-disallow-value "(callback)|(callin)|(callout)|(default)|(eap)|(ms-chap)|(ms-chap-v2)|(one-time)|(optional)|(pap)";
+        }
+        leaf chap {
+          when "not(../method = 'chap')" {
+            tailf:dependency "../method";
+          }
+          tailf:info "Challenge Handshake Authentication Protocol (CHAP)";
+          type empty;
+        }
+        leaf callback {
+          tailf:info "Authenticate remote on callback only";
+          description
+            "Authenticate remote on callback only";
+          type empty;
+        }
+        leaf callin {
+          tailf:info "Authenticate remote on incoming call only";
+          description
+            "Authenticate remote on incoming call only";
+          type empty;
+        }
+        leaf callout {
+          tailf:info "Authenticate remote on outgoing call only";
+          description
+            "Authenticate remote on outgoing call only";
+          type empty;
+        }
+        leaf default {
+          tailf:info "Use the default authentication list";
+          description
+            "Use the default authentication list";
+          type empty;
+        }
+        leaf eap {
+          when "not(../method = 'eap')" {
+            tailf:dependency "../method";
+          }
+          tailf:info "Extensible Authentication Protocol (EAP)";
+          description
+            "Extensible Authentication Protocol (EAP)";
+          type empty;
+        }
+        leaf ms-chap {
+          when "not(../method = 'ms-chap')" {
+            tailf:dependency "../method";
+          }
+          tailf:info "Microsoft Challenge Handshake Authentication Protocol (MS-CHAP)";
+          description
+            "Microsoft Challenge Handshake Authentication Protocol (MS-CHAP)";
+          type empty;
+        }
+        leaf ms-chap-v2 {
+          when "not(../method = 'ms-chap-v2')" {
+            tailf:dependency "../method";
+          }
+          tailf:info "Microsoft CHAP Version 2 (MS-CHAP-V2)";
+          description
+            "Microsoft CHAP Version 2 (MS-CHAP-V2)";
+          type empty;
+        }
+        leaf one-time {
+          tailf:info "Allow use of username*OTP for one-time passwords";
+          description
+            "Allow use of username*OTP for one-time passwords";
+          type empty;
+        }
+        leaf optional {
+          tailf:info "Allow peer to refuse to authenticate";
+          description
+            "Allow peer to refuse to authenticate";
+          type empty;
+        }
+        leaf pap {
+          when "not(../method = 'pap')" {
+            tailf:dependency "../method";
+          }
+          tailf:info "Password Authentication Protocol (PAP)";
+          description
+            "Password Authentication Protocol (PAP)";
+          type empty;
+        }
+      }
+      leaf authorization {
+        tailf:info "Set PPP network authorization method";
+        description
+          "Set PPP network authorization method";
+        type union {
+          type string {
+            tailf:info "WORD;;Named authorization list.";
+          }
+          type enumeration {
+            enum "default" {
+              tailf:info "The default authorization list.";
+            }
+          }
+        }
+      }
+      container ipcp {
+        tailf:info "Set IPCP negotiation options";
+        description
+          "Set IPCP negotiation options";
+        container dns {
+          tailf:info "Specify DNS negotiation options";
+          description
+            "Specify DNS negotiation options";
+          tailf:cli-compact-syntax;
+          tailf:cli-sequence-commands;
+          leaf primary {
+            tailf:cli-drop-node-name;
+            type inet:ipv4-address {
+              tailf:info "A.B.C.D;;Primary DNS IP address";
+            }
+          }
+        }
+      }
+      container multilink {
+        tailf:info "Make interface multilink capable";
+        description
+          "Make interface multilink capable";
+        tailf:cli-display-separated;
+        presence "true";
+        container links {
+          tailf:info "Specify the limits on the number of links in a bundle";
+          description
+            "Specify the limits on the number of links in a bundle";
+          container minimum {
+            tailf:info "Minimum number of links desired in the bundle";
+            description
+              "Minimum number of links desired in the bundle";
+            tailf:cli-compact-syntax;
+            tailf:cli-sequence-commands {
+              tailf:cli-reset-all-siblings;
+            }
+            leaf minimum-value {
+              tailf:cli-drop-node-name;
+              type uint8 {
+                tailf:info "<1-255>;;Specify minimum desired number of links in a bundle";
+              }
+            }
+            leaf mandatory {
+              tailf:info "Disable network layer until minimum number of links is reach";
+              description
+                "Disable network layer until minimum number of links is reach";
+              type empty;
+            }
+          }
+        }
+        leaf group {
+          tailf:info "Put interface in a multilink bundle";
+          description
+            "Put interface in a multilink bundle";
+          type uint32 {
+            tailf:info "<1-2147483647>;;Multilink group number";
+            range "1..2147483647";
+          }
+        }
+        container endpoint {
+          tailf:info "Configure the local Endpoint Discriminator";
+          description
+            "Configure the local Endpoint Discriminator";
+          leaf string {
+            tailf:info "Use specified string";
+            description
+              "Use specified string";
+            type string {
+              tailf:info "LINE;;String to use as Endpoint Discriminator";
+            }
+          }
+        }
+        container fragment {
+          tailf:info "Specify fragmentation parameters";
+          description
+            "Specify fragmentation parameters";
+          container delay {
+            tailf:info "Specify the maximum delay for each fragment";
+            description
+              "Specify the maximum delay for each fragment";
+            tailf:cli-compact-syntax;
+            tailf:cli-sequence-commands {
+              tailf:cli-reset-siblings;
+            }
+            leaf delay-value {
+              tailf:cli-drop-node-name;
+              type uint16 {
+                tailf:info "<0-1000>;;Delay in milliseconds";
+                range "0..1000";
+              }
+            }
+            leaf additional-delay-value {
+              tailf:cli-drop-node-name;
+              type uint16 {
+                tailf:info "<1-999>;;Additional delay in microseconds";
+                range "1..999";
+              }
+            }
+          }
+        }
+      }
+    }
+  }
+
+  grouping interface-pseudowire-grouping {
+    leaf description {
+      tailf:info "Interface specific description";
+      description
+        "Interface specific description";
+      tailf:cli-multi-value;
+      tailf:cli-full-command;
+      type string {
+        length "0..240";
+      }
+    }
+    container label {
+      tailf:info "MPLS local and remote pseudowire static labels";
+      description
+        "MPLS local and remote pseudowire static labels";
+      when "../encapsulation = 'mpls'";
+      tailf:cli-compact-syntax;
+      tailf:cli-sequence-commands {
+        tailf:cli-reset-siblings;
+      }
+      leaf local {
+        tailf:cli-drop-node-name;
+        type uint32 {
+          tailf:info "<20000-40000>;;Local pseudowire label";
+          range "20000..40000";
+        }
+      }
+      leaf remote {
+        tailf:cli-drop-node-name;
+        type uint32 {
+          tailf:info "<16-1048575>;;Remote pseudowire label";
+          range "16..1048575";
+        }
+      }
+    }
+    leaf mtu {
+      tailf:info "Set Maximum Transmission Unit (MTU)";
+      description
+        "Set Maximum Transmission Unit (MTU)";
+      tailf:cli-full-command;
+      type uint16 {
+        range "64..65535";
+        tailf:info "<64-65535>;;Maximum Transmission Unit value";
+      }
+    }
+    container neighbor {
+      tailf:info "Neighbor options";
+      description
+        "Neighbor options";
+      tailf:cli-compact-syntax;
+      tailf:cli-sequence-commands {
+        tailf:cli-reset-siblings;
+      }
+      leaf peer-ip {
+        tailf:cli-drop-node-name;
+        type inet:ipv4-address {
+          tailf:info "A.B.C.D;;IP address of the peer PE";
+        }
+      }
+      leaf vc-id {
+        tailf:cli-drop-node-name;
+        type uint64 {
+          tailf:info "<1-4294967295>;;Virtual Circuit ID value";
+          range "1..4294967295";
+        }
+      }
+    }
+    container performance {
+      tailf:info "Global performance monitor configuration";
+      description
+        "Global performance monitor configuration";
+      container monitor {
+        tailf:info "monitor";
+        description
+          "monitor";
+        leaf-list context {
+          tailf:info "Select ezPM context";
+          description
+            "Select ezPM context";
+          tailf:cli-list-syntax;
+          type string;
+        }
+      }
+    }
+    container service-policy {
+      tailf:info "Configure CPL Service Policy";
+      description
+        "Configure CPL Service Policy";
+      leaf input {
+        tailf:cli-full-command;
+        tailf:info "Assign policy-map to the input of an interface";
+        description
+          "Assign policy-map to the input of an interface";
+        type string {
+          tailf:info "WORD;;policy-map name";
+        }
+        tailf:non-strict-leafref {
+          path "/ios:native/policy-map/name";
+        }
+      }
+      leaf output {
+        tailf:cli-full-command;
+        tailf:info "Assign policy-map to the output of an interface";
+        description
+          "Assign policy-map to the output of an interface";
+        type string {
+          tailf:info "WORD;;policy-map name";
+        }
+        tailf:non-strict-leafref {
+          path "/ios:native/policy-map/name";
+        }
+      }
+    }
+    leaf shutdown {
+      tailf:info "Shutdown the selected interface";
+      description
+        "Shutdown the selected interface";
+      tailf:cli-full-command;
+      type empty;
+    }
+    container signaling {
+      tailf:info "Signaling options";
+      description
+        "Signaling options";
+      container protocol-mpls {
+        tailf:cli-drop-node-name;
+        when "../../encapsulation = 'mpls'";
+        leaf protocol {
+          tailf:info "Signaling protocol to use";
+          description
+            "Signaling protocol to use";
+          type enumeration {
+            enum "ldp" {
+              tailf:info "Use LDP signaling";
+            }
+            enum "none" {
+              tailf:info "No signaling, use manually configured sessions";
+            }
+          }
+        }
+      }
+      container protocol-l2tpv2 {
+        tailf:cli-drop-node-name;
+        when "../../encapsulation = 'l2tpv2'";
+        leaf protocol {
+          tailf:info "Signaling protocol to use";
+          description
+            "Signaling protocol to use";
+          type enumeration {
+            enum "l2tpv2" {
+              tailf:info "Use L2TPv2 signaling";
+            }
+            enum "none" {
+              tailf:info "No signaling, use manually configured sessions";
+            }
+          }
+        }
+      }
+      container protocol-l2tpv3 {
+        tailf:cli-drop-node-name;
+        when "../../encapsulation = 'l2tpv3'";
+        leaf protocol {
+          tailf:info "Signaling protocol to use";
+          description
+            "Signaling protocol to use";
+          type enumeration {
+            enum "l2tpv3" {
+              tailf:info "Use L2TPv3 signaling";
+            }
+            enum "l2tpv3ietf" {
+              tailf:info "Use L2TPv3 ietf signaling";
+            }
+            enum "none" {
+              tailf:info "No signaling, use manually configured sessions";
+            }
+          }
+        }
+      }
+    }
+    container source {
+      tailf:info "Get config from another source";
+      description
+        "Get config from another source";
+      container template {
+        tailf:info "Get config from a template";
+        description
+          "Get config from a template";
+        container type {
+          tailf:info "Type of the template";
+          description
+            "Type of the template";
+          leaf pseudowire {
+            tailf:info "Template customized interface pseudowire";
+            description
+              "Template customized interface pseudowire";
+            type string {
+              tailf:info "WORD;;Template name";
+            }
+          }
+        }
+      }
+    }
+    container vc {
+      tailf:info "Virtual Circuit options";
+      description
+        "Virtual Circuit options";
+      when "../encapsulation = 'mpls'";
+      leaf type {
+        tailf:info "Virtual Circuit type to use";
+        description
+          "Virtual Circuit type to use";
+        type enumeration {
+          enum "ethernet" {
+            tailf:info "Ethernet (type 5)";
+          }
+          enum "vlan" {
+            tailf:info "VLAN (type 4)";
+          }
+        }
+      }
+    }
+  }
+
+  grouping otv-isis-authentication-grouping {
+    container authentication {
+      tailf:info "ISIS authentication for interface related PDUs";
+      description
+        "ISIS authentication for interface related PDUs";
+      leaf key-chain {
+        tailf:info "Authentication key-chain";
+        description
+          "Authentication key-chain";
+        type string {
+          tailf:info "WORD;;Name of key-chain";
+        }
+      }
+      leaf mode {
+        tailf:info "Authentication mode for PDUs";
+        description
+          "Authentication mode for PDUs";
+        type enumeration {
+          enum "md5" {
+            tailf:info "Keyed message digest";
+          }
+          enum "text" {
+            tailf:info "Clear text password";
+          }
+        }
+      }
+      leaf send-only {
+        tailf:info "Authentication send only, receive ignore";
+        description
+          "Authentication send only, receive ignore";
+        type empty;
+      }
+    }
+  }
+
+  grouping otv-isis-hostname-grouping {
+    container hostname {
+      tailf:info "Dynamic hostname for IS-IS";
+      description
+        "Dynamic hostname for IS-IS";
+      leaf dynamic {
+        tailf:info "Dynamic hostname";
+        description
+          "Dynamic hostname";
+        type empty;
+      }
+    }
+  }
+
+  grouping otv-isis-skeptical-grouping {
+    container skeptical {
+      tailf:info "Be a cautious NSF helper when refresh adjacency";
+      description
+        "Be a cautious NSF helper when refresh adjacency";
+      leaf interval {
+        tailf:info "Interval during which holdtime will NOT be refreshed";
+        description
+          "Interval during which holdtime will NOT be refreshed";
+        type uint32 {
+          tailf:info "<0-1440>;;Minutes";
+          range "0..1440";
+        }
+      }
+    }
+  }
+
+  grouping otv-isis-log-adjacency-changes-grouping {
+    container log-adjacency-changes {
+      tailf:info "Log changes in adjacency state";
+      description
+        "Log changes in adjacency state";
+      presence "true";
+      leaf all {
+        tailf:info "Include changes generated by non-IIH event";
+        description
+          "Include changes generated by non-IIH event";
+        type empty;
+      }
+    }
+  }
+
+  grouping otv-isis-site-grouping {
+    container default {
+      tailf:info "Set a command to its defaults";
+      description
+        "Set a command to its defaults";
+      leaf log-adjacency-changes {
+        tailf:info "Log changes in adjacency state";
+        description
+          "Log changes in adjacency state";
+        type empty;
+      }
+      leaf net {
+        tailf:info "A Network Entity Title for this process";
+        description
+          "A Network Entity Title for this process";
+        type empty;
+      }
+      container skeptical {
+        tailf:info "Be a cautious NSF helper when refresh adjacency";
+        description
+          "Be a cautious NSF helper when refresh adjacency";
+        leaf interval {
+          tailf:info "Interval during which holdtime will NOT be refreshed";
+          description
+            "Interval during which holdtime will NOT be refreshed";
+          type empty;
+        }
+      }
+    }
+    uses otv-isis-log-adjacency-changes-grouping;
+    leaf net {
+      tailf:info "A Network Entity Title for this process";
+      description
+        "A Network Entity Title for this process";
+      type string {
+        tailf:info "XX.XXXX. ... .XXX.XX;;Network entity title (NET)";
+      }
+    }
+    uses otv-isis-skeptical-grouping;
+  }
+
+  grouping otv-isis-overlay-grouping {
+    uses otv-isis-authentication-grouping;
+    container default {
+      tailf:info "Set a command to its defaults";
+      description
+        "Set a command to its defaults";
+      uses otv-isis-authentication-grouping;
+      uses otv-isis-hostname-grouping;
+      leaf delayed-deletion-interval {
+        tailf:info "Set delayed deletion interval";
+        description
+          "Set delayed deletion interval";
+        type empty;
+      }
+      leaf log-adjacency-changes {
+        tailf:info "Log changes in adjacency state";
+        description
+          "Log changes in adjacency state";
+        type empty;
+      }
+      leaf lsp-gen-interval {
+        tailf:info "Minimum interval between regenerating same LSP";
+        description
+          "Minimum interval between regenerating same LSP";
+        type empty;
+      }
+      leaf lsp-mtu {
+        tailf:info "Set maximum LSP size";
+        description
+          "Set maximum LSP size";
+        type empty;
+      }
+      leaf lsp-refresh-interval {
+        tailf:info "Set LSP refresh interval";
+        description
+          "Set LSP refresh interval";
+        type empty;
+      }
+      leaf max-lsp-lifetime {
+        tailf:info "Set maximum LSP lifetime";
+        description
+          "Set maximum LSP lifetime";
+        type empty;
+      }
+      leaf prc-interval {
+        tailf:info "Minimum interval between partial route calculations";
+        description
+          "Minimum interval between partial route calculations";
+        type empty;
+      }
+      leaf spf-interval {
+        tailf:info "Minimum interval between SPF calculations";
+        description
+          "Minimum interval between SPF calculations";
+        type empty;
+      }
+      container nsf {
+        tailf:info "Non-stop forwarding";
+        description
+          "Non-stop forwarding";
+        leaf cisco {
+          tailf:info "Checkpoint method";
+          description
+            "Checkpoint method";
+          type empty;
+        }
+        leaf interval {
+          tailf:info "Minimum required stable interval between restarts";
+          description
+            "Minimum required stable interval between restarts";
+          type empty;
+        }
+      }
+      container skeptical {
+        tailf:info "Be a cautious NSF helper when refresh adjacency";
+        description
+          "Be a cautious NSF helper when refresh adjacency";
+        leaf interval {
+          tailf:info "Interval during which holdtime will NOT be refreshed";
+          description
+            "Interval during which holdtime will NOT be refreshed";
+          type empty;
+        }
+      }
+    }
+    leaf delayed-deletion-interval {
+      tailf:info "Set delayed deletion interval";
+      description
+        "Set delayed deletion interval";
+      type uint32 {
+        tailf:info "<1-86400>;;delayed deletion interval in seconds";
+        range "1..86400";
+      }
+    }
+    uses otv-isis-hostname-grouping;
+    uses otv-isis-log-adjacency-changes-grouping;
+    container lsp-gen-interval {
+      tailf:info "Minimum interval between regenerating same LSP";
+      description
+        "Minimum interval between regenerating same LSP";
+      tailf:cli-sequence-commands;
+      tailf:cli-compact-syntax;
+      leaf seconds {
+        tailf:cli-drop-node-name;
+        type uint8 {
+          tailf:info "<1-120>;;Interval in seconds";
+          range "1..120";
+        }
+      }
+      leaf milliseconds {
+        tailf:cli-drop-node-name;
+        tailf:cli-optional-in-sequence;
+        type uint32 {
+          tailf:info "<1-120000>;;Initial wait in milliseconds";
+          range "1..120000";
+        }
+      }
+      leaf wait {
+        tailf:cli-drop-node-name;
+        tailf:cli-optional-in-sequence;
+        type uint32 {
+          tailf:info "<1-120000>;;Wait between first and second lsp generation in milliseconds";
+          range "1..120000";
+        }
+      }
+    }
+    leaf lsp-mtu {
+      tailf:info "Set maximum LSP size";
+      description
+        "Set maximum LSP size";
+      type uint32 {
+        tailf:info "<128-4352>;;Max LSP size in bytes";
+        range "128..4352";
+      }
+    }
+    leaf lsp-refresh-interval {
+      tailf:info "Set LSP refresh interval";
+      description
+        "Set LSP refresh interval";
+      type uint32 {
+        tailf:info "<1-65535>;;LSP refresh time in seconds";
+        range "1..65535";
+      }
+    }
+    leaf max-lsp-lifetime {
+      tailf:info "Set maximum LSP lifetime";
+      description
+        "Set maximum LSP lifetime";
+      type uint32 {
+        tailf:info " <1-65535>;;Maximum LSP lifetime in seconds";
+        range "1..65535";
+      }
+    }
+    container nsf {
+      tailf:info "Non-stop forwarding";
+      description
+        "Non-stop forwarding";
+      leaf cisco {
+        tailf:info "Checkpoint method";
+        description
+          "Checkpoint method";
+        type empty;
+      }
+      leaf interval {
+        tailf:info "Minimum required stable interval between restarts";
+        description
+          "Minimum required stable interval between restarts";
+        type uint32 {
+          tailf:info "<0-1440>;;Minutes";
+          range "0..1440";
+        }
+      }
+    }
+    container prc-interval {
+      tailf:info "Minimum interval between partial route calculations";
+      description
+        "Minimum interval between partial route calculations";
+      tailf:cli-sequence-commands;
+      tailf:cli-compact-syntax;
+      leaf seconds {
+        tailf:cli-drop-node-name;
+        type uint8 {
+          tailf:info "<1-120>;;PRC in seconds";
+          range "1..120";
+        }
+      }
+      leaf milliseconds {
+        tailf:cli-drop-node-name;
+        tailf:cli-optional-in-sequence;
+        type uint32 {
+          tailf:info "<1-120000>;;Initial wait for PRC in  milliseconds";
+          range "1..120000";
+        }
+      }
+      leaf wait {
+        tailf:cli-drop-node-name;
+        tailf:cli-optional-in-sequence;
+        type uint32 {
+          tailf:info "<1-120000>;;Minimum wait between first and second PRC in milliseconds";
+          range "1..120000";
+        }
+      }
+    }
+    uses otv-isis-skeptical-grouping;
+    container spf-interval {
+      tailf:info "Minimum interval between SPF calculations";
+      description
+        "Minimum interval between SPF calculations";
+      tailf:cli-sequence-commands;
+      tailf:cli-compact-syntax;
+      leaf seconds {
+        tailf:cli-drop-node-name;
+        type uint8 {
+          tailf:info "<1-120>;;Interval between consecutive SPFs in seconds";
+          range "1..120";
+        }
+      }
+      leaf milliseconds {
+        tailf:cli-drop-node-name;
+        tailf:cli-optional-in-sequence;
+        type uint32 {
+          tailf:info "<1-120000>;;Initial wait before first SPF in milliseconds";
+          range "1..120000";
+        }
+      }
+      leaf wait {
+        tailf:cli-drop-node-name;
+        tailf:cli-optional-in-sequence;
+        type uint32 {
+          tailf:info "<1-120000>;;Minimum wait between first and second SPF in milliseconds";
+          range "1..120000";
+        }
+      }
+    }
+  }
+
+  grouping otv-isis-grouping {
+    container isis {
+      tailf:info "ISIS interface subcommands";
+      description
+        "ISIS interface subcommands";
+      uses otv-isis-authentication-grouping;
+      leaf bfd {
+        tailf:info "Bidirectional Forwarding Protocol";
+        description
+          "Bidirectional Forwarding Protocol";
+        type empty;
+      }
+      container hello {
+        tailf:info "Add padding to IS-IS hello packets";
+        description
+          "Add padding to IS-IS hello packets";
+        container padding {
+          tailf:info "Pad hello packets";
+          description
+            "Pad hello packets";
+          presence "true";
+          leaf always {
+            tailf:info "Never pad hello packets if no prefix present";
+            description
+              "Never pad hello packets if no prefix present";
+            type empty;
+          }
+        }
+      }
+      container hello-interval {
+        tailf:info "Set Hello interval in seconds";
+        description
+          "Set Hello interval in seconds";
+        leaf value {
+          tailf:cli-drop-node-name;
+          type uint16 {
+            tailf:info "<1-65535>;;Hello interval value";
+            range "1..65535";
+          }
+        }
+        leaf minimal {
+          tailf:info "Holdtime 1 second, interval depends on multiplier";
+          description
+            "Holdtime 1 second, interval depends on multiplier";
+          type empty;
+        }
+      }
+      leaf hello-multiplier {
+        tailf:info "Set multiplier for Hello holding time";
+        description
+          "Set multiplier for Hello holding time";
+        type uint16 {
+          tailf:info "<3-1000>;;Hello multiplier value";
+          range "3..1000";
+        }
+      }
+      leaf priority {
+        tailf:info "Set priority for Designated Router election";
+        description
+          "Set priority for Designated Router election";
+        type uint8 {
+          tailf:info "<0-127>;;Priority value";
+          range "0..127";
+        }
+      }
+    }
+  }
+
+  grouping interface-overlay-grouping {
+    container otv {
+      tailf:info "Configure OTV information";
+      description
+        "Configure OTV information";
+      container adjacency-server {
+        tailf:info "Indicate if the box is an Adjacency Server";
+        description
+          "Indicate if the box is an Adjacency Server";
+        leaf unicast-only {
+          tailf:info "Unicast Only";
+          description
+            "Unicast Only";
+          type empty;
+        }
+      }
+      leaf control-group {
+        tailf:info "OTV VPN control multicast group";
+        description
+          "OTV VPN control multicast group";
+        type inet:ipv4-address {
+          tailf:info "A.B.C.D;;OTV VPN External Multicast Group IPv4 Address";
+        }
+      }
+      leaf data-group {
+        tailf:info "Multicast group range for data";
+        description
+          "Multicast group range for data";
+        type ios:ipv4-prefix {
+          tailf:info "A.B.C.D/nn;;IPv4 group range prefixes";
+        }
+      }
+      container encapsulation-format {
+        tailf:info "Encapsulation format";
+        description
+          "Encapsulation format";
+        container ip {
+          tailf:info "Use IP for outer header encapsulation";
+          description
+            "Use IP for outer header encapsulation";
+          leaf gre {
+            tailf:info "Use GRE middle header encapsulation";
+            description
+              "Use GRE middle header encapsulation";
+            type empty;
+          }
+        }
+      }
+      leaf filter-fhrp {
+        tailf:info "Configure to not forward HSRP, GLBP, and VRRP packets on overlay";
+        description
+          "Configure to not forward HSRP, GLBP, and VRRP packets on overlay";
+        type empty;
+      }
+      container isis {
+        tailf:info "ISIS interface subcommands";
+        description
+          "ISIS interface subcommands";
+        uses otv-isis-authentication-grouping;
+        leaf bfd {
+          tailf:info "Bidirectional Forwarding Protocol";
+          description
+            "Bidirectional Forwarding Protocol";
+          type empty;
+        }
+        leaf csnp-interval {
+          tailf:info "Set CSNP interval in seconds";
+          description
+            "Set CSNP interval in seconds";
+          type uint16 {
+            tailf:info "<0-65535>;;CSNP interval value";
+            range "0..65535";
+          }
+        }
+        container hello {
+          tailf:info "Add padding to IS-IS hello packets";
+          description
+            "Add padding to IS-IS hello packets";
+          container padding {
+            tailf:info "Pad hello packets";
+            description
+              "Pad hello packets";
+            presence "true";
+            leaf always {
+              tailf:info "Never pad hello packets if no prefix present";
+              description
+                "Never pad hello packets if no prefix present";
+              type empty;
+            }
+          }
+        }
+        container hello-interval {
+          tailf:info "Set Hello interval in seconds";
+          description
+            "Set Hello interval in seconds";
+          leaf value {
+            tailf:cli-drop-node-name;
+            type uint16 {
+              tailf:info "<1-65535>;;Hello interval value";
+              range "1..65535";
+            }
+          }
+          leaf minimal {
+            tailf:info "Holdtime 1 second, interval depends on multiplier";
+            description
+              "Holdtime 1 second, interval depends on multiplier";
+            type empty;
+          }
+        }
+        leaf hello-multiplier {
+          tailf:info "Set multiplier for Hello holding time";
+          description
+            "Set multiplier for Hello holding time";
+          type uint16 {
+            tailf:info "<3-1000>;;Hello multiplier value";
+            range "3..1000";
+          }
+        }
+        leaf lsp-interval {
+          tailf:info "Set LSP transmission interval";
+          description
+            "Set LSP transmission interval";
+          type uint64 {
+            tailf:info "<1-4294967295>;;LSP transmission interval (milliseconds)";
+            range "1..4294967295";
+          }
+        }
+        container metric {
+          tailf:info "Configure the metric for interface";
+          description
+            "Configure the metric for interface";
+          tailf:cli-sequence-commands;
+          tailf:cli-compact-syntax;
+          choice default-maximum {
+            case default-case {
+              leaf default {
+                tailf:cli-drop-node-name;
+                type uint32 {
+                  tailf:info "<1-16777214>;;Default metric";
+                  range "1..16777214";
+                }
+              }
+            }
+            case maximum-case {
+              leaf maximum {
+                tailf:info "Maximum metric. All routers will exclude this link from their SPF";
+                description
+                  "Maximum metric. All routers will exclude this link from their SPF";
+                type empty;
+              }
+            }
+          }
+          leaf delay {
+            tailf:cli-drop-node-name;
+            tailf:cli-optional-in-sequence;
+            type uint32 {
+              tailf:info "<1-16777214>;;Delay metric";
+              range "1..16777214";
+            }
+          }
+          leaf expense {
+            tailf:cli-drop-node-name;
+            tailf:cli-optional-in-sequence;
+            type uint32 {
+              tailf:info "<1-16777214>;;Expense metric";
+              range "1..16777214";
+            }
+          }
+          leaf error {
+            tailf:cli-drop-node-name;
+            tailf:cli-optional-in-sequence;
+            type uint32 {
+              tailf:info "<1-16777214>;;Error metric";
+              range "1..16777214";
+            }
+          }
+        }
+        leaf priority {
+          tailf:info "Set priority for Designated Router election";
+          description
+            "Set priority for Designated Router election";
+          type uint8 {
+            tailf:info "<0-127>;;Priority value";
+            range "0..127";
+          }
+        }
+        leaf retransmit-interval {
+          tailf:info "Set per-LSP retransmission interval";
+          description
+            "Set per-LSP retransmission interval";
+          type uint16 {
+            tailf:info "<0-65535>;;Interval between retransmissions of the same LSP (seconds)";
+          }
+        }
+        leaf retransmit-throttle-interval {
+          tailf:info "Set interface LSP retransmission interval";
+          description
+            "Set interface LSP retransmission interval";
+          type uint16 {
+            tailf:info "<0-65535>;;Delay between retransmitted LSPs (milliseconds)";
+          }
+        }
+      }
+      container join-interface {
+        tailf:info "OTV VPN join-interface";
+        description
+          "OTV VPN join-interface";
+        uses interface-grouping;
+      }
+      container suppress {
+        tailf:info "Enable overlay packet suppression";
+        description
+          "Enable overlay packet suppression";
+        leaf arp-nd {
+          tailf:info "Suppress sending ARP and neighbor discovery packets on overlay";
+          description
+            "Suppress sending ARP and neighbor discovery packets on overlay";
+          type empty;
+        }
+      }
+      container use-adjacency-server {
+        tailf:info "Point to remote Adjacency Server address";
+        description
+          "Point to remote Adjacency Server address";
+        tailf:cli-compact-syntax;
+        tailf:cli-sequence-commands {
+          tailf:cli-reset-siblings;
+        }
+        leaf remote-pri-ip {
+          tailf:cli-drop-node-name;
+          tailf:cli-incomplete-command;
+          type inet:ipv4-address {
+            tailf:info "A.B.C.D;;Remote Primary AS IPv4 address";
+          }
+        }
+        leaf remote-sec-ip {
+          tailf:cli-drop-node-name;
+          tailf:cli-break-sequence-commands;
+          type inet:ipv4-address {
+            tailf:info "A.B.C.D;;Remote Secondary AS IPv4 address";
+          }
+        }
+        leaf unicast-only {
+          tailf:info "Unicast Only Capability";
+          description
+            "Unicast Only Capability";
+          tailf:cli-full-command;
+          type empty;
+        }
+      }
+      leaf vpn-name {
+        tailf:info "OTV VPN name";
+        description
+          "OTV VPN name";
+        type string {
+          tailf:info "WORD;;OTV VPN Name";
+        }
+      }
+    }
+  }
+
+  grouping crypto-pki-token-grouping {
+    container removal {
+      tailf:info "actions to take after token removal";
+      description
+        "actions to take after token removal";
+      leaf timeout {
+        tailf:info "seconds after token removal at which keys from the token are cleared";
+        description
+          "seconds after token removal at which keys from the token are cleared";
+        type uint16 {
+          tailf:info "<0-480>;;Token key timeout in seconds";
+          range "0..480";
+        }
+      }
+    }
+  }
+
+  grouping max-path-grouping {
+    container max-path {
+      tailf:cli-drop-node-name;
+      tailf:cli-compact-syntax;
+      tailf:cli-sequence-commands {
+        tailf:cli-reset-siblings;
+      }
+      tailf:display-when "../../../ipv4 or ../../ipv4 or ../../../ipv6 or ../../ipv6  or ../../../nsap or ../../nsap  or ../../../vpnv4 or ../../vpnv4";
+      leaf max {
+        tailf:cli-drop-node-name;
+        type uint16 {
+          range "1..32";
+          tailf:info "<1-32>;;Number of paths";
+        }
+        default "1";
+      }
+    }
+    container external-rtfilter {
+      tailf:info "VPN prefix multipath on external RTFilter peers";
+      description
+        "VPN prefix multipath on external RTFilter peers";
+      tailf:cli-compact-syntax;
+      tailf:cli-sequence-commands {
+        tailf:cli-reset-siblings;
+      }
+      tailf:display-when "../../../rtfilter";
+      leaf max {
+        tailf:cli-drop-node-name;
+        type uint16 {
+          range "1..32";
+          tailf:info "<1-32>;;Number of paths";
+        }
+        default "1";
+      }
+    }
+  }
+
+  grouping metric-route-map-grouping {
+    leaf metric {
+      tailf:cli-break-sequence-commands;
+      tailf:info "Metric for redistributed routes";
+      description
+        "Metric for redistributed routes";
+      type uint32 {
+        range "0..4294967295";
+        tailf:info "<0-4294967295>;;Default metric";
+      }
+    }
+    leaf route-map {
+      tailf:info "Route map reference";
+      description
+        "Route map reference";
+      type string {
+        tailf:info "WORD;;Pointer to route-map entries";
+      }
+    }
+  }
+
+  grouping route-map-metric-grouping {
+    leaf route-map {
+      tailf:info "Route map reference";
+      description
+        "Route map reference";
+      type string {
+        tailf:info "WORD;;Pointer to route-map entries";
+      }
+    }
+    leaf metric {
+      tailf:info "Metric for redistributed routes";
+      description
+        "Metric for redistributed routes";
+      type uint32 {
+        range "0..4294967295";
+        tailf:info "<0-4294967295>;;Default metric";
+      }
+    }
+  }
+
+  grouping redistribute-isis-grouping {
+    choice osi-ip-choice {
+      leaf ip {
+        tailf:info "Redistribution of IP dynamic routes";
+        description
+          "Redistribution of IP dynamic routes";
+        type empty;
+      }
+      leaf clns {
+        tailf:info "Redistribution of OSI dynamic routes";
+        description
+          "Redistribution of OSI dynamic routes";
+        type empty;
+      }
+    }
+    leaf routes {
+      tailf:cli-drop-node-name;
+      type enumeration {
+        enum "level-1" {
+          tailf:info "IS-IS level-1 routes only";
+        }
+        enum "level-2" {
+          tailf:info "IS-IS level-2 routes only";
+        }
+        enum "level-1-2" {
+          tailf:info "IS-IS level-1 and level-2 routes";
+        }
+      }
+    }
+    uses metric-route-map-grouping;
+  }
+
+  grouping bgp-address-family-grouping {
+    container aggregate-address {
+      tailf:info "Configure BGP aggregate entries";
+      description
+        "Configure BGP aggregate entries";
+      tailf:cli-compact-syntax;
+      tailf:cli-sequence-commands {
+        tailf:cli-reset-all-siblings;
+      }
+      tailf:display-when "../../ipv4 or ../ipv4 or ipv4  or ipv6 or ../../ipv6 or ../ipv6";
+      leaf address {
+        tailf:cli-drop-node-name;
+        type inet:ipv4-address {
+          tailf:info "A.B.C.D;;Aggregate address";
+        }
+      }
+      leaf mask {
+        tailf:cli-drop-node-name;
+        type inet:ipv4-address {
+          tailf:info "A.B.C.D;;Aggregate mask";
+        }
+      }
+      leaf advertise-map {
+        tailf:cli-break-sequence-commands;
+        tailf:info "Set condition to advertise attribute";
+        description
+          "Set condition to advertise attribute";
+        type string {
+          tailf:info "WORD;;Route map to control attribute advertisement";
+        }
+      }
+      leaf as-set {
+        tailf:info "Generate AS set path information";
+        description
+          "Generate AS set path information";
+        type empty;
+      }
+      leaf attribute-map {
+        type string {
+          tailf:info "WORD;;Route map for parameter control";
+        }
+      }
+      leaf as-override {
+        tailf:info "Override matching AS-number while sending update";
+        description
+          "Override matching AS-number while sending update";
+        type empty;
+      }
+      leaf route-map {
+        type string {
+          tailf:info "WORD;;Route map for parameter control";
+        }
+      }
+      leaf summary-only {
+        tailf:info "Filter more specific routes from updates";
+        description
+          "Filter more specific routes from updates";
+        type empty;
+      }
+      leaf suppress-map {
+        tailf:info "Conditionally filter more specific routes from updates";
+        description
+          "Conditionally filter more specific routes from updates";
+        type string {
+          tailf:info "WORD;;Route map for suppression";
+        }
+      }
+    }
+    container bgp {
+      tailf:info "BGP specific commands";
+      description
+        "BGP specific commands";
+      leaf router-id {
+        tailf:cli-full-command;
+        tailf:info "Override configured router identifier (peers will reset)";
+        description
+          "Override configured router identifier (peers will reset)";
+        type inet:ipv4-address {
+          tailf:info "A.B.C.D;;Manually configured router identifier";
+        }
+      }
+      leaf always-compare-med {
+        tailf:info "Allow comparing MED from different neighbors";
+        description
+          "Allow comparing MED from different neighbors";
+        tailf:cli-full-command;
+        type empty;
+      }
+      leaf aggregate-timer {
+        tailf:info "Configure Aggregation Timer";
+        description
+          "Timer interval";
+        type uint8 {
+          range "6..60";
+        }
+      }
+      container nopeerup-delay {
+        tailf:info "Set how long BGP will wait for the first peer to come up before beginning the update delay or graceful restart timers (in seconds)";
+        description
+          "Set how long BGP will wait for the first peer to come up before beginning the update delay or graceful restart timers (in seconds)";
+        leaf cold-boot {
+          tailf:info "How long to wait for the first peer to come up upon a cold boot";
+          description
+            "Delay in seconds";
+          type uint16 {
+            range "1..3600";
+          }
+        }
+        leaf nsf-switchover {
+          tailf:info "How long to wait for the first peer, post NSF switchover";
+          description
+            "Delay in seconds";
+          type uint16 {
+            range "1..3600";
+          }
+        }
+        leaf post-boot {
+          tailf:info "How long to wait for the first peer to come up once the system is already booted and all peers go down";
+          description
+            "Delay in seconds";
+          type uint16 {
+            range "1..3600";
+          }
+        }
+        leaf user-initiated {
+          tailf:info "How long to wait for the first peer, post a manual clear of BGP peers by the admin user";
+          description
+            "Delay in seconds";
+          type uint16 {
+            range "1..3600";
+          }
+        }
+      }
+      container recursion {
+        tailf:info "recursion rule for the nexthops";
+        description
+          "recursion rule for the nexthops";
+        leaf host {
+          tailf:info "recursion via host for the nexthops";
+          description
+            "recursion via host for the nexthops";
+          type empty;
+        }
+      }
+      leaf advertise-best-external {
+        tailf:info "Advertise best external path to internal peers";
+        description
+          "Advertise best external path to internal peers";
+        type empty;
+      }
+      container additional-paths {
+        tailf:info "Additional paths in the BGP table";
+        description
+          "Additional paths in the BGP table";
+        leaf install {
+          tailf:info "Additional paths to install into RIB";
+          description
+            "Additional paths to install into RIB";
+          type empty;
+        }
+        leaf receive {
+          tailf:info "Receive additional paths from neighbors";
+          description
+            "Receive additional paths from neighbors";
+          type empty;
+        }
+        container select {
+          tailf:info "Selection criteria to pick the paths";
+          description
+            "Selection criteria to pick the paths";
+          container all {
+            tailf:info "Select all available paths";
+            description
+              "Select all available paths";
+            presence "true";
+            container best {
+              tailf:info "Select best N paths";
+              description
+                "Select best N paths";
+              list range {
+                tailf:cli-drop-node-name;
+                tailf:cli-suppress-mode;
+                key "range";
+                leaf range {
+                  tailf:info "Number of best paths in additional paths to be selected";
+                  description
+                    "Number of best paths in additional paths to be selected";
+                  type uint8 {
+                    range "2..3";
+                  }
+                }
+                leaf group-best {
+                  tailf:info "Select group-best path";
+                  description
+                    "Select group-best path";
+                  type empty;
+                }
+              }
+            }
+            container group-best {
+              tailf:info "Select group-best path";
+              description
+                "Select group-best path";
+              presence "true";
+              leaf best {
+                tailf:info "Select best N paths";
+                description
+                  "Number of best paths in additional paths to be selected";
+                type uint8 {
+                  range "2..3";
+                }
+              }
+            }
+          }
+          container backup {
+            tailf:info "Select backup path";
+            description
+              "Select backup path";
+            presence "true";
+            leaf best-external {
+              tailf:info "Select best-external path";
+              description
+                "Select best-external path";
+              type empty;
+            }
+          }
+          container best {
+            tailf:info "Select best N paths";
+            description
+              "Select best N paths";
+            list best-paths {
+              tailf:cli-drop-node-name;
+              tailf:cli-suppress-mode;
+              key "best-paths";
+              leaf best-paths {
+                tailf:info "Number of best paths in additional paths to be selected";
+                description
+                  "Number of best paths in additional paths to be selected";
+                type uint8 {
+                  range "2..3";
+                }
+              }
+              leaf all {
+                tailf:info "Select all available paths";
+                description
+                  "Select all available paths";
+                type empty;
+              }
+              container group-best {
+                tailf:info "Select group-best path";
+                description
+                  "Select group-best path";
+                presence "true";
+                leaf all {
+                  tailf:info "Select all available paths";
+                  description
+                    "Select all available paths";
+                  type empty;
+                }
+              }
+            }
+          }
+          container best-external {
+            tailf:info "Select best-external path";
+            description
+              "Select best-external path";
+            presence "true";
+            leaf backup {
+              tailf:info "Select backup path";
+              description
+                "Select backup path";
+              type empty;
+            }
+          }
+          container group-best {
+            tailf:info "Select group-best path";
+            description
+              "Select group-best path";
+            presence "true";
+            leaf all {
+              tailf:info "Select all available paths";
+              description
+                "Select all available paths";
+              type empty;
+            }
+            leaf best {
+              tailf:info "Select best N paths";
+              description
+                "Number of best paths in additional paths to be selected";
+              type uint8 {
+                range "2..3";
+              }
+            }
+          }
+        }
+        container send {
+          tailf:info "Send additional paths to neighbors";
+          description
+            "Send additional paths to neighbors";
+          presence "true";
+          leaf receive {
+            tailf:info "Receive additional paths from neighbors";
+            description
+              "Receive additional paths from neighbors";
+            type empty;
+          }
+        }
+      }
+      container bestpath {
+        tailf:info "Change the default bestpath selection";
+        description
+          "Change the default bestpath selection";
+        leaf compare-routerid {
+          tailf:cli-full-command;
+          tailf:info "Compare router-id for identical EBGP paths";
+          type empty;
+        }
+        container cost-community {
+          tailf:info "cost community";
+          description
+            "cost community";
+          leaf ignore {
+            tailf:info "Ignore cost communities in bestpath selection";
+            description
+              "Ignore cost communities in bestpath selection";
+            type empty;
+          }
+        }
+        container med {
+          tailf:info "MED attribute";
+          description
+            "MED attribute";
+          choice med-choice {
+            container confed {
+              tailf:info "Compare MED among confederation paths";
+              description
+                "Compare MED among confederation paths";
+              presence "Compare MED among confederation paths";
+              leaf missing-at-worst {
+                tailf:info "Treat missing MED as the least preferred one";
+                description
+                  "Treat missing MED as the least preferred one";
+                type empty;
+              }
+            }
+            leaf missing-at-worst {
+              tailf:info "Treat missing MED as the least preferred one";
+              description
+                "Treat missing MED as the least preferred one";
+              type empty;
+            }
+          }
+        }
+      }
+      container client-to-client {
+        tailf:info "Configure client to client route reflection";
+        description
+          "Configure client to client route reflection";
+        leaf reflection {
+          tailf:info "reflection of routes allowed";
+          description
+            "reflection of routes allowed";
+          type empty;
+        }
+      }
+      leaf cluster-id {
+        tailf:cli-full-command;
+        type union {
+          type uint32 {
+            range "1..4294967295";
+            tailf:info "<1-4294967295>;;Route-Reflector Cluster-id as 32 bit quantity";
+          }
+          type inet:ipv4-address {
+            tailf:info "A.B.C.D;;Route-Reflector Cluster-id in IP address format";
+          }
+        }
+      }
+      container confederation {
+        tailf:info "AS confederation parameters";
+        description
+          "AS confederation parameters";
+        leaf identifier {
+          tailf:cli-full-command;
+          tailf:info "as number";
+          type uint16 {
+            range "1..65535";
+            tailf:info "<1-65535>;;Set routing domain confederation AS";
+          }
+        }
+        container peers {
+          tailf:info "Peer ASs in BGP confederation";
+          description
+            "Peer ASs in BGP confederation";
+          presence "Peer ASs in BGP confederation";
+          leaf-list peers-as {
+            tailf:cli-drop-node-name;
+            tailf:cli-flat-list-syntax;
+            type uint16 {
+              range "1..65535";
+              tailf:info "AS number";
+            }
+          }
+        }
+      }
+      container consistency-checker {
+        tailf:info "Consistency-checker";
+        description
+          "Consistency-checker";
+        container auto-repair {
+          tailf:info "Auto-Repair";
+          description
+            "Auto-Repair";
+          presence "true";
+          leaf interval {
+            tailf:info "Set the bgp consistency checker";
+            description
+              "Interval (minutes)";
+            type uint16 {
+              range "5..1440";
+            }
+          }
+        }
+        container error-message {
+          tailf:info "Log Error-Msg";
+          description
+            "Log Error-Msg";
+          presence "true";
+          leaf interval {
+            tailf:info "Set the bgp consistency checker";
+            description
+              "Interval (minutes)";
+            type uint16 {
+              range "5..1440";
+            }
+          }
+        }
+      }
+      container dampening {
+        tailf:info "Enable route-flap dampening";
+        description
+          "Enable route-flap dampening";
+        presence "enable bgp route-flap dampening";
+        choice dampening-choice {
+          leaf route-map {
+            tailf:info "Route-map to specify criteria for dampening";
+            description
+              "Route-map to specify criteria for dampening";
+            type string {
+              tailf:info "WORD;;route-map name";
+            }
+          }
+          container dampen {
+            tailf:cli-drop-node-name;
+            tailf:cli-compact-syntax;
+            tailf:cli-sequence-commands;
+            leaf half-life-time {
+              tailf:cli-drop-node-name;
+              tailf:cli-incomplete-command;
+              type uint8 {
+                range "1 .. 45";
+                tailf:info "<1-45>;;Half-life time for the penalty";
+              }
+            }
+            leaf reuse-time {
+              tailf:cli-drop-node-name;
+              tailf:cli-incomplete-command;
+              type uint16 {
+                range "1 .. 20000";
+                tailf:info "<1-20000>;;Value to start reusing a route";
+              }
+            }
+            leaf suppress-time {
+              tailf:cli-drop-node-name;
+              tailf:cli-incomplete-command;
+              type uint16 {
+                range "1 .. 20000";
+                tailf:info "<1-20000>;;Value to start suppressing a route";
+              }
+            }
+            leaf max-suppress-time {
+              tailf:cli-drop-node-name;
+              type uint8 {
+                range "1 .. 255";
+                tailf:info "<1-255>  Maximum duration to suppress a stable route";
+              }
+            }
+          }
+        }
+      }
+      container default {
+        tailf:info "Configure BGP defaults";
+        description
+          "Configure BGP defaults";
+        choice default-choice {
+          leaf ipv4-unicast {
+            tailf:info "Activate ipv4-unicast for a peer by default";
+            description
+              "Activate ipv4-unicast for a peer by default";
+            tailf:cli-boolean-no;
+            tailf:cli-trim-default;
+            type boolean;
+          }
+          leaf ipv6-nexthop {
+            tailf:info "Default IPv6 nexthop format";
+            description
+              "Default IPv6 nexthop format";
+            type empty;
+          }
+          leaf local-preference {
+            tailf:info "local preference (higher=more preferred)";
+            description
+              "local preference (higher=more preferred)";
+            type uint32 {
+              range "1..4294967295";
+              tailf:info "<0-4294967295>;;Configure default local preference value";
+            }
+          }
+          leaf route-target {
+            tailf:info "Control behavior based on Route-Target attributes";
+            description
+              "Control behavior based on Route-Target attributes";
+            type enumeration {
+              enum "filter" {
+                tailf:info "Control automatic VPN Route-Target filtering";
+              }
+            }
+          }
+        }
+      }
+      leaf deterministic-med {
+        tailf:cli-full-command;
+        tailf:info "Pick the best-MED path among paths advertised from the neighboring AS";
+        description
+          "Pick the best-MED path among paths advertised from the neighboring AS";
+        type empty;
+      }
+      leaf dmzlink-bw {
+        tailf:cli-full-command;
+        tailf:info "Use DMZ Link Bandwidth as weight for BGP multipaths";
+        description
+          "Use DMZ Link Bandwidth as weight for BGP multipaths";
+        type empty;
+      }
+      leaf enforce-first-as {
+        tailf:cli-full-command;
+        tailf:info "Enforce the first AS for EBGP routes(default)";
+        description
+          "Enforce the first AS for EBGP routes(default)";
+        type empty;
+      }
+      leaf enhanced-error {
+        tailf:info "Enabled BGP Enhanced error handling";
+        description
+          "Enabled BGP Enhanced error handling";
+        type empty;
+      }
+      leaf fast-external-fallover {
+        tailf:cli-full-command;
+        tailf:info "Immediately reset session if a link to a directly connected external peer goes down";
+        description
+          "Immediately reset session if a link to a directly connected external peer goes down";
+        type empty;
+      }
+      container graceful-restart {
+        tailf:info "Graceful restart capability parameters";
+        description
+          "Graceful restart capability parameters";
+        presence "Graceful restart capability parameters";
+        tailf:cli-display-separated;
+        leaf extended {
+          tailf:info "Enable Graceful-Restart Extension";
+          type empty;
+        }
+        leaf restart-time {
+          tailf:cli-full-command;
+          tailf:info "Set the max time needed to restart and come back up";
+          description
+            "Set the max time needed to restart and come back up";
+          type uint16 {
+            range "1..3600";
+            tailf:info "<1-3600>;;Delay value (seconds)";
+          }
+        }
+        leaf stalepath-time {
+          tailf:info "Set the max time to hold onto restarting peer's stale paths";
+          description
+            "Set the max time to hold onto restarting peer's stale paths";
+          type uint16 {
+            range "1..3600";
+            tailf:info "<1-3600>;;Delay value (seconds)";
+          }
+        }
+      }
+      container ha-mode {
+        tailf:info "Select BGP High Availability mode";
+        description
+          "Select BGP High Availability mode";
+        container sso {
+          tailf:info "BGP High Availability NSR sso mode";
+          description
+            "BGP High Availability NSR sso mode";
+          presence "true";
+          leaf prefer {
+            tailf:info "Perfer BGP High Availability NSR sso mode";
+            description
+              "Perfer BGP High Availability NSR sso mode";
+            type empty;
+          }
+        }
+      }
+      list inject-map {
+        tailf:info "Routemap which specifies prefixes to inject";
+        description
+          "Routemap which specifies prefixes to inject";
+        tailf:cli-compact-syntax;
+        tailf:cli-sequence-commands;
+        tailf:cli-incomplete-command;
+        tailf:cli-delete-when-empty;
+        key "name";
+        leaf name {
+          type string {
+            tailf:info "WORD;;route-map name";
+          }
+        }
+        leaf exist-map {
+          tailf:info "Routemap which specifies exist condition";
+          description
+            "Routemap which specifies exist condition";
+          type string {
+            tailf:info "WORD;;route-map name";
+          }
+        }
+        leaf copy-attributes {
+          tailf:info "Copy attributes from aggregate";
+          description
+            "Copy attributes from aggregate";
+          type empty;
+        }
+      }
+      leaf log-neighbor-changes {
+        tailf:info "Log neighbor up/down and reset reason";
+        description
+          "Log neighbor up/down and reset reason";
+        tailf:cli-full-command;
+        type empty;
+      }
+      leaf maxas-limit {
+        tailf:info "Allow AS-PATH attribute from any neighbor imposing a limit on number of ASes";
+        description
+          "Allow AS-PATH attribute from any neighbor imposing a limit on number of ASes";
+        tailf:cli-full-command;
+        type uint16 {
+          range "1..2000";
+          tailf:info "<1-2000>;;Number of ASes in the AS-PATH attribute";
+        }
+      }
+      leaf maxcommunity-limit {
+        tailf:info "Allow COMMUNITY attribute from any neighbor imposing a limit on number of communities";
+        description
+          "Number of communities in the COMMUNITY attribute";
+        type uint16 {
+          range "1..1018";
+        }
+      }
+      container router-map {
+        tailf:info "bgp route-map commands";
+        description
+          "bgp route-map commands";
+        leaf priority {
+          tailf:info "Have route-map set commands take priority over BGP commands such ";
+          description
+            "Have route-map set commands take priority over BGP commands such ";
+          type empty;
+        }
+      }
+      container slow-peer {
+        tailf:info "Configure slow-peer";
+        description
+          "Configure slow-peer";
+        container detection {
+          tailf:info "Slow-peer detection";
+          description
+            "Slow-peer detection";
+          presence "true";
+          leaf disable {
+            tailf:info "Disable slow-peer detection";
+            description
+              "Disable slow-peer detection";
+            type empty;
+          }
+          leaf threshold {
+            tailf:info "Set the slow-peer detection threshold";
+            description
+              "Threshold value (seconds)";
+            type uint16 {
+              range "120..3600";
+            }
+          }
+        }
+        container split-update-group {
+          tailf:info "Configure slow-peer split-update-group";
+          description
+            "Configure slow-peer split-update-group";
+          container dynamic {
+            tailf:info "Dynamically split the slow peer to slow-update group";
+            description
+              "Dynamically split the slow peer to slow-update group";
+            presence "true";
+            leaf permanent {
+              tailf:info "Keep the slow-peer permanently in slow-update group";
+              description
+                "Keep the slow-peer permanently in slow-update group";
+              type empty;
+            }
+          }
+        }
+      }
+      container update-group {
+        tailf:info "Manage peers in bgp update groups";
+        description
+          "Manage peers in bgp update groups";
+        container split {
+          tailf:info "Split update groups based on Policy";
+          description
+            "Split update groups based on Policy";
+          leaf as-override {
+            tailf:info "Keep peers with as-override in different update groups";
+            description
+              "Keep peers with as-override in different update groups";
+            type empty;
+          }
+        }
+      }
+      container nexthop {
+        tailf:info "Nexthop tracking commands";
+        description
+          "Nexthop tracking commands";
+        container trigger {
+          tailf:info "Nexthop triggering";
+          description
+            "Nexthop triggering";
+          leaf delay {
+            tailf:cli-full-command;
+            tailf:info "Set the delay to tigger nexthop tracking";
+            description
+              "Set the delay to tigger nexthop tracking";
+            type uint8 {
+              range "0..100";
+              tailf:info "<0-100>;;Delay value (seconds)";
+            }
+          }
+          leaf enable {
+            tailf:info "Enable nexthop tracking";
+            description
+              "Enable nexthop tracking";
+            tailf:cli-full-command;
+            tailf:cli-boolean-no;
+            type boolean;
+          }
+        }
+        leaf route-map {
+          tailf:info "Route map for valid nexthops";
+          description
+            "Route map for valid nexthops";
+          type string {
+            tailf:info "WORD;;Route map name";
+          }
+        }
+      }
+      leaf redistribute-internal {
+        tailf:info "Allow redistribution of iBGP into IGPs (dangerous)";
+        description
+          "Allow redistribution of iBGP into IGPs (dangerous)";
+        tailf:cli-full-command;
+        type empty;
+      }
+      container regexp {
+        tailf:info "Select regular expression engine";
+        description
+          "Select regular expression engine";
+        leaf deterministic {
+          tailf:info "Enable bounded-execution-time regular expression engine";
+          description
+            "Enable bounded-execution-time regular expression engine";
+          type empty;
+        }
+      }
+      leaf scan-time {
+        tailf:cli-full-command;
+        tailf:info "Configure background scanner interval";
+        description
+          "Configure background scanner interval";
+        type uint8 {
+          range "5..60";
+          tailf:info "<5-60>;;Scanner interval (seconds)";
+        }
+      }
+      leaf soft-reconfig-backup {
+        tailf:info "Use soft-reconfiguration inbound only when route-refresh is not negotiated";
+        description
+          "Use soft-reconfiguration inbound only when route-refresh is not negotiated";
+        tailf:cli-full-command;
+        type empty;
+      }
+      leaf suppress-inactive {
+        tailf:info "Suppress routes that are not in the routing table";
+        description
+          "Suppress routes that are not in the routing table";
+        tailf:cli-full-command;
+        type empty;
+      }
+      container transport {
+        tailf:info "Transport options";
+        description
+          "Transport options";
+        container path-mtu-discovery {
+          tailf:info "Use transport path MTU discovery";
+          description
+            "Use transport path MTU discovery";
+          presence "true";
+          leaf disable {
+            tailf:info "disable";
+            description
+              "disable";
+            type empty;
+          }
+        }
+      }
+      leaf update-delay {
+        tailf:cli-full-command;
+        tailf:info "Set the max initial delay for sending update";
+        description
+          "Set the max initial delay for sending update";
+        type uint16 {
+          range "1..3600";
+          tailf:info "<1-3600>;;Delay value (seconds)";
+        }
+      }
+    }
+    container default-information {
+      tailf:info "Control distribution of default information";
+      description
+        "Control distribution of default information";
+      tailf:display-when "ipv4 or ../../ipv4 or ../ipv4  or ipv6 or ../../ipv6 or ../ipv6  or nsap or ../../nsap or ../nsap";
+      leaf originate {
+        tailf:info "Distribute a default route";
+        description
+          "Distribute a default route";
+        type empty;
+      }
+    }
+    leaf default-metric {
+      tailf:info "Set metric of redistributed routes";
+      description
+        "Set metric of redistributed routes";
+      tailf:cli-full-command;
+      tailf:display-when "ipv4 or ../../ipv4 or ../ipv4  or ipv6 or ../../ipv6 or ../ipv6  or nsap or ../../nsap or ../nsap";
+      type uint32 {
+        range "1..4294967295";
+        tailf:info "<1-4294967295>;;Default metric";
+      }
+    }
+    container distance {
+      tailf:info "Define an administrative distance";
+      description
+        "Define an administrative distance";
+      tailf:display-when "ipv4 or ../../ipv4 or ../ipv4  or ipv6 or ../../ipv6 or ../ipv6 ";
+      container bgp {
+        tailf:info "BGP distance";
+        description
+          "BGP distance";
+        tailf:cli-sequence-commands;
+        tailf:cli-compact-syntax;
+        leaf extern-as {
+          tailf:cli-drop-node-name;
+          tailf:cli-incomplete-command;
+          type uint16 {
+            tailf:info "<1-255>;;Distance for routes external to the AS";
+            range "1..255";
+          }
+        }
+        leaf internal-as {
+          tailf:cli-drop-node-name;
+          tailf:cli-incomplete-command;
+          type uint16 {
+            tailf:info "<1-255>;;Distance for routes internal to the AS";
+            range "1..255";
+          }
+        }
+        leaf local {
+          tailf:cli-drop-node-name;
+          type uint16 {
+            tailf:info "<1-255>;;Distance for local routes";
+            range "1..255";
+          }
+        }
+      }
+      list adm-distance {
+        tailf:cli-drop-node-name;
+        tailf:cli-suppress-mode;
+        tailf:cli-delete-when-empty;
+        key "distance srcip wildbits";
+        leaf distance {
+          type uint16 {
+            tailf:info "<1-255>;;Administrative distance";
+            range "1..255";
+          }
+        }
+        leaf srcip {
+          type inet:ipv4-address {
+            tailf:info "A.B.C.D;;IP Source address";
+          }
+        }
+        leaf wildbits {
+          type inet:ipv4-address {
+            tailf:info "A.B.C.D;;Wildcard bits";
+          }
+        }
+        leaf acl {
+          tailf:cli-drop-node-name;
+          type union {
+            type uint16 {
+              range "1..99" {
+                tailf:info "<1-99>;;IP Standard access list number";
+              }
+            }
+            type uint16 {
+              range "1300..1999" {
+                tailf:info "<1300-1999>;;IP Standard expanded access list number";
+              }
+            }
+            type string {
+              pattern "[a-zA-Z].*";
+              tailf:info "WORD;;Standard access-list name";
+            }
+          }
+        }
+      }
+    }
+    list distribute-list {
+      tailf:info "Filter networks in routing updates";
+      description
+        "Filter networks in routing updates";
+      tailf:cli-compact-syntax;
+      tailf:cli-suppress-mode;
+      tailf:cli-delete-when-empty;
+      tailf:display-when "ipv4 or ../../ipv4 or ../ipv4 ";
+      key "id";
+      leaf id {
+        tailf:cli-incomplete-command;
+        type bgp-distribute-list-type;
+      }
+      choice in-out-choice {
+        container in {
+          presence "enable incoming routing updates";
+          tailf:info "Filter incoming routing updates";
+          description
+            "Filter incoming routing updates";
+          leaf interface {
+            type string;
+          }
+        }
+        container out {
+          presence "enable outgoing routing updates";
+          tailf:info "Filter outgoing routing updates";
+          description
+            "Filter outgoing routing updates";
+          leaf interface {
+            type string;
+          }
+        }
+      }
+    }
+    container maximum-paths {
+      tailf:info "Forward packets over multiple paths";
+      description
+        "Forward packets over multiple paths";
+      tailf:display-when "../../../../../ipv4 or ../../../../ipv4  or ../../../ipv4 or ../../ipv4 or ../../../../../ipv6 or ../../../../ipv6  or ../../../ipv6 or ../../ipv6  or ../../nsap or ../nsap  or ../../rtfilter or ../rtfilter  or ../../vpnv4 or ../vpnv4";
+      uses max-path-grouping;
+      choice max-path-choice {
+        case eibgp-case {
+          container eibgp {
+            tailf:display-when "../../../ipv4  or ../../../ipv6";
+            tailf:info "Both eBGP and iBGP paths as multipath";
+            description
+              "Both eBGP and iBGP paths as multipath";
+            uses max-path-grouping;
+          }
+        }
+        case ibgp-case {
+          container ibgp {
+            tailf:info "iBGP-multipath";
+            description
+              "iBGP-multipath";
+            tailf:display-when "../../../ipv4  or ../../../ipv6 ";
+            choice ibgp-choice {
+              case a {
+                container unequal-cost {
+                  tailf:info "Perform Un-Equal cost multipath selection";
+                  description
+                    "Perform Un-Equal cost multipath selection";
+                  uses max-path-grouping;
+                }
+              }
+              case b {
+                uses max-path-grouping;
+              }
+            }
+          }
+        }
+      }
+    }
+    list neighbor {
+      tailf:info "Specify a neighbor router";
+      description
+        "Specify a neighbor router";
+      tailf:cli-suppress-mode;
+      tailf:cli-delete-when-empty;
+      tailf:cli-incomplete-command;
+      ordered-by user;
+      must "count(*) > 1" {
+        tailf:dependency ".";
+      }
+      key "id";
+      leaf id {
+        type union {
+          type string {
+            tailf:info "WORD;;Neighbor tag";
+          }
+          type inet:ipv4-address {
+            tailf:info "A.B.C.D;;Neighbor address";
+          }
+          type inet:ipv6-address {
+            tailf:info "X:X:X:X::X;;Neighbor IPv6 address";
+          }
+        }
+      }
+      container peer-group {
+        tailf:info "Member of the peer-group";
+        description
+          "Member of the peer-group";
+        tailf:cli-delete-when-empty;
+        presence "true";
+        leaf peer-group-name {
+          tailf:info "WORD;;peer-group name";
+          description
+            "WORD;;peer-group name";
+          tailf:cli-drop-node-name;
+          tailf:cli-delete-container-on-delete;
+          tailf:cli-full-command;
+          tailf:cli-diff-dependency "../../remote-as";
+          type string;
+        }
+      }
+      leaf remote-as {
+        tailf:info "Specify a BGP neighbor";
+        description
+          "Specify a BGP neighbor";
+        tailf:cli-full-command;
+        tailf:cli-delete-container-on-delete;
+        type uint16 {
+          tailf:info "<1-65535>  AS of remote neighbor";
+          range "1..65535";
+        }
+      }
+      container local-as {
+        tailf:info "Specify a local-as number";
+        description
+          "Specify a local-as number";
+        tailf:cli-compact-syntax;
+        tailf:cli-sequence-commands {
+          tailf:cli-reset-siblings;
+        }
+        tailf:cli-delete-when-empty;
+        presence "Specify a local-as number";
+        leaf as-no {
+          tailf:cli-drop-node-name;
+          type bgp-as-number-type;
+        }
+        leaf no-prepend {
+          tailf:info "Do not prepend local-as to updates from ebgp peers";
+          description
+            "Do not prepend local-as to updates from ebgp peers";
+          type empty;
+        }
+        leaf replace-as {
+          tailf:info "Replace real AS with local AS in the EBGP updates";
+          description
+            "Replace real AS with local AS in the EBGP updates";
+          type empty;
+        }
+        leaf dual-as {
+          tailf:info "Accept either real AS or local AS from the ebgp peer";
+          description
+            "Accept either real AS or local AS from the ebgp peer";
+          type empty;
+        }
+      }
+      leaf activate {
+        tailf:info "Enable the Address Family for this Neighbor";
+        description
+          "Enable the Address Family for this Neighbor";
+        tailf:cli-full-command;
+        type empty;
+      }
+      container additional-paths {
+        leaf disable {
+          tailf:info "Disable additional paths for this neighbor";
+          description
+            "Disable additional paths for this neighbor";
+          type empty;
+        }
+        leaf receive {
+          tailf:info "Receive additional paths from neighbors";
+          description
+            "Receive additional paths from neighbors";
+          type empty;
+        }
+        container send {
+          tailf:info "Send additional paths to this neighbor";
+          description
+            "Send additional paths to this neighbor";
+          presence "true";
+          leaf receive {
+            tailf:info "Receive additional paths from this neighbor";
+            description
+              "Receive additional paths from this neighbor";
+            type empty;
+          }
+        }
+      }
+      container advertise {
+        tailf:info "Advertise to this neighbor";
+        description
+          "Advertise to this neighbor";
+        container additional-paths {
+          tailf:info "Advertise additional paths";
+          description
+            "Advertise additional paths";
+          container all {
+            tailf:info "Select all available paths";
+            description
+              "Select all available paths";
+            presence "true";
+            container best {
+              tailf:info "Select best N paths";
+              description
+                "Select best N paths";
+              list best-range {
+                tailf:cli-drop-node-name;
+                tailf:cli-suppress-mode;
+                key "range";
+                leaf range {
+                  tailf:info "Number of best paths in additional paths to be selected";
+                  description
+                    "Number of best paths in additional paths to be selected";
+                  type uint8 {
+                    range "2..3";
+                  }
+                }
+                leaf group-best {
+                  tailf:info "Select group-best paths";
+                  description
+                    "Select group-best paths";
+                  type empty;
+                }
+              }
+            }
+            container group-best {
+              tailf:info "Select group-best paths";
+              description
+                "Select group-best paths";
+              presence "true";
+              leaf best {
+                tailf:info "Select best N paths";
+                description
+                  "Number of best paths in additional paths to be selected";
+                type uint8 {
+                  range "2..3";
+                }
+              }
+            }
+          }
+          container best {
+            tailf:info "Select best N paths";
+            description
+              "Select best N paths";
+            list best-range {
+              tailf:cli-drop-node-name;
+              tailf:cli-suppress-mode;
+              key "range";
+              leaf range {
+                tailf:info "Number of best paths in additional paths to be selected";
+                description
+                  "Number of best paths in additional paths to be selected";
+                type uint8 {
+                  range "2..3";
+                }
+              }
+              leaf all {
+                tailf:info "Select all available paths";
+                description
+                  "Select all available paths";
+                type empty;
+              }
+              container group-best {
+                tailf:info "Select group-best paths";
+                description
+                  "Select group-best paths";
+                presence "true";
+                leaf all {
+                  tailf:info "Select all available paths";
+                  description
+                    "Select all available paths";
+                  type empty;
+                }
+              }
+            }
+          }
+          container group-best {
+            tailf:info "Select group-best paths";
+            description
+              "Select group-best paths";
+            presence "true";
+            leaf all {
+              tailf:info "Select all available paths";
+              description
+                "Select all available paths";
+              type empty;
+            }
+            leaf best {
+              tailf:info "Select best N paths";
+              description
+                "Number of best paths in additional paths to be selected";
+              type uint8 {
+                range "2..3";
+              }
+            }
+          }
+        }
+        leaf best-external {
+          tailf:info "Advertise best-external (at RRs best-internal) path";
+          description
+            "Advertise best-external (at RRs best-internal) path";
+          type empty;
+        }
+        container diverse-path {
+          tailf:info "Advertise diverse path";
+          description
+            "Advertise diverse path";
+          container backup {
+            tailf:info "Diverse path can be backup path";
+            description
+              "Diverse path can be backup path";
+            presence "true";
+            leaf mpath {
+              tailf:info "Diverse path can be multipath";
+              description
+                "Diverse path can be multipath";
+              type empty;
+            }
+          }
+          leaf mpath {
+            tailf:info "Diverse path can be multipath";
+            description
+              "Diverse path can be multipath";
+            type empty;
+          }
+        }
+      }
+      container advertise-map {
+        tailf:info "specify route-map for conditional advertisement";
+        description
+          "specify route-map for conditional advertisement";
+        list name {
+          tailf:cli-drop-node-name;
+          tailf:cli-suppress-mode;
+          key "word";
+          leaf word {
+            tailf:info "advertise route-map name";
+            description
+              "advertise route-map name";
+            type string;
+          }
+          leaf exist-map {
+            tailf:info "advertise prefix only if prefix is in the condition exists";
+            description
+              "condition route-map name";
+            type string;
+          }
+          leaf non-exist-map {
+            tailf:info "advertise prefix only if prefix in the condition does not exist";
+            description
+              "condition route-map name";
+            type string;
+          }
+        }
+      }
+      container aigp {
+        tailf:info "Enable a AIGP on neighbor";
+        description
+          "Enable a AIGP on neighbor";
+        presence "true";
+        container send {
+          tailf:info "Cost community or MED carrying AIGP VALUE";
+          description
+            "Cost community or MED carrying AIGP VALUE";
+          container cost-community {
+            tailf:info "Cost extended community carrying AIGP Value";
+            description
+              "Cost extended community carrying AIGP Value";
+            list cc-range {
+              tailf:cli-drop-node-name;
+              tailf:cli-suppress-mode;
+              key "range";
+              leaf range {
+                tailf:info "Community ID";
+                description
+                  "Community ID";
+                type uint8 {
+                  range "0..255";
+                }
+              }
+              container poi {
+                tailf:info "Point of Insertion";
+                description
+                  "Point of Insertion";
+                container igp-cost {
+                  tailf:info "Point of Insertion After IGP";
+                  description
+                    "Point of Insertion After IGP";
+                  presence "true";
+                  leaf transitive {
+                    tailf:info "Cost community is Transitive";
+                    description
+                      "Cost community is Transitive";
+                    type empty;
+                  }
+                }
+                container pre-bestpath {
+                  tailf:info "Point of Insertion At Beginning";
+                  description
+                    "Point of Insertion At Beginning";
+                  presence "true";
+                  leaf transitive {
+                    tailf:info "Cost community is Transitive";
+                    description
+                      "Cost community is Transitive";
+                    type empty;
+                  }
+                }
+              }
+            }
+          }
+          leaf med {
+            tailf:info "Med carrying AIGP Value";
+            description
+              "Med carrying AIGP Value";
+            type empty;
+          }
+        }
+      }
+      leaf allow-policy {
+        tailf:info "Enable the policy support for this IBGP Neighbor";
+        description
+          "Enable the policy support for this IBGP Neighbor";
+        type empty;
+      }
+      container announce {
+        tailf:info "Announce RPKI State using an Extended Community";
+        description
+          "Announce RPKI State using an Extended Community";
+        container rpki {
+          tailf:info "Announce RPKI information using an Extended Community";
+          description
+            "Announce RPKI information using an Extended Community";
+          leaf state {
+            tailf:info "Announce RPKI State information using an Extended Community";
+            description
+              "Announce RPKI State information using an Extended Community";
+            type empty;
+          }
+        }
+      }
+      leaf advertisement-interval {
+        tailf:info "Minimum interval between sending BGP routing updates";
+        description
+          "Minimum interval between sending BGP routing updates";
+        tailf:cli-full-command;
+        type uint16 {
+          range "0..600";
+          tailf:info "<0-600>;;time in seconds";
+        }
+      }
+      container allowas-in {
+        tailf:info "Accept as-path with my AS present in it";
+        description
+          "Accept as-path with my AS present in it";
+        presence "accept as-paths";
+        tailf:cli-delete-when-empty;
+        leaf as-number {
+          tailf:cli-drop-node-name;
+          type uint8 {
+            range "1..10";
+            tailf:info "<1-10>  Number of occurances of AS number";
+          }
+        }
+      }
+      container as-override {
+        tailf:info "Override matching AS-number while sending update";
+        description
+          "Override matching AS-number while sending update";
+        tailf:cli-delete-when-empty;
+        presence "true";
+        leaf disable {
+          type empty;
+        }
+      }
+      container capability {
+        tailf:info "Advertise capability to the peer";
+        description
+          "Advertise capability to the peer";
+        container orf {
+          tailf:info "Advertise ORF capability to the peer";
+          description
+            "Advertise ORF capability to the peer";
+          leaf-list prefix-list {
+            tailf:cli-flat-list-syntax;
+            tailf:info "Advertise prefixlist ORF capability to this neighbor";
+            description
+              "Advertise prefixlist ORF capability to this neighbor";
+            max-elements "1";
+            type enumeration {
+              enum "both" {
+                tailf:info "Capability to SEND and RECEIVE the ORF to/from this neighbor";
+              }
+              enum "receive" {
+                tailf:info "Capability to RECEIVE the ORF from this neighbor";
+              }
+              enum "send" {
+                tailf:info "Capability to SEND the ORF to this neighbor";
+              }
+            }
+          }
+        }
+      }
+      container cluster-id {
+        tailf:info "Configure Route-Reflector Cluster-id (peers may reset)";
+        description
+          "Configure Route-Reflector Cluster-id (peers may reset)";
+        leaf id {
+          tailf:info "Route-Reflector Cluster-id as 32 bit quantity";
+          description
+            "Route-Reflector Cluster-id as 32 bit quantity";
+          tailf:cli-drop-node-name;
+          type uint32 {
+            range "1..4294967294";
+          }
+        }
+        leaf ip {
+          tailf:info "Route-Reflector Cluster-id in IP address format";
+          description
+            "Route-Reflector Cluster-id in IP address format";
+          tailf:cli-drop-node-name;
+          type inet:ipv4-address;
+        }
+      }
+      container default-originate {
+        tailf:info "Originate default route to this neighbour";
+        description
+          "Originate default route to this neighbour";
+        tailf:cli-delete-when-empty;
+        presence "enable originate default route to this neighbour";
+        leaf route-map {
+          tailf:info "Route-map to specify criteria to originate default";
+          description
+            "Route-map to specify criteria to originate default";
+          type string {
+            tailf:info "WORD;;route-map name";
+          }
+        }
+      }
+      leaf description {
+        tailf:info "Neighbor specific description";
+        description
+          "Neighbor specific description";
+        tailf:cli-full-command;
+        tailf:cli-multi-value;
+        type string {
+          tailf:info "LINE;;Up to 80 characters describing this neighbor";
+        }
+      }
+      leaf disable-connected-check {
+        tailf:info "One-hop away EBGP peer using loopback address";
+        description
+          "One-hop away EBGP peer using loopback address";
+        tailf:cli-full-command;
+        type empty;
+      }
+      list distribute-list {
+        tailf:info "Filter updates to/from this neighbor";
+        description
+          "Filter updates to/from this neighbor";
+        tailf:cli-suppress-mode;
+        tailf:cli-delete-when-empty;
+        key "inout";
+        leaf inout {
+          type enumeration {
+            enum "in" {
+              tailf:code-name "dist_in";
+              tailf:info "Filter incoming updates";
+            }
+            enum "out" {
+              tailf:code-name "dist_out";
+              tailf:info "Filter outgoing updates";
+            }
+          }
+        }
+        leaf accesslist {
+          tailf:cli-drop-node-name;
+          tailf:cli-prefix-key;
+          type bgp-distribute-list-type2;
+          mandatory true;
+        }
+      }
+      leaf dmzlink-bw {
+        tailf:info "Propagate the DMZ link bandwidth";
+        description
+          "Propagate the DMZ link bandwidth";
+        tailf:cli-full-command;
+        type empty;
+      }
+      container ebgp-multihop {
+        tailf:info "Allow EBGP neighbors not on directly connected networks";
+        description
+          "Allow EBGP neighbors not on directly connected networks";
+        tailf:cli-delete-when-empty;
+        presence "Allow EBGP neighbors not on directly connected networks";
+        leaf max-hop {
+          tailf:cli-drop-node-name;
+          type uint8 {
+            range "1..255";
+            tailf:info "<1-255>;;maximum hop count";
+          }
+        }
+      }
+      container fall-over {
+        tailf:info "session fall on peer route lost";
+        description
+          "session fall on peer route lost";
+        container bfd {
+          tailf:info "Use BFD to detect failure";
+          description
+            "Use BFD to detect failure";
+          presence "true";
+        }
+      }
+      list filter-list {
+        tailf:info "Establish BGP filters";
+        description
+          "Establish BGP filters";
+        tailf:cli-suppress-mode;
+        tailf:cli-delete-when-empty;
+        key "inout";
+        leaf inout {
+          type enumeration {
+            enum "in" {
+              tailf:code-name "filter_in";
+              tailf:info "Filter incoming routes";
+            }
+            enum "out" {
+              tailf:code-name "filter_out";
+              tailf:info "Filter outgoing routes";
+            }
+          }
+        }
+        leaf as-path-list {
+          tailf:cli-drop-node-name;
+          tailf:cli-prefix-key;
+          type uint16 {
+            range "1..500";
+            tailf:info "<1-500>;;AS path access list";
+          }
+          mandatory true;
+        }
+      }
+      container inherit {
+        tailf:info "Inherit a template";
+        description
+          "Inherit a template";
+        leaf peer-policy {
+          tailf:info "Inherit a peer-policy template";
+          description
+            "Inherit a peer-policy template";
+          tailf:cli-full-command;
+          type string {
+            tailf:info "WORD;;Template name";
+          }
+        }
+        leaf peer-session {
+          tailf:info "Inherit a peer-session template";
+          description
+            "Inherit a peer-session template";
+          tailf:cli-full-command;
+          type string {
+            tailf:info "WORD;;Template name";
+          }
+        }
+      }
+      container log-neighbor-changes {
+        tailf:info "Log neighbor up/down and reset reason";
+        description
+          "Log neighbor up/down and reset reason";
+        presence "true";
+        leaf disable {
+          tailf:info "disable";
+          description
+            "disable";
+          type empty;
+        }
+      }
+      container maximum-prefix {
+        tailf:info "Maximum number of prefixes accepted from this peer";
+        description
+          "Maximum number of prefixes accepted from this peer";
+        tailf:cli-compact-syntax;
+        tailf:cli-sequence-commands {
+          tailf:cli-reset-all-siblings;
+        }
+        leaf max-prefix-no {
+          tailf:cli-drop-node-name;
+          type uint32 {
+            range "1..2147483647";
+            tailf:info "<1-2147483647>;;maximum no. of prefix limit";
+          }
+        }
+        leaf threshold {
+          tailf:cli-drop-node-name;
+          tailf:cli-break-sequence-commands;
+          type uint8 {
+            range "1..100";
+            tailf:info "<1-100>;;Threshold value (%) at which to generate a warning msg";
+          }
+        }
+        leaf restart {
+          tailf:cli-full-command;
+          tailf:info "Restart bgp connection after limit is exceeded";
+          description
+            "Restart bgp connection after limit is exceeded";
+          type uint16 {
+            range "1..65535";
+            tailf:info "<1-65535>  Restart interval in minutes";
+          }
+        }
+        leaf warning-only {
+          tailf:cli-full-command;
+          tailf:info "Only give warning message when limit is exceeded";
+          description
+            "Only give warning message when limit is exceeded";
+          type empty;
+        }
+      }
+      leaf next-hop-self {
+        tailf:cli-full-command;
+        tailf:info "Disable the next hop calculation for this neighbor";
+        description
+          "Disable the next hop calculation for this neighbor";
+        type empty;
+      }
+      leaf next-hop-unchanged {
+        tailf:cli-full-command;
+        tailf:info "Propagate the iBGP paths's next hop unchanged for this neighbor";
+        description
+          "Propagate the iBGP paths's next hop unchanged for this neighbor";
+        type empty;
+      }
+      container password {
+        tailf:info "Set a password";
+        description
+          "Set a password";
+        tailf:cli-compact-syntax;
+        leaf enctype {
+          tailf:cli-drop-node-name;
+          tailf:cli-incomplete-command;
+          tailf:cli-reset-container;
+          type uint8 {
+            range "0..7";
+            tailf:info "<0-7>;;Encryption type (0 to disable encryption, 7 for proprietary)";
+          }
+          default "0";
+        }
+        leaf text {
+          tailf:cli-drop-node-name;
+          tailf:cli-full-command;
+          tailf:cli-multi-value;
+          tailf:cli-reset-container;
+          type string {
+            tailf:info "LINE;;The password";
+          }
+        }
+      }
+      list prefix-list {
+        tailf:info "Filter updates to/from this neighbor";
+        description
+          "Filter updates to/from this neighbor";
+        tailf:cli-suppress-mode;
+        tailf:cli-delete-when-empty;
+        key "inout";
+        leaf inout {
+          type enumeration {
+            enum "in" {
+              tailf:code-name "prefix_in";
+              tailf:info "Filter incoming updates";
+            }
+            enum "out" {
+              tailf:code-name "prefix_out";
+              tailf:info "Filter outgoing updates";
+            }
+          }
+        }
+        leaf prefix-list-name {
+          tailf:cli-drop-node-name;
+          tailf:cli-prefix-key;
+          type string {
+            tailf:info "WORD;;Name of a prefix list";
+          }
+          mandatory true;
+        }
+      }
+      container path-attribute {
+        tailf:info "BGP optional attribute filtering";
+        description
+          "BGP optional attribute filtering";
+        container discard {
+          tailf:info "Discard matching path-attribute for this neighbor";
+          description
+            "Discard matching path-attribute for this neighbor";
+          uses bgp-path-range-grouping;
+        }
+        container treat-as-withdraw {
+          tailf:info "Treat-as-withdraw matching path-attribute for this neighbor";
+          description
+            "Treat-as-withdraw matching path-attribute for this neighbor";
+          uses bgp-path-range-grouping;
+        }
+      }
+      leaf remove-private-as {
+        tailf:cli-full-command;
+        tailf:info "Remove private AS number from outbound updates";
+        description
+          "Remove private AS number from outbound updates";
+        type empty;
+      }
+      list route-map {
+        tailf:info "Apply route map to neighbor";
+        description
+          "Apply route map to neighbor";
+        tailf:cli-suppress-mode;
+        tailf:cli-delete-when-empty;
+        key "inout";
+        leaf inout {
+          type enumeration {
+            enum "in" {
+              tailf:code-name "route_in";
+              tailf:info "Apply map to incoming routes";
+            }
+            enum "out" {
+              tailf:code-name "route_out";
+              tailf:info "Apply map to outbound routes";
+            }
+          }
+        }
+        leaf route-map-name {
+          tailf:cli-drop-node-name;
+          tailf:cli-prefix-key;
+          type string {
+            tailf:info "WORD;;Name of route map";
+          }
+          mandatory true;
+        }
+      }
+      leaf route-reflector-client {
+        tailf:cli-full-command;
+        tailf:info "Configure a neighbor as Route Reflector client";
+        description
+          "Configure a neighbor as Route Reflector client";
+        type empty;
+      }
+      leaf route-reflector-cluster-id {
+        tailf:cli-full-command;
+        type union {
+          type uint32 {
+            range "1..4294967295";
+            tailf:info "<1-4294967295>;;Route-Reflector Cluster-id as 32 bit quantity";
+          }
+          type inet:ipv4-address {
+            tailf:info "A.B.C.D;;Route-Reflector Cluster-id in IP address format";
+          }
+        }
+      }
+      container send-community {
+        tailf:info "Send Community attribute to this neighbor";
+        description
+          "Send Community attribute to this neighbor";
+        tailf:cli-delete-when-empty;
+        presence "true";
+        leaf send-community-where {
+          tailf:cli-drop-node-name;
+          type enumeration {
+            enum "both" {
+              tailf:info "Send Standard and Extended Community attributes";
+            }
+            enum "extended" {
+              tailf:info "Send Extended Community attribute";
+            }
+            enum "standard" {
+              tailf:code-name "send_standard";
+              tailf:info "Send Standard Community attribute";
+            }
+          }
+        }
+      }
+      container send-label {
+        tailf:info "Send NLRI + MPLS Label to this peer";
+        description
+          "Send NLRI + MPLS Label to this peer";
+        leaf send-label-explicit {
+          tailf:cli-drop-node-name;
+          type enumeration {
+            enum "explicit-null" {
+              tailf:code-name "send_explicit_null";
+              tailf:info "Advertise Explicit Null label in place of Implicit Null";
+            }
+          }
+        }
+      }
+      leaf shutdown {
+        tailf:cli-full-command;
+        tailf:info "Administratively shut down this neighbor";
+        description
+          "Administratively shut down this neighbor";
+        type empty;
+      }
+      leaf soft-reconfiguration {
+        tailf:cli-full-command;
+        tailf:info "Per neighbor soft reconfiguration";
+        description
+          "Per neighbor soft reconfiguration";
+        type enumeration {
+          enum "inbound" {
+            tailf:info "Allow inbound soft reconfiguration for this neighbor";
+          }
+        }
+      }
+      container slow-peer {
+        tailf:info "Configure slow-peer";
+        description
+          "Configure slow-peer";
+        container detection {
+          tailf:info "Slow-peer detection";
+          description
+            "Slow-peer detection";
+          presence "true";
+          leaf threshold {
+            tailf:info "Set the slow-peer detection threshold";
+            description
+              "Threshold value (seconds)";
+            type uint16 {
+              range "120..3600";
+            }
+          }
+        }
+        container split-update-group {
+          tailf:info "Configure slow-peer split-update-group";
+          description
+            "Configure slow-peer split-update-group";
+          container dynamic {
+            tailf:info "Dynamically split the slow peer to slow-update group";
+            description
+              "Dynamically split the slow peer to slow-update group";
+            presence "true";
+            leaf permanent {
+              tailf:info "Keep the slow-peer permanently in slow-update group";
+              description
+                "Keep the slow-peer permanently in slow-update group";
+              type empty;
+            }
+          }
+        }
+      }
+      container timers {
+        tailf:info "BGP per neighbor timers";
+        description
+          "BGP per neighbor timers";
+        tailf:cli-compact-syntax;
+        tailf:cli-sequence-commands {
+          tailf:cli-reset-siblings;
+        }
+        leaf keepalive-interval {
+          tailf:cli-drop-node-name;
+          tailf:cli-incomplete-command;
+          type uint16 {
+            range "0..65535";
+            tailf:info "<0-65535>;;Keepalive interval";
+          }
+        }
+        leaf holdtime {
+          tailf:cli-drop-node-name;
+          type uint16 {
+            range "0..65535";
+            tailf:info "<0-65535>;;Holdtime";
+          }
+        }
+        leaf minimum-neighbor-hold {
+          tailf:cli-drop-node-name;
+          type uint16 {
+            range "0..65535";
+            tailf:info "<0-65535>  Minimum hold time from neighbor";
+          }
+        }
+      }
+      container translate-update {
+        tailf:info "Translate Update to MBGP format";
+        description
+          "Translate Update to MBGP format";
+        container ipv4 {
+          tailf:info "Address Family";
+          description
+            "Address Family";
+          container multicast {
+            tailf:info "Address Family modifier";
+            description
+              "Address Family modifier";
+            tailf:cli-delete-when-empty;
+            presence "Address Family modifier";
+            leaf unicast {
+              tailf:info "Address Family modifier";
+              description
+                "Address Family modifier";
+              type empty;
+            }
+          }
+        }
+      }
+      container transport {
+        tailf:info "Transport options";
+        description
+          "Transport options";
+        leaf connection-mode {
+          tailf:info "Specify passive or active connection";
+          description
+            "Specify passive or active connection";
+          type enumeration {
+            enum "active" {
+              tailf:info "Actively establish the TCP session";
+            }
+            enum "passive" {
+              tailf:info "Passively establish the TCP session";
+            }
+          }
+        }
+        leaf multi-session {
+          tailf:info "Use Multi-session for transport";
+          description
+            "Use Multi-session for transport";
+          type empty;
+        }
+        container path-mtu-discovery {
+          tailf:info "Use transport path MTU discovery";
+          description
+            "Use transport path MTU discovery";
+          presence "true";
+          leaf disable {
+            tailf:info "disable";
+            description
+              "disable";
+            type empty;
+          }
+        }
+      }
+      container ttl-security {
+        tailf:info "BGP ttl security check";
+        description
+          "BGP ttl security check";
+        leaf hops {
+          tailf:info "IP hops";
+          description
+            "IP hops";
+          type uint8 {
+            range "1..254";
+            tailf:info "<1-254>;;maximum number of hops";
+          }
+        }
+      }
+      leaf unsuppress-map {
+        tailf:info "Route-map to selectively unsuppress suppressed routes";
+        description
+          "Route-map to selectively unsuppress suppressed routes";
+        tailf:cli-full-command;
+        type string {
+          tailf:info "WORD;;Name of route map";
+        }
+      }
+      container update-source {
+        tailf:info "Source of routing updates";
+        description
+          "Source of routing updates";
+        tailf:cli-diff-dependency "/ios:native/interface";
+        uses interface-grouping;
+      }
+      leaf version {
+        tailf:cli-full-command;
+        tailf:info "Set the BGP version to match a neighbor";
+        description
+          "Set the BGP version to match a neighbor";
+        type uint16 {
+          range "4";
+          tailf:info "<4-4>;;Neighbor's BGP version";
+        }
+      }
+      leaf weight {
+        tailf:cli-full-command;
+        tailf:info "Set default weight for routes from this neighbor";
+        description
+          "Set default weight for routes from this neighbor";
+        type uint16 {
+          range "0..65535";
+          tailf:info "<0-65535>;;default weight";
+        }
+      }
+      container ha-mode {
+        tailf:info "high availability mode";
+        description
+          "high availability mode";
+        container graceful-restart {
+          tailf:info "graceful-restart for this peer";
+          description
+            "graceful-restart for this peer";
+          presence "true";
+          leaf disable {
+            tailf:info "disable graceful-restart";
+            description
+              "disable graceful-restart";
+            type empty;
+          }
+        }
+        container sso {
+          tailf:info "stateful-switchover support for this peer";
+          description
+            "stateful-switchover support for this peer";
+          presence "true";
+          leaf disable {
+            tailf:info "disable stateful-switchover";
+            description
+              "disable stateful-switchover";
+            type empty;
+          }
+        }
+      }
+    }
+    list network {
+      tailf:info "Specify a network to announce via BGP";
+      description
+        "Specify a network to announce via BGP";
+      tailf:cli-suppress-mode;
+      tailf:cli-delete-when-empty;
+      tailf:cli-compact-syntax;
+      tailf:cli-reset-container;
+      tailf:display-when "ipv4 or ../../ipv4 or ../ipv4  or ipv6 or ../../ipv6 or ../ipv6  or nsap or ../../nsap or ../nsap";
+      key "number";
+      leaf number {
+        type inet:ipv4-address {
+          tailf:info "A.B.C.D;;Network number";
+        }
+      }
+      leaf backdoor {
+        tailf:info "Specify a BGP backdoor route";
+        description
+          "Specify a BGP backdoor route";
+        tailf:cli-full-command;
+        type empty;
+      }
+      leaf mask {
+        tailf:info "Network mask";
+        description
+          "Network mask";
+        type inet:ipv4-address {
+          tailf:info "A.B.C.D;;Network mask";
+        }
+      }
+      leaf route-map {
+        tailf:info "Route-map to modify the attributes";
+        description
+          "Route-map to modify the attributes";
+        type string {
+          tailf:info "WORD;;Name of the route map";
+        }
+      }
+    }
+    container redistribute {
+      tailf:info "Redistribute information from another routing protocol";
+      description
+        "Redistribute information from another routing protocol";
+      tailf:display-when "ipv4 or ../../ipv4 or ../ipv4 or ../../../ipv4 or ipv6 or ../../ipv6 or ../ipv6  or nsap or ../../nsap or ../nsap";
+      container application {
+        tailf:info "Application";
+        description
+          "Application";
+        tailf:cli-compact-syntax;
+        tailf:cli-sequence-commands {
+          tailf:cli-reset-all-siblings;
+        }
+        presence "true";
+        list name {
+          tailf:cli-drop-node-name;
+          tailf:cli-suppress-mode;
+          key "name";
+          leaf name {
+            tailf:info "WORD;;Route map name";
+            description
+              "WORD;;Route map name";
+            type string;
+          }
+          uses metric-route-map-grouping;
+        }
+      }
+      container bgp {
+        tailf:info "Border Gateway Protocol (BGP)";
+        description
+          "Border Gateway Protocol (BGP)";
+        tailf:cli-compact-syntax;
+        tailf:cli-sequence-commands {
+          tailf:cli-reset-all-siblings;
+        }
+        leaf as-no {
+          tailf:cli-drop-node-name;
+          type bgp-as-number-type;
+        }
+        uses metric-route-map-grouping;
+      }
+      container connected {
+        tailf:info "Connected";
+        description
+          "Connected";
+        tailf:cli-delete-when-empty;
+        presence "Connected";
+        uses metric-route-map-grouping;
+      }
+      container dvmrp {
+        tailf:info "Redistribution of DVMRP into BGP IPv4 Multicast";
+        description
+          "Redistribution of DVMRP into BGP IPv4 Multicast";
+        tailf:cli-compact-syntax;
+        tailf:cli-sequence-commands {
+          tailf:cli-reset-siblings;
+        }
+        tailf:cli-delete-when-empty;
+        presence "Redistribution of DVMRP into BGP IPv4 Multicast";
+        uses route-map-metric-grouping;
+      }
+      container eigrp {
+        tailf:info "Enhanced Interior Gateway Routing Protocol (EIGRP)";
+        description
+          "Enhanced Interior Gateway Routing Protocol (EIGRP)";
+        tailf:cli-compact-syntax;
+        tailf:cli-sequence-commands {
+          tailf:cli-reset-all-siblings;
+        }
+        leaf as-no {
+          tailf:cli-drop-node-name;
+          type uint16 {
+            range "1..65535";
+            tailf:info "<1-65535>;;Autonomous system number";
+          }
+        }
+        uses metric-route-map-grouping;
+      }
+      container isis {
+        tailf:info "ISO IS-IS";
+        description
+          "ISO IS-IS";
+        list isis-area {
+          tailf:cli-drop-node-name;
+          key "name";
+          leaf name {
+            type string {
+              tailf:info "WORD;;ISO routing area tag";
+              pattern "^([^mlir].*)|(i[^p].*)|(ip..*)|(l[^e].*)|(le[^v].*)|(lev[^e].*)|(leve[^l].*)|(level[^\\-].*)|(m[^e].*)|(me[^t].*)|(met[^r].*)|(metr[^i].*)|(metri[^c].*)|(metric..*)*(r[^o].*)|(ro[^u].*)|(rou[^t].*)|(rout[^e].*)|(route[^\\-].*)|(route-[^m].*)|(route-m[^a].*)|(route-ma[^p].*)|(route-map..*)$";
+            }
+          }
+          uses redistribute-isis-grouping;
+        }
+        container default {
+          tailf:cli-drop-node-name;
+          uses redistribute-isis-grouping;
+        }
+      }
+      container iso-igrp {
+        tailf:info "IGRP for OSI networks";
+        description
+          "IGRP for OSI networks";
+        list iso-igrp-area {
+          tailf:cli-compact-syntax;
+          tailf:cli-sequence-commands;
+          tailf:cli-drop-node-name;
+          key "name";
+          leaf name {
+            type string {
+              tailf:info "WORD;;Pointer to route-map entries";
+              pattern "^([^r].*)|(r^[o].*)|(ro[^u].*)|(rou[^t].*)|(rout[^e].*)|(route[^\\-].*)|(route-[^m].*)|(route-m[^a].*)|(route-ma[^p])|(route-map..*)";
+            }
+          }
+          uses route-map-metric-grouping;
+        }
+        container default {
+          tailf:cli-compact-syntax;
+          tailf:cli-sequence-commands;
+          uses route-map-metric-grouping;
+        }
+      }
+      container mobile {
+        presence "Mobile routes";
+        tailf:info "Mobile routes";
+        description
+          "Mobile routes";
+        uses metric-route-map-grouping;
+      }
+      container odr {
+        presence "On Demand stub Routes";
+        tailf:info "On Demand stub Routes";
+        description
+          "On Demand stub Routes";
+        uses metric-route-map-grouping;
+      }
+      list ospf {
+        tailf:info "Open Shortest Path First (OSPF)";
+        description
+          "Open Shortest Path First (OSPF)";
+        tailf:cli-suppress-mode;
+        key "id";
+        leaf id {
+          type uint16 {
+            range "1..65535";
+            tailf:info "<1-65535>;;Process ID";
+          }
+        }
+        list vrf {
+          tailf:info "VPN Routing/Forwarding Instance";
+          description
+            "VPN Routing/Forwarding Instance";
+          tailf:cli-diff-dependency "/ios:native/ip/vrf";
+          tailf:cli-diff-dependency "/ios:native/vrf/definition";
+          key "name";
+          leaf name {
+            type string {
+              tailf:info "WORD;;VPN Routing/Forwarding Instance (VRF) name";
+            }
+          }
+          container match {
+            tailf:info "Redistribution of OSPF routes";
+          }
+          uses metric-route-map-grouping;
+        }
+        container non-vrf {
+          tailf:cli-drop-node-name;
+          container match {
+            tailf:info "Redistribution of OSPF routes";
+            tailf:cli-flatten-container;
+            tailf:cli-compact-syntax;
+            leaf internal {
+              tailf:info "Redistribute OSPF internal routes";
+              description
+                "Redistribute OSPF internal routes";
+              type empty;
+            }
+            leaf external {
+              tailf:info "Redistribute OSPF external routes";
+              description
+                "Redistribute OSPF external routes";
+              type redist-ospf-external-type;
+            }
+            leaf external2 {
+              tailf:alt-name "external";
+              tailf:info "Redistribute OSPF external routes";
+              description
+                "Redistribute OSPF external routes";
+              type redist-ospf-external-type;
+            }
+            leaf nssa-external {
+              tailf:info "Redistribute OSPF NSSA external routes";
+              description
+                "Redistribute OSPF NSSA external routes";
+              type redist-ospf-external-type;
+            }
+            uses metric-route-map-grouping;
+          }
+          uses metric-route-map-grouping;
+        }
+      }
+      container rip {
+        presence "Routing Information Protocol (RIP)";
+        tailf:info "Routing Information Protocol (RIP)";
+        description
+          "Routing Information Protocol (RIP)";
+        uses metric-route-map-grouping;
+      }
+      container static {
+        presence "Static routes";
+        tailf:info "Static routes";
+        description
+          "Static routes";
+        container clns {
+          tailf:info "Redistribution of OSI dynamic routes";
+          description
+            "Redistribution of OSI dynamic routes";
+          presence "true";
+          uses route-map-metric-grouping;
+        }
+        container ip {
+          tailf:info "Redistribution of IP dynamic routes";
+          presence "true";
+          uses metric-route-map-grouping;
+        }
+        uses metric-route-map-grouping;
+      }
+    }
+    leaf synchronization {
+      tailf:info "Perform IGP synchronization";
+      description
+        "Perform IGP synchronization";
+      tailf:cli-full-command;
+      tailf:display-when "ipv4 or ../../ipv4 or ../ipv4  or ipv6 or ../../ipv6 or ../ipv6  or nsap or ../../nsap or ../nsap";
+      type empty;
+    }
+    leaf auto-summary {
+      tailf:info "Enable automatic network number summarization";
+      description
+        "Enable automatic network number summarization";
+      tailf:cli-boolean-no;
+      tailf:cli-trim-default;
+      tailf:cli-full-command;
+      type boolean;
+    }
+    container table-map {
+      tailf:info "Map external entry attributes into routing table";
+      tailf:cli-full-command;
+      description
+        "Map external entry attributes into routing table";
+      tailf:display-when "ipv4 or ../../ipv4 or ../ipv4  or ipv6 or ../../ipv6 or ../ipv6 ";
+      leaf name {
+        description
+          "route-map name";
+        tailf:cli-drop-node-name;
+        type string {
+          tailf:info "WORD;;route-map name";
+        }
+      }
+      leaf filter {
+        tailf:info "Selective route download";
+        type empty;
+      }
+    }
+    container timers {
+      tailf:info "Adjust routing timers";
+      description
+        "Adjust routing timers";
+      container bgp {
+        tailf:info "BGP timers";
+        description
+          "BGP timers";
+        tailf:cli-compact-syntax;
+        tailf:cli-sequence-commands {
+          tailf:cli-reset-siblings;
+        }
+        leaf keepalive-interval {
+          tailf:cli-drop-node-name;
+          type uint16 {
+            range "0..65535";
+            tailf:info "<0-65535>;;Keepalive interval";
+          }
+        }
+        leaf holdtime {
+          tailf:cli-drop-node-name;
+          type uint16 {
+            range "0..65535";
+            tailf:info "<0-65535>;;Holdtime";
+          }
+        }
+        leaf minimum-neighbor-hold {
+          tailf:cli-drop-node-name;
+          tailf:cli-optional-in-sequence;
+          type uint16 {
+            range "0..65535";
+            tailf:info "<0-65535>  Minimum hold time from neighbor";
+          }
+        }
+      }
+    }
+    container transport {
+      tailf:info "Transport options";
+      description
+        "Transport options";
+      container path-mtu-discovery {
+        tailf:info "Use transport path MTU discovery";
+        description
+          "Use transport path MTU discovery";
+        presence "true";
+        leaf disable {
+          tailf:info "disable";
+          description
+            "disable";
+          type empty;
+        }
+      }
+    }
+    container snmp {
+      tailf:info "Modify snmp parameters";
+      description
+        "Modify snmp parameters";
+      presence "true";
+      container context {
+        tailf:info "Configure a SNMP context";
+        description
+          "Configure a SNMP context";
+        list context_word {
+          tailf:cli-drop-node-name;
+          tailf:cli-suppress-mode;
+          key "context_word";
+          leaf context_word {
+            tailf:info "Context Name";
+            description
+              "Context Name";
+            type string;
+          }
+        }
+      }
+    }
+  }
+
+  grouping bgp-path-range-grouping {
+    container attibute_type {
+      leaf type {
+        tailf:info "path attribute type";
+        description
+          "path attribute type";
+        type uint8 {
+          range "1..255";
+        }
+      }
+      leaf in {
+        tailf:info "Perform inbound path-attribute filtering";
+        description
+          "Perform inbound path-attribute filtering";
+        type empty;
+      }
+    }
+    container range {
+      leaf start_value {
+        tailf:info "path attribute range start value";
+        description
+          "path attribute range start value";
+        type uint8 {
+          range "1..255";
+        }
+      }
+      leaf end_value {
+        tailf:info "path attribute range end value";
+        description
+          "path attribute range end value";
+        type uint8 {
+          range "1..255";
+        }
+      }
+      leaf in {
+        tailf:info "Perform inbound path-attribute filtering";
+        description
+          "Perform inbound path-attribute filtering";
+        type empty;
+      }
+    }
+  }
+
+  grouping ospfv3-grouping {
+    container authentication {
+      tailf:info "Authentication parameters";
+      description
+        "Authentication parameters";
+      leaf mode {
+        tailf:info "Authentication operation mode";
+        description
+          "Authentication operation mode";
+        type enumeration {
+          enum "deployment" {
+            tailf:info "Deployment mode of operation";
+          }
+          enum "strict" {
+            tailf:info "Never use expired keys";
+          }
+        }
+      }
+    }
+    container graceful-restart {
+      tailf:info "Graceful-restart options";
+      description
+        "Graceful-restart options";
+      presence "true";
+      container helper {
+        tailf:info "helper support";
+        description
+          "helper support";
+        presence "true";
+        leaf disable {
+          tailf:info "disable helper support";
+          description
+            "disable helper support";
+          type empty;
+        }
+        leaf strict-lsa-checking {
+          tailf:info "enable helper strict LSA checking";
+          description
+            "enable helper strict LSA checking";
+          type empty;
+        }
+      }
+      leaf restart-interval {
+        tailf:info "Graceful restart interval";
+        description
+          "Graceful restart interval";
+        type uint16 {
+          tailf:info "<1-1800>;;Maximum route lifetime following restart, in seconds";
+        }
+      }
+    }
+    container manet {
+      tailf:info "Specify MANET OSPF parameters";
+      description
+        "Specify MANET OSPF parameters";
+      container cache {
+        tailf:info "Specify MANET cache sizes";
+        description
+          "Specify MANET cache sizes";
+        leaf acknowledgement {
+          tailf:info "Specify MANET acknowledgement cache size";
+          description
+            "Specify MANET acknowledgement cache size";
+          type uint64 {
+            tailf:info "<0-4294967295>;;Maximum number of acknowledgements in cache";
+            range "0..4294967295";
+          }
+        }
+        leaf update {
+          tailf:info "Specify MANET LSA cache size";
+          description
+            "Specify MANET LSA cache size";
+          type uint64 {
+            tailf:info "<0-4294967295>;;Maximum number of acknowledgements in cache";
+            range "0..4294967295";
+          }
+        }
+      }
+      leaf hello {
+        tailf:info "Unicast Hellos rather than multicast";
+        description
+          "Unicast Hellos rather than multicast";
+        type enumeration {
+          enum "unicast" {
+            tailf:info "Unicast Hello requests and responses rather than multicast";
+          }
+        }
+      }
+      container peering {
+        tailf:info "MANET OSPF Smart Peering";
+        description
+          "MANET OSPF Smart Peering";
+        container selective {
+          tailf:info "Enable selective peering";
+          description
+            "Enable selective peering";
+          leaf disable {
+            tailf:info "Disable selective peering";
+            description
+              "Disable selective peering";
+            tailf:cli-full-command;
+            type empty;
+          }
+          leaf per-interface {
+            tailf:info "Select peers per interface rather than per node";
+            description
+              "Select peers per interface rather than per node";
+            type empty;
+          }
+          leaf redundancy {
+            tailf:info "Redundant paths";
+            description
+              "Redundant paths";
+            type uint8 {
+              tailf:info "<0-10>;; Number of redundant OSPF paths";
+            }
+          }
+        }
+      }
+      leaf willingness {
+        tailf:info "Specify Relay willingness value";
+        description
+          "Specify Relay willingness value";
+        type uint8 {
+          tailf:info "<0-255>;;Relay willingness value";
+          range "0..255";
+        }
+      }
+    }
+  }
+
+  grouping ospfv3-address-family-grouping {
+    container authentication {
+      tailf:info "Authentication parameters";
+      description
+        "Authentication parameters";
+      leaf mode {
+        tailf:info "Authentication operation mode";
+        description
+          "Authentication operation mode";
+        type enumeration {
+          enum "deployment" {
+            tailf:info "Deployment mode of operation";
+          }
+          enum "normal" {
+            tailf:info "Normal mode of operation";
+          }
+          enum "strict" {
+            tailf:info "Never use expired keys";
+          }
+        }
+      }
+    }
+    container graceful-restart {
+      tailf:info "Graceful-restart options";
+      description
+        "Graceful-restart options";
+      presence "true";
+      leaf disable {
+        tailf:info "Graceful restart disable";
+        description
+          "Graceful restart disable";
+        type empty;
+      }
+      container helper {
+        tailf:info "helper support";
+        description
+          "helper support";
+        presence "true";
+        leaf disable {
+          tailf:info "disable helper support";
+          description
+            "disable helper support";
+          type empty;
+        }
+        leaf strict-lsa-checking {
+          tailf:info "enable helper strict LSA checking";
+          description
+            "enable helper strict LSA checking";
+          type empty;
+        }
+      }
+      leaf restart-interval {
+        tailf:info "Graceful restart interval";
+        description
+          "Graceful restart interval";
+        type uint16 {
+          tailf:info "<1-1800>;;Maximum route lifetime following restart, in seconds";
+        }
+      }
+    }
+    container manet {
+      tailf:info "Specify MANET OSPF parameters";
+      description
+        "Specify MANET OSPF parameters";
+      container cache {
+        tailf:info "Specify MANET cache sizes";
+        description
+          "Specify MANET cache sizes";
+        leaf acknowledgement {
+          tailf:info "Specify MANET acknowledgement cache size";
+          description
+            "Specify MANET acknowledgement cache size";
+          type uint64 {
+            tailf:info "<0-4294967295>;;Maximum number of acknowledgements in cache";
+            range "0..4294967295";
+          }
+        }
+        leaf update {
+          tailf:info "Specify MANET LSA cache size";
+          description
+            "Specify MANET LSA cache size";
+          type uint64 {
+            tailf:info "<0-4294967295>;;Maximum number of acknowledgements in cache";
+            range "0..4294967295";
+          }
+        }
+      }
+      leaf hello {
+        tailf:info "Unicast Hellos rather than multicast";
+        description
+          "Unicast Hellos rather than multicast";
+        type enumeration {
+          enum "unicast" {
+            tailf:info "Unicast Hello requests and responses rather than multicast";
+          }
+          enum "multicast" {
+            tailf:info "Multicast Hello requests and responses rather than unicast";
+          }
+        }
+      }
+      container peering {
+        tailf:info "MANET OSPF Smart Peering";
+        description
+          "MANET OSPF Smart Peering";
+        container selective {
+          tailf:info "Enable selective peering";
+          description
+            "Enable selective peering";
+          leaf disable {
+            tailf:info "Disable selective peering";
+            description
+              "Disable selective peering";
+            tailf:cli-full-command;
+            type empty;
+          }
+          leaf per-interface {
+            tailf:info "Select peers per interface rather than per node";
+            description
+              "Select peers per interface rather than per node";
+            type empty;
+          }
+          leaf redundancy {
+            tailf:info "Redundant paths";
+            description
+              "Redundant paths";
+            type uint8 {
+              tailf:info "<0-10>;; Number of redundant OSPF paths";
+            }
+          }
+        }
+      }
+      leaf willingness {
+        tailf:info "Specify Relay willingness value";
+        description
+          "Specify Relay willingness value";
+        type uint8 {
+          tailf:info "<0-255>;;Relay willingness value";
+          range "0..255";
+        }
+      }
+    }
+  }
+
+  grouping ospf-ospfv3-common-address-family-grouping {
+    container capability {
+      tailf:info "Enable specific OSPF feature";
+      description
+        "Enable specific OSPF feature";
+      leaf capability-type {
+        tailf:cli-drop-node-name;
+        type enumeration {
+          enum "lls" {
+            tailf:info "Link-local Signaling (LLS) support";
+          }
+          enum "opaque" {
+            tailf:info "Opaque LSA";
+          }
+          enum "transit" {
+            tailf:info "Transit Area";
+          }
+          enum "vrf-lite" {
+            tailf:info "vrf-lite";
+          }
+        }
+      }
+    }
+    container compatible {
+      tailf:info "OSPF compatibility list";
+      description
+        "OSPF compatibility list";
+      leaf rfc1583 {
+        tailf:info "Compatible with RFC 1583";
+        description
+          "Compatible with RFC 1583";
+        type empty;
+      }
+      leaf rfc1587 {
+        tailf:info "Compatible with RFC 1587";
+        description
+          "Compatible with RFC 1587";
+        type empty;
+      }
+      leaf rfc5243 {
+        tailf:info "Compatible with RFC 5243";
+        description
+          "Compatible with RFC 5243";
+        type empty;
+      }
+    }
+    container default-information {
+      tailf:info "Control distribution of default information";
+      description
+        "Control distribution of default information";
+      container originate {
+        tailf:info "Distribute a default route";
+        description
+          "Distribute a default route";
+        presence "Distribute a default route";
+        leaf always {
+          tailf:info "Always advertise default route";
+          description
+            "Always advertise default route";
+          type empty;
+        }
+        leaf metric {
+          tailf:info "OSPF default metric";
+          description
+            "OSPF default metric";
+          type uint32 {
+            range "0 .. 16777214";
+            tailf:info "<0-16777214>;;OSPF metric";
+          }
+          tailf:cli-no-value-on-delete;
+        }
+        leaf metric-type {
+          tailf:info "OSPF metric type for default routes";
+          description
+            "OSPF metric type for default routes";
+          type ospf-metric-type;
+          tailf:cli-no-value-on-delete;
+        }
+        leaf route-map {
+          tailf:info "Route map reference";
+          description
+            "Route map reference";
+          type string {
+            tailf:info "WORD;;Route map name";
+          }
+          tailf:cli-no-value-on-delete;
+        }
+      }
+    }
+    leaf default-metric {
+      tailf:info "Set metric of redistributed routes";
+      description
+        "Set metric of redistributed routes";
+      tailf:cli-full-command;
+      type uint32 {
+        range "1 .. 16777214";
+        tailf:info "<1-16777214>;;OSPF default metric";
+      }
+    }
+    container discard-route {
+      tailf:info "Enable or disable discard-route installation";
+      description
+        "Enable or disable discard-route installation";
+      presence "Enable or disable discard-route installation";
+      tailf:cli-compact-syntax;
+      leaf external {
+        tailf:info "Discard route for redistributed summarised routes";
+        description
+          "Discard route for redistributed summarised routes";
+        type empty;
+      }
+      leaf internal {
+        tailf:info "Discard route for summarised internal routes";
+        description
+          "Discard route for summarised internal routes";
+        type empty;
+      }
+      leaf metric {
+        tailf:cli-drop-node-name;
+        type uint32 {
+          range "1 .. 255";
+          tailf:info "<1-255>;;Administrative distance for redistributed summarised routes";
+        }
+      }
+    }
+    container distance {
+      tailf:cli-compact-syntax;
+      tailf:info "Define an administrative distance";
+      description
+        "Define an administrative distance";
+      container ospf-distance {
+        tailf:cli-compact-syntax;
+        tailf:cli-drop-node-name;
+        leaf distance {
+          tailf:cli-drop-node-name;
+          type uint32 {
+            range "1 .. 255";
+            tailf:info "<1-255>;;OSPF Administrative distance";
+          }
+        }
+        tailf:cli-sequence-commands;
+        leaf ip {
+          tailf:cli-drop-node-name;
+          tailf:cli-incomplete-command;
+          type inet:ipv4-address {
+            tailf:info "A.B.C.D;;IP source address";
+          }
+        }
+        leaf wildcard {
+          tailf:cli-drop-node-name;
+          type inet:ipv4-address {
+            tailf:info "A.B.C.D;;Wildcard bits";
+          }
+        }
+        leaf acl-name {
+          tailf:cli-drop-node-name;
+          type access-list-standard-id-type;
+          tailf:cli-no-value-on-delete;
+        }
+      }
+      container ospf {
+        tailf:info "OSPF routes Administrative distance";
+        description
+          "OSPF routes Administrative distance";
+        leaf external {
+          tailf:info "External routes";
+          description
+            "External routes";
+          type uint32 {
+            range "1 .. 255";
+            tailf:info "<1-255>;;Distance for external routes";
+          }
+          tailf:cli-suppress-no;
+          tailf:cli-no-value-on-delete;
+          tailf:cli-no-name-on-delete;
+        }
+        leaf inter-area {
+          tailf:info "Inter-area routes";
+          description
+            "Inter-area routes";
+          type uint32 {
+            range "1 .. 255";
+            tailf:info "<1-255>;;Distance for inter-area routes";
+          }
+          tailf:cli-suppress-no;
+          tailf:cli-no-name-on-delete;
+          tailf:cli-no-value-on-delete;
+        }
+        leaf intra-area {
+          tailf:info "Intra-area routes";
+          description
+            "Intra-area routes";
+          type uint32 {
+            range "1 .. 255";
+            tailf:info "<1-255>;;Distance for intra-area routes";
+          }
+          tailf:cli-suppress-no;
+          tailf:cli-no-name-on-delete;
+          tailf:cli-no-value-on-delete;
+        }
+      }
+    }
+    leaf maximum-paths {
+      tailf:info "Forward packets over multiple paths";
+      description
+        "Forward packets over multiple paths";
+      tailf:cli-full-command;
+      type uint32 {
+        range "1 .. 32";
+        tailf:info "<1-32>;;Number of paths";
+      }
+    }
+    container redistribute {
+      tailf:info "Redistribute information from another routing protocol";
+      description
+        "Redistribute information from another routing protocol";
+      uses ospf-redistribute-top-grouping;
+      container maximum-prefix {
+        tailf:info "Maximum number of prefixes redistributed to protocol";
+        description
+          "Maximum number of prefixes redistributed to protocol";
+        tailf:cli-sequence-commands;
+        tailf:cli-compact-syntax;
+        leaf number {
+          tailf:cli-drop-node-name;
+          type uint32 {
+            range "1 .. 4294967295";
+            tailf:info "<1-4294967295>;;Maximum number of IP prefixes redistributed";
+          }
+        }
+        container threshold-warning-only-container {
+          tailf:cli-compact-syntax;
+          tailf:cli-drop-node-name;
+          leaf threshold {
+            tailf:cli-drop-node-name;
+            type uint32 {
+              range "1 .. 100";
+              tailf:info "<1-100>;;Threshold value (%) at which to generate a warning message";
+            }
+          }
+          leaf warning-only {
+            tailf:info "Only give warning message when limit is exceeded";
+            description
+              "Only give warning message when limit is exceeded";
+            tailf:cli-full-command;
+            type empty;
+          }
+        }
+      }
+      container vrf {
+        tailf:info "Specify a source VRF";
+        description
+          "Specify a source VRF";
+        list non-global-vrf {
+          tailf:cli-drop-node-name;
+          tailf:cli-suppress-mode;
+          tailf:cli-diff-dependency "/ios:native/ip/vrf";
+          tailf:cli-diff-dependency "/ios:native/vrf/definition";
+          key "name";
+          leaf name {
+            tailf:cli-incomplete-command;
+            type string {
+              tailf:info "WORD;;Source VRF name";
+            }
+          }
+          uses ospf-redistribute-top-grouping;
+        }
+        container global {
+          tailf:info "global VRF";
+          description
+            "global VRF";
+          tailf:cli-compact-syntax;
+          uses ospf-redistribute-top-grouping;
+        }
+      }
+    }
+  }
+
+  grouping ospf-authentication-key-grouping {
+    container authentication-key {
+      tailf:info "Set authentication key";
+      description
+        "Set authentication key";
+      tailf:cli-sequence-commands;
+      tailf:cli-compact-syntax;
+      leaf auth-type {
+        tailf:cli-drop-node-name;
+        type uint8 {
+          range "0 .. 7";
+          tailf:info "<0-7>;;Encryption type (0 for not yet encrypted, 7 for proprietary)";
+        }
+      }
+      leaf auth-key {
+        tailf:cli-drop-node-name;
+        tailf:cli-full-command;
+        tailf:cli-multi-value;
+        type string {
+          tailf:info "WORD;;Authentication key (8 chars)";
+        }
+      }
+    }
+  }
+
+  grouping ospf-area-virtual-link-grouping {
+    uses ospf-authentication-key-grouping;
+    list message-digest-key {
+      tailf:info "Set message digest key";
+      description
+        "Set message digest key";
+      tailf:cli-suppress-mode;
+      tailf:cli-delete-when-empty;
+      tailf:cli-incomplete-command;
+      key "id";
+      leaf id {
+        tailf:cli-suppress-range;
+        type uint8 {
+          range "1 .. 255";
+          tailf:info "<1-255>;;Key ID";
+        }
+      }
+      container md5 {
+        tailf:info "Use MD5 algorithm";
+        description
+          "Use MD5 algorithm";
+        tailf:cli-sequence-commands;
+        leaf auth-type {
+          tailf:cli-drop-node-name;
+          tailf:cli-optional-in-sequence;
+          type uint8 {
+            range "0 .. 7";
+            tailf:info "<0-7>;;Encryption type (0 for not yet encrypted, 7 for proprietary)";
+          }
+        }
+        leaf auth-key {
+          tailf:cli-drop-node-name;
+          type string {
+            length "1 .. 16";
+            tailf:info "WORD;;Authentication key (16 chars)";
+          }
+        }
+      }
+    }
+  }
+
+  grouping ospfv3-af-ipv6-summary-prefix-grouping {
+    list summary-prefix {
+      tailf:info "Configure IPv6 summary prefix";
+      description
+        "Configure IPv6 summary prefix";
+      tailf:cli-suppress-mode;
+      tailf:cli-delete-when-empty;
+      key "prefix";
+      leaf prefix {
+        type inet:ipv6-prefix {
+          tailf:info "X:X:X:X::X/<0-128>;;IPv6 prefix x:x::y/<z>";
+        }
+      }
+      choice tag-no-advertise-choice {
+        leaf nssa-only {
+          tailf:info "Limit summary to NSSA areas";
+          description
+            "Limit summary to NSSA areas";
+          type empty;
+        }
+        leaf tag {
+          tailf:info "Set tag";
+          description
+            "Set tag";
+          tailf:cli-full-command;
+          type uint32 {
+            range "0 .. 4294967295";
+            tailf:info "<0-4294967295>;;32-bit tag value";
+          }
+        }
+        leaf not-advertise {
+          tailf:info "Do not advertise when translating OSPF type-7 LSA";
+          description
+            "Do not advertise when translating OSPF type-7 LSA";
+          type empty;
+          tailf:cli-full-command;
+        }
+      }
+    }
+  }
+
+  grouping ospf-ospfv3-common-grouping {
+    list area {
+      tailf:info "OSPF area parameters";
+      description
+        "OSPF area parameters";
+      tailf:cli-suppress-mode;
+      tailf:cli-delete-when-empty;
+      tailf:cli-incomplete-command;
+      key "id";
+      leaf id {
+        tailf:cli-suppress-range;
+        type ospf-area-type;
+      }
+      container authentication {
+        tailf:info "Enable authentication";
+        description
+          "Enable authentication";
+        presence "true";
+        leaf message-digest {
+          tailf:info "Use message-digest authentication";
+          description
+            "Use message-digest authentication";
+          type empty;
+        }
+      }
+      container capability {
+        tailf:info "Enable area specific capability";
+        description
+          "Enable area specific capability";
+        leaf default-exclusion {
+          tailf:info "Enable exclusion of links from base topology";
+          description
+            "Enable exclusion of links from base topology";
+          type empty;
+        }
+      }
+      leaf default-cost {
+        tailf:info "Set the summary default-cost of a NSSA/stub area";
+        description
+          "Set the summary default-cost of a NSSA/stub area";
+        tailf:cli-full-command;
+        tailf:cli-no-value-on-delete;
+        type uint32 {
+          range "0 .. 16777215";
+          tailf:info "<0-16777215;;Stub's advertised external route metric";
+        }
+      }
+      list filter-list {
+        tailf:info "Filter networks between OSPF areas";
+        description
+          "Filter networks between OSPF areas";
+        tailf:cli-suppress-mode;
+        tailf:cli-delete-when-empty;
+        tailf:cli-compact-syntax;
+        key "in-out";
+        leaf prefix {
+          tailf:cli-prefix-key;
+          mandatory true;
+          tailf:info "Filter prefixes between OSPF areas";
+          description
+            "Filter prefixes between OSPF areas";
+          type string {
+            tailf:info "WORD;;Name of an IP prefix-list";
+          }
+        }
+        leaf in-out {
+          type enumeration {
+            enum "in" {
+              tailf:info "Filter networks sent to this area";
+            }
+            enum "out" {
+              tailf:info "Filter networks sent from this area";
+            }
+          }
+        }
+      }
+      container nssa {
+        tailf:info "Specify a NSSA area";
+        description
+          "Specify a NSSA area";
+        presence "Specify a NSSA area";
+        container default-information-originate {
+          tailf:cli-flatten-container;
+          tailf:info "Originate Type 7 default into NSSA area";
+          description
+            "Originate Type 7 default into NSSA area";
+          presence "Originate Type 7 default into NSSA area";
+          leaf metric {
+            tailf:info "OSPF default metric";
+            description
+              "OSPF default metric";
+            type int32 {
+              range "0 .. 16777214";
+              tailf:info "<0-16777214>;;OSPF metric";
+            }
+            tailf:cli-no-value-on-delete;
+            tailf:cli-no-name-on-delete;
+            tailf:cli-suppress-no;
+          }
+          leaf metric-type {
+            tailf:info "OSPF metric type for default routes";
+            description
+              "OSPF metric type for default routes";
+            type ospf-metric-type;
+          }
+          leaf no-ext-capability {
+            tailf:info "Do not send domain specific capabilities into NSSA";
+            description
+              "Do not send domain specific capabilities into NSSA";
+            type empty;
+          }
+          leaf no-redistribution {
+            tailf:info "No redistribution into this NSSA area";
+            description
+              "No redistribution into this NSSA area";
+            type empty;
+          }
+          leaf no-summary {
+            tailf:info "Do not send summary LSA into NSSA";
+            description
+              "Do not send summary LSA into NSSA";
+            type empty;
+          }
+          leaf nssa-only {
+            tailf:info "Limit default advertisement to this NSSA area";
+            description
+              "Limit default advertisement to this NSSA area";
+            type empty;
+          }
+          container translate {
+            tailf:info "Translate LSA";
+            description
+              "Translate LSA";
+            container type7 {
+              tailf:info "From Type 7 to Type 5";
+              description
+                "From Type 7 to Type 5";
+              leaf always {
+                tailf:info "Always translate LSAs on this ABR";
+                description
+                  "Always translate LSAs on this ABR";
+                type empty;
+              }
+              leaf suppress-fa {
+                tailf:info "Suppress forwarding address in translated LSAs";
+                description
+                  "Suppress forwarding address in translated LSAs";
+                type empty;
+              }
+            }
+          }
+        }
+        leaf no-ext-capability {
+          tailf:info "Do not send domain specific capabilities into NSSA";
+          description
+            "Do not send domain specific capabilities into NSSA";
+          type empty;
+        }
+        leaf no-redistribution {
+          tailf:info "No redistribution into this NSSA area";
+          description
+            "No redistribution into this NSSA area";
+          type empty;
+        }
+        leaf no-summary {
+          tailf:info "Do not send summary LSA into NSSA";
+          description
+            "Do not send summary LSA into NSSA";
+          type empty;
+        }
+        leaf nssa-only {
+          tailf:info "Limit default advertisement to this NSSA area";
+          description
+            "Limit default advertisement to this NSSA area";
+          type empty;
+        }
+        container translate {
+          tailf:info "Translate LSA";
+          description
+            "Translate LSA";
+          container type7 {
+            tailf:info "From Type 7 to Type 5";
+            description
+              "From Type 7 to Type 5";
+            leaf always {
+              tailf:info "Always translate LSAs on this ABR";
+              description
+                "Always translate LSAs on this ABR";
+              type empty;
+            }
+            leaf suppress-fa {
+              tailf:info "Suppress forwarding address in translated LSAs";
+              description
+                "Suppress forwarding address in translated LSAs";
+              type empty;
+            }
+          }
+        }
+      }
+      list range {
+        tailf:info "Summarize routes matching address/mask (border routers only)";
+        description
+          "Summarize routes matching address/mask (border routers only)";
+        tailf:cli-suppress-mode;
+        tailf:cli-delete-when-empty;
+        key "ip mask";
+        leaf ip {
+          type inet:ipv4-address {
+            tailf:info "A.B.C.D;;IP address to match";
+          }
+        }
+        leaf mask {
+          type inet:ipv4-address {
+            tailf:info "A.B.C.D;;IP mask for address";
+          }
+        }
+        choice advertise-choice {
+          leaf advertise {
+            tailf:info "Advertise this range (default)";
+            description
+              "Advertise this range (default)";
+            type empty;
+          }
+          leaf not-advertise {
+            tailf:info "DoNotAdvertise this range";
+            description
+              "DoNotAdvertise this range";
+            type empty;
+          }
+        }
+        leaf cost {
+          tailf:info "User specified metric for this range";
+          description
+            "User specified metric for this range";
+          tailf:cli-full-command;
+          type uint32 {
+            range "0 .. 16777215";
+            tailf:info "<0-16777215>;;Advertised metric for this range";
+          }
+        }
+      }
+      list sham-link {
+        tailf:info "Define a sham link and its parameters";
+        description
+          "Define a sham link and its parameters";
+        tailf:cli-suppress-mode;
+        tailf:cli-delete-when-empty;
+        key "source dest";
+        leaf source {
+          type inet:ip-address {
+            tailf:info "A.B.C.D/X:X:X:X::X;;IP addr associated with sham-link source";
+          }
+        }
+        leaf dest {
+          type inet:ip-address {
+            tailf:info "A.B.C.D/X:X:X:X::X;;IP addr associated with sham-link destination";
+          }
+        }
+        leaf cost {
+          tailf:info "Associate a cost with the sham-link";
+          description
+            "Associate a cost with the sham-link";
+          type uint16 {
+            range "0 .. 65535";
+            tailf:info "<1-65535>;;Cost of the sham-link";
+          }
+        }
+        container ttl-security {
+          tailf:info "TTL security check";
+          description
+            "TTL security check";
+          tailf:cli-flatten-container;
+          leaf hops {
+            tailf:info "IP hops";
+            description
+              "IP hops";
+            type uint8 {
+              tailf:info "<1-254>;;maximum number of hops allowed";
+            }
+          }
+        }
+      }
+      container stub {
+        tailf:info "Specify a stub area";
+        description
+          "Specify a stub area";
+        presence "Specify a stub area";
+        leaf no-ext-capability {
+          tailf:info "Do not send domain specific capabilities into stub area";
+          description
+            "Do not send domain specific capabilities into stub area";
+          type empty;
+        }
+        leaf no-summary {
+          tailf:info "Do not send summary LSA into stub area";
+          description
+            "Do not send summary LSA into stub area";
+          tailf:cli-full-command;
+          type empty;
+        }
+      }
+      list virtual-link {
+        tailf:info "Define a virtual link and its parameters";
+        description
+          "Define a virtual link and its parameters";
+        tailf:cli-suppress-mode;
+        tailf:cli-delete-when-empty;
+        key "id";
+        leaf id {
+          type inet:ip-address {
+            tailf:info "A.B.C.D/X:X:X:X::X;;ID (IP addr) associated with virtual link neighbor";
+          }
+        }
+        container authentication {
+          tailf:info "Set authentication type";
+          description
+            "Set authentication type";
+          tailf:cli-flatten-container;
+          uses ospf-area-virtual-link-grouping;
+          container key-chain {
+            tailf:info "Use a key-chain for cryptographic authentication keys";
+            description
+              "Use a key-chain for cryptographic authentication keys";
+            tailf:cli-compact-syntax;
+            leaf name {
+              tailf:cli-drop-node-name;
+              type string {
+                tailf:info " WORD  Key chain name";
+              }
+            }
+            uses ospf-area-virtual-link-grouping;
+          }
+          container message-digest {
+            tailf:info "Message-digest authentication";
+            description
+              "Message-digest authentication";
+            uses ospf-area-virtual-link-grouping;
+          }
+          leaf null {
+            tailf:info "No authentication";
+            description
+              "No authentication";
+            type empty;
+          }
+        }
+        container hello-interval {
+          tailf:info "Hello packet interval";
+          description
+            "Hello packet interval";
+          tailf:cli-compact-syntax;
+          leaf hello-interval-value {
+            tailf:cli-no-value-on-delete;
+            tailf:cli-drop-node-name;
+            type int32 {
+              range "1 .. 8192";
+              tailf:info "<1-8192;;Seconds>";
+            }
+          }
+        }
+        container dead-interval {
+          tailf:info "Dead router detection time";
+          description
+            "Dead router detection time";
+          tailf:cli-compact-syntax;
+          leaf dead-interval-value {
+            tailf:cli-no-value-on-delete;
+            tailf:cli-drop-node-name;
+            type uint16 {
+              range "1 .. 8192";
+              tailf:info "<1-8192;;Seconds>";
+            }
+          }
+        }
+        container retransmit-interval {
+          tailf:info "LSA retransmit interval";
+          description
+            "LSA retransmit interval";
+          tailf:cli-compact-syntax;
+          leaf retransmit-interval-value {
+            tailf:cli-drop-node-name;
+            type uint16 {
+              range "1 .. 8192";
+              tailf:info "<1-8192>;;Seconds";
+            }
+            tailf:cli-no-value-on-delete;
+          }
+        }
+        container transmit-delay {
+          tailf:info "LSA transmission delay";
+          description
+            "LSA transmission delay";
+          tailf:cli-compact-syntax;
+          leaf transmit-delay-value {
+            tailf:cli-drop-node-name;
+            type uint16 {
+              range "1 .. 8192";
+              tailf:info "<1-8192>;;Seconds";
+            }
+            tailf:cli-no-value-on-delete;
+          }
+        }
+        container topology {
+          tailf:info "Disable virtual link on topology";
+          description
+            "Disable virtual link on topology";
+          tailf:cli-compact-syntax;
+          leaf disable {
+            tailf:info "Disable virtual link";
+            description
+              "Disable virtual link";
+            type empty;
+          }
+        }
+        container ttl-security {
+          tailf:info "TTL security check";
+          description
+            "TTL security check";
+          tailf:cli-compact-syntax;
+          leaf hops {
+            tailf:info "IP hops";
+            description
+              "IP hops";
+            type uint8 {
+              tailf:info "<1-254>  maximum number of hops allowed";
+              range "1..254";
+            }
+          }
+        }
+        uses ospf-area-virtual-link-grouping;
+      }
+    }
+    container auto-cost {
+      tailf:info "Calculate OSPF interface cost according to bandwidth";
+      description
+        "Calculate OSPF interface cost according to bandwidth";
+      presence "Calculate OSPF interface cost according to bandwidth";
+      leaf reference-bandwidth {
+        tailf:info "Use reference bandwidth method to assign OSPF cost";
+        description
+          "Use reference bandwidth method to assign OSPF cost";
+        type uint32 {
+          tailf:info "<1-4294967>;;The reference bandwidth in terms of Mbits per second";
+          range "1 .. 4294967";
+        }
+      }
+    }
+    container event-log {
+      tailf:info "OSPF Event Logging";
+      description
+        "OSPF Event Logging";
+      presence "true";
+      leaf one-shot {
+        tailf:info "Disable Logging When Log Buffer Becomes Full";
+        description
+          "Disable Logging When Log Buffer Becomes Full";
+        type empty;
+      }
+      leaf pause {
+        tailf:info "Pause Event Logging";
+        description
+          "Pause Event Logging";
+        type empty;
+      }
+      leaf size {
+        tailf:info "Maximum Number of Events Stored in the Event Log";
+        description
+          "Maximum Number of Events Stored in the Event Log";
+        type uint32 {
+          tailf:info "<1-65534>;;Number of Events";
+          range "1..65534";
+        }
+      }
+    }
+    container bfd {
+      tailf:info "BFD configuration commands";
+      description
+        "BFD configuration commands";
+      leaf all-interfaces {
+        tailf:info "Enable BFD on all interfaces";
+        description
+          "Enable BFD on all interfaces";
+        type empty;
+      }
+    }
+    container interface-id {
+      tailf:info "Source of the interface ID";
+      description
+        "Source of the interface ID";
+      leaf snmp-if-index {
+        tailf:info "SNMP MIB ifIndex";
+        description
+          "SNMP MIB ifIndex";
+        type empty;
+      }
+    }
+    container log-adjacency-changes {
+      tailf:info "Log changes in adjacency state";
+      description
+        "Log changes in adjacency state";
+      presence "true";
+      leaf detail {
+        tailf:info "Log all state changes";
+        description
+          "Log all state changes";
+        type empty;
+      }
+    }
+    container max-lsa {
+      tailf:info "maximum number of LSAs OSPF process will receive";
+      description
+        "maximum number of LSAs OSPF process will receive";
+      tailf:cli-sequence-commands;
+      tailf:cli-compact-syntax;
+      leaf number {
+        tailf:cli-drop-node-name;
+        type uint32 {
+          range "1 .. 4294967294";
+          tailf:info "<1-4294967294>;;Maximum number of non self-generated LSAs this process can receive";
+        }
+      }
+      leaf threshold-value {
+        tailf:cli-drop-node-name;
+        tailf:cli-break-sequence-commands;
+        type uint32 {
+          range "1 .. 100";
+          tailf:info "<1-100>;;Threshold value (%) at which to generate a warning msg";
+        }
+      }
+      leaf ignore-count {
+        tailf:info "maximum number of times adjacencies can be suppressed";
+        description
+          "maximum number of times adjacencies can be suppressed";
+        type uint32 {
+          range "1 .. 65534";
+          tailf:info "<1-65534>;;count on how many times adjacencies can be suppressed";
+        }
+      }
+      leaf ignore-time {
+        tailf:info "time during which all adjacencies are suppressed";
+        description
+          "time during which all adjacencies are suppressed";
+        type uint32 {
+          range "1 .. 17895";
+          tailf:info "<1-17895>;;number of minutes during which all adjacencies are suppressed";
+        }
+      }
+      leaf reset-time {
+        tailf:info "time after which ignore-count is reset to zero";
+        description
+          "time after which ignore-count is reset to zero";
+        type uint32 {
+          range "2 .. 35791";
+          tailf:info "<2-35791>;;number of minutes after which ignore-count is reset to zero";
+        }
+      }
+      leaf warning-only {
+        tailf:info "Only give warning message when limit is exceeded";
+        description
+          "Only give warning message when limit is exceeded";
+        tailf:cli-full-command;
+        type empty;
+      }
+    }
+    container max-metric {
+      tailf:info "Set maximum metric";
+      description
+        "Set maximum metric";
+      container router-lsa {
+        tailf:info "Maximum metric in self-originated router-LSAs";
+        description
+          "Maximum metric in self-originated router-LSAs";
+        presence "Maximum metric in self-originated router-LSAs";
+        tailf:cli-compact-syntax;
+        container external-lsa {
+          tailf:info "Override external-lsa metric with max-metric value";
+          presence "Override external-lsa metric with max-metric value";
+          tailf:cli-flatten-container;
+          description
+            "Override external-lsa metric with max-metric value";
+          leaf metric {
+            tailf:cli-drop-node-name;
+            type uint32 {
+              range "1 .. 16777215";
+              tailf:info "<1-16777215>;;Overriding metric in external-LSAs (default 16711680)";
+            }
+          }
+        }
+        leaf include-stub {
+          tailf:info "Set maximum metric for stub links in router-LSAs";
+          description
+            "Set maximum metric for stub links in router-LSAs";
+          type empty;
+        }
+        container on-startup {
+          tailf:info "Set maximum metric temporarily after reboot";
+          description
+            "Set maximum metric temporarily after reboot";
+          presence "Set maximum metric temporarily after reboot";
+          tailf:cli-flatten-container;
+          choice time-wait-for-bgp-choice {
+            leaf time {
+              tailf:cli-drop-node-name;
+              type uint32 {
+                range "5 .. 86400";
+                tailf:info "<5-86400>;;Time, in seconds, router-LSAs are originated with max-metric";
+              }
+            }
+            leaf wait-for-bgp {
+              tailf:info "Let BGP decide when to originate router-LSA with normal metric";
+              description
+                "Let BGP decide when to originate router-LSA with normal metric";
+              type empty;
+            }
+          }
+        }
+        container summary-lsa {
+          tailf:info "Override summary-lsa metric with max-metric value";
+          description
+            "Override summary-lsa metric with max-metric value";
+          presence "Override summary-lsa metric with max-metric value";
+          tailf:cli-flatten-container;
+          leaf metric {
+            tailf:cli-drop-node-name;
+            type uint32 {
+              range "1 .. 16777215";
+              tailf:info " <1-16777215>;;Overriding metric in summary-LSAs (default 16711680)";
+            }
+          }
+        }
+      }
+    }
+    uses passive-interface-grouping;
+    container queue-depth {
+      tailf:info "OSPF Hello/Router process queue depth";
+      description
+        "OSPF Hello/Router process queue depth";
+      container hello {
+        tailf:info "OSPF Hello process queue depth";
+        description
+          "OSPF Hello process queue depth";
+        uses queue-depth-grouping;
+      }
+      container update {
+        tailf:info "OSPF Router process queue depth";
+        description
+          "OSPF Router process queue depth";
+        uses queue-depth-grouping;
+      }
+    }
+    container timers {
+      tailf:info "Adjust routing timers";
+      description
+        "Adjust routing timers";
+      container lsa {
+        tailf:info "OSPF LSA timers";
+        description
+          "OSPF LSA timers";
+        leaf arrival {
+          tailf:info "OSPF LSA arrival timer";
+          description
+            "OSPF LSA arrival timer";
+          type uint32 {
+            range "0 .. 600000";
+            tailf:info "<0-600000>;;The minimum interval in milliseconds between accepting the same LSA";
+          }
+        }
+      }
+      container pacing {
+        tailf:info "OSPF pacing timers";
+        description
+          "OSPF pacing timers";
+        leaf flood {
+          tailf:info "OSPF flood pacing timer";
+          description
+            "OSPF flood pacing timer";
+          tailf:cli-full-command;
+          type uint32 {
+            range "5 .. 100";
+            tailf:info "<5-100>;;The minimum interval in msec to pace limit flooding on interface";
+          }
+        }
+        leaf lsa-group {
+          tailf:info "OSPF LSA group pacing timer";
+          description
+            "OSPF LSA group pacing timer";
+          tailf:cli-full-command;
+          type uint32 {
+            range "10 .. 1800";
+            tailf:info "<10-1800>;;Interval in sec between group of LSA being refreshed or maxaged";
+          }
+        }
+        leaf retransmission {
+          tailf:info "OSPF retransmission pacing timer";
+          description
+            "OSPF retransmission pacing timer";
+          tailf:cli-full-command;
+          type uint32 {
+            range "5 .. 200";
+            tailf:info "<5-200>;;The minimum interval in msec between neighbor retransmissions";
+          }
+        }
+      }
+      container throttle {
+        tailf:info "OSPF throttle timers";
+        description
+          "OSPF throttle timers";
+        container lsa {
+          tailf:info "OSPF LSA throttle timers";
+          description
+            "OSPF LSA throttle timers";
+          container all {
+            tailf:info "For all type of OSPF LSAs";
+            description
+              "For all type of OSPF LSAs";
+            tailf:cli-drop-node-name;
+            tailf:cli-sequence-commands;
+            tailf:cli-compact-syntax;
+            leaf delay {
+              tailf:cli-drop-node-name;
+              tailf:cli-incomplete-command;
+              type uint32 {
+                range "0 .. 600000";
+                tailf:info "<0-600000>;;Delay to generate first occurrence of LSA in milliseconds";
+              }
+            }
+            leaf min-delay {
+              tailf:cli-drop-node-name;
+              tailf:cli-incomplete-command;
+              type uint32 {
+                range "0 .. 600000";
+                tailf:info "<0-600000>;;Minimum delay between originating the same LSA in milliseconds";
+              }
+            }
+            leaf max-delay {
+              tailf:cli-drop-node-name;
+              type uint32 {
+                range "0 .. 600000";
+                tailf:info "<0-600000>;;Maximum delay between originating the same LSA in milliseconds";
+              }
+            }
+          }
+        }
+        container spf {
+          tailf:info "OSPF SPF throttle timers";
+          description
+            "OSPF SPF throttle timers";
+          tailf:cli-sequence-commands;
+          tailf:cli-compact-syntax;
+          leaf delay {
+            tailf:cli-drop-node-name;
+            tailf:cli-incomplete-command;
+            type uint32 {
+              range "0 .. 600000";
+              tailf:info "<0-600000>;;Delay between receiving a change to SPF calculation in milliseconds";
+            }
+          }
+          leaf min-delay {
+            tailf:cli-drop-node-name;
+            tailf:cli-incomplete-command;
+            type uint32 {
+              range "0 .. 600000";
+              tailf:info "<0-600000>;;Delay between first and second SPF calculation in milliseconds";
+            }
+          }
+          leaf max-delay {
+            tailf:cli-drop-node-name;
+            type uint32 {
+              range "0 .. 600000";
+              tailf:info "<0-600000>;;Maximum wait time in milliseconds for SPF calculations";
+            }
+          }
+        }
+      }
+    }
+    leaf router-id {
+      tailf:cli-full-command;
+      tailf:info "Override configured router identifier (peers will reset)";
+      description
+        "Override configured router identifier (peers will reset)";
+      type inet:ipv4-address {
+        tailf:info "A.B.C.D;;Manually configured router identifier";
+      }
+    }
+    leaf nsr {
+      tailf:cli-full-command;
+      tailf:info "Enable non-stop routing";
+      description
+        "Enable non-stop routing";
+      type empty;
+    }
+    container traffic-share {
+      tailf:info "How to compute traffic share over alternate paths";
+      description
+        "How to compute traffic share over alternate paths";
+      tailf:cli-sequence-commands;
+      tailf:cli-compact-syntax;
+      leaf min {
+        tailf:info "All traffic shared among min metric paths";
+        description
+          "All traffic shared among min metric paths";
+        type empty;
+      }
+      leaf across-interfaces {
+        tailf:info "Use different interfaces for equal-cost paths";
+        description
+          "Use different interfaces for equal-cost paths";
+        type empty;
+      }
+    }
+    container ttl-security {
+      tailf:info "TTL security check";
+      description
+        "TTL security check";
+      tailf:cli-sequence-commands;
+      tailf:cli-compact-syntax;
+      leaf all-interfaces {
+        tailf:info "Enable TTL Security on all interfaces";
+        description
+          "Enable TTL Security on all interfaces";
+        type empty;
+      }
+      leaf hops {
+        tailf:info "IP hops";
+        description
+          "IP hops";
+        tailf:cli-break-sequence-commands;
+        type uint8 {
+          tailf:info "<1-254>  maximum number of hops allowed";
+          range "1..254";
+        }
+      }
+    }
+  }
+
+  grouping tie-break-index {
+    leaf required {
+      tailf:info "Mandatory repair path attribute";
+      description
+        "Mandatory repair path attribute";
+      tailf:cli-incomplete-command;
+      type empty;
+    }
+    leaf index {
+      tailf:info "Tiebreak attribute priority";
+      description
+        "Tiebreak attribute priority";
+      tailf:cli-full-command;
+      type uint8 {
+        tailf:info "<1-255>;;Tiebreak attribute priority number";
+        range "1..255";
+      }
+    }
+  }
+
+  grouping queue-depth-grouping {
+    leaf options {
+      tailf:cli-drop-node-name;
+      tailf:cli-full-command;
+      tailf:cli-trim-default;
+      type union {
+        type uint32 {
+          range "1 .. 2147483647";
+          tailf:info "<1-2147483647>;;maximum numer of packets in the queue";
+        }
+        type enumeration {
+          enum "unlimited" {
+            tailf:info "Unlimited queue depth";
+          }
+        }
+      }
+      default "unlimited";
+    }
+  }
+
+  grouping ospf-redistribute-match-grouping {
+    leaf metric {
+      tailf:info "Metric for redistributed routes";
+      description
+        "Metric for redistributed routes";
+      type uint32 {
+        tailf:info "<0-16777214>;;OSPF default metric";
+      }
+    }
+    leaf metric-type {
+      tailf:info "OSPF/IS-IS exterior metric type for redistributed routes";
+      description
+        "OSPF/IS-IS exterior metric type for redistributed routes";
+      type enumeration {
+        enum "1" {
+          tailf:info "Set OSPF External Type 1 metrics";
+          tailf:code-name "metric_type_1";
+        }
+        enum "2" {
+          tailf:info "Set OSPF External Type 2 metrics";
+          tailf:code-name "metric_type_2";
+        }
+      }
+    }
+    leaf nssa-only {
+      tailf:info "Limit redistributed routes to NSSA areas";
+      description
+        "Limit redistributed routes to NSSA areas";
+      type empty;
+    }
+    leaf subnets {
+      tailf:info "Consider subnets for redistribution into OSPF";
+      description
+        "Consider subnets for redistribution into OSPF";
+      type empty;
+    }
+    leaf route-map {
+      tailf:info "Route map reference";
+      description
+        "Route map reference";
+      type string {
+        tailf:info "WORD;;Pointer to route-map entries";
+      }
+    }
+    leaf tag {
+      tailf:info "Set tag for routes redistributed into OSPF";
+      description
+        "Set tag for routes redistributed into OSPF";
+      type uint32 {
+        range "0 .. 4294967295";
+        tailf:info "<0-4294967295>;;32-bit tag value";
+      }
+    }
+  }
+
+  grouping ospf-redistribute-top-match-grouping {
+    container match {
+      tailf:cli-compact-syntax;
+      tailf:cli-flatten-container;
+      tailf:info "Redistribution of OSPF routes";
+      description
+        "Redistribution of OSPF routes";
+      container internal {
+        presence "Redistribute OSPF internal routes";
+        tailf:info "Redistribute OSPF internal routes";
+        description
+          "Redistribute OSPF internal routes";
+        tailf:cli-compact-syntax;
+        tailf:cli-flatten-container;
+        uses ospf-redistribute-match-grouping;
+      }
+      container external {
+        tailf:info "Redistribute OSPF external routes";
+        description
+          "Redistribute OSPF external routes";
+        presence "Redistribute OSPF external routes";
+        tailf:cli-compact-syntax;
+        tailf:cli-flatten-container;
+        leaf external-routes {
+          tailf:cli-drop-node-name;
+          type redist-ospf-external-type;
+        }
+        uses ospf-redistribute-match-grouping;
+      }
+      container nssa-external {
+        tailf:info "Redistribute OSPF NSSA external routes";
+        description
+          "Redistribute OSPF NSSA external routes";
+        presence "Redistribute OSPF NSSA external routes";
+        tailf:cli-compact-syntax;
+        tailf:cli-flatten-container;
+        leaf nssa-external-routes {
+          tailf:cli-drop-node-name;
+          type redist-ospf-external-type;
+        }
+        uses ospf-redistribute-match-grouping;
+      }
+    }
+  }
+
+  grouping ospf-iso-igrp-redistribute-grouping {
+    leaf metric {
+      tailf:info "Metric for redistributed routes";
+      description
+        "Metric for redistributed routes";
+      type uint32 {
+        tailf:info "<0-16777214>;;OSPF default metric";
+      }
+    }
+    leaf metric-type {
+      tailf:info "OSPF/IS-IS exterior metric type for redistributed routes";
+      description
+        "OSPF/IS-IS exterior metric type for redistributed routes";
+      type enumeration {
+        enum "1" {
+          tailf:info "Set OSPF External Type 1 metrics";
+          tailf:code-name "metric_type_1";
+        }
+        enum "2" {
+          tailf:info "Set OSPF External Type 2 metrics";
+          tailf:code-name "metric_type_2";
+        }
+      }
+    }
+    leaf tag {
+      tailf:info "Set tag for routes redistributed into OSPF";
+      description
+        "Set tag for routes redistributed into OSPF";
+      type uint32 {
+        range "0 .. 4294967295";
+        tailf:info "<0-4294967295>;;32-bit tag value";
+      }
+    }
+    leaf subnets {
+      tailf:info "Consider subnets for redistribution into OSPF";
+      description
+        "Consider subnets for redistribution into OSPF";
+      type empty;
+    }
+  }
+
+  grouping ospf-redistribute-grouping {
+    container redist-options {
+      tailf:cli-drop-node-name;
+      tailf:cli-compact-syntax;
+      uses ospf-iso-igrp-redistribute-grouping;
+      leaf route-map {
+        tailf:info "Route map reference";
+        description
+          "Route map reference";
+        type string {
+          tailf:info "WORD;;Pointer to route-map entries";
+        }
+      }
+      leaf nssa-only {
+        tailf:info "Limit redistributed routes to NSSA areas";
+        description
+          "Limit redistributed routes to NSSA areas";
+        type empty;
+      }
+    }
+  }
+
+  grouping ospf-redistribute-top-grouping {
+    list application {
+      tailf:info "Application";
+      description
+        "Application";
+      tailf:cli-suppress-mode;
+      key "name";
+      leaf name {
+        type string {
+          tailf:info "WORD;;Application name";
+        }
+      }
+      uses ospf-redistribute-grouping;
+    }
+    list bgp {
+      tailf:info "Border Gateway Protocol (BGP)";
+      description
+        "Border Gateway Protocol (BGP)";
+      tailf:cli-suppress-mode;
+      key "as-number";
+      uses ospf-redistribute-bgp-grouping;
+    }
+    container connected {
+      tailf:info "Connected";
+      description
+        "Connected";
+      presence "Connected";
+      uses ospf-redistribute-grouping;
+    }
+    list eigrp {
+      tailf:info "Enhanced Interior Gateway Routing Protocol (EIGRP)";
+      description
+        "Enhanced Interior Gateway Routing Protocol (EIGRP)";
+      tailf:cli-suppress-mode;
+      key "as-number";
+      uses ospf-redistribute-bgp-grouping;
+    }
+    container isis {
+      presence "ISO IS-IS";
+      tailf:info "ISO IS-IS";
+      description
+        "ISO IS-IS";
+      choice isis-level-routes-isis-area-choice {
+        leaf isis-level-routes {
+          tailf:cli-drop-node-name;
+          type enumeration {
+            enum "level-1" {
+              tailf:info "IS-IS level-1 routes only";
+            }
+            enum "level-2" {
+              tailf:info "IS-IS level-2 routes only";
+            }
+            enum "level-1-2" {
+              tailf:info "IS-IS level-1 and level-2 routes";
+            }
+          }
+        }
+        list isis-area {
+          tailf:cli-suppress-mode;
+          tailf:cli-delete-when-empty;
+          tailf:cli-drop-node-name;
+          key "name";
+          leaf name {
+            tailf:cli-disallow-value "level-1|level-2|level-1-2|metric|metric-type|route-map|subnets|tag";
+            type string {
+              tailf:info "WORD;;ISO routing area tag";
+            }
+          }
+          leaf isis-level-routes {
+            tailf:cli-drop-node-name;
+            type enumeration {
+              enum "level-1" {
+                tailf:info "IS-IS level-1 routes only";
+              }
+              enum "level-2" {
+                tailf:info "IS-IS level-2 routes only";
+              }
+              enum "level-1-2" {
+                tailf:info "IS-IS level-1 and level-2 routes";
+              }
+            }
+          }
+          uses ospf-redistribute-grouping;
+        }
+      }
+      uses ospf-redistribute-grouping;
+    }
+    container iso-igrp {
+      tailf:info "IGRP for OSI networks";
+      description
+        "IGRP for OSI networks";
+      presence "IGRP for OSI networks";
+      tailf:cli-sequence-commands;
+      choice area-tag-route-map-choice {
+        container area-tag-route-map-container {
+          tailf:cli-drop-node-name;
+          tailf:cli-flatten-container;
+          tailf:cli-sequence-commands;
+          leaf area-tag {
+            tailf:cli-drop-node-name;
+            tailf:cli-disallow-value "route-map";
+            type string {
+              tailf:info "WORD;;ISO routing area tag";
+            }
+          }
+          leaf route-map {
+            tailf:info "Route map reference";
+            description
+              "Route map reference";
+            type string {
+              tailf:info "WORD;;Pointer to route-map entries";
+            }
+          }
+        }
+        leaf route-map {
+          tailf:info "Route map reference";
+          description
+            "Route map reference";
+          type string {
+            tailf:info "WORD;;Pointer to route-map entries";
+          }
+        }
+      }
+      container iso-igrp-container {
+        tailf:cli-drop-node-name;
+        tailf:cli-compact-syntax;
+        uses ospf-iso-igrp-redistribute-grouping;
+      }
+    }
+    container lisp {
+      tailf:info "Locator ID Separation Protocol (LISP)";
+      description
+        "Locator ID Separation Protocol (LISP)";
+      uses ospf-redistribute-grouping;
+    }
+    container mobile {
+      tailf:info "Mobile routes";
+      description
+        "Mobile routes";
+      presence "Mobile routes";
+      uses ospf-redistribute-grouping;
+    }
+    container odr {
+      tailf:info "On Demand stub Routes";
+      description
+        "On Demand stub Routes";
+      presence "On Demand stub Routes";
+      uses ospf-redistribute-grouping;
+    }
+    list ospf {
+      tailf:info "Open Shortest Path First (OSPF)";
+      description
+        "Open Shortest Path First (OSPF)";
+      tailf:cli-suppress-mode;
+      tailf:cli-delete-when-empty;
+      key "id";
+      leaf id {
+        tailf:cli-suppress-range;
+        type uint32 {
+          range "1 .. 65535";
+          tailf:info "<1-65535>;;Process ID";
+        }
+      }
+      uses ospf-redistribute-top-match-grouping;
+      uses ospf-redistribute-match-grouping;
+      leaf vrf {
+        tailf:info "VPN Routing/Forwarding Instance";
+        description
+          "VPN Routing/Forwarding Instance";
+        tailf:cli-diff-dependency "/ios:native/ip/vrf";
+        tailf:cli-diff-dependency "/ios:native/vrf/definition";
+        type string {
+          tailf:info "WORD;;VPN Routing/Forwarding Instance (VRF) name";
+        }
+      }
+    }
+    list ospfv3 {
+      tailf:info "OSPFv3";
+      description
+        "OSPFv3";
+      tailf:cli-suppress-mode;
+      tailf:cli-delete-when-empty;
+      key "id";
+      leaf id {
+        tailf:cli-suppress-range;
+        type uint32 {
+          range "1 .. 65535";
+          tailf:info "<1-65535>;;Process ID";
+        }
+      }
+      uses ospf-redistribute-top-match-grouping;
+      uses ospf-redistribute-match-grouping;
+    }
+    list rip {
+      tailf:info "Routing Information Protocol (RIP)";
+      description
+        "Routing Information Protocol (RIP)";
+      tailf:cli-suppress-mode;
+      tailf:cli-delete-when-empty;
+      key "id";
+      leaf id {
+        description
+          "User selected string identifying this rip process";
+        type string {
+          tailf:info "WORD;;User selected string identifying this process";
+        }
+      }
+      uses ospf-redistribute-grouping;
+    }
+    container static {
+      tailf:info "Static routes";
+      description
+        "Static routes";
+      presence "Static routes";
+      uses ospf-redistribute-grouping;
+    }
+  }
+
+  grouping ospf-redistribute-bgp-grouping {
+    leaf as-number {
+      type bgp-as-number-type;
+    }
+    uses ospf-redistribute-grouping;
+  }
+
+  grouping ospf-snmp-grouping {
+    container snmp {
+      tailf:info "Modify snmp parameters";
+      description
+        "Modify snmp parameters";
+      list context {
+        tailf:info "Configure a SNMP context";
+        description
+          "Configure a SNMP context";
+        tailf:cli-suppress-mode;
+        key "name";
+        leaf name {
+          tailf:info "Context Name";
+          description
+            "Context Name";
+          tailf:cli-drop-node-name;
+          type string {
+            tailf:info "WORD;;Context Name";
+          }
+        }
+        container community {
+          tailf:info "Configure a SNMP v2c Community string and access privs";
+          description
+            "Configure a SNMP v2c Community string and access privs";
+          tailf:cli-compact-syntax;
+          tailf:cli-sequence-commands;
+          leaf community-string {
+            tailf:cli-drop-node-name;
+            type string {
+              tailf:info "WORD;;SNMP community string";
+            }
+          }
+          container access {
+            tailf:cli-drop-node-name;
+            tailf:cli-flatten-container;
+            leaf standard-acl {
+              tailf:cli-drop-node-name;
+              tailf:cli-full-command;
+              type uint32 {
+                tailf:info "<1-99>;;Standard IP accesslist allowing access with this community string";
+                range "1..99";
+              }
+            }
+            leaf expanded-acl {
+              tailf:cli-drop-node-name;
+              tailf:cli-full-command;
+              type uint32 {
+                tailf:info "<1300-1999>;;Expanded IP accesslist allowing access with this community string";
+                range "1300..1999";
+              }
+            }
+            leaf acl-name {
+              tailf:cli-drop-node-name;
+              tailf:cli-full-command;
+              type string {
+                tailf:info "WORD;;Access-list name";
+              }
+            }
+            leaf ipv6 {
+              tailf:info "Specify IPv6 Named Access-List";
+              description
+                "Specify IPv6 Named Access-List";
+              tailf:cli-full-command;
+              type string {
+                tailf:info "WORD;;IPv6 Access-list name";
+              }
+            }
+            leaf ro {
+              tailf:info "Read-only access with this community string";
+              description
+                "Read-only access with this community string";
+              type empty;
+            }
+            leaf rw {
+              tailf:info "Read-write access with this community string";
+              description
+                "Read-write access with this community string";
+              type empty;
+            }
+          }
+        }
+        container user {
+          tailf:info "Configure a SNMP v3 user";
+          description
+            "Configure a SNMP v3 user";
+          tailf:cli-compact-syntax;
+          tailf:cli-sequence-commands;
+          leaf name {
+            tailf:cli-drop-node-name;
+            type string {
+              tailf:info "WORD;;Name of the user";
+            }
+          }
+          container permisssion {
+            tailf:cli-drop-node-name;
+            tailf:cli-flatten-container;
+            container access {
+              tailf:info "specify an access-list associated with this group";
+              description
+                "specify an access-list associated with this group";
+              tailf:cli-flatten-container;
+              leaf standard-acl {
+                tailf:cli-drop-node-name;
+                tailf:cli-full-command;
+                type uint32 {
+                  tailf:info "<1-99>;;Standard IP accesslist allowing access with this username";
+                }
+              }
+              leaf acl-name {
+                tailf:cli-drop-node-name;
+                tailf:cli-full-command;
+                type string {
+                  tailf:info "WORD;;Access-list name";
+                }
+              }
+              leaf ipv6 {
+                tailf:cli-full-command;
+                type string {
+                  tailf:info "WORD;;IPv6 Access-list name";
+                }
+              }
+            }
+            container auth {
+              tailf:info "authentication parameters for the user";
+              description
+                "authentication parameters for the user";
+              tailf:cli-flatten-container;
+              leaf md5 {
+                tailf:info "Use HMAC MD5 algorithm for authentication";
+                description
+                  "Use HMAC MD5 algorithm for authentication";
+                tailf:cli-full-command;
+                type string {
+                  tailf:info "WORD;;authentication password for user";
+                }
+              }
+              leaf sha {
+                tailf:info "Use HMAC SHA algorithm for authentication";
+                description
+                  "Use HMAC SHA algorithm for authentication";
+                tailf:cli-full-command;
+                type string {
+                  tailf:info "WORD;;authentication password for user";
+                }
+              }
+            }
+            leaf credential {
+              tailf:info "If the user password is already configured and saved";
+              description
+                "If the user password is already configured and saved";
+              type empty;
+            }
+            leaf encrypted {
+              tailf:info "specifying passwords as MD5 or SHA digests";
+              description
+                "specifying passwords as MD5 or SHA digests";
+              type empty;
+            }
+          }
+        }
+      }
+    }
+  }
+
+  grouping ospf-address-family-grouping {
+    uses ospf-snmp-grouping;
+    container topology {
+      tailf:info "Associate the routing protocol to a topology instance";
+      description
+        "Associate the routing protocol to a topology instance";
+      tailf:cli-compact-syntax;
+      tailf:cli-sequence-commands;
+      leaf name {
+        tailf:cli-drop-node-name;
+        type string {
+          tailf:info "WORD;;Routing topology instance name";
+        }
+      }
+      leaf tid {
+        tailf:info "Configuring the routing protocol topology tid";
+        description
+          "Configuring the routing protocol topology tid";
+        tailf:cli-optional-in-sequence;
+        type uint32 {
+          tailf:info "<32-127>;;Routing topology tid";
+          range "32..127";
+        }
+      }
+    }
+  }
+
+  grouping router-rip-grouping {
+    uses address-family-vrf-grouping;
+    leaf flash-update-threshold {
+      tailf:info "Specify flash update threshold in second";
+      description
+        "Specify flash update threshold in second";
+      tailf:cli-full-command;
+      type uint8 {
+        range "0 .. 30";
+        tailf:info "<0-30>;;threshold in seconds";
+      }
+    }
+    leaf input-queue {
+      tailf:info "Specify input queue depth";
+      description
+        "Specify input queue depth";
+      tailf:cli-full-command;
+      type uint16 {
+        range "0 .. 1024";
+        tailf:info "0-1024;;queue depth";
+      }
+    }
+    leaf output-delay {
+      tailf:info "Interpacket delay for RIP updates";
+      description
+        "Interpacket delay for RIP updates";
+      tailf:cli-full-command;
+      type uint8 {
+        range "8 .. 50";
+        tailf:info "8-50;;Delay in milliseconds";
+      }
+    }
+    uses passive-interface-grouping;
+    container traffic-share {
+      tailf:info "How to compute traffic share over alternate paths";
+      description
+        "How to compute traffic share over alternate paths";
+      container min {
+        tailf:info "All traffic shared among min metric paths";
+        description
+          "All traffic shared among min metric paths";
+        leaf across-interfaces {
+          tailf:info "Use different interfaces for equal-cost paths";
+          description
+            "Use different interfaces for equal-cost paths";
+          type empty;
+        }
+      }
+    }
+  }
+
+  grouping default-redistribute-grouping {
+    container connected {
+      presence "Connected";
+      tailf:info "Connected";
+      description
+        "Connected";
+      uses rip-metric-route-map-grouping;
+    }
+    list bgp {
+      tailf:info "Border Gateway Protocol (BGP)";
+      description
+        "Border Gateway Protocol (BGP)";
+      tailf:cli-suppress-mode;
+      tailf:cli-delete-when-empty;
+      key "as-number";
+      leaf as-number {
+        type bgp-as-number-type;
+      }
+      uses rip-metric-route-map-grouping;
+    }
+    list eigrp {
+      tailf:info "Enhanced Interior Gateway Routing Protocol (EIGRP)";
+      description
+        "Enhanced Interior Gateway Routing Protocol (EIGRP)";
+      tailf:cli-suppress-mode;
+      tailf:cli-delete-when-empty;
+      key "as-number";
+      leaf as-number {
+        type uint16 {
+          range "1 .. 65535";
+          tailf:info "<1-65535>;;Autonomous system number";
+        }
+      }
+      uses rip-metric-route-map-grouping;
+    }
+    container isis {
+      presence "ISO IS-IS";
+      tailf:info "ISO IS-IS";
+      description
+        "ISO IS-IS";
+      list isis-area {
+        tailf:cli-suppress-mode;
+        tailf:cli-delete-when-empty;
+        tailf:cli-drop-node-name;
+        key "name";
+        leaf name {
+          tailf:cli-disallow-value "level-1|level-2|level-1-2|metric|route-map";
+          type string {
+            tailf:info "WORD;;ISO routing area tag";
+          }
+        }
+        uses redist-isis-grouping;
+      }
+      uses redist-isis-grouping;
+    }
+    container iso-igrp {
+      presence "IGRP for OSI networks";
+      tailf:info "IGRP for OSI networks";
+      description
+        "IGRP for OSI networks";
+      list isoigrp-list {
+        tailf:info "Border Gateway Protocol (BGP)";
+        description
+          "Border Gateway Protocol (BGP)";
+        tailf:cli-suppress-mode;
+        tailf:cli-delete-when-empty;
+        tailf:cli-drop-node-name;
+        key "iso-area-tag";
+        leaf iso-area-tag {
+          tailf:cli-disallow-value "route-map";
+          type string {
+            tailf:info "WORD;;ISO routing area tag";
+          }
+        }
+        uses rip-iso-igrp-metric-route-map-grouping;
+      }
+      uses rip-iso-igrp-metric-route-map-grouping;
+    }
+    container mobile {
+      presence "Mobile routes";
+      tailf:info "Mobile routes";
+      description
+        "Mobile routes";
+      uses rip-metric-route-map-grouping;
+    }
+    container odr {
+      presence "On Demand stub Routes";
+      tailf:info "On Demand stub Routes";
+      description
+        "On Demand stub Routes";
+      uses rip-metric-route-map-grouping;
+    }
+    list ospf {
+      tailf:info "Open Shortest Path First (OSPF)";
+      description
+        "Open Shortest Path First (OSPF)";
+      tailf:cli-suppress-mode;
+      tailf:cli-delete-when-empty;
+      key "process-id";
+      leaf process-id {
+        tailf:cli-suppress-range;
+        type uint16 {
+          range "1 .. 65535";
+          tailf:info "<1-65535>;;Process ID";
+        }
+      }
+      list vrf {
+        tailf:info "VPN Routing/Forwarding Instance";
+        description
+          "VPN Routing/Forwarding Instance";
+        tailf:cli-diff-dependency "/ios:native/ip/vrf";
+        tailf:cli-diff-dependency "/ios:native/vrf/definition";
+        key "name";
+        leaf name {
+          type string {
+            tailf:info "WORD;;VPN Routing/Forwarding Instance (VRF) name";
+          }
+        }
+      }
+      container match {
+        tailf:cli-compact-syntax;
+        tailf:cli-flatten-container;
+        tailf:info "Redistribution of OSPF routes";
+        description
+          "Redistribution of OSPF routes";
+        container internal {
+          presence "Redistribute OSPF internal routes";
+          tailf:info "Redistribute OSPF internal routes";
+          description
+            "Redistribute OSPF internal routes";
+          tailf:cli-compact-syntax;
+          tailf:cli-flatten-container;
+          uses rip-metric-route-map-grouping;
+        }
+        container external {
+          tailf:info "Redistribute OSPF external routes";
+          description
+            "Redistribute OSPF external routes";
+          presence "Redistribute OSPF external routes";
+          tailf:cli-compact-syntax;
+          tailf:cli-flatten-container;
+          leaf external-routes {
+            tailf:cli-drop-node-name;
+            type redist-ospf-external-type;
+          }
+          uses rip-metric-route-map-grouping;
+        }
+        container nssa-external {
+          tailf:info "Redistribute OSPF NSSA external routes";
+          description
+            "Redistribute OSPF NSSA external routes";
+          presence "Redistribute OSPF NSSA external routes";
+          tailf:cli-compact-syntax;
+          tailf:cli-flatten-container;
+          leaf nssa-external-routes {
+            tailf:cli-drop-node-name;
+            type redist-ospf-external-type;
+          }
+          uses rip-metric-route-map-grouping;
+        }
+      }
+      uses rip-metric-route-map-grouping;
+    }
+    container static {
+      presence "Static routes";
+      tailf:info "Static routes";
+      description
+        "Static routes";
+      uses rip-metric-route-map-grouping;
+    }
+    container rip {
+      presence "Routing Information Protocol (RIP)";
+      tailf:info "Routing Information Protocol (RIP)";
+      description
+        "Routing Information Protocol (RIP)";
+      uses rip-metric-route-map-grouping;
+    }
+  }
+
+  grouping ipv6-router-rip-redistribute-grouping {
+    leaf include-connected {
+      tailf:info "Include connected";
+      description
+        "Include connected";
+      type empty;
+    }
+    leaf metric {
+      tailf:info "Metric for redistributed routes";
+      description
+        "Metric for redistributed routes";
+      type uint8 {
+        tailf:info "<1-16>;;Default metric (default is transparent)";
+        range "1..16";
+      }
+    }
+    leaf route-map {
+      tailf:info "Route map reference";
+      description
+        "Route map reference";
+      type string {
+        tailf:info "WORD;;Pointer to route-map entries";
+      }
+    }
+  }
+
+  grouping distance-grouping {
+    container distance {
+      tailf:cli-compact-syntax;
+      tailf:info "Define an administrative distance";
+      description
+        "Define an administrative distance";
+      leaf distance-leaf {
+        tailf:cli-drop-node-name;
+        tailf:cli-full-command;
+        type uint8 {
+          range "1..255";
+          tailf:info "1-255;;Administrative distance";
+        }
+      }
+      list distance-list {
+        tailf:cli-suppress-mode;
+        tailf:cli-delete-when-empty;
+        tailf:cli-drop-node-name;
+        key "number ip mask";
+        leaf number {
+          tailf:cli-suppress-range;
+          type uint8 {
+            range "1 .. 255";
+            tailf:info "1-255;;Administrative distance";
+          }
+        }
+        leaf ip {
+          type inet:ipv4-address {
+            tailf:info "A.B.C.D;;IP source address";
+          }
+        }
+        leaf mask {
+          type inet:ipv4-address {
+            tailf:info "A.B.C.D;;Wildcard bits";
+          }
+        }
+      }
+    }
+  }
+
+  grouping offset-list-grouping {
+    list offset-list {
+      tailf:info "Add or subtract offset from RIP metrics";
+      description
+        "Add or subtract offset from RIP metrics";
+      tailf:cli-compact-syntax;
+      tailf:cli-suppress-mode;
+      tailf:cli-delete-when-empty;
+      tailf:cli-suppress-list-no;
+      tailf:cli-sequence-commands;
+      key "in-out";
+      leaf in-out {
+        tailf:cli-incomplete-command;
+        type offset-list-in-out-type;
+      }
+      leaf offset {
+        tailf:cli-drop-node-name;
+        mandatory true;
+        type uint8 {
+          range "0 .. 16";
+          tailf:info "<0-16>;;Offset";
+        }
+      }
+    }
+  }
+
+  grouping default-router-rip-grouping {
+    leaf auto-summary {
+      tailf:info "Enable automatic network number summarization";
+      description
+        "Enable automatic network number summarization";
+      type empty;
+    }
+    leaf maximum-paths {
+      tailf:cli-full-command;
+      tailf:info "Forward packets over multiple paths";
+      description
+        "Forward packets over multiple paths";
+      type uint8 {
+        range "1 .. 32";
+        tailf:info "1-32;;Number of paths";
+      }
+    }
+    list neighbor {
+      tailf:info "Specify a neighbor router";
+      description
+        "Specify a neighbor router";
+      tailf:cli-suppress-mode;
+      tailf:cli-delete-when-empty;
+      key "ip";
+      leaf ip {
+        type inet:ipv4-address;
+        tailf:info "A.B.C.D;;Neighbor address";
+      }
+    }
+    list network {
+      tailf:info "Enable routing on an IP network";
+      description
+        "Enable routing on an IP network";
+      tailf:cli-suppress-mode;
+      tailf:cli-delete-when-empty;
+      key "ip";
+      leaf ip {
+        type inet:ipv4-address;
+        tailf:info "A.B.C.D;;Network number";
+      }
+    }
+    leaf validate-update-source {
+      tailf:info "Perform sanity checks against source address of routing updates";
+      description
+        "Perform sanity checks against source address of routing updates";
+      tailf:cli-full-command;
+      tailf:cli-boolean-no;
+      tailf:cli-trim-default;
+      type boolean;
+      default "true";
+    }
+  }
+
+  grouping address-family-vrf-grouping {
+    uses default-router-rip-grouping;
+    container default-information {
+      tailf:cli-incomplete-no;
+      tailf:info "Control distribution of default information";
+      description
+        "Control distribution of default information";
+      container originate {
+        tailf:cli-full-no;
+        presence "Distribute a default route";
+        tailf:info "Distribute a default route";
+        description
+          "Distribute a default route";
+        leaf route-map {
+          tailf:info "Route-map reference";
+          description
+            "Route-map reference";
+          tailf:cli-no-value-on-delete;
+          type string {
+            tailf:info "WORD;;Route map name";
+          }
+        }
+      }
+    }
+    leaf default-metric {
+      tailf:info "Set metric of redistributed routes";
+      description
+        "Set metric of redistributed routes";
+      tailf:cli-full-command;
+      type uint32 {
+        range "1..4294967295";
+        tailf:info "<1-4294967295>;;Default metric";
+      }
+    }
+    uses distance-grouping;
+    uses distribute-list-grouping;
+    uses offset-list-grouping;
+    container redistribute {
+      tailf:info "Redistribute information from another routing protocol";
+      description
+        "Redistribute information from another routing protocol";
+      uses rip-metric-route-map-grouping;
+      uses default-redistribute-grouping;
+    }
+    container timers {
+      tailf:info "Adjust routing timers";
+      description
+        "Adjust routing timers";
+      tailf:cli-incomplete-no;
+      tailf:cli-compact-syntax;
+      container basic {
+        tailf:info "Basic routing protocol update timers";
+        description
+          "Basic routing protocol update timers";
+        tailf:cli-sequence-commands;
+        tailf:cli-full-no;
+        leaf updates {
+          tailf:cli-drop-node-name;
+          tailf:cli-incomplete-command;
+          tailf:cli-no-value-on-delete;
+          type uint32 {
+            range "1 .. 4294967295";
+            tailf:info "1-4294967295;;Interval between updates for RIP";
+          }
+        }
+        leaf invalid {
+          tailf:cli-drop-node-name;
+          tailf:cli-incomplete-command;
+          tailf:cli-no-value-on-delete;
+          type uint32 {
+            range "1 .. 4294967295";
+            tailf:info "1-4294967295;;Invalid";
+          }
+        }
+        leaf holddown {
+          tailf:cli-drop-node-name;
+          tailf:cli-incomplete-command;
+          tailf:cli-no-value-on-delete;
+          type uint32 {
+            range "1 .. 4294967295";
+            tailf:info "1-4294967295;;Holddown";
+          }
+        }
+        leaf flush {
+          tailf:cli-drop-node-name;
+          tailf:cli-incomplete-command;
+          tailf:cli-no-value-on-delete;
+          type uint32 {
+            range "1 .. 4294967295";
+            tailf:info "1-4294967295;;Flush";
+          }
+        }
+        leaf sleep {
+          tailf:cli-drop-node-name;
+          tailf:cli-no-value-on-delete;
+          type uint32 {
+            range "1 .. 4294967295";
+            tailf:info "1-4294967295;;Sleep time, in milliseconds";
+          }
+        }
+      }
+    }
+    leaf version {
+      tailf:info "Set routing protocol version";
+      description
+        "Set routing protocol version";
+      type uint8 {
+        range "1 .. 2";
+        tailf:info "1-2;;rip version 1 or 2";
+      }
+    }
+  }
+
+  grouping redist-isis-grouping {
+    container rip-isis-redist {
+      tailf:cli-drop-node-name;
+      leaf isis-level-routes {
+        tailf:cli-drop-node-name;
+        type enumeration {
+          enum "level-1" {
+            tailf:info "IS-IS level-1 routes only";
+          }
+          enum "level-2" {
+            tailf:info "IS-IS level-2 routes only";
+          }
+          enum "level-1-2" {
+            tailf:info "IS-IS level-1 and level-2 routes";
+          }
+        }
+      }
+      uses rip-metric-route-map-grouping;
+    }
+  }
+
+  grouping rip-metric-route-map-grouping {
+    container rip-metric-route-map {
+      tailf:cli-drop-node-name;
+      tailf:cli-compact-syntax;
+      container metric {
+        tailf:cli-compact-syntax;
+        tailf:cli-flatten-container;
+        tailf:info "Metric for redistributed routes";
+        description
+          "Metric for redistributed routes";
+        choice metric-transparent-choice {
+          leaf metric-value {
+            tailf:cli-drop-node-name;
+            tailf:info "Metric for redistributed routes";
+            description
+              "Metric for redistributed routes";
+            type uint32 {
+              range "0 .. 16";
+              tailf:info "<0-16>;;Default metric";
+            }
+          }
+          leaf transparent {
+            tailf:info "Transparently redistribute metric";
+            description
+              "Transparently redistribute metric";
+            type empty;
+          }
+        }
+      }
+      leaf route-map {
+        tailf:info "Route map reference";
+        description
+          "Route map reference";
+        type string {
+          tailf:info "WORD;;Pointer to route-map entries";
+        }
+      }
+    }
+  }
+
+  grouping rip-iso-igrp-metric-route-map-grouping {
+    container rip-metric-route-map {
+      tailf:cli-drop-node-name;
+      tailf:cli-compact-syntax;
+      tailf:cli-sequence-commands;
+      leaf route-map {
+        tailf:info "Route map reference";
+        description
+          "Route map reference";
+        type string {
+          tailf:info "WORD;;Pointer to route-map entries";
+        }
+      }
+      container metric {
+        tailf:cli-compact-syntax;
+        tailf:info "Metric for redistributed routes";
+        description
+          "Metric for redistributed routes";
+        choice metric-transparent-choice {
+          leaf metric-value {
+            tailf:cli-drop-node-name;
+            tailf:info "Metric for redistributed routes";
+            description
+              "Metric for redistributed routes";
+            type uint32 {
+              range "0 .. 16";
+              tailf:info "<0-16>;;Default metric";
+            }
+          }
+          leaf transparent {
+            tailf:info "Transparently redistribute metric";
+            description
+              "Transparently redistribute metric";
+            type empty;
+          }
+        }
+      }
+    }
+  }
+
+  grouping narrow-wide-transition-grouping {
+    leaf narrow-wide {
+      tailf:cli-drop-node-name;
+      tailf:cli-full-command;
+      type isis-level-type;
+    }
+    leaf transition {
+      tailf:info "Accept both styles of TLVs during transition";
+      description
+        "Accept both styles of TLVs during transition";
+      type isis-level-type;
+      tailf:cli-full-command;
+    }
+  }
+
+  grouping spf-intervals-grouping {
+    leaf interval {
+      tailf:cli-drop-node-name;
+      type uint32 {
+        range "1 .. 120";
+        tailf:info "<1-120>;;Interval between consecutive SPFs in seconds";
+      }
+    }
+    leaf initial-wait {
+      tailf:cli-drop-node-name;
+      type uint32 {
+        range "1 .. 120000";
+        tailf:info "<1-120000>;;Initial wait before first SPF in milliseconds";
+      }
+    }
+    leaf minimum-wait {
+      tailf:cli-drop-node-name;
+      type uint32 {
+        range "1 .. 120000";
+        tailf:info "<1-120000>;;Minimum wait between first and second SPF in milliseconds";
+      }
+    }
+  }
+
+  grouping authenticate-snp-grouping {
+    leaf authenticate {
+      tailf:info "Authentication";
+      description
+        "Authentication";
+      tailf:cli-incomplete-command;
+      type empty;
+    }
+    leaf snp {
+      tailf:info "SNP PDUs";
+      description
+        "SNP PDUs";
+      type enumeration {
+        enum "send-only" {
+          tailf:info "Send but do not check PDUs on receiving";
+        }
+        enum "validate" {
+          tailf:info "Send and check PDUs on receiving";
+        }
+      }
+    }
+  }
+
+  grouping lsp-gen-interval-grouping {
+    leaf interval {
+      tailf:cli-drop-node-name;
+      type uint32 {
+        range "1 .. 120";
+        tailf:info "<1-120>;;Interval in seconds";
+      }
+    }
+    leaf initial-wait {
+      tailf:cli-drop-node-name;
+      type uint32 {
+        range "1 .. 120000";
+        tailf:info "<1-120000>;;Initial wait in milliseconds";
+      }
+    }
+    leaf wait {
+      tailf:cli-drop-node-name;
+      type uint32 {
+        range "1 .. 120000";
+        tailf:info "<1-120000>;;Wait between first and second lsp generation in milliseconds";
+      }
+    }
+  }
+
+  grouping set-overload-bit-suppress-grouping {
+    leaf external {
+      tailf:info "If overload-bit set, don't advertise IP prefixes learned from other protocols";
+      description
+        "If overload-bit set, don't advertise IP prefixes learned from other protocols";
+      tailf:cli-break-sequence-commands;
+      type empty;
+    }
+    leaf interlevel {
+      tailf:info "If overload-bit set, don't advertise IP prefixes learned from another ISIS level";
+      description
+        "If overload-bit set, don't advertise IP prefixes learned from another ISIS level";
+      type empty;
+    }
+  }
+
+  grouping summary-address-metric-tag-grouping {
+    leaf metric {
+      tailf:info "Set metric for summay route";
+      description
+        "Set metric for summay route";
+      tailf:cli-full-command;
+      type uint32 {
+        range "1 .. 4294967295";
+        tailf:info "<1-4294967295>;;metric";
+      }
+    }
+    leaf tag {
+      tailf:info "Set tag";
+      description
+        "Set tag";
+      type uint32 {
+        range "1 .. 4294967295";
+        tailf:info "<1-4294967295>;;32-bit tag value";
+      }
+    }
+  }
+
+  grouping authentication-level-grouping {
+    leaf levels {
+      tailf:cli-drop-node-name;
+      type authentication-level-type;
+    }
+  }
+
+  grouping redist-level-grouping {
+    leaf levels {
+      tailf:cli-drop-node-name;
+      tailf:cli-break-sequence-commands;
+      type isis-routes-level-type;
+    }
+  }
+
+  grouping isis-redist-container-content-grouping {
+    uses redist-level-grouping;
+    leaf metric {
+      tailf:info "ISIS default metric";
+      description
+        "ISIS default metric";
+      type uint32 {
+        range "0 .. 4294967295";
+        tailf:info "<0-4294967295>;;ISIS default metric";
+      }
+    }
+    leaf metric-type {
+      tailf:info "OSPF/IS-IS exterior metric type for redistributed routes";
+      description
+        "OSPF/IS-IS exterior metric type for redistributed routes";
+      type enumeration {
+        enum "external" {
+          tailf:info "Set IS-IS External metric type";
+        }
+        enum "internal" {
+          tailf:info "Set IS-IS Internal metric type";
+        }
+        enum "rib-metric-as-external" {
+          tailf:info "Set IS-IS rib External metric type";
+        }
+        enum "rib-metric-as-internal" {
+          tailf:info "Set IS-IS rib internal metric type";
+        }
+      }
+    }
+    leaf route-map {
+      tailf:info "Route map reference";
+      description
+        "Route map reference";
+      type string {
+        tailf:info "WORD;;Pointer to route-map entries";
+      }
+    }
+  }
+
+  grouping isis-redist-grouping {
+    container isis-redist-container {
+      tailf:cli-drop-node-name;
+      uses isis-redist-container-content-grouping;
+    }
+  }
+
+  grouping isis-redist-af-grouping {
+    container isis-redist-af-container {
+      tailf:cli-drop-node-name;
+      leaf include-connected {
+        tailf:info "Include connected";
+        description
+          "Include connected";
+        type empty;
+      }
+      uses isis-redist-container-content-grouping;
+    }
+  }
+
+  grouping isis-redist-ospf-match-grouping {
+    uses redist-level-grouping;
+    leaf metric {
+      tailf:info "ISIS default metric";
+      description
+        "ISIS default metric";
+      type uint32 {
+        range "0 .. 4294967295";
+        tailf:info "<0-4294967295>;;ISIS default metric";
+      }
+    }
+    leaf route-map {
+      tailf:info "Route map reference";
+      description
+        "Route map reference";
+      type string {
+        tailf:info "WORD;;Pointer to route-map entries";
+      }
+    }
+  }
+
+  grouping isis-redist-clns-ip-grouping {
+    container clns {
+      tailf:info "Redistribution of BGP NSAP routes";
+      description
+        "Redistribution of BGP NSAP routes";
+      presence "Redistribution of BGP NSAP routes";
+      leaf route-map {
+        tailf:info "Route map reference";
+        description
+          "Route map reference";
+        type string {
+          tailf:info "WORD;;Pointer to route-map entries";
+        }
+      }
+      uses isis-redist-grouping;
+    }
+    container ip {
+      tailf:info "Redistribution of BGP IP routes";
+      description
+        "Redistribution of BGP IP routes";
+      uses isis-redist-grouping;
+    }
+  }
+
+  grouping isis-address-family-grouping {
+    leaf adjacency-check {
+      tailf:info "Check ISIS neighbor protocol support";
+      description
+        "Check ISIS neighbor protocol support";
+      type empty;
+      tailf:cli-full-command;
+    }
+    container default-information {
+      tailf:cli-incomplete-no;
+      tailf:info "Control distribution of default information";
+      description
+        "Control distribution of default information";
+      container originate {
+        tailf:cli-full-no;
+        presence "Distribute a default route";
+        tailf:info "Distribute a default route";
+        description
+          "Distribute a default route";
+        leaf route-map {
+          tailf:info "Route-map reference";
+          description
+            "Route-map reference";
+          tailf:cli-no-value-on-delete;
+          type string {
+            tailf:info "WORD;;Route map name";
+          }
+        }
+      }
+    }
+    leaf maximum-paths {
+      tailf:info "Forward packets over multiple paths";
+      description
+        "Forward packets over multiple paths";
+      tailf:cli-full-command;
+      type uint32 {
+        range "1 .. 32";
+        tailf:info "<1-32>;;Number of paths";
+      }
+    }
+    container metric {
+      tailf:info "Set ISIS metric for all interfaces";
+      description
+        "Set ISIS metric for all interfaces";
+      tailf:cli-compact-syntax;
+      tailf:cli-sequence-commands;
+      leaf default {
+        tailf:cli-drop-node-name;
+        type uint32 {
+          range "1 .. 63";
+          tailf:info "<1-63>;;Default metric";
+        }
+      }
+      leaf level-1-2 {
+        tailf:cli-drop-node-name;
+        type enumeration {
+          enum "level-1" {
+            tailf:info "Apply metric to level-1 links";
+          }
+          enum "level-2" {
+            tailf:info "Apply metric to level-2 links";
+          }
+        }
+      }
+    }
+    container prc-interval {
+      tailf:info "Minimum interval between partial route calculations";
+      description
+        "Minimum interval between partial route calculations";
+      tailf:cli-compact-syntax;
+      tailf:cli-sequence-commands;
+      leaf interval {
+        tailf:cli-drop-node-name;
+        type uint32 {
+          range "1 .. 120";
+          tailf:info "<1-120>;;PRC interval in seconds";
+        }
+      }
+      leaf initial-wait {
+        tailf:cli-drop-node-name;
+        type uint32 {
+          range "1 .. 120000";
+          tailf:info "<1-120000>;;Initial wait for PRC in milliseconds";
+        }
+      }
+      leaf minimum-wait {
+        tailf:cli-drop-node-name;
+        type uint32 {
+          range "1 .. 120000";
+          tailf:info "<1-120000>;;Minimum wait between first and second PRC in milliseconds";
+        }
+      }
+    }
+    container set-overload-bit {
+      tailf:info "Signal other routers not to use us in SPF";
+      description
+        "Signal other routers not to use us in SPF";
+      choice set-overload-bit-choice {
+        container on-startup {
+          tailf:info "Set overload-bit only temporarily after reboot";
+          description
+            "Set overload-bit only temporarily after reboot";
+          choice on-startup-choice {
+            container time {
+              tailf:cli-drop-node-name;
+              tailf:cli-compact-syntax;
+              tailf:cli-sequence-commands;
+              leaf time {
+                tailf:cli-drop-node-name;
+                type uint32 {
+                  range "5 .. 86400";
+                  tailf:info "<5-86400>;;Time in seconds to advertise ourself as overloaded after reboot";
+                }
+              }
+              leaf suppress {
+                tailf:info "If overload-bit set, suppress the following types of IP prefixes";
+                description
+                  "If overload-bit set, suppress the following types of IP prefixes";
+                tailf:cli-incomplete-command;
+                type empty;
+              }
+              uses set-overload-bit-suppress-grouping;
+            }
+            container wait-for-bgp {
+              tailf:info "Let BGP decide when to unset the overload bit";
+              description
+                "Let BGP decide when to unset the overload bit";
+              presence "Let BGP decide when to unset the overload bitW";
+              container suppress {
+                tailf:info "If overload-bit set, suppress the following types of IP prefixes";
+                description
+                  "If overload-bit set, suppress the following types of IP prefixes";
+                tailf:cli-compact-syntax;
+                uses set-overload-bit-suppress-grouping;
+              }
+            }
+          }
+        }
+        container suppress {
+          tailf:info "If overload-bit set, suppress the following types of IP prefixes";
+          description
+            "If overload-bit set, suppress the following types of IP prefixes";
+          tailf:cli-compact-syntax;
+          uses set-overload-bit-suppress-grouping;
+        }
+      }
+    }
+    container spf-interval {
+      tailf:info "Minimum interval between SPF calculations";
+      description
+        "Minimum interval between SPF calculations";
+      tailf:cli-compact-syntax;
+      choice spf-interval-choice {
+        list level-1-2 {
+          tailf:cli-drop-node-name;
+          tailf:cli-suppress-mode;
+          tailf:cli-delete-when-empty;
+          tailf:cli-compact-syntax;
+          tailf:cli-sequence-commands;
+          tailf:cli-incomplete-command;
+          key "level";
+          leaf level {
+            type enumeration {
+              enum "level-1" {
+                tailf:info "Set interval for level 1 only";
+              }
+              enum "level-2" {
+                tailf:info "Set interval for level 2 only";
+              }
+            }
+          }
+          uses spf-intervals-grouping;
+        }
+        container intervals {
+          tailf:cli-drop-node-name;
+          tailf:cli-compact-syntax;
+          tailf:cli-sequence-commands;
+          uses spf-intervals-grouping;
+        }
+      }
+    }
+    container traffic-share {
+      tailf:info "How to compute traffic share over alternate paths";
+      description
+        "How to compute traffic share over alternate paths";
+      container min {
+        tailf:info "All traffic shared among min metric paths";
+        description
+          "All traffic shared among min metric paths";
+        leaf across-interfaces {
+          tailf:info "Use different interfaces for equal-cost paths";
+          description
+            "Use different interfaces for equal-cost paths";
+          type empty;
+        }
+      }
+    }
+    leaf vrf {
+      tailf:info "VRF name for this process";
+      description
+        "VRF name for this process";
+      type string;
+    }
+  }
+
+  grouping isis-redist-vrf-grouping {
+    container application {
+      tailf:info "Application";
+      description
+        "Application";
+      list appname {
+        tailf:cli-drop-node-name;
+        tailf:cli-suppress-mode;
+        key "appname";
+        leaf appname {
+          tailf:info "Application name";
+          description
+            "Application name";
+          type string;
+        }
+        uses isis-redist-grouping;
+      }
+    }
+    container bgp {
+      tailf:info "Border Gateway Protocol (BGP)";
+      description
+        "Border Gateway Protocol (BGP)";
+      list bp-as-num {
+        tailf:cli-drop-node-name;
+        tailf:cli-suppress-mode;
+        key "bp-as-num";
+        leaf bp-as-num {
+          tailf:info "Autonomous system number";
+          description
+            "Autonomous system number";
+          type bgp-as-number-type;
+        }
+        uses isis-redist-clns-ip-grouping;
+        uses isis-redist-grouping;
+      }
+      leaf a_LESSER_1_PERIOD_0-XX_PERIOD_YY_GREATER_ {
+        tailf:alt-name "_LT_1.0-XX.YY_GT_";
+        tailf:info "Autonomous system number";
+        description
+          "Autonomous system number";
+        type empty;
+      }
+    }
+    container connected {
+      tailf:info "Connected";
+      description
+        "Connected";
+      presence "true";
+      uses isis-redist-grouping;
+    }
+    container eigrp {
+      tailf:info "Enhanced Interior Gateway Routing Protocol (EIGRP)";
+      description
+        "Enhanced Interior Gateway Routing Protocol (EIGRP)";
+      list eigrp-as {
+        tailf:cli-drop-node-name;
+        tailf:cli-suppress-mode;
+        key "eigrp-as";
+        leaf eigrp-as {
+          tailf:info "AS number";
+          description
+            "AS number";
+          type uint16 {
+            range "1..65535";
+          }
+        }
+        uses isis-redist-grouping;
+      }
+    }
+    container isis {
+      tailf:info "ISO IS-IS";
+      description
+        "ISO IS-IS";
+      list isis-atag {
+        tailf:cli-drop-node-name;
+        tailf:cli-suppress-mode;
+        key "isis-atag";
+        leaf isis-atag {
+          tailf:info "ISO routing area tag";
+          description
+            "ISO routing area tag";
+          type string;
+        }
+        container ip {
+          tailf:info "Redistribution of IP routes between levels or processes";
+          description
+            "Redistribution of IP routes between levels or processes";
+          uses isis-redist-grouping;
+        }
+      }
+      container ip {
+        tailf:info "Redistribution of IP routes between levels or processes";
+        description
+          "Redistribution of IP routes between levels or processes";
+        presence "true";
+        uses isis-redist-grouping;
+      }
+    }
+    container iso-igrp {
+      tailf:info "IGRP for OSI networks";
+      description
+        "IGRP for OSI networks";
+      presence "true";
+      list iso-atag {
+        tailf:cli-drop-node-name;
+        tailf:cli-suppress-mode;
+        key "iso-atag";
+        leaf iso-atag {
+          tailf:info "ISO routing area tag";
+          description
+            "ISO routing area tag";
+          type string;
+        }
+        leaf route-map {
+          tailf:info "Route map reference";
+          description
+            "Route map reference";
+          type empty;
+        }
+      }
+      container route-map {
+        tailf:info "Route map reference";
+        description
+          "Route map reference";
+        presence "true";
+        leaf rm-point {
+          tailf:info "Pointer to route-map entries";
+          description
+            "Pointer to route-map entries";
+          tailf:cli-drop-node-name;
+          type string;
+        }
+      }
+    }
+    container lisp {
+      tailf:info "Locator ID Separation Protocol (LISP)";
+      description
+        "Locator ID Separation Protocol (LISP)";
+      presence "true";
+      uses isis-redist-grouping;
+    }
+    container mobile {
+      tailf:info "Mobile routes";
+      description
+        "Mobile routes";
+      presence "true";
+      uses isis-redist-grouping;
+    }
+    container odr {
+      tailf:info "On Demand stub Routes";
+      description
+        "On Demand stub Routes";
+      presence "true";
+      uses isis-redist-grouping;
+    }
+    leaf ospf {
+      tailf:info "Open Shortest Path First (OSPF)";
+      description
+        "Process ID";
+      type uint16 {
+        range "1..65535";
+      }
+    }
+    container ospfv3 {
+      tailf:info "OSPFv3";
+      description
+        "OSPFv3";
+      list os3-id {
+        tailf:cli-drop-node-name;
+        tailf:cli-suppress-mode;
+        key "os3-id";
+        leaf os3-id {
+          tailf:info "Process ID";
+          description
+            "Process ID";
+          type uint16 {
+            range "1..65535";
+          }
+        }
+        uses isis-redist-grouping;
+      }
+    }
+    container rip {
+      tailf:info "Routing Information Protocol (RIP)";
+      description
+        "Routing Information Protocol (RIP)";
+      presence "true";
+      uses isis-redist-grouping;
+    }
+    container static {
+      tailf:info "Static routes";
+      description
+        "Static routes";
+      presence "true";
+      uses isis-redist-clns-ip-grouping;
+      uses isis-redist-grouping;
+    }
+  }
+
+  grouping tie-break-prefer-repair-grouping {
+    leaf downstream {
+      tailf:info "Prefer repair path via downstream node";
+      description
+        "priority number";
+      type uint8 {
+        range "1..255";
+      }
+    }
+    leaf linecard-disjoint {
+      tailf:info "Prefer line card disjoint repair path";
+      description
+        "priority number";
+      type uint8 {
+        range "1..255";
+      }
+    }
+    leaf lowest-backup-path-metric {
+      tailf:info "Prefer repair path with lowest total metric";
+      description
+        "priority number";
+      type uint8 {
+        range "1..255";
+      }
+    }
+    leaf node-protecting {
+      tailf:info "Prefer node protecting repair path";
+      description
+        "priority number";
+      type uint8 {
+        range "1..255";
+      }
+    }
+    leaf primary-path {
+      tailf:info "Prefer repair path from ECMP set";
+      description
+        "priority number";
+      type uint8 {
+        range "1..255";
+      }
+    }
+    leaf secondary-path {
+      tailf:info "Prefer non-ECMP repair path";
+      description
+        "priority number";
+      type uint8 {
+        range "1..255";
+      }
+    }
+    leaf srlg-disjoint {
+      tailf:info "Prefer SRLG disjoint repair path";
+      description
+        "priority number";
+      type uint8 {
+        range "1..255";
+      }
+    }
+  }
+
+  grouping isis-main-grouping {
+    container isis-main-container {
+      tailf:cli-full-command;
+      tailf:cli-drop-node-name;
+      uses isis-address-family-grouping;
+      container address-family {
+        tailf:info "Enter Address Family command mode";
+        description
+          "Enter Address Family command mode";
+        container ipv4 {
+          tailf:info "Address family";
+          description
+            "Address family";
+          presence "true";
+          leaf multicast {
+            tailf:info "Address Family modifier";
+            description
+              "Address Family modifier";
+            type empty;
+          }
+          leaf unicast {
+            tailf:info "Address Family modifier";
+            description
+              "Address Family modifier";
+            type empty;
+          }
+        }
+        container ipv6 {
+          tailf:info "Address family";
+          description
+            "Address family";
+          presence "true";
+          container unicast {
+            tailf:cli-add-mode;
+            tailf:cli-mode-name "config-router-af";
+            tailf:info "Address Family Modifier";
+            description
+              "Address Family Modifier";
+            tailf:cli-full-command;
+            tailf:cli-exit-command "exit-address-family" {
+              tailf:info "Exit from Address Family configuration mode";
+            }
+            uses isis-address-family-grouping;
+            leaf distance {
+              tailf:info "Administrative distance";
+              description
+                "Administrative distance";
+              tailf:cli-full-command;
+              type uint32 {
+                range "1 .. 255";
+                tailf:info "<1-255>;;OSPF Administrative distance";
+              }
+            }
+            container multi-topology {
+              tailf:info "Enable multi-topology mode";
+              description
+                "Enable multi-topology mode";
+              presence "Enable multi-topology mode";
+              leaf transition {
+                tailf:info "Accept and generate both IS-IS IPv6 and Multi-topology IPv6 TLVs";
+                description
+                  "Accept and generate both IS-IS IPv6 and Multi-topology IPv6 TLVs";
+                type empty;
+              }
+            }
+            container redistribute {
+              tailf:info "Redistribute IPv6 prefixes from another routing protocol";
+              description
+                "Redistribute IPv6 prefixes from another routing protocol";
+              container bgp {
+                tailf:info "Border Gateway Protocol (BGP)";
+                description
+                  "Border Gateway Protocol (BGP)";
+                tailf:cli-sequence-commands;
+                tailf:cli-compact-syntax;
+                leaf as-number {
+                  tailf:cli-drop-node-name;
+                  type bgp-as-number-type;
+                }
+                uses isis-redist-af-grouping;
+              }
+              container connected {
+                tailf:info "Connected";
+                description
+                  "Connected";
+                presence "Connected";
+                uses isis-redist-grouping;
+              }
+              list eigrp {
+                tailf:info "Enhanced Interior Gateway Routing Protocol (EIGRP)";
+                description
+                  "Enhanced Interior Gateway Routing Protocol (EIGRP)";
+                tailf:cli-suppress-mode;
+                tailf:cli-delete-when-empty;
+                key "as-number";
+                leaf as-number {
+                  tailf:cli-drop-node-name;
+                  type uint32 {
+                    range "1 .. 65535";
+                    tailf:info "<1-65535>;;Autonomous system number";
+                  }
+                }
+                uses isis-redist-af-grouping;
+              }
+              container isis {
+                tailf:info "ISO IS-IS";
+                description
+                  "ISO IS-IS";
+                tailf:cli-compact-syntax;
+                leaf area-tag {
+                  tailf:cli-drop-node-name;
+                  tailf:cli-disallow-value "level-1|level-2";
+                  type string {
+                    tailf:info "WORD;;IPv6 process name";
+                  }
+                }
+                container levels {
+                  tailf:cli-drop-node-name;
+                  tailf:cli-sequence-commands;
+                  leaf isis-redist-levels1 {
+                    tailf:cli-drop-node-name;
+                    tailf:cli-incomplete-command;
+                    type enumeration {
+                      enum "level-1" {
+                        tailf:info "Inter-area routes from level-1";
+                      }
+                      enum "level-2" {
+                        tailf:info "Inter-area routes from level-2";
+                      }
+                    }
+                  }
+                  leaf into {
+                    tailf:info "from level-n into level-m";
+                    description
+                      "from level-n into level-m";
+                    tailf:cli-incomplete-command;
+                    type empty;
+                  }
+                  leaf isis-redist-levels2 {
+                    tailf:cli-drop-node-name;
+                    tailf:cli-incomplete-command;
+                    type enumeration {
+                      enum "level-1" {
+                        tailf:info "Inter-area routes from level-1";
+                      }
+                      enum "level-2" {
+                        tailf:info "Inter-area routes from level-2";
+                      }
+                    }
+                  }
+                  leaf distribute-list {
+                    tailf:info "select routes";
+                    description
+                      "select routes";
+                    type string {
+                      tailf:info "WORD;;IPv6 prefix-list name";
+                    }
+                  }
+                }
+              }
+              container nemo {
+                tailf:info "Network Mobility (NEMO)";
+                description
+                  "Network Mobility (NEMO)";
+                tailf:cli-compact-syntax;
+                uses isis-redist-af-grouping;
+              }
+              list ospf {
+                tailf:info "Open Shortest Path First (OSPF)";
+                description
+                  "Open Shortest Path First (OSPF)";
+                tailf:cli-suppress-mode;
+                tailf:cli-delete-when-empty;
+                key "process-id";
+                leaf process-id {
+                  tailf:cli-suppress-range;
+                  type uint32 {
+                    range "1 .. 65535";
+                    tailf:info "<1-65535>;;Process ID";
+                  }
+                }
+                uses isis-redist-af-grouping;
+                container match {
+                  tailf:cli-compact-syntax;
+                  tailf:cli-flatten-container;
+                  tailf:info "Redistribution of OSPF routes";
+                  description
+                    "Redistribution of OSPF routes";
+                  container internal {
+                    presence "Redistribute OSPF internal routes";
+                    tailf:info "Redistribute OSPF internal routes";
+                    description
+                      "Redistribute OSPF internal routes";
+                    tailf:cli-compact-syntax;
+                    tailf:cli-flatten-container;
+                    uses isis-redist-container-content-grouping;
+                  }
+                  container external {
+                    tailf:info "Redistribute OSPF external routes";
+                    description
+                      "Redistribute OSPF external routes";
+                    presence "Redistribute OSPF external routes";
+                    tailf:cli-compact-syntax;
+                    tailf:cli-flatten-container;
+                    leaf external-routes {
+                      tailf:cli-drop-node-name;
+                      type redist-ospf-external-type;
+                    }
+                    uses isis-redist-container-content-grouping;
+                  }
+                  container nssa-external {
+                    tailf:info "Redistribute OSPF NSSA external routes";
+                    description
+                      "Redistribute OSPF NSSA external routes";
+                    presence "Redistribute OSPF NSSA external routes";
+                    tailf:cli-compact-syntax;
+                    tailf:cli-flatten-container;
+                    leaf nssa-external-routes {
+                      tailf:cli-drop-node-name;
+                      type redist-ospf-external-type;
+                    }
+                    uses isis-redist-container-content-grouping;
+                  }
+                }
+              }
+              list rip {
+                tailf:info "IPv6 Routing Information Protocol (RIPv6)";
+                description
+                  "IPv6 Routing Information Protocol (RIPv6)";
+                tailf:cli-suppress-mode;
+                tailf:cli-delete-when-empty;
+                key "process";
+                leaf process {
+                  type string {
+                    tailf:info "WORD;;User selected string identifying this process";
+                  }
+                }
+                uses isis-redist-af-grouping;
+              }
+              container static {
+                tailf:info "Static routes";
+                description
+                  "Static routes";
+                presence "Static routes";
+                uses isis-redist-grouping;
+              }
+            }
+            list summary-prefix {
+              tailf:info "Configure IPv6 summary prefix";
+              description
+                "Configure IPv6 summary prefix";
+              tailf:cli-suppress-mode;
+              tailf:cli-delete-when-empty;
+              key "prefix";
+              leaf prefix {
+                type inet:ipv6-prefix {
+                  tailf:info "X:X:X:X::X/<0-128>;;IPv6 prefix x:x::y/<z>";
+                }
+              }
+              leaf levels {
+                tailf:cli-drop-node-name;
+                type enumeration {
+                  enum "level-1" {
+                    tailf:info "Summarize into level-1 area";
+                  }
+                  enum "level-1-2" {
+                    tailf:info "Summarize into both area and sub-domain";
+                  }
+                  enum "level-2" {
+                    tailf:info "Summarize into level-2 sub-domain";
+                  }
+                }
+              }
+            }
+          }
+        }
+      }
+      container advertise {
+        tailf:info "Control which IP routes flow in L1 and L2 LSPs";
+        description
+          "Control which IP routes flow in L1 and L2 LSPs";
+        leaf passive-only {
+          tailf:info "only interface address of passive interfaces";
+          description
+            "only interface address of passive interfaces";
+          type empty;
+        }
+      }
+      container area-password {
+        tailf:info "Configure the authentication password for an area";
+        description
+          "Configure the authentication password for an area";
+        tailf:cli-sequence-commands;
+        tailf:cli-compact-syntax;
+        leaf name {
+          tailf:cli-drop-node-name;
+          type string {
+            tailf:info "WORD;;Area password";
+          }
+        }
+        uses authenticate-snp-grouping;
+      }
+      container authentication {
+        tailf:info "ISIS authentication for LSPs";
+        description
+          "ISIS authentication for LSPs";
+        container mode {
+          tailf:info "Authentication mode";
+          description
+            "Authentication mode";
+          container md5 {
+            tailf:info "Keyed message digest";
+            description
+              "Keyed message digest";
+            presence "Keyed message digest";
+            uses authentication-level-grouping;
+          }
+          container text {
+            tailf:info "Clear text password";
+            description
+              "Clear text password";
+            presence "Clear text password";
+            uses authentication-level-grouping;
+          }
+        }
+        container key-chain {
+          tailf:info "Authentication key-chain";
+          description
+            "Authentication key-chain";
+          tailf:cli-compact-syntax;
+          tailf:cli-sequence-commands;
+          leaf name {
+            tailf:cli-drop-node-name;
+            type string {
+              tailf:info "WORD;;Name of key-chain";
+            }
+          }
+          uses authentication-level-grouping;
+        }
+        container send-only {
+          tailf:info "Authentication send only, receive ignore";
+          description
+            "Authentication send only, receive ignore";
+          presence "Authentication send only, receive ignore";
+          uses authentication-level-grouping;
+        }
+      }
+      container bfd {
+        tailf:info "BFD configuration commands";
+        description
+          "BFD configuration commands";
+        leaf all-interfaces {
+          tailf:info "Enable BFD on all interfaces";
+          description
+            "Enable BFD on all interfaces";
+          type empty;
+        }
+        leaf check-ctrl-plane-failure {
+          tailf:info "BFD check control plane failure";
+          description
+            "BFD check control plane failure";
+          type empty;
+        }
+      }
+      list distance {
+        tailf:info "Define an administrative distance";
+        description
+          "Define an administrative distance";
+        tailf:cli-compact-syntax;
+        tailf:cli-suppress-mode;
+        key "number";
+        leaf number {
+          type uint8 {
+            range "1 .. 255";
+            tailf:info "1-255;;Administrative distance";
+          }
+        }
+        list ip-list {
+          tailf:cli-drop-node-name;
+          tailf:cli-suppress-mode;
+          tailf:cli-compact-syntax;
+          key "ip";
+          leaf ip {
+            tailf:info "IP Source address";
+            description
+              "IP Source address";
+            type inet:ipv4-address;
+          }
+          list wildcard-bits {
+            tailf:cli-drop-node-name;
+            tailf:cli-suppress-mode;
+            key "w-bits";
+            leaf w-bits {
+              tailf:info "Wildcard bits";
+              type inet:ipv4-address;
+            }
+            leaf access-list {
+              tailf:info "IP Standard expanded access list number";
+              tailf:cli-drop-node-name;
+              type default-access-list-standard-id-type;
+            }
+          }
+        }
+        leaf clns {
+          tailf:info "Distance applied for CLNS derived routes";
+          description
+            "Distance applied for CLNS derived routes";
+          tailf:cli-hide-in-submode;
+          type empty;
+        }
+        leaf ip {
+          tailf:info "Distance applied for IP derived routes";
+          description
+            "Distance applied for IP derived routes";
+          tailf:cli-hide-in-submode;
+          type empty;
+        }
+      }
+      container distribute-list {
+        tailf:info "Filter networks in routing updates";
+        description
+          "Filter networks in routing updates";
+        leaf acl-name {
+          tailf:cli-drop-node-name;
+          type access-list-standard-id-type;
+          tailf:cli-no-value-on-delete;
+        }
+        container in {
+          tailf:info "Filter incoming routing updates";
+          description
+            "Filter incoming routing updates";
+          presence "true";
+          container interface {
+            tailf:info "Specify interface";
+            description
+              "Specify interface";
+            tailf:cli-drop-node-name;
+            tailf:cli-compact-syntax;
+            tailf:cli-flatten-container;
+            uses interface-grouping;
+          }
+        }
+        container gateway {
+          tailf:info "Filtering incoming updates based on gateway";
+          description
+            "Filtering incoming updates based on gateway";
+          list pr-list {
+            tailf:cli-drop-node-name;
+            tailf:cli-suppress-mode;
+            key "pr-list";
+            leaf pr-list {
+              tailf:info "Name of an IP prefix-list";
+              description
+                "Name of an IP prefix-list";
+              type string;
+            }
+            container in {
+              tailf:info "Filter incoming routing updates";
+              description
+                "Filter incoming routing updates";
+              presence "true";
+              container interface {
+                tailf:info "Specify interface";
+                description
+                  "Specify interface";
+                tailf:cli-drop-node-name;
+                tailf:cli-compact-syntax;
+                tailf:cli-flatten-container;
+                uses interface-grouping;
+              }
+            }
+          }
+        }
+        container prefix {
+          tailf:info "Filter prefixes in routing updates";
+          description
+            "Filter prefixes in routing updates";
+          list pr-ip {
+            tailf:cli-drop-node-name;
+            tailf:cli-suppress-mode;
+            key "pr-ip";
+            leaf pr-ip {
+              tailf:info "Name of an IP prefix-list";
+              description
+                "Name of an IP prefix-list";
+              type string;
+            }
+            container gateway {
+              tailf:info "Filtering incoming updates based on gateway";
+              description
+                "Filtering incoming updates based on gateway";
+              list filter {
+                tailf:cli-drop-node-name;
+                tailf:cli-suppress-mode;
+                key "filter";
+                leaf filter {
+                  tailf:info "Name of an IP prefix-list";
+                  description
+                    "Name of an IP prefix-list";
+                  type string;
+                }
+                container in {
+                  tailf:info "Filter incoming routing updates";
+                  description
+                    "Filter incoming routing updates";
+                  presence "true";
+                  container interface {
+                    tailf:info "Specify interface";
+                    description
+                      "Specify interface";
+                    tailf:cli-drop-node-name;
+                    tailf:cli-compact-syntax;
+                    tailf:cli-flatten-container;
+                    uses interface-grouping;
+                  }
+                }
+              }
+            }
+            container in {
+              tailf:info "Filter incoming routing updates";
+              description
+                "Filter incoming routing updates";
+              presence "true";
+              container interface {
+                tailf:info "Specify interface";
+                description
+                  "Specify interface";
+                tailf:cli-drop-node-name;
+                tailf:cli-compact-syntax;
+                tailf:cli-flatten-container;
+                uses interface-grouping;
+              }
+            }
+          }
+        }
+        container route-map {
+          tailf:info "Filter prefixes based on the route-map";
+          description
+            "Filter prefixes based on the route-map";
+          list rm-name {
+            tailf:cli-drop-node-name;
+            tailf:cli-suppress-mode;
+            key "rm-name";
+            leaf rm-name {
+              tailf:info "route-map name";
+              description
+                "route-map name";
+              type string;
+            }
+            container in {
+              tailf:info "Filter incoming routing updates";
+              description
+                "Filter incoming routing updates";
+              presence "true";
+              container interface {
+                tailf:info "Specify interface";
+                description
+                  "Specify interface";
+                tailf:cli-drop-node-name;
+                tailf:cli-compact-syntax;
+                tailf:cli-flatten-container;
+                uses interface-grouping;
+              }
+            }
+          }
+        }
+      }
+      container domain-password {
+        tailf:info "Set the authentication password for a routing domain";
+        description
+          "Set the authentication password for a routing domain";
+        tailf:cli-sequence-commands;
+        tailf:cli-compact-syntax;
+        leaf name {
+          tailf:cli-drop-node-name;
+          type string {
+            tailf:info "WORD;;Routing domain password";
+          }
+        }
+        uses authenticate-snp-grouping;
+      }
+      container fast-flood {
+        tailf:info "Flood LSPs (that triggered SPF) before running SPF";
+        description
+          "Flood LSPs (that triggered SPF) before running SPF";
+        presence "Flood LSPs (that triggered SPF) before running SPF";
+        leaf number {
+          tailf:cli-drop-node-name;
+          type uint32 {
+            range "1 .. 15";
+            tailf:info "<1-15>;;number of LSPs to be flooded before starting SPF";
+          }
+        }
+      }
+      container fast-reroute {
+        tailf:info "Configure Fast-Reroute";
+        description
+          "Configure Fast-Reroute";
+        container load-sharing {
+          tailf:info "Distributes repair paths equally among links and prefixes";
+          description
+            "Distributes repair paths equally among links and prefixes";
+          container level-1 {
+            tailf:info "Apply to level-1";
+            description
+              "Apply to level-1";
+            presence "true";
+            leaf disable {
+              tailf:info "Disable load-sharing";
+              description
+                "Disable load-sharing";
+              type empty;
+            }
+          }
+          container level-2 {
+            tailf:info "Apply to level-2";
+            description
+              "Apply to level-2";
+            presence "true";
+            leaf disable {
+              tailf:info "Disable load-sharing";
+              description
+                "Disable load-sharing";
+              type empty;
+            }
+          }
+        }
+        container per-prefix {
+          tailf:info "Enable Fast-Reroute Per-Prefix";
+          description
+            "Enable Fast-Reroute Per-Prefix";
+          container level-1 {
+            tailf:info "Apply to level-1";
+            description
+              "Apply to level-1";
+            leaf all {
+              tailf:info "Enable Fast-Reroute for primary paths";
+              description
+                "Enable Fast-Reroute for primary paths";
+              type empty;
+            }
+            leaf route-map {
+              tailf:info "route-map for selecting primary paths for protection";
+              description
+                "route-map name";
+              type string;
+            }
+          }
+          container level-2 {
+            tailf:info "Apply to level-2";
+            description
+              "Apply to level-2";
+            leaf all {
+              tailf:info "Enable Fast-Reroute for primary paths";
+              description
+                "Enable Fast-Reroute for primary paths";
+              type empty;
+            }
+            leaf route-map {
+              tailf:info "route-map for selecting primary paths for protection";
+              description
+                "route-map name";
+              type string;
+            }
+          }
+        }
+        container remote-lfa {
+          tailf:info "Configuring fast-reroute remote-lfa";
+          description
+            "Configuring fast-reroute remote-lfa";
+          container level-1 {
+            tailf:info "Apply to level-1";
+            description
+              "Apply to level-1";
+            container mpls-ldp {
+              tailf:info "Use mpls-ldp tunnel type";
+              description
+                "Use mpls-ldp tunnel type";
+              presence "true";
+              container maximum-metric {
+                tailf:info "maximum metric to reach release node";
+                description
+                  "maximum metric to reach release node";
+                presence "true";
+                leaf max-met {
+                  tailf:info "metric value";
+                  description
+                    "metric value";
+                  tailf:cli-drop-node-name;
+                  type uint32 {
+                    range "1..4294967295";
+                  }
+                }
+              }
+            }
+          }
+          container level-2 {
+            tailf:info "Apply to level-2";
+            description
+              "Apply to level-2";
+            container mpls-ldp {
+              tailf:info "Use mpls-ldp tunnel type";
+              description
+                "Use mpls-ldp tunnel type";
+              presence "true";
+              container maximum-metric {
+                tailf:info "maximum metric to reach release node";
+                description
+                  "maximum metric to reach release node";
+                presence "true";
+                leaf max-met {
+                  tailf:info "metric value";
+                  description
+                    "metric value";
+                  tailf:cli-drop-node-name;
+                  type uint32 {
+                    range "1..4294967295";
+                  }
+                }
+              }
+            }
+          }
+        }
+        container tie-break {
+          tailf:info "Set repair path preference";
+          description
+            "Set repair path preference";
+          container level-1 {
+            tailf:info "Apply to level-1";
+            description
+              "Apply to level-1";
+            uses tie-break-prefer-repair-grouping;
+          }
+          container level-2 {
+            tailf:info "Apply to level-2";
+            description
+              "Apply to level-2";
+            uses tie-break-prefer-repair-grouping;
+          }
+        }
+      }
+      container hello {
+        tailf:info "Pad ISIS hello PDUs to full MTU";
+        description
+          "Pad ISIS hello PDUs to full MTU";
+        container padding {
+          tailf:info "Pad hello PDU";
+          description
+            "Pad hello PDU";
+          presence "Pad hello PDU";
+          leaf pad-type {
+            tailf:cli-drop-node-name;
+            type enumeration {
+              enum "multi-point" {
+                tailf:info "Pad LAN hello PDUs";
+              }
+              enum "point-to-point" {
+                tailf:info "Pad point-to-point hello PDUs";
+              }
+            }
+          }
+        }
+      }
+      container hostname {
+        tailf:info "Dynamic hostname for IS-IS";
+        description
+          "Dynamic hostname for IS-IS";
+        leaf dynamic {
+          tailf:info "Dynamic hostname";
+          description
+            "Dynamic hostname";
+          type empty;
+        }
+      }
+      leaf ignore-lsp-errors {
+        tailf:info "Ignore LSPs with bad checksums";
+        description
+          "Ignore LSPs with bad checksums";
+        tailf:cli-full-command;
+        type empty;
+      }
+      container ip {
+        tailf:info "IP specific commands";
+        description
+          "IP specific commands";
+        container route {
+          tailf:info "ISIS IP routes";
+          description
+            "ISIS IP routes";
+          container priority {
+            tailf:info "Assign priority to IP prefixes";
+            description
+              "Assign priority to IP prefixes";
+            container high {
+              tailf:info "Assign high priority to important IP prefixes in ISIS IP local RIB";
+              description
+                "Assign high priority to important IP prefixes in ISIS IP local RIB";
+              leaf tag {
+                tailf:info "Assign high priority to IP prefixes with a specific route tag";
+                description
+                  "Assign high priority to IP prefixes with a specific route tag";
+                type uint32 {
+                  range "1 .. 4294967295";
+                  tailf:info "<1-4294967295>;;tag value";
+                }
+              }
+            }
+          }
+        }
+      }
+      leaf is-type {
+        tailf:info "IS Level for this routing process (OSI only)";
+        description
+          "IS Level for this routing process (OSI only)";
+        tailf:cli-full-command;
+        type enumeration {
+          enum "level-1" {
+            tailf:info "Act as a station router only";
+          }
+          enum "level-1-2" {
+            tailf:info "Act as both a station router and an area router";
+          }
+          enum "level-2-only" {
+            tailf:info "Act as an area router only";
+          }
+        }
+      }
+      container ispf {
+        tailf:info "Configure execution of incremental SPF";
+        description
+          "Configure execution of incremental SPF";
+        tailf:cli-compact-syntax;
+        tailf:cli-sequence-commands;
+        leaf level {
+          tailf:cli-drop-node-name;
+          type enumeration {
+            enum "level-1" {
+              tailf:info "Do incremental SPF for level-1";
+            }
+            enum "level-1-2" {
+              tailf:info "Do incremental SPF for both levels";
+            }
+            enum "level-2" {
+              tailf:info "Do incremental SPF for level-2";
+            }
+          }
+        }
+        leaf number {
+          tailf:cli-drop-node-name;
+          type uint32 {
+            range "1 .. 600";
+            tailf:info "<1-600>;;Number of seconds before activating incremental-spf";
+          }
+        }
+      }
+      container log-adjacency-changes {
+        tailf:info "Log changes in adjacency state";
+        description
+          "Log changes in adjacency state";
+        presence "Log changes in adjacency state";
+        leaf all {
+          tailf:info "Include changes generated by non-IIH event";
+          description
+            "Include changes generated by non-IIH event";
+          type empty;
+        }
+      }
+      container lsp-full {
+        tailf:info "If we run out of LSP fragments";
+        description
+          "If we run out of LSP fragments";
+        container suppress {
+          tailf:info "suppress the following types of IP prefixes";
+          description
+            "suppress the following types of IP prefixes";
+          choice lsp-full-choince {
+            container external-interlevel-container {
+              tailf:cli-drop-node-name;
+              tailf:cli-compact-syntax;
+              leaf external {
+                tailf:info "don't advertise IP prefixes learned from other protocols";
+                description
+                  "don't advertise IP prefixes learned from other protocols";
+                type empty;
+              }
+              leaf interlevel {
+                tailf:info "don't advertise IP prefixes learned from another ISIS level";
+                description
+                  "don't advertise IP prefixes learned from another ISIS level";
+                type empty;
+              }
+            }
+            leaf none {
+              tailf:info "don't suppress any prefixes";
+              description
+                "don't suppress any prefixes";
+              type empty;
+            }
+          }
+        }
+      }
+      container lsp-gen-interval {
+        tailf:info "Minimum interval between regenerating same LSP";
+        description
+          "Minimum interval between regenerating same LSP";
+        choice lsp-gen-interval-choice {
+          container intervals {
+            tailf:cli-drop-node-name;
+            tailf:cli-compact-syntax;
+            tailf:cli-sequence-commands;
+            uses lsp-gen-interval-grouping;
+          }
+          container intervals-levels {
+            tailf:cli-drop-node-name;
+            container intervals-level-1 {
+              tailf:cli-drop-node-name;
+              tailf:cli-compact-syntax;
+              tailf:cli-sequence-commands;
+              leaf level-1 {
+                tailf:info "Set interval for level 1 only";
+                description
+                  "Set interval for level 1 only";
+                type empty;
+              }
+              uses lsp-gen-interval-grouping;
+            }
+            container intervals-level-2 {
+              tailf:cli-drop-node-name;
+              tailf:cli-compact-syntax;
+              tailf:cli-sequence-commands;
+              leaf level-2 {
+                tailf:info "Set interval for level 2 only";
+                description
+                  "Set interval for level 2 only";
+                type empty;
+              }
+              uses lsp-gen-interval-grouping;
+            }
+          }
+        }
+      }
+      leaf lsp-mtu {
+        tailf:info "Set maximum LSP size";
+        description
+          "Set maximum LSP size";
+        tailf:cli-full-command;
+        type uint32 {
+          range "128 .. 4352";
+          tailf:info "<128-4352>;;Max LSP size in bytes";
+        }
+      }
+      leaf lsp-refresh-interval {
+        tailf:info "Set LSP refresh interval";
+        description
+          "Set LSP refresh interval";
+        tailf:cli-full-command;
+        type uint32 {
+          range "1 .. 65535";
+          tailf:info "<1-65535>;;LSP refresh time in seconds";
+        }
+      }
+      leaf max-area-addresses {
+        tailf:info "Allow configuration of more manual area addresses";
+        description
+          "Allow configuration of more manual area addresses";
+        tailf:cli-full-command;
+        type uint32 {
+          range "3 .. 254";
+          tailf:info "<3-254>;;Max number of manual area addresses";
+        }
+      }
+      leaf max-lsp-lifetime {
+        tailf:info "Set maximum LSP lifetime";
+        description
+          "Set maximum LSP lifetime";
+        tailf:cli-full-command;
+        type uint32 {
+          range "1 .. 65535";
+          tailf:info "<1-65535>;;Maximum LSP lifetime in seconds";
+        }
+      }
+      container metric-style {
+        tailf:info "Use old-style (ISO 10589) or new-style packet formats";
+        description
+          "Use old-style (ISO 10589) or new-style packet formats";
+        choice metric-style-choice {
+          container narrow {
+            tailf:info "Use old style of TLVs with narrow metric";
+            description
+              "Use old style of TLVs with narrow metric";
+            presence "true";
+            uses narrow-wide-transition-grouping;
+          }
+          container transition {
+            tailf:info "Send and accept both styles of TLVs during transition";
+            description
+              "Send and accept both styles of TLVs during transition";
+            presence "true";
+            leaf transition {
+              type isis-level-type;
+              tailf:cli-drop-node-name;
+            }
+          }
+          container wide {
+            tailf:info "Use new style of TLVs to carry wider metric";
+            description
+              "Use new style of TLVs to carry wider metric";
+            presence "true";
+            uses narrow-wide-transition-grouping;
+          }
+        }
+      }
+      container microloop {
+        tailf:info "Enable microloop protection configuration commands";
+        description
+          "Enable microloop protection configuration commands";
+        container avoidance {
+          tailf:info "Enable local microloop avoidance";
+          description
+            "Enable local microloop avoidance";
+          presence "true";
+          leaf disable {
+            tailf:info "Disable Microloop avoidance";
+            description
+              "Disable Microloop avoidance";
+            type empty;
+          }
+          leaf protected {
+            tailf:info "Microloop avoidance for protected link or prefix only";
+            description
+              "Microloop avoidance for protected link or prefix only";
+            type empty;
+          }
+          leaf rib-update-delay {
+            tailf:info "Microloop avoidance RIB update delay";
+            description
+              "Value of the delay in milliseconds";
+            type uint32 {
+              range "1..600000";
+            }
+          }
+        }
+      }
+      container mpls {
+        tailf:info "Configure MPLS routing protocol parameters";
+        description
+          "Configure MPLS routing protocol parameters";
+        container ldp {
+          tailf:info "routing protocol commands for MPLS LDP";
+          description
+            "routing protocol commands for MPLS LDP";
+          container autoconfig {
+            tailf:info "Configure LDP automatic configuration";
+            description
+              "Configure LDP automatic configuration";
+            presence "true";
+            leaf level-1 {
+              tailf:info "Configure ISIS level-1 to run MPLS LDP";
+              description
+                "Configure ISIS level-1 to run MPLS LDP";
+              type empty;
+            }
+            leaf level-2 {
+              tailf:info "Configure ISIS level-2 to run MPLS LDP";
+              description
+                "Configure ISIS level-2 to run MPLS LDP";
+              type empty;
+            }
+          }
+          leaf sync {
+            tailf:info "Configure LDP-IGP Synchronization";
+            description
+              "Configure LDP-IGP Synchronization";
+            type empty;
+          }
+          leaf sync-igp-shortcuts {
+            tailf:info "Configure LDP-IGP Synchronization on MPLS shortcuts";
+            description
+              "Configure LDP-IGP Synchronization on MPLS shortcuts";
+            type empty;
+          }
+        }
+        container traffic-eng {
+          tailf:info "routing protocol commands for MPLS Traffic Engineering";
+          description
+            "routing protocol commands for MPLS Traffic Engineering";
+          leaf level-1 {
+            tailf:info "Run MPLS TE on IS-IS level 1 only";
+            description
+              "Run MPLS TE on IS-IS level 1 only";
+            tailf:cli-full-command;
+            type empty;
+          }
+          leaf level-2 {
+            tailf:info "Run MPLS TE on IS-IS level 2 only";
+            description
+              "Run MPLS TE on IS-IS level 2 only";
+            tailf:cli-full-command;
+            type empty;
+          }
+          leaf multicast-intact {
+            tailf:info "MPLS TE and PIM interaction";
+            description
+              "MPLS TE and PIM interaction";
+            tailf:cli-full-command;
+            type empty;
+          }
+          container router-id {
+            tailf:info "Traffic Engineering stable IP address for system";
+            description
+              "Traffic Engineering stable IP address for system";
+            tailf:cli-diff-dependency "/ios:native/interface";
+            uses interface-grouping;
+          }
+          container scanner {
+            tailf:info "Timer parameters for TE database";
+            description
+              "Timer parameters for TE database";
+            presence "Timer parameters for TE database";
+            tailf:cli-compact-syntax;
+            leaf interval {
+              tailf:info "time (secs) between LSPDB walks for TE";
+              description
+                "time (secs) between LSPDB walks for TE";
+              type uint32 {
+                range "1 .. 60";
+                tailf:info "<1-60>;;interval between LSPDB walks for TE TLVs extraction";
+              }
+            }
+            leaf max-flash {
+              tailf:info "Number of ISIS LSPs to be processed with no delay";
+              description
+                "Number of ISIS LSPs to be processed with no delay";
+              type uint32 {
+                range "0 .. 200";
+                tailf:info "<0-200>;;Max. number of LSPs ISIS may send to TE db without delay";
+              }
+            }
+          }
+        }
+      }
+      list net {
+        tailf:info "A Network Entity Title for this process (OSI only)";
+        description
+          "A Network Entity Title for this process (OSI only)";
+        tailf:cli-suppress-mode;
+        tailf:cli-delete-when-empty;
+        key "tag";
+        leaf tag {
+          type isis-net;
+        }
+      }
+      container nsf {
+        tailf:info "Non-stop forwarding";
+        description
+          "Non-stop forwarding";
+        leaf cisco {
+          tailf:info "Checkpoint method";
+          description
+            "Checkpoint method";
+          type empty;
+        }
+        leaf ietf {
+          tailf:info "IETF method";
+          description
+            "IETF method";
+          type empty;
+        }
+        container interface {
+          tailf:info "Interface properties";
+          description
+            "Interface properties";
+          leaf wait {
+            tailf:info "Maximum time to wait for interface up";
+            description
+              "Seconds";
+            type uint8 {
+              range "1..60";
+            }
+          }
+        }
+        leaf interval {
+          tailf:info "Minimum required stable interval between restarts";
+          description
+            "Minutes";
+          type uint16 {
+            range "0..1440";
+          }
+        }
+      }
+      container partition {
+        tailf:info "CLNS area partition";
+        description
+          "CLNS area partition";
+        leaf avoidance {
+          tailf:info "Withdraw area prefix if partition detected";
+          description
+            "Withdraw area prefix if partition detected";
+          type empty;
+        }
+      }
+      leaf priority {
+        tailf:info "Priority associated with a topology";
+        description
+          "priority value";
+        type uint8 {
+          range "0..127";
+        }
+      }
+      uses passive-interface-grouping;
+      container protocol {
+        tailf:info "Set protocol's administrative state";
+        description
+          "Set protocol's administrative state";
+        leaf shutdown {
+          tailf:info "Set protocol's administrative state to disable";
+          description
+            "Set protocol's administrative state to disable";
+          type empty;
+        }
+      }
+      container redistribute {
+        tailf:info "Redistribute information from another routing protocol";
+        description
+          "Redistribute information from another routing protocol";
+        uses isis-redist-grouping;
+        container application {
+          tailf:info "Application";
+          description
+            "Application";
+          list app-name {
+            tailf:cli-drop-node-name;
+            tailf:cli-suppress-mode;
+            key "app-name";
+            leaf app-name {
+              tailf:info "Application name";
+              description
+                "Application name";
+              type string;
+            }
+            container level-1 {
+              tailf:info "IS-IS level-1 routes only";
+              description
+                "IS-IS level-1 routes only";
+              presence "true";
+              uses isis-redist-grouping;
+            }
+            container level-1-2 {
+              tailf:info "IS-IS level-1 and level-2 routes";
+              description
+                "IS-IS level-1 and level-2 routes";
+              presence "true";
+              uses isis-redist-grouping;
+            }
+            container level-2 {
+              tailf:info "IS-IS level-2 routes only";
+              description
+                "IS-IS level-2 routes only";
+              presence "true";
+              uses isis-redist-grouping;
+            }
+            uses isis-redist-grouping;
+          }
+        }
+        container bgp {
+          tailf:info "Border Gateway Protocol (BGP)";
+          description
+            "Border Gateway Protocol (BGP)";
+          tailf:cli-compact-syntax;
+          leaf as-number {
+            tailf:cli-drop-node-name;
+            type bgp-as-number-type;
+          }
+          uses isis-redist-grouping;
+          uses isis-redist-clns-ip-grouping;
+        }
+        container connected {
+          tailf:info "Connected";
+          description
+            "Connected";
+          presence "Connected";
+          uses isis-redist-grouping;
+        }
+        list eigrp {
+          tailf:info "Enhanced Interior Gateway Routing Protocol (EIGRP)";
+          description
+            "Enhanced Interior Gateway Routing Protocol (EIGRP)";
+          tailf:cli-suppress-mode;
+          tailf:cli-delete-when-empty;
+          key "as-number";
+          leaf as-number {
+            tailf:cli-drop-node-name;
+            type uint32 {
+              range "1 .. 65535";
+              tailf:info "<1-65535>;;Autonomous system number";
+            }
+          }
+          uses isis-redist-grouping;
+        }
+        container isis {
+          tailf:info "ISO IS-IS";
+          description
+            "ISO IS-IS";
+          tailf:cli-compact-syntax;
+          leaf area-tag {
+            tailf:cli-drop-node-name;
+            type string {
+              tailf:info "WORD;;ISO routing area tag";
+            }
+          }
+          container ip {
+            tailf:info "Redistribution of IP routes between levels";
+            description
+              "Redistribution of IP routes between levels";
+            tailf:cli-compact-syntax;
+            uses isis-redist-grouping;
+            leaf isis-redist-levels1 {
+              tailf:cli-drop-node-name;
+              tailf:cli-incomplete-command;
+              type enumeration {
+                enum "level-1" {
+                  tailf:info "Inter-area routes from level-1";
+                }
+                enum "level-2" {
+                  tailf:info "Inter-area routes from level-2";
+                }
+              }
+            }
+            leaf into {
+              tailf:info "from level-n into level-m";
+              description
+                "from level-n into level-m";
+              tailf:cli-incomplete-command;
+              type empty;
+            }
+            leaf isis-redist-levels2 {
+              tailf:cli-drop-node-name;
+              tailf:cli-incomplete-command;
+              type enumeration {
+                enum "level-1" {
+                  tailf:info "Inter-area routes from level-1";
+                }
+                enum "level-2" {
+                  tailf:info "Inter-area routes from level-2";
+                }
+              }
+            }
+            choice isis-redist-isis-ip-choice {
+              leaf distribute-list {
+                tailf:info "select routes";
+                description
+                  "select routes";
+                type uint32 {
+                  range "100 .. 199";
+                  tailf:info "<100-199>;;IP extended acces-list number";
+                }
+              }
+              leaf route-map {
+                tailf:info "Route map for route matching";
+                description
+                  "Route map for route matching";
+                type string {
+                  tailf:info "WORD;;Name of the route-map";
+                }
+              }
+            }
+          }
+        }
+        container iso-igrp {
+          tailf:info "IGRP for OSI networks";
+          description
+            "IGRP for OSI networks";
+          presence "IGRP for OSI networks";
+          tailf:cli-sequence-commands;
+          choice iso-igrp-choice {
+            container area-tag-route-map-container {
+              tailf:cli-drop-node-name;
+              tailf:cli-sequence-commands;
+              tailf:cli-flatten-container;
+              leaf area-tag {
+                tailf:cli-drop-node-name;
+                tailf:cli-disallow-value "route-map";
+                type string {
+                  tailf:info "WORD;;ISO routing area tag";
+                }
+              }
+              leaf route-map {
+                tailf:info "Route map reference";
+                description
+                  "Route map reference";
+                type string {
+                  tailf:info "WORD;;Pointer to route-map entries";
+                }
+              }
+            }
+            leaf route-map {
+              tailf:info "Route map reference";
+              description
+                "Route map reference";
+              type string {
+                tailf:info "WORD;;Pointer to route-map entries";
+              }
+            }
+          }
+          uses redist-level-grouping;
+          leaf metric {
+            tailf:info "ISIS default metric";
+            description
+              "ISIS default metric";
+            type uint32 {
+              range "0 .. 4294967295";
+              tailf:info "<0-4294967295>;;ISIS default metric";
+            }
+          }
+          leaf metric-type {
+            tailf:info "OSPF/IS-IS exterior metric type for redistributed routes";
+            description
+              "OSPF/IS-IS exterior metric type for redistributed routes";
+            type enumeration {
+              enum "external" {
+                tailf:info "Set IS-IS External metric type";
+              }
+              enum "internal" {
+                tailf:info "Set IS-IS Internal metric type";
+              }
+              enum "rib-metric-as-external" {
+                tailf:info "Set IS-IS rib External metric type";
+              }
+              enum "rib-metric-as-internal" {
+                tailf:info "Set IS-IS rib Internal metric type";
+              }
+            }
+          }
+        }
+        container lisp {
+          tailf:info "Locator ID Separation Protocol (LISP)";
+          description
+            "Locator ID Separation Protocol (LISP)";
+          presence "true";
+          uses isis-redist-af-grouping;
+        }
+        container maximum-prefix {
+          tailf:info "Maximum number of prefixes redistributed to protocol";
+          description
+            "Maximum number of prefixes redistributed to protocol";
+          tailf:cli-compact-syntax;
+          tailf:cli-sequence-commands;
+          leaf number {
+            tailf:cli-drop-node-name;
+            type uint32 {
+              range "1 .. 4294967295";
+              tailf:info "<1-4294967295>;;Maximum number of IP prefixes redistributed";
+            }
+          }
+          leaf threshold-value {
+            tailf:cli-drop-node-name;
+            tailf:cli-break-sequence-commands;
+            type uint32 {
+              range "1 .. 100";
+              tailf:info "<1-100>;;Threshold value (%) at which to generate a warning message";
+            }
+          }
+          leaf warning-only {
+            tailf:info "Only give warning message when limit is exceeded";
+            description
+              "Only give warning message when limit is exceeded";
+            tailf:cli-full-command;
+            type empty;
+          }
+          leaf withdraw {
+            tailf:info "Withdraw redistibuted prefixes";
+            description
+              "Withdraw redistibuted prefixes";
+            tailf:cli-full-command;
+            type empty;
+          }
+        }
+        container mobile {
+          tailf:info "Mobile routes";
+          description
+            "Mobile routes";
+          presence "Mobile routes";
+          uses isis-redist-grouping;
+        }
+        container odr {
+          tailf:info "On Demand stub Routes";
+          description
+            "On Demand stub Routes";
+          presence "On Demand stub Routes";
+          uses isis-redist-grouping;
+        }
+        list ospf {
+          tailf:info "Open Shortest Path First (OSPF)";
+          description
+            "Open Shortest Path First (OSPF)";
+          tailf:cli-suppress-mode;
+          tailf:cli-delete-when-empty;
+          key "process-id";
+          leaf process-id {
+            tailf:cli-suppress-range;
+            type uint32 {
+              range "1 .. 65535";
+              tailf:info "<1-65535>;;Process ID";
+            }
+          }
+          uses isis-redist-grouping;
+          container match {
+            tailf:cli-compact-syntax;
+            tailf:cli-flatten-container;
+            tailf:info "Redistribution of OSPF routes";
+            description
+              "Redistribution of OSPF routes";
+            container internal {
+              presence "Redistribute OSPF internal routes";
+              tailf:info "Redistribute OSPF internal routes";
+              description
+                "Redistribute OSPF internal routes";
+              tailf:cli-compact-syntax;
+              tailf:cli-flatten-container;
+              uses isis-redist-container-content-grouping;
+            }
+            container external {
+              tailf:info "Redistribute OSPF external routes";
+              description
+                "Redistribute OSPF external routes";
+              presence "Redistribute OSPF external routes";
+              tailf:cli-compact-syntax;
+              tailf:cli-flatten-container;
+              leaf external-routes {
+                tailf:cli-drop-node-name;
+                type redist-ospf-external-type;
+              }
+              uses isis-redist-container-content-grouping;
+            }
+            container nssa-external {
+              tailf:info "Redistribute OSPF NSSA external routes";
+              description
+                "Redistribute OSPF NSSA external routes";
+              presence "Redistribute OSPF NSSA external routes";
+              tailf:cli-compact-syntax;
+              tailf:cli-flatten-container;
+              leaf nssa-external-routes {
+                tailf:cli-drop-node-name;
+                type redist-ospf-external-type;
+              }
+              uses isis-redist-container-content-grouping;
+            }
+          }
+          leaf vrf {
+            tailf:info "VPN Routing/Forwarding Instance";
+            description
+              "VPN Routing/Forwarding Instance";
+            tailf:cli-diff-dependency "/ios:native/ip/vrf";
+            tailf:cli-diff-dependency "/ios:native/vrf/definition";
+            type string {
+              tailf:info "WORD;;VPN Routing/Forwarding Instance (VRF) name";
+            }
+          }
+        }
+        list ospfv3 {
+          tailf:info "Open Shortest Path First (OSPF)";
+          description
+            "Open Shortest Path First (OSPF)";
+          tailf:cli-suppress-mode;
+          tailf:cli-delete-when-empty;
+          key "process-id";
+          leaf process-id {
+            tailf:cli-suppress-range;
+            type uint32 {
+              range "1 .. 65535";
+              tailf:info "<1-65535>;;Process ID";
+            }
+          }
+          uses isis-redist-grouping;
+          container match {
+            tailf:cli-compact-syntax;
+            tailf:cli-flatten-container;
+            tailf:info "Redistribution of OSPF routes";
+            description
+              "Redistribution of OSPF routes";
+            container internal {
+              presence "Redistribute OSPF internal routes";
+              tailf:info "Redistribute OSPF internal routes";
+              description
+                "Redistribute OSPF internal routes";
+              tailf:cli-compact-syntax;
+              tailf:cli-flatten-container;
+              uses isis-redist-container-content-grouping;
+            }
+            container external {
+              tailf:info "Redistribute OSPF external routes";
+              description
+                "Redistribute OSPF external routes";
+              presence "Redistribute OSPF external routes";
+              tailf:cli-compact-syntax;
+              tailf:cli-flatten-container;
+              leaf external-routes {
+                tailf:cli-drop-node-name;
+                type redist-ospf-external-type;
+              }
+              uses isis-redist-container-content-grouping;
+            }
+            container nssa-external {
+              tailf:info "Redistribute OSPF NSSA external routes";
+              description
+                "Redistribute OSPF NSSA external routes";
+              presence "Redistribute OSPF NSSA external routes";
+              tailf:cli-compact-syntax;
+              tailf:cli-flatten-container;
+              leaf nssa-external-routes {
+                tailf:cli-drop-node-name;
+                type redist-ospf-external-type;
+              }
+              uses isis-redist-container-content-grouping;
+            }
+          }
+          leaf vrf {
+            tailf:info "VPN Routing/Forwarding Instance";
+            description
+              "VPN Routing/Forwarding Instance";
+            tailf:cli-diff-dependency "/ios:native/ip/vrf";
+            tailf:cli-diff-dependency "/ios:native/vrf/definition";
+            type string {
+              tailf:info "WORD;;VPN Routing/Forwarding Instance (VRF) name";
+            }
+          }
+        }
+        container rip {
+          tailf:info "Routing Information Protocol (RIP)";
+          description
+            "Routing Information Protocol (RIP)";
+          presence "Routing Information Protocol (RIP)";
+          uses isis-redist-grouping;
+        }
+        container static {
+          tailf:info "Static routes";
+          description
+            "Static routes";
+          presence "Static routes";
+          uses isis-redist-clns-ip-grouping;
+        }
+        container vrf {
+          tailf:info "Specify a source VRF";
+          description
+            "Specify a source VRF";
+          list vrf-nm {
+            tailf:cli-drop-node-name;
+            tailf:cli-suppress-mode;
+            key "vrf-nm";
+            leaf vrf-nm {
+              tailf:info "Source VRF name";
+              description
+                "Source VRF name";
+              type string;
+            }
+            uses isis-redist-vrf-grouping;
+          }
+          container global {
+            tailf:info "global VRF";
+            description
+              "global VRF";
+            uses isis-redist-vrf-grouping;
+          }
+        }
+      }
+      container segment-routing {
+        tailf:info "Enable Segment Routing Feature";
+        description
+          "Enable Segment Routing Feature";
+        leaf mpls {
+          tailf:info "Enable Segment Routing Feature using MPLS encapsulation";
+          description
+            "Enable Segment Routing Feature using MPLS encapsulation";
+          type empty;
+        }
+        container prefix-sid-map {
+          tailf:info "Enable prefix-sid-map";
+          description
+            "Enable prefix-sid-map";
+          leaf advertise-local {
+            tailf:info "Advertise active local prefix-SID mappings";
+            description
+              "Advertise active local prefix-SID mappings";
+            type empty;
+          }
+          container receive {
+            tailf:info "Enable prefix-SID mapping client";
+            description
+              "Enable prefix-SID mapping client";
+            presence "true";
+            leaf disable {
+              tailf:info "Disable prefix-SID mapping";
+              description
+                "Disable prefix-SID mapping";
+              type empty;
+            }
+          }
+        }
+      }
+      container set-attached-bit {
+        tailf:info "Conditionally advertise us as attached to L2";
+        description
+          "Conditionally advertise us as attached to L2";
+        leaf route-map {
+          tailf:info "Route-map reference";
+          description
+            "Route-map reference";
+          type string {
+            tailf:info "WORD;;Route map name";
+          }
+        }
+      }
+      container skeptical {
+        tailf:info "Be a cautious NSF helper when refresh adjacency";
+        description
+          "Be a cautious NSF helper when refresh adjacency";
+        leaf interval {
+          tailf:info "Interval during which holdtime for an adjacency with a recently restarted router will NOT be refreshed based on holdtime in IIH-RR";
+          description
+            "Minutes";
+          type uint16 {
+            range "0..1440";
+          }
+        }
+      }
+      container snmp {
+        tailf:info "Modify snmp parameters";
+        description
+          "Modify snmp parameters";
+        tailf:cli-drop-node-name;
+        uses ospf-snmp-grouping;
+      }
+      list summary-address {
+        tailf:info "Configure IP address summaries";
+        description
+          "Configure IP address summaries";
+        tailf:cli-suppress-mode;
+        tailf:cli-delete-when-empty;
+        key "ip mask";
+        leaf ip {
+          type inet:ipv4-address {
+            tailf:info "A.B.C.D;;IP summary address";
+          }
+        }
+        leaf mask {
+          type inet:ipv4-address {
+            tailf:info "A.B.C.D;;Summary mask";
+          }
+        }
+        container level-1 {
+          tailf:info "Summarize into level-1 area";
+          description
+            "Summarize into level-1 area";
+          presence "Summarize into level-1 area";
+          tailf:cli-compact-syntax;
+          uses summary-address-metric-tag-grouping;
+        }
+        container level-1-2 {
+          tailf:info "Summarize into both area and sub-domain";
+          description
+            "Summarize into both area and sub-domain";
+          presence "Summarize into both area and sub-domain";
+          tailf:cli-compact-syntax;
+          uses summary-address-metric-tag-grouping;
+        }
+        container level-2 {
+          tailf:info "Summarize into level-2 sub-domain";
+          description
+            "Summarize into level-2 sub-domain";
+          presence "Summarize into level-2 sub-domain";
+          tailf:cli-compact-syntax;
+          uses summary-address-metric-tag-grouping;
+        }
+        container metric-tag-container {
+          tailf:cli-drop-node-name;
+          tailf:cli-compact-syntax;
+          uses summary-address-metric-tag-grouping;
+        }
+      }
+      leaf update-queue-depth {
+        tailf:info "Set Update process queue depth";
+        description
+          "Set Update process queue depth";
+        type uint32 {
+          range "1 .. 2147483647";
+          tailf:info "<1-2147483647>;;Max queue depth";
+        }
+      }
+      container use {
+        tailf:info "Use different algorithms during SPF";
+        description
+          "Use different algorithms during SPF";
+        leaf external-metrics {
+          tailf:info "Honour external metrics during SPF";
+          description
+            "Honour external metrics during SPF";
+          type empty;
+        }
+      }
+    }
+  }
+
+  grouping interface-switch-grouping {
+    container dual-active {
+      leaf fast-hello {
+        type empty;
+      }
+    }
+    container lldp {
+      tailf:info "LLDP interface subcommands";
+      description
+        "LLDP interface subcommands";
+      leaf receive {
+        tailf:info "Enable LLDP reception on interface";
+        description
+          "Enable LLDP reception on interface";
+        tailf:cli-boolean-no;
+        tailf:cli-trim-default;
+        type boolean;
+      }
+      leaf transmit {
+        tailf:info "Enable LLDP transmission on interface";
+        description
+          "Enable LLDP transmission on interface";
+        tailf:cli-boolean-no;
+        tailf:cli-trim-default;
+        type boolean;
+      }
+    }
+    container load-balancing {
+      tailf:info "Etherchannel Load-Balancing";
+      description
+        "Etherchannel Load-Balancing";
+      leaf flow {
+        tailf:info "Based on the traffic flows identified by the packet headers";
+        description
+          "Based on the traffic flows identified by the packet headers";
+        tailf:cli-full-command;
+        type empty;
+      }
+      leaf vlan {
+        tailf:info "Based on the VLAN to member links manual configuration";
+        description
+          "Based on the VLAN to member links manual configuration";
+        tailf:cli-full-command;
+        type empty;
+      }
+    }
+    container dot1x {
+      tailf:info "Interface Config Commands for IEEE 802.1X";
+      description
+        "Interface Config Commands for IEEE 802.1X";
+      container authenticator {
+        tailf:info "Configure authenticator parameters";
+        description
+          "Configure authenticator parameters";
+        container eap {
+          tailf:info "Configure EAP authenticator parameters";
+          description
+            "Configure EAP authenticator parameters";
+          leaf profile {
+            tailf:info "EAP authenticator profile configuration";
+            description
+              "EAP authenticator profile configuration";
+            type string {
+              tailf:info "WORD;;EAP authenticator profile name";
+            }
+          }
+        }
+      }
+      leaf credentials {
+        tailf:info "Credentials profile configuration";
+        description
+          "Credentials profile configuration";
+        tailf:cli-full-command;
+        type string {
+          tailf:info "WORD;;Profile Name";
+        }
+      }
+      leaf max-reauth-req {
+        tailf:info "Max No. of Reauthentication Attempts";
+        description
+          "Max No. of Reauthentication Attempts";
+        tailf:cli-full-command;
+        type uint8 {
+          tailf:info "<1-10>;;Enter a value between 1 and 10";
+          range "1..10";
+        }
+      }
+      leaf max-req {
+        tailf:info "Max No. of Retries";
+        description
+          "Max No. of Retries";
+        tailf:cli-full-command;
+        type uint8 {
+          tailf:info "<1-10>;;Enter a value between 1 and 10";
+          range "1..10";
+        }
+      }
+      leaf max-start {
+        tailf:info "Max No. of EAPOL-Start requests";
+        description
+          "Max No. of EAPOL-Start requests";
+        tailf:cli-full-command;
+        type uint8 {
+          tailf:info "<1-10>;;Enter a value between 1 and 10";
+          range "1..10";
+        }
+      }
+      leaf pae {
+        tailf:info "Set 802.1x interface pae type";
+        description
+          "Set 802.1x interface pae type";
+        tailf:cli-full-command;
+        type enumeration {
+          enum "authenticator" {
+            tailf:info "Set pae type as Authenticator";
+          }
+          enum "supplicant" {
+            tailf:info "Set pae type as Supplicant";
+          }
+        }
+      }
+      container supplicant {
+        tailf:info "Configure supplicant parameters";
+        description
+          "Configure supplicant parameters";
+        container eap {
+          tailf:info "Configure EAP supplicant parameters";
+          description
+            "Configure EAP supplicant parameters";
+          leaf profile {
+            tailf:info "EAP supplicant profile configuration";
+            description
+              "EAP supplicant profile configuration";
+            type string {
+              tailf:info "WORD;;EAP supplicant profile name";
+            }
+          }
+        }
+      }
+      container timeout {
+        tailf:info "Various Timeouts";
+        description
+          "Various Timeouts";
+        leaf auth-period {
+          tailf:info "Timeout for authenticator reply";
+          description
+            "Timeout for authenticator reply";
+          tailf:cli-full-command;
+          type uint16 {
+            tailf:info "<1-65535>;;Enter a value between 1 and 65535";
+          }
+        }
+        leaf held-period {
+          tailf:info "Timeout for authentication retries";
+          description
+            "Timeout for authentication retries";
+          tailf:cli-full-command;
+          type uint16 {
+            tailf:info "<1-65535>;;Enter a value between 1 and 65535";
+          }
+        }
+        leaf quiet-period {
+          tailf:info "QuietPeriod in Seconds";
+          description
+            "QuietPeriod in Seconds";
+          tailf:cli-full-command;
+          type uint16 {
+            tailf:info "<1-65535>;;Enter a value between 1 and 65535";
+          }
+        }
+        leaf ratelimit-period {
+          tailf:info "Ratelimit Period in seconds";
+          description
+            "Ratelimit Period in seconds";
+          tailf:cli-full-command;
+          type uint16 {
+            tailf:info "<1-65535>;;Enter a value between 1 and 65535";
+          }
+        }
+        leaf server-timeout {
+          tailf:info "Timeout for Radius Retries";
+          description
+            "Timeout for Radius Retries";
+          tailf:cli-full-command;
+          type uint16 {
+            tailf:info "<1-65535>;;Enter a value between 1 and 65535";
+          }
+        }
+        leaf start-period {
+          tailf:info "Timeout for EAPOL-start retries";
+          description
+            "Timeout for EAPOL-start retries";
+          tailf:cli-full-command;
+          type uint16 {
+            tailf:info "<1-65535>;;Enter a value between 1 and 65535";
+          }
+        }
+        leaf supp-timeout {
+          tailf:info "Timeout for supplicant reply";
+          description
+            "Timeout for supplicant reply";
+          tailf:cli-full-command;
+          type uint16 {
+            tailf:info "<1-65535>;;Enter a value between 1 and 65535";
+          }
+        }
+        leaf tx-period {
+          tailf:info "Timeout for supplicant retries";
+          description
+            "Timeout for supplicant retries";
+          tailf:cli-full-command;
+          type uint16 {
+            tailf:info "<1-65535>;;Enter a value between 1 and 65535";
+          }
+        }
+      }
+    }
+    list vlan-range {
+      key "id";
+      leaf id {
+        type uint16 {
+          tailf:info "<1-4094>;;vlan id";
+          range "1..4094";
+        }
+      }
+      container service-policy {
+        tailf:info "Configure QoS Service Policy";
+        description
+          "Configure QoS Service Policy";
+        leaf input {
+          tailf:cli-full-command;
+          tailf:info "Assign policy-map to the input of an interface";
+          description
+            "Assign policy-map to the input of an interface";
+          type string {
+            tailf:info "WORD;;policy-map name";
+          }
+          tailf:non-strict-leafref {
+            path "/ios:native/policy-map/name";
+          }
+        }
+        leaf output {
+          tailf:cli-full-command;
+          tailf:info "Assign policy-map to the output of an interface";
+          description
+            "Assign policy-map to the output of an interface";
+          type string {
+            tailf:info "WORD;;policy-map name";
+          }
+          tailf:non-strict-leafref {
+            path "/ios:native/policy-map/name";
+          }
+        }
+      }
+    }
+    container switch {
+      container virtual {
+        leaf link {
+          type uint8;
+        }
+      }
+    }
+    container switchport-conf {
+      tailf:cli-no-keyword;
+      tailf:cli-drop-node-name;
+      leaf switchport {
+        tailf:cli-boolean-no;
+        type boolean;
+      }
+    }
+    container switchport {
+      tailf:info "Set switching mode characteristics";
+      description
+        "Set switching mode characteristics";
+      tailf:cli-incomplete-no;
+      container access {
+        tailf:info "Set access mode characteristics of the interface";
+        description
+          "Set access mode characteristics of the interface";
+        leaf vlan {
+          tailf:info "Set VLAN when interface is in access mode";
+          description
+            "Set VLAN when interface is in access mode";
+          tailf:cli-diff-dependency "/ios:native/vlan/vlan-list/id";
+          type union {
+            type uint16 {
+              tailf:info "<1-4094>;;VLAN ID of the VLAN when this port is in access mode";
+              range "1..4094";
+            }
+            type enumeration {
+              enum "dynamic" {
+                tailf:info "When in access mode, this interfaces VLAN is controlled by VMPS";
+              }
+            }
+          }
+        }
+      }
+      container block {
+        tailf:info "Disable forwarding of unknown uni/multi cast addresses";
+        description
+          "Disable forwarding of unknown uni/multi cast addresses";
+        leaf multicast {
+          tailf:info "Block unknown multicast addresses";
+          description
+            "Block unknown multicast addresses";
+          tailf:cli-full-command;
+          type empty;
+        }
+        leaf unicast {
+          tailf:cli-full-command;
+          tailf:info "Block unknown unicast addresses";
+          description
+            "Block unknown unicast addresses";
+          type empty;
+        }
+      }
+      container mode {
+        tailf:info "Set trunking mode of the interface";
+        description
+          "Set trunking mode of the interface";
+        choice mode-choice {
+          container access {
+            presence "true";
+            tailf:info "Set trunking mode to ACCESS unconditionally";
+            description
+              "Set trunking mode to ACCESS unconditionally";
+          }
+          container dot1q-tunnel {
+            presence "true";
+            tailf:info "set trunking mode to TUNNEL unconditionally";
+            description
+              "set trunking mode to TUNNEL unconditionally";
+          }
+          leaf dynamic {
+            tailf:info "Set trunking mode to dynamically negotiate access or trunk mode";
+            description
+              "Set trunking mode to dynamically negotiate access or trunk mode";
+            type enumeration {
+              enum "auto" {
+                tailf:info "Set trunking mode dynamic negotiation parameter to AUTO";
+              }
+              enum "desirable" {
+                tailf:info "Set trunking mode dynamic negotiation parameter to DESIRABLE";
+              }
+            }
+          }
+          container trunk {
+            presence "true";
+            tailf:info "Set trunking mode to TRUNK unconditionally";
+            description
+              "Set trunking mode to TRUNK unconditionally";
+          }
+        }
+      }
+      leaf nonegotiate {
+        tailf:info "Device will not engage in negotiation protocol on this interface";
+        description
+          "Device will not engage in negotiation protocol on this interface";
+        type empty;
+      }
+      container port-security {
+        tailf:info "Security related command";
+        description
+          "Security related command";
+        presence "true";
+        container aging {
+          tailf:info "Port-security aging commands";
+          description
+            "Port-security aging commands";
+          leaf time {
+            tailf:info "Port-security aging time";
+            description
+              "Port-security aging time";
+            type uint16 {
+              tailf:info "<1-1440>;;Aging time in minutes. Enter a value between 1 and 1440";
+              range "1..1440";
+            }
+          }
+          leaf type {
+            tailf:info "Port-security aging type";
+            description
+              "Port-security aging type";
+            type enumeration {
+              enum "absolute" {
+                tailf:info "Absolute aging (default)";
+              }
+              enum "inactivity" {
+                tailf:info "Aging based on inactivity time period";
+              }
+            }
+          }
+        }
+        container mac-address {
+          tailf:info "Secure mac address";
+          description
+            "Secure mac address";
+          tailf:cli-sequence-commands {
+            tailf:cli-reset-siblings;
+          }
+          tailf:cli-compact-syntax;
+          leaf sticky {
+            tailf:info "Configure dynamic secure addresses as sticky";
+            description
+              "Configure dynamic secure addresses as sticky";
+            tailf:cli-optional-in-sequence;
+            type empty;
+          }
+          leaf hw-address {
+            tailf:cli-drop-node-name;
+            type yang:mac-address {
+              tailf:info "H.H.H;;48 bit mac address";
+            }
+          }
+          leaf vlan {
+            tailf:info "set VLAN ID of the VLAN on which this address can be learned";
+            description
+              "set VLAN ID of the VLAN on which this address can be learned";
+            type uint16 {
+              tailf:info "<1-4094>;;VLAN ID on which this address can be learned";
+              range "1..4094";
+            }
+          }
+        }
+        container maximum {
+          tailf:info "Max secure addresses";
+          description
+            "Max secure addresses";
+          tailf:cli-sequence-commands {
+            tailf:cli-reset-siblings;
+          }
+          tailf:cli-compact-syntax;
+          leaf max-addresses {
+            tailf:cli-drop-node-name;
+            type uint16 {
+              tailf:info "<1-4097>;;Maximum addresses";
+              range "1..4097";
+            }
+          }
+          leaf vlan {
+            tailf:info "Max secure addresses per vlan";
+            description
+              "Max secure addresses per vlan";
+            type string {
+              tailf:info "WORD;;VLAN IDs to which this maximum applies";
+            }
+          }
+        }
+        leaf violation {
+          tailf:info "Security violation mode";
+          description
+            "Security violation mode";
+          type enumeration {
+            enum "protect" {
+              tailf:info "Security violation protect mode";
+            }
+            enum "restrict" {
+              tailf:info "Security violation restrict mode";
+            }
+            enum "shutdown" {
+              tailf:info "Security violation shutdown mode";
+            }
+          }
+        }
+      }
+      container trunk {
+        tailf:info "Set trunking characteristics of the interface";
+        description
+          "Set trunking characteristics of the interface";
+        container allowed {
+          tailf:info "Set allowed VLAN characteristics when interface is in trunking mode";
+          description
+            "Set allowed VLAN characteristics when interface is in trunking mode";
+          container vlan {
+            tailf:info "Set allowed VLANs when interface is in trunking mode";
+            description
+              "Set allowed VLANs when interface is in trunking mode";
+            choice vlan-choice {
+              leaf-list vlans {
+                tailf:cli-replace-all;
+                tailf:cli-range-list-syntax;
+                tailf:cli-drop-node-name;
+                type union {
+                  type uint16 {
+                    tailf:info "WORD;;VLAN IDs of the allowed VLANs when this port is in trunking mode";
+                  }
+                  type string;
+                }
+              }
+              leaf all {
+                tailf:info "all VLANs";
+                description
+                  "all VLANs";
+                type empty;
+              }
+              leaf-list except {
+                tailf:info "all VLANs except the following";
+                description
+                  "all VLANs except the following";
+                tailf:cli-range-list-syntax;
+                type union {
+                  type uint16 {
+                    tailf:info "WORD;;VLAN IDs of the allowed VLANs when this port is in trunking mode";
+                  }
+                  type string;
+                }
+              }
+              leaf none {
+                tailf:info "no VLANs";
+                description
+                  "no VLANs";
+                type empty;
+              }
+            }
+          }
+        }
+        leaf encapsulation {
+          tailf:info "Set encapsulation format on trunk port";
+          description
+            "Set encapsulation format on trunk port";
+          type enumeration {
+            enum "dot1q";
+            enum "isl";
+            enum "negotiate";
+          }
+        }
+        container native {
+          tailf:info "Set trunking native characteristics when interface is in trunking mode";
+          description
+            "Set trunking native characteristics when interface is in trunking mode";
+          leaf vlan {
+            tailf:info "Set native VLAN when interface is in trunking mode";
+            description
+              "Set native VLAN when interface is in trunking mode";
+            type union {
+              type enumeration {
+                enum "tag" {
+                  tailf:info "Set native VLAN tagging state";
+                }
+              }
+              type uint16 {
+                tailf:info "<1-4094>;;VLAN ID of the native VLAN when this port is in trunking mode";
+                range "1..4094";
+              }
+            }
+          }
+        }
+        container pruning {
+          tailf:info "Set pruning VLAN characteristics when interface is in trunking mode";
+          description
+            "Set pruning VLAN characteristics when interface is in trunking mode";
+          container vlan {
+            tailf:info "Set VLANs enabled for pruning when interface is in trunking mode";
+            description
+              "Set VLANs enabled for pruning when interface is in trunking mode";
+            choice vlan-choice {
+              leaf-list vlans {
+                tailf:cli-range-list-syntax;
+                tailf:cli-drop-node-name;
+                type union {
+                  type uint16 {
+                    tailf:info "WORD;;VLAN IDs of the allowed VLANs when this port is in trunking mode";
+                  }
+                  type string;
+                }
+              }
+              leaf-list except {
+                tailf:info "all VLANs except the following";
+                description
+                  "all VLANs except the following";
+                tailf:cli-range-list-syntax;
+                type union {
+                  type uint16 {
+                    tailf:info "WORD;;VLAN IDs of the allowed VLANs when this port is in trunking mode";
+                  }
+                  type string;
+                }
+              }
+              leaf none {
+                tailf:info "no VLANs";
+                description
+                  "no VLANs";
+                type empty;
+              }
+            }
+          }
+        }
+      }
+      container voice {
+        tailf:info "Voice appliance attributes";
+        description
+          "Voice appliance attributes";
+        leaf vlan {
+          tailf:info "Vlan for voice traffic";
+          description
+            "Vlan for voice traffic";
+          type union {
+            type enumeration {
+              enum "dot1p" {
+                tailf:info "Priority tagged on PVID";
+              }
+              enum "none" {
+                tailf:info "Don't tell telephone about voice vlan";
+              }
+              enum "untagged" {
+                tailf:info "Untagged on PVID";
+              }
+            }
+            type uint16 {
+              tailf:info "<1-4094>;;Vlan for voice traffic";
+              range "1..4094";
+            }
+          }
+        }
+        container detect {
+          tailf:info "detection enhancement keyword";
+          description
+            "detection enhancement keyword";
+          tailf:cli-incomplete-command;
+          container cisco-phone {
+            tailf:info "Cisco IP phone";
+            description
+              "Cisco IP phone";
+            presence "true";
+            leaf full-duplex {
+              tailf:info "full duplex keyword";
+              description
+                "full duplex keyword";
+              type empty;
+            }
+          }
+        }
+      }
+      container priority {
+        tailf:info "Set appliance 802.1p priority";
+        description
+          "Set appliance 802.1p priority";
+        tailf:cli-incomplete-command;
+        container extend {
+          tailf:info "Set appliance 802.1p priority";
+          description
+            "Set appliance 802.1p priority";
+          tailf:cli-incomplete-command;
+          choice trust-choice {
+            leaf trust {
+              tailf:cli-full-command;
+              tailf:info "Trust 802.1p priorities of devices on appliance";
+              description
+                "Trust 802.1p priorities of devices on appliance";
+              type empty;
+            }
+            leaf cos {
+              tailf:info "Override 802.1p priority of devices on appliance";
+              description
+                "Override 802.1p priority of devices on appliance";
+              tailf:cli-full-command;
+              type uint8 {
+                tailf:info "<0-7>;;Priority for devices on appliance";
+                range "0..7";
+              }
+            }
+          }
+        }
+      }
+      container autostate {
+        tailf:info "Include or exclude this port from vlan link up calculation";
+        description
+          "Include or exclude this port from vlan link up calculation";
+        tailf:cli-incomplete-command;
+        leaf exclude {
+          tailf:info "Exclude this port from vlan link up calculation";
+          description
+            "Exclude this port from vlan link up calculation";
+          type empty;
+        }
+      }
+      leaf protected {
+        tailf:info "Configure an interface to be a protected port";
+        description
+          "Configure an interface to be a protected port";
+        type empty;
+      }
+      leaf host {
+        tailf:info "Set port host";
+        description
+          "Set port host";
+        type empty;
+      }
+    }
+    container authentication {
+      tailf:info "Auth Manager Interface Configuration Commands";
+      description
+        "Auth Manager Interface Configuration Commands";
+      leaf control-direction {
+        tailf:info "Set the control-direction on the interface";
+        description
+          "Set the control-direction on the interface";
+        type enumeration {
+          enum "both" {
+            tailf:info "Control traffic in BOTH directions";
+          }
+          enum "in" {
+            tailf:info "Control inbound traffic only";
+          }
+        }
+      }
+      container event {
+        tailf:info "Set action for authentication events";
+        description
+          "Set action for authentication events";
+        container server {
+          tailf:info "Configure actions for AAA server events";
+          description
+            "Configure actions for AAA server events";
+          container alive {
+            tailf:info "Configure AAA server alive action";
+            description
+              "Configure AAA server alive action";
+            container action {
+              tailf:info "Required action for authentication event";
+              description
+                "Required action for authentication event";
+              leaf reinitialize {
+                tailf:info "Reinitialize all authorized clients";
+                description
+                  "Reinitialize all authorized clients";
+                type empty;
+              }
+            }
+          }
+          container dead {
+            tailf:info "Configure AAA server alive action";
+            description
+              "Configure AAA server dead action";
+            container action {
+              tailf:info "Required action for authentication event";
+              description
+                "Required action for authentication event";
+              container authorize {
+                tailf:info "Authorize the port";
+                description
+                  "Authorize the port";
+                presence "true";
+                leaf vlan {
+                  tailf:info "Configure Critical Authorization VLAN";
+                  description
+                    "Configure Critical Authorization VLAN";
+                  tailf:cli-full-command;
+                  type uint16 {
+                    tailf:info "<1-4094>;;Enter a VlanId";
+                  }
+                }
+                leaf voice {
+                  tailf:info "Authorize the port for VOICE traffic";
+                  description
+                    "Authorize the port for VOICE traffic";
+                  tailf:cli-full-command;
+                  type empty;
+                }
+              }
+              container reinitialize {
+                tailf:info "Reinitialize all client on the port";
+                description
+                  "Reinitialize all client on the port";
+                leaf vlan {
+                  tailf:info "Configure Critical Authorization VLAN";
+                  description
+                    "Configure Critical Authorization VLAN";
+                  type uint16 {
+                    tailf:info "<1-4094>;;Enter a VlanId";
+                  }
+                }
+              }
+            }
+          }
+        }
+      }
+      leaf fallback {
+        tailf:info "Enable the Webauth fallback mechanism";
+        description
+          "Enable the Webauth fallback mechanism";
+        tailf:cli-full-command;
+        type string {
+          tailf:info "WORD;;Name of Webauth Profile (max 200 characters)";
+        }
+      }
+      leaf host-mode {
+        tailf:info "Set the Host mode for authentication on this interface";
+        description
+          "Set the Host mode for authentication on this interface";
+        type enumeration {
+          enum "multi-auth" {
+            tailf:info "Multiple Authentication Mode";
+          }
+          enum "multi-domain" {
+            tailf:info "Multiple Domain Mode";
+          }
+          enum "multi-host" {
+            tailf:info "Multiple Host Mode";
+          }
+          enum "single-host" {
+            tailf:info "SINGLE HOST Mode";
+          }
+        }
+      }
+      leaf open {
+        tailf:info "Enable or Disable open access on this port";
+        description
+          "Enable or Disable open access on this port";
+        tailf:cli-full-command;
+        type empty;
+      }
+      container order {
+        tailf:info "Add an authentication method to the order list";
+        description
+          "Add an authentication method to the order list";
+        tailf:cli-compact-syntax;
+        leaf dot1x {
+          tailf:info "Authentication method dot1x allowed";
+          description
+            "Authentication method dot1x allowed";
+          type empty;
+        }
+        leaf mab {
+          tailf:info "Authentication method mab allowed";
+          description
+            "Authentication method mab allowed";
+          type empty;
+        }
+        leaf webauth {
+          tailf:info "Authentication method webauth allowed";
+          description
+            "Authentication method webauth allowed";
+          type empty;
+        }
+      }
+      container priority {
+        tailf:info "Add an authentication method to the priority list";
+        description
+          "Add an authentication method to the priority list";
+        tailf:cli-compact-syntax;
+        leaf dot1x {
+          tailf:info "Authentication method dot1x allowed";
+          description
+            "Authentication method dot1x allowed";
+          type empty;
+        }
+        leaf mab {
+          tailf:info "Authentication method mab allowed";
+          description
+            "Authentication method mab allowed";
+          type empty;
+        }
+        leaf webauth {
+          tailf:info "Authentication method webauth allowed";
+          description
+            "Authentication method webauth allowed";
+          type empty;
+        }
+      }
+      leaf port-control {
+        tailf:info "set the port-control value";
+        description
+          "set the port-control value";
+        type enumeration {
+          enum "auto" {
+            tailf:info "PortState will be set to AUTO";
+          }
+          enum "force-authorized" {
+            tailf:info "PortState set to Authorized";
+          }
+          enum "force-unauthorized" {
+            tailf:info "PortState will be set to UnAuthorized";
+          }
+        }
+      }
+      leaf periodic {
+        tailf:info "Enable or Disable Reauthentication for this port";
+        description
+          "Enable or Disable Reauthentication for this port";
+        tailf:cli-full-command;
+        type empty;
+      }
+      container timer {
+        tailf:info "Set authentication timer values";
+        description
+          "Set authentication timer values";
+        container inactivity {
+          tailf:info "Interval in seconds after which if there is no activity fromthe client then it will be unauthorized (default OFF)";
+          description
+            "Interval in seconds after which if there is no activity fromthe client then it will be unauthorized (default OFF)";
+          container value {
+            tailf:cli-drop-node-name;
+            tailf:cli-sequence-commands;
+            tailf:cli-compact-syntax;
+            leaf value {
+              tailf:cli-drop-node-name;
+              type uint16 {
+                tailf:info "<1-65535>;;Enter a value between 1 and 65535";
+              }
+            }
+            leaf dynamic {
+              tailf:info "Initiate a dynamic probe on inactivity timeout";
+              description
+                "Initiate a dynamic probe on inactivity timeout";
+              tailf:cli-optional-in-sequence;
+              type empty;
+            }
+          }
+          container server {
+            tailf:info "Obtain inactivity timeout value from the server";
+            description
+              "Obtain inactivity timeout value from the server";
+            presence "true";
+            leaf dynamic {
+              tailf:info "Initiate a dynamic probe on inactivity timeout";
+              description
+                "Initiate a dynamic probe on inactivity timeout";
+              tailf:cli-optional-in-sequence;
+              type empty;
+            }
+          }
+        }
+        container reauthenticate {
+          tailf:info "Time in seconds after which an automatic re-authenticationshould be initiated (default 1 hour)";
+          description
+            "Time in seconds after which an automatic re-authenticationshould be initiated (default 1 hour)";
+          leaf value {
+            tailf:cli-drop-node-name;
+            tailf:cli-full-command;
+            type uint16 {
+              tailf:info "<1-65535>;;Enter a value between 1 and 65535";
+            }
+          }
+          leaf server {
+            tailf:info "Obtain re-authentication timeout value from the server";
+            description
+              "Obtain re-authentication timeout value from the server";
+            tailf:cli-full-command;
+            type empty;
+          }
+        }
+        leaf restart {
+          tailf:info "Interval in seconds after which an attempt should be made toauthenticate an unauthorized port (default 60 sec)";
+          description
+            "Interval in seconds after which an attempt should be made toauthenticate an unauthorized port (default 60 sec)";
+          tailf:cli-full-command;
+          type uint16 {
+            tailf:info "<1-65535>;;Enter a value between 1 and 65535";
+          }
+        }
+      }
+      leaf violation {
+        tailf:info "Configure action to take on security violations";
+        description
+          "Configure action to take on security violations";
+        tailf:cli-full-command;
+        type enumeration {
+          enum "protect" {
+            tailf:info "Protect the port";
+          }
+          enum "replace" {
+            tailf:info "Replace the existing session";
+          }
+          enum "restrict" {
+            tailf:info "Restrict the port";
+          }
+          enum "shutdown" {
+            tailf:info "SHUTDOWN the port";
+          }
+        }
+      }
+    }
+    container auto {
+      tailf:info "Configure Automation";
+      description
+        "Configure Automation";
+      container qos {
+        leaf voip {
+          type enumeration {
+            enum "cisco-phone";
+          }
+        }
+      }
+    }
+    container spanning-tree {
+      tailf:info "Spanning Tree Subsystem";
+      description
+        "Spanning Tree Subsystem";
+      leaf bpdufilter {
+        tailf:info "Don't send or receive BPDUs on this interface";
+        description
+          "Don't send or receive BPDUs on this interface";
+        type enumeration {
+          enum "disable" {
+            tailf:info "Disable BPDU filtering for this interface";
+          }
+          enum "enable" {
+            tailf:info "Enable BPDU filtering for this interface";
+          }
+        }
+      }
+      container bpduguard {
+        tailf:info "Don't accept BPDUs on this interface";
+        description
+          "Don't accept BPDUs on this interface";
+        choice bpduguard-choice {
+          leaf disable {
+            tailf:info "Disable BPDU guard for this interface";
+            description
+              "Disable BPDU guard for this interface";
+            type empty;
+          }
+          leaf enable {
+            type empty;
+            tailf:info "Enable BPDU guard for this interface";
+            description
+              "Enable BPDU guard for this interface";
+          }
+        }
+      }
+      leaf cost {
+        tailf:info "To set the path cost of the interface";
+        description
+          "To set the path cost of the interface";
+        tailf:cli-full-command;
+        type uint32 {
+          range "1..200000000";
+        }
+      }
+      leaf guard {
+        tailf:info "Change an interface's spanning tree guard mode";
+        description
+          "Change an interface's spanning tree guard mode";
+        tailf:cli-full-command;
+        type enumeration {
+          enum "loop" {
+            tailf:info "Set guard mode to loop guard on interface";
+          }
+          enum "none" {
+            tailf:info "Set guard mode to none";
+          }
+          enum "root" {
+            tailf:info "Set guard mode to root guard on interface";
+          }
+        }
+      }
+      leaf link-type {
+        tailf:info "Specify a link type for spanning tree tree protocol use";
+        description
+          "Specify a link type for spanning tree tree protocol use";
+        tailf:cli-full-command;
+        type enumeration {
+          enum "auto" {
+            tailf:code-name "link_type_auto";
+            tailf:info "Determine link type based on media duplex of this interface";
+          }
+          enum "none" {
+            tailf:info "Consider the interface as point-to-point";
+          }
+          enum "point-to-point" {
+            tailf:info "Consider the interface as point-to-point";
+          }
+          enum "root" {
+            tailf:info "Consider the interface as shared";
+          }
+        }
+      }
+      container portfast {
+        tailf:info "Spanning tree portfast options";
+        description
+          "Spanning tree portfast options";
+        tailf:cli-delete-when-empty;
+        presence "true";
+        leaf enable {
+          tailf:cli-full-command;
+          tailf:cli-drop-node-name;
+          type enumeration {
+            enum "disable" {
+              tailf:info "Disable portfast for this interface";
+            }
+          }
+        }
+        leaf trunk {
+          type empty;
+        }
+      }
+      container loopguard {
+        tailf:info "Spanning tree loopguard options";
+        description
+          "Spanning tree loopguard options";
+        leaf default {
+          tailf:info "Enable loopguard by default on all ports";
+          description
+            "Enable loopguard by default on all ports";
+          type empty;
+        }
+      }
+    }
+    container srr-queue {
+      container bandwidth {
+        container shape {
+          tailf:cli-compact-syntax;
+          tailf:cli-sequence-commands;
+          tailf:cli-reset-container;
+          leaf weight1 {
+            tailf:cli-drop-node-name;
+            tailf:cli-incomplete-command;
+            type uint16;
+          }
+          leaf weight2 {
+            tailf:cli-drop-node-name;
+            tailf:cli-incomplete-command;
+            type uint16;
+          }
+          leaf weight3 {
+            tailf:cli-drop-node-name;
+            tailf:cli-incomplete-command;
+            type uint16;
+          }
+          leaf weight4 {
+            tailf:cli-drop-node-name;
+            type uint16;
+          }
+        }
+        container share {
+          tailf:cli-compact-syntax;
+          tailf:cli-sequence-commands;
+          tailf:cli-reset-container;
+          leaf weight1 {
+            tailf:cli-drop-node-name;
+            tailf:cli-incomplete-command;
+            type uint8 {
+              range "1..255";
+            }
+          }
+          leaf weight2 {
+            tailf:cli-drop-node-name;
+            tailf:cli-incomplete-command;
+            type uint8 {
+              range "1..255";
+            }
+          }
+          leaf weight3 {
+            tailf:cli-drop-node-name;
+            tailf:cli-incomplete-command;
+            type uint8 {
+              range "1..255";
+            }
+          }
+          leaf weight4 {
+            tailf:cli-drop-node-name;
+            type uint8 {
+              range "1..255";
+            }
+          }
+        }
+      }
+    }
+  }
+
+  grouping password-07-grouping {
+    leaf level {
+      tailf:info "Set exec level password";
+      description
+        "Set exec level password";
+      tailf:cli-optional-in-sequence;
+      type uint8 {
+        tailf:info "<1-15>;;Level number";
+      }
+    }
+    leaf type {
+      tailf:cli-drop-node-name;
+      tailf:cli-optional-in-sequence;
+      type enumeration {
+        enum "0" {
+          tailf:info "Specifies an UNENCRYPTED password will follow";
+        }
+        enum "7" {
+          tailf:info "Specifies a HIDDEN password will follow";
+        }
+      }
+    }
+    leaf secret {
+      tailf:cli-drop-node-name;
+      type string {
+        tailf:info "LINE;;The UNENCRYPTED (cleartext) password";
+      }
+    }
+  }
+
+  grouping aaa-authentication-dot1x-grouping {
+    leaf group {
+      tailf:info "Use Server-group";
+      description
+        "Use Server-group";
+      type union {
+        type string {
+          tailf:info "Server-group name";
+        }
+        type enumeration {
+          enum "radius" {
+            tailf:info "Use list of all Radius hosts.";
+          }
+          enum "tacacs+" {
+            tailf:info "Use list of all Tacacs+ hosts.";
+          }
+        }
+      }
+    }
+  }
+
+  grouping mpls-static-binding-ipv4-grouping {
+    leaf label {
+      tailf:cli-drop-node-name;
+      tailf:cli-full-command;
+      type uint32 {
+        tailf:info "Label Value";
+      }
+    }
+    container input {
+      tailf:info "Incoming (local) label";
+      description
+        "Incoming (local) label";
+      tailf:cli-flatten-container;
+      tailf:cli-display-separated;
+      leaf label {
+        tailf:cli-drop-node-name;
+        tailf:cli-full-command;
+        type uint32 {
+          tailf:info "Label Value";
+        }
+      }
+    }
+    container output {
+      tailf:info "Outgoing (remote) label";
+      description
+        "Outgoing (remote) label";
+      tailf:cli-sequence-commands {
+        tailf:cli-reset-all-siblings;
+      }
+      tailf:cli-compact-syntax;
+      tailf:cli-display-separated;
+      leaf dst-next-hop {
+        tailf:cli-drop-node-name;
+        tailf:cli-incomplete-command;
+        type inet:ipv4-address {
+          tailf:info "A.B.C.D  Destination next hop";
+        }
+      }
+      leaf label {
+        tailf:cli-drop-node-name;
+        tailf:cli-full-command;
+        tailf:cli-break-sequence-commands;
+        type union {
+          type uint32 {
+            tailf:info "Label Value";
+          }
+          type enumeration {
+            enum "explicit-null" {
+              tailf:code-name "lbl_explicit_null";
+              tailf:info "IETF MPLS IPv4 explicit null label (0)";
+            }
+            enum "implicit-null" {
+              tailf:code-name "lbl_implicit_null";
+              tailf:info "IETF MPLS implicit null label (3)";
+            }
+          }
+        }
+      }
+    }
+  }
+
+  grouping next-hop-address-grouping {
+    container next-hop {
+      tailf:info "Next hop along path";
+      description
+        "Next hop along path";
+      tailf:cli-flatten-container;
+      leaf-list address {
+        tailf:cli-drop-node-name;
+        tailf:cli-flat-list-syntax;
+        type inet:ipv4-address {
+          tailf:info "A.B.C.D;;IP address of next hop";
+        }
+      }
+    }
+  }
+
+  grouping ip-access-list-grouping {
+    leaf-list access-list {
+      tailf:cli-drop-node-name;
+      tailf:cli-full-command;
+      tailf:cli-flat-list-syntax;
+      type exp-acl-type;
+    }
+    leaf-list prefix-list {
+      tailf:info "Match entries of prefix-lists";
+      description
+        "Match entries of prefix-lists";
+      tailf:cli-flat-list-syntax;
+      tailf:cli-full-command;
+      type string {
+        tailf:info "WORD;;Name of a prefix list";
+      }
+    }
+  }
+
+  grouping ipv6-access-list-grouping {
+    leaf access-list {
+      tailf:cli-drop-node-name;
+      type string {
+        tailf:info "WORD;;IPv6 access-list name";
+        pattern "[a-zA-Z].*";
+      }
+    }
+    leaf prefix-list {
+      tailf:info "IPv6 prefix-list";
+      description
+        "IPv6 prefix-list";
+      type string;
+      tailf:non-strict-leafref {
+        path "/ios:native/ipv6/prefix-list/prefixes/name";
+      }
+    }
+  }
+
+  grouping route-map-community-grouping {
+    list community-id {
+      tailf:cli-drop-node-name;
+      tailf:cli-suppress-mode;
+      key "community-id cost-value";
+      leaf community-id {
+        tailf:info "Community ID";
+        description
+          "Community ID";
+        tailf:cli-drop-node-name;
+        type uint8 {
+          tailf:info "<0..255>;;Community ID";
+          range "0..255";
+        }
+      }
+      leaf cost-value {
+        tailf:info "Cost Value (No-preference Cost = 2147483647)";
+        description
+          "Cost Value (No-preference Cost = 2147483647)";
+        tailf:cli-drop-node-name;
+        type uint32 {
+          tailf:info "<0..4294967295>;;Cost Value";
+          range "0..4294967295";
+        }
+      }
+    }
+  }
+
+  grouping acl-udp-port-match-operand {
+    leaf udp-port-operand {
+      tailf:cli-drop-node-name;
+      type acl-udp-port-type;
+    }
+  }
+
+  grouping acl-port-match-operand {
+    leaf port-operand {
+      tailf:cli-drop-node-name;
+      type acl-tcp-port-type;
+    }
+  }
+
+  grouping acl-port-match-oper {
+    choice port-oper-choice {
+      case eq-case {
+        container eq {
+          tailf:info "Match only packets on a given port number";
+          description
+            "Match only packets on a given port number";
+          tailf:cli-flatten-container;
+          tailf:cli-incomplete-command;
+          uses acl-port-match-operand;
+          uses acl-udp-port-match-operand;
+        }
+      }
+      case gt-case {
+        container gt {
+          tailf:info "Match only packets with a greater port number";
+          description
+            "Match only packets with a greater port number";
+          tailf:cli-flatten-container;
+          tailf:cli-incomplete-command;
+          uses acl-port-match-operand;
+          uses acl-udp-port-match-operand;
+        }
+      }
+      case lt-case {
+        container lt {
+          tailf:info "Match only packets with a lower port number";
+          description
+            "Match only packets with a lower port number";
+          tailf:cli-flatten-container;
+          tailf:cli-incomplete-command;
+          uses acl-port-match-operand;
+          uses acl-udp-port-match-operand;
+        }
+      }
+      case neq-case {
+        container neq {
+          tailf:info "Match only packets not on a given port number";
+          description
+            "Match only packets not on a given port number";
+          tailf:cli-flatten-container;
+          tailf:cli-incomplete-command;
+          uses acl-port-match-operand;
+          uses acl-udp-port-match-operand;
+        }
+      }
+      case range-case {
+        container range {
+          tailf:info "Match only packets in the range of port numbers";
+          description
+            "Match only packets in the range of port numbers";
+          tailf:cli-flatten-container;
+          container port-operand1 {
+            tailf:cli-drop-node-name;
+            tailf:cli-flatten-container;
+            uses acl-port-match-operand;
+            uses acl-udp-port-match-operand;
+            container port-operand2 {
+              tailf:cli-drop-node-name;
+              tailf:cli-flatten-container;
+              uses acl-port-match-operand;
+              uses acl-udp-port-match-operand;
+            }
+          }
+        }
+      }
+    }
+  }
+
+  grouping ipv4-acl-icmp-match {
+    container msg {
+      tailf:cli-drop-node-name;
+      tailf:cli-flatten-container;
+      tailf:cli-sequence-commands;
+      tailf:cli-incomplete-command;
+      leaf msg-type {
+        tailf:cli-drop-node-name;
+        type uint8 {
+          tailf:info "<0-255>;;ICMP message type";
+        }
+      }
+      leaf msg-code {
+        tailf:cli-drop-node-name;
+        type uint8 {
+          tailf:info "<0-255>;;ICMP message code";
+        }
+      }
+    }
+    leaf named-msg-type {
+      tailf:cli-drop-node-name;
+      type enumeration {
+        enum "administratively-prohibited" {
+          tailf:info "Administratively prohibited";
+        }
+        enum "alternate-address" {
+          tailf:info "Alternate address";
+        }
+        enum "conversion-error" {
+          tailf:info "Datagram conversion";
+        }
+        enum "dod-host-prohibited" {
+          tailf:info "Host prohibited";
+        }
+        enum "dod-net-prohibited" {
+          tailf:info "Net prohibited";
+        }
+        enum "echo" {
+          tailf:info "Echo (ping)";
+        }
+        enum "echo-reply" {
+          tailf:info "Echo reply";
+        }
+        enum "general-parameter-problem" {
+          tailf:info "Parameter problem";
+        }
+        enum "host-isolated" {
+          tailf:info "Host isolated";
+        }
+        enum "host-precedence-unreachable" {
+          tailf:info "Host unreachable for precedence";
+        }
+        enum "host-redirect" {
+          tailf:info "Host redirect";
+        }
+        enum "host-tos-redirect" {
+          tailf:info "Host redirect for TOS";
+        }
+        enum "host-tos-unreachable" {
+          tailf:info "Host unreachable for TOS";
+        }
+        enum "host-unknown" {
+          tailf:info "Host unknown";
+        }
+        enum "host-unreachable" {
+          tailf:info "Host unreachable";
+        }
+        enum "information-reply" {
+          tailf:info "Information replies";
+        }
+        enum "information-request" {
+          tailf:info "Information requests";
+        }
+        enum "mask-reply" {
+          tailf:info "Mask replies";
+        }
+        enum "mask-request" {
+          tailf:info "Mask requests";
+        }
+        enum "mobile-redirect" {
+          tailf:info "Mobile host redirect";
+        }
+        enum "net-redirect" {
+          tailf:info "Network redirect";
+        }
+        enum "net-tos-redirect" {
+          tailf:info "Net redirect for TOS";
+        }
+        enum "net-tos-unreachable" {
+          tailf:info "Network unreachable for TOS";
+        }
+        enum "net-unreachable" {
+          tailf:info "Net unreachable";
+        }
+        enum "network-unknown" {
+          tailf:info "Network unknown";
+        }
+        enum "no-room-for-option" {
+          tailf:info "Parameter required but no room";
+        }
+        enum "option-missing" {
+          tailf:info "Parameter required but not present";
+        }
+        enum "packet-too-big" {
+          tailf:info "Fragmentation needed and DF set";
+        }
+        enum "parameter-problem" {
+          tailf:info "All parameter problems";
+        }
+        enum "port-unreachable" {
+          tailf:info "Port unreachable";
+        }
+        enum "precedence-unreachable" {
+          tailf:info "Precedence cutoff";
+        }
+        enum "protocol-unreachable" {
+          tailf:info "Protocol unreachable";
+        }
+        enum "reassembly-timeout" {
+          tailf:info "Reassembly timeout";
+        }
+        enum "redirect" {
+          tailf:info "All redirects";
+        }
+        enum "router-advertisement" {
+          tailf:info "Router discovery advertisements";
+        }
+        enum "router-solicitation" {
+          tailf:info "Router discovery solicitations";
+        }
+        enum "source-quench" {
+          tailf:info "Source quenches";
+        }
+        enum "source-route-failed" {
+          tailf:info "Source route failed";
+        }
+        enum "time-exceeded" {
+          tailf:info "All time exceededs";
+        }
+        enum "timestamp-reply" {
+          tailf:info "Timestamp replies";
+        }
+        enum "timestamp-request" {
+          tailf:info "Timestamp requests";
+        }
+        enum "traceroute" {
+          tailf:info "Traceroute";
+        }
+        enum "ttl-exceeded" {
+          tailf:info "TTL exceeded";
+        }
+        enum "unreachable" {
+          tailf:info "All unreachables";
+        }
+      }
+    }
+  }
+
+  grouping ipv6-acl-icmp-match {
+    container msg {
+      tailf:cli-drop-node-name;
+      tailf:cli-flatten-container;
+      tailf:cli-sequence-commands;
+      tailf:cli-incomplete-command;
+      leaf msg-type {
+        tailf:cli-drop-node-name;
+        type uint8 {
+          tailf:info "<0-255>;;ICMPv6 message type";
+        }
+      }
+      leaf msg-code {
+        tailf:cli-drop-node-name;
+        type uint8 {
+          tailf:info "<0-255>;;ICMPv6 message code";
+        }
+      }
+    }
+    leaf named-msg-type {
+      tailf:cli-drop-node-name;
+      type enumeration {
+        enum "beyond-scope" {
+          tailf:info "Destination beyond scope";
+        }
+        enum "destination-unreachable" {
+          tailf:info "Destination address is unreachable";
+        }
+        enum "dhaad-reply" {
+          tailf:info "Home agent address discovery reply";
+        }
+        enum "dhaad-request" {
+          tailf:info "Home agent address discovery request";
+        }
+        enum "echo-reply" {
+          tailf:info "Echo reply";
+        }
+        enum "echo-request" {
+          tailf:info "Echo request (ping)";
+        }
+        enum "header" {
+          tailf:info "Parameter header problems";
+        }
+        enum "hop-limit" {
+          tailf:info "Hop limit exceeded in transit";
+        }
+        enum "mld-query" {
+          tailf:info "Multicast Listener Discovery Query";
+        }
+        enum "mld-reduction" {
+          tailf:info "Multicast Listener Discovery Reduction";
+        }
+        enum "mld-report" {
+          tailf:info "Multicast Listener Discovery Report";
+        }
+        enum "mpd-advertisement" {
+          tailf:info "Mobile prefix advertisement";
+        }
+        enum "mpd-solicitation" {
+          tailf:info "Mobile prefix solicitation";
+        }
+        enum "nd-na" {
+          tailf:info "Neighbor discovery neighbor advertisements";
+        }
+        enum "nd-ns" {
+          tailf:info "Neighbor discovery neighbor solicitations";
+        }
+        enum "next-header" {
+          tailf:info "Parameter next header problems";
+        }
+        enum "no-admin" {
+          tailf:info "Administration prohibited destination";
+        }
+        enum "no-route" {
+          tailf:info "No route to destination";
+        }
+        enum "packet-too-big" {
+          tailf:info "Packet too big";
+        }
+        enum "parameter-option" {
+          tailf:info "Parameter option problems";
+        }
+        enum "parameter-problem" {
+          tailf:info "All parameter problems";
+        }
+        enum "port-unreachable" {
+          tailf:info "Port unreachable";
+        }
+        enum "reassembly-timeout" {
+          tailf:info "Reassembly timeout";
+        }
+        enum "redirect" {
+          tailf:info "Neighbor redirect";
+        }
+        enum "reject-route" {
+          tailf:info "Reject route to destination";
+        }
+        enum "renum-command" {
+          tailf:info "Router renumbering command";
+        }
+        enum "renum-result" {
+          tailf:info "Router renumbering result";
+        }
+        enum "renum-seq-number" {
+          tailf:info "Router renumbering sequence number reset";
+        }
+        enum "router-advertisement" {
+          tailf:info "Neighbor discovery router advertisements";
+        }
+        enum "router-renumbering" {
+          tailf:info "All router renumbering";
+        }
+        enum "router-solicitation" {
+          tailf:info "Neighbor discovery router solicitations";
+        }
+        enum "source-policy" {
+          tailf:info "Source address failed ingress/egress policy";
+        }
+        enum "time-exceeded" {
+          tailf:info "All time exceeded";
+        }
+        enum "unreachable" {
+          tailf:info "All unreachable";
+        }
+      }
+    }
+  }
+
+  grouping ipv4-acl-tcp-bit-match {
+    leaf plusack {
+      tailf:alt-name "+ack";
+      tailf:info "Match on ACK set";
+      description
+        "Match on ACK set";
+      type empty;
+    }
+    leaf plusfin {
+      tailf:alt-name "+fin";
+      tailf:info "Match on FIN set";
+      description
+        "Match on FIN set";
+      type empty;
+    }
+    leaf pluspsh {
+      tailf:alt-name "+psh";
+      tailf:info "Match on PSH set";
+      description
+        "Match on PSH set";
+      type empty;
+    }
+    leaf plusrst {
+      tailf:alt-name "+rst";
+      tailf:info "Match on RST set";
+      description
+        "Match on RST set";
+      type empty;
+    }
+    leaf plussyn {
+      tailf:alt-name "+syn";
+      tailf:info "Match on SYN set";
+      description
+        "Match on SYN set";
+      type empty;
+    }
+    leaf plusurg {
+      tailf:alt-name "+urg";
+      tailf:info "Match on URG set";
+      description
+        "Match on URG set";
+      type empty;
+    }
+    leaf minusack {
+      tailf:alt-name "-ack";
+      tailf:info "Match on ACK not set";
+      description
+        "Match on ACK not set";
+      type empty;
+    }
+    leaf minusfin {
+      tailf:alt-name "-fin";
+      tailf:info "Match on FIN not set";
+      description
+        "Match on FIN not set";
+      type empty;
+    }
+    leaf minuspsh {
+      tailf:alt-name "-psh";
+      tailf:info "Match on PSH not set";
+      description
+        "Match on PSH not set";
+      type empty;
+    }
+    leaf minusrst {
+      tailf:alt-name "-rst";
+      tailf:info "Match on RST not set";
+      description
+        "Match on RST not set";
+      type empty;
+    }
+    leaf minussyn {
+      tailf:alt-name "-syn";
+      tailf:info "Match on SYN not set";
+      description
+        "Match on SYN not set";
+      type empty;
+    }
+    leaf minusurg {
+      tailf:alt-name "-urg";
+      tailf:info "Match on URG not set";
+      description
+        "Match on URG not set";
+      type empty;
+    }
+  }
+
+  grouping ipv4-acl-tcp-match {
+    container match-all {
+      tailf:info "Match if all specified flags are present";
+      description
+        "Match if all specified flags are present";
+      tailf:cli-flatten-container;
+      tailf:cli-incomplete-command;
+      uses ipv4-acl-tcp-bit-match;
+    }
+    container match-any {
+      tailf:info "Match if any specified flags is present";
+      description
+        "Match if any specified flags is present";
+      tailf:cli-flatten-container;
+      tailf:cli-incomplete-command;
+      uses ipv4-acl-tcp-bit-match;
+    }
+  }
+
+  grouping acl-tcp-match {
+    leaf ack {
+      tailf:info "Match on the ACK bit";
+      description
+        "Match on the ACK bit";
+      type empty;
+    }
+    leaf fin {
+      tailf:info "Match on the FIN bit";
+      description
+        "Match on the FIN bit";
+      type empty;
+    }
+    leaf psh {
+      tailf:info "Match on the PSH bit";
+      description
+        "Match on the PSH bit";
+      type empty;
+    }
+    leaf rst {
+      tailf:info "Match on the RST bit";
+      description
+        "Match on the RST bit";
+      type empty;
+    }
+    leaf syn {
+      tailf:info "Match on the SYN bit";
+      description
+        "Match on the SYN bit";
+      type empty;
+    }
+    leaf urg {
+      tailf:info "Match on the URG bit";
+      description
+        "Match on the URG bit";
+      type empty;
+    }
+    leaf established {
+      tailf:info "Match established connections";
+      description
+        "Match established connections";
+      type empty;
+    }
+  }
+
+  grouping ipv4-acl-match-common-attribute {
+    leaf dscp {
+      tailf:info "Match packets with given dscp value";
+      description
+        "Match packets with given dscp value";
+      type dscp-type;
+    }
+    leaf fragments {
+      tailf:info "Check non-initial fragments";
+      description
+        "Check non-initial fragments";
+      type empty;
+    }
+    leaf log {
+      tailf:info "Log matches against this entry";
+      description
+        "Log matches against this entry";
+      type empty;
+    }
+    leaf log-input {
+      tailf:info "Log matches against this entry, including input interface";
+      description
+        "Log matches against this entry, including input interface";
+      type empty;
+    }
+    leaf option {
+      tailf:info "Match packets with given IP Options value";
+      description
+        "Match packets with given IP Options value";
+      type union {
+        type uint8 {
+          tailf:info "<0-255>;;IP Options value";
+        }
+        type enumeration {
+          enum "add-ext" {
+            tailf:info "Match packets with Address Extension Option (147)";
+          }
+          enum "any-options" {
+            tailf:info "Match packets with ANY Option";
+          }
+          enum "com-security" {
+            tailf:info "Match packets with Commercial Security Option (134)";
+          }
+          enum "dps" {
+            tailf:info "Match packets with Dynamic Packet State Option (151)";
+          }
+          enum "encode" {
+            tailf:info "Match packets with Encode Option (15)";
+          }
+          enum "eool" {
+            tailf:info "Match packets with End of Options (0)";
+          }
+          enum "ext-ip" {
+            tailf:info "Match packets with Extended IP Option (145)";
+          }
+          enum "ext-security" {
+            tailf:info "Match packets with Extended Security Option (133)";
+          }
+          enum "finn" {
+            tailf:info "Match packets with Experimental Flow Control Option (205)";
+          }
+          enum "imitd" {
+            tailf:info "Match packets with IMI Traffic Desriptor Option (144)";
+          }
+          enum "lsr" {
+            tailf:info "Match packets with Loose Source Route Option (131)";
+          }
+          enum "mtup" {
+            tailf:info "Match packets with MTU Probe Option (11)";
+          }
+          enum "mtur" {
+            tailf:info "Match packets with MTU Reply Option (12)";
+          }
+          enum "no-op" {
+            tailf:info "Match packets with No Operation Option (1)";
+          }
+          enum "nsapa" {
+            tailf:info "Match packets with NSAP Addresses Option (150)";
+          }
+          enum "record-route" {
+            tailf:info "Match packets with Record Route Option (7)";
+          }
+          enum "router-alert" {
+            tailf:info "Match packets with Router Alert Option (148)";
+          }
+          enum "sdb" {
+            tailf:info "Match packets with Selective Directed Broadcast Option (149)";
+          }
+          enum "security" {
+            tailf:info "Match packets with Basic Security Option (130)";
+          }
+          enum "ssr" {
+            tailf:info "Match packets with Strict Source Routing Option (137)";
+          }
+          enum "stream-id" {
+            tailf:info "Match packets with Stream ID Option (136)";
+          }
+          enum "timestamp" {
+            tailf:info "Match packets with Time Stamp Option (68)";
+          }
+          enum "traceroute" {
+            tailf:info "Match packets with Trace Route Option (82)";
+          }
+          enum "ump" {
+            tailf:info "Match packets with Upstream Multicast Packet Option (152)";
+          }
+          enum "visa" {
+            tailf:info "Match packets with Experimental Access Control Option (142)";
+          }
+          enum "zsu" {
+            tailf:info "Match packets with Experimental Measurement Option (10)";
+          }
+        }
+      }
+    }
+    leaf precedence {
+      tailf:info "Match packets with given precedence value";
+      description
+        "Match packets with given precedence value";
+      type union {
+        type uint8 {
+          tailf:info "<0-7>;;Precedence value";
+          range "0..7";
+        }
+        type enumeration {
+          enum "critical" {
+            tailf:info "Match packets with critical precedence (5)";
+          }
+          enum "flash" {
+            tailf:info "Match packets with flash precedence (3)";
+          }
+          enum "flash-override" {
+            tailf:info "Match packets with flash override precedence (4)";
+          }
+          enum "immediate" {
+            tailf:info "Match packets with immediate precedence (2)";
+          }
+          enum "internet" {
+            tailf:info "Match packets with internetwork control precedence (6)";
+          }
+          enum "network" {
+            tailf:info "Match packets with network control precedence (7)";
+          }
+          enum "priority" {
+            tailf:info "Match packets with priority precedence (1)";
+          }
+          enum "routine" {
+            tailf:info "Match packets with routine precedence (0)";
+          }
+        }
+      }
+    }
+    leaf time-range {
+      tailf:info "Specify a time-range";
+      description
+        "Specify a time-range";
+      type string {
+        tailf:info "WORD;;Time-range entry name";
+      }
+    }
+    leaf tos {
+      tailf:info "Match packets with given TOS value";
+      description
+        "Match packets with given TOS value";
+      type union {
+        type uint8 {
+          tailf:info "<0-15>;;Type of service value";
+          range "0..15";
+        }
+        type enumeration {
+          enum "max-reliability" {
+            tailf:info "Match packets with max reliable TOS (2)";
+          }
+          enum "max-throughput" {
+            tailf:info "Match packets with max throughput TOS (4)";
+          }
+          enum "min-delay" {
+            tailf:info "Match packets with min delay TOS (8)";
+          }
+          enum "min-monetary-cost" {
+            tailf:info "Match packets with min monetary cost TOS (1)";
+          }
+          enum "normal" {
+            tailf:info "Match packets with normal TOS (0)";
+          }
+        }
+      }
+    }
+    container ttl {
+      tailf:info "Match packets with given TTL value";
+      description
+        "Match packets with given TTL value";
+      tailf:cli-flatten-container;
+      tailf:cli-incomplete-command;
+      choice ttl-choice {
+        case eq-case {
+          leaf eq {
+            tailf:info "Match only packets on a given TTL number";
+            description
+              "Match only packets on a given TTL number";
+            type uint8 {
+              tailf:info "<0-255>;;Time to live value";
+            }
+          }
+        }
+        case gt-case {
+          leaf gt {
+            tailf:info "Match only packets on a given TTL number";
+            description
+              "Match only packets on a given TTL number";
+            type uint8 {
+              tailf:info "<0-255>;;Time to live value";
+            }
+          }
+        }
+        case lt-case {
+          leaf lt {
+            tailf:info "Match only packets on a given TTL number";
+            description
+              "Match only packets on a given TTL number";
+            type uint8 {
+              tailf:info "<0-255>;;Time to live value";
+            }
+          }
+        }
+        case neq-case {
+          leaf neq {
+            tailf:info "Match only packets on a given TTL number";
+            description
+              "Match only packets on a given TTL number";
+            type uint8 {
+              tailf:info "<0-255>;;Time to live value";
+            }
+          }
+        }
+        case range-case {
+          container range {
+            tailf:info "Match only packets in the range of TTLs";
+            description
+              "Match only packets in the range of TTLs";
+            tailf:cli-flatten-container;
+            tailf:cli-sequence-commands;
+            tailf:cli-compact-syntax;
+            tailf:cli-incomplete-command;
+            leaf value1 {
+              tailf:cli-drop-node-name;
+              type uint8 {
+                tailf:info "<0-255>;;Time to live value";
+              }
+            }
+            leaf value2 {
+              tailf:cli-drop-node-name;
+              type uint8 {
+                tailf:info "<0-255>;;Time to live value";
+              }
+            }
+          }
+        }
+      }
+    }
+  }
+
+  grouping ipv6-acl-match-common-attribute {
+    leaf auth {
+      tailf:info "Match on authentication header";
+      description
+        "Match on authentication header";
+      type empty;
+    }
+    leaf dest-option {
+      tailf:info "Destination Option header (all types)";
+      description
+        "Destination Option header (all types)";
+      type empty;
+    }
+    leaf dscp {
+      tailf:info "Match packets with given dscp value";
+      description
+        "Match packets with given dscp value";
+      type dscp-type;
+    }
+    leaf flow-label {
+      tailf:info "Flow label";
+      description
+        "Flow label";
+      type uint32 {
+        tailf:info "<0-1048575>;;Flow label value";
+        range "0..1048575";
+      }
+    }
+    leaf hbh {
+      tailf:info "Match on hop-by-hop option";
+      description
+        "Match on hop-by-hop option";
+      type empty;
+    }
+    leaf log {
+      tailf:info "Log matches against this entry";
+      description
+        "Log matches against this entry";
+      type empty;
+    }
+    leaf log-input {
+      tailf:info "Log matches against this entry, including input";
+      description
+        "Log matches against this entry, including input";
+      type empty;
+    }
+    leaf mobility {
+      tailf:info "Mobility header (all types)";
+      description
+        "Mobility header (all types)";
+      type empty;
+    }
+    leaf mobility-type {
+      tailf:info "Mobility header with type";
+      description
+        "Mobility header with type";
+      type mobility-type;
+    }
+    leaf routing {
+      tailf:info "Routing header (all types)";
+      description
+        "Routing header (all types)";
+      type empty;
+    }
+    leaf routing-type {
+      tailf:info "Routing header with type";
+      description
+        "Routing header with type";
+      type uint8 {
+        tailf:info "<0-255>;;Routing header type value";
+      }
+    }
+    leaf sequence {
+      tailf:info "Sequence number for this entry";
+      description
+        "Sequence number for this entry";
+      type uint64 {
+        tailf:info "<1-4294967294>;;Sequence number for this entry";
+        range "1..4294967294";
+      }
+    }
+    leaf time-range {
+      tailf:info "Specify a time-range";
+      description
+        "Specify a time-range";
+      type string {
+        tailf:info "WORD;;Time-range entry name";
+      }
+    }
+  }
+
+  grouping ipv4-acl-match-attribute {
+    container acl-match-attribute {
+      tailf:cli-drop-node-name;
+      tailf:cli-flatten-container;
+      tailf:cli-optional-in-sequence;
+      uses ipv4-acl-match-common-attribute;
+      container tcp-match {
+        when "../../../../tcp";
+        tailf:cli-drop-node-name;
+        tailf:cli-flatten-container;
+        uses ipv4-acl-match-common-attribute;
+        uses acl-tcp-match;
+        uses ipv4-acl-tcp-match;
+        uses acl-port-match-oper;
+      }
+      container port-match-oper {
+        when "(../../../../udp)";
+        tailf:cli-drop-node-name;
+        tailf:cli-flatten-container;
+        uses ipv4-acl-match-common-attribute;
+        uses acl-port-match-oper;
+      }
+      container icmp-option {
+        when "../../../../icmp";
+        tailf:cli-drop-node-name;
+        tailf:cli-flatten-container;
+        uses ipv4-acl-match-common-attribute;
+        uses ipv4-acl-icmp-match;
+      }
+    }
+  }
+
+  grouping ipv4-acl-match-proto-num-attribute {
+    container acl-match-attribute {
+      tailf:cli-drop-node-name;
+      tailf:cli-flatten-container;
+      tailf:cli-optional-in-sequence;
+      uses ipv4-acl-match-common-attribute;
+      container tcp-option {
+        when "../../../number = '6'";
+        tailf:cli-drop-node-name;
+        tailf:cli-flatten-container;
+        uses ipv4-acl-match-common-attribute;
+        uses acl-tcp-match;
+        uses ipv4-acl-tcp-match;
+        uses acl-port-match-oper;
+      }
+      container icmp-option {
+        when "../../../number = '1'";
+        tailf:cli-drop-node-name;
+        tailf:cli-flatten-container;
+        uses ipv4-acl-match-common-attribute;
+        uses ipv4-acl-icmp-match;
+      }
+      container port-option {
+        when "(../../../number = '17')";
+        tailf:cli-drop-node-name;
+        tailf:cli-flatten-container;
+        uses ipv4-acl-match-common-attribute;
+        uses acl-port-match-oper;
+      }
+    }
+  }
+
+  grouping ipv6-acl-match-attribute {
+    container acl-match-attribute {
+      tailf:cli-drop-node-name;
+      tailf:cli-flatten-container;
+      tailf:cli-optional-in-sequence;
+      uses ipv6-acl-match-common-attribute;
+      container tcp-match {
+        when "../../../../tcp";
+        tailf:cli-drop-node-name;
+        tailf:cli-flatten-container;
+        uses ipv6-acl-match-common-attribute;
+        uses acl-tcp-match;
+        uses acl-port-match-oper;
+      }
+      container port-match-oper {
+        when "(../../../../udp) or (../../../../sctp)";
+        tailf:cli-drop-node-name;
+        tailf:cli-flatten-container;
+        uses ipv6-acl-match-common-attribute;
+        uses acl-port-match-oper;
+      }
+      container icmp-option {
+        when "../../../../icmp";
+        tailf:cli-drop-node-name;
+        tailf:cli-flatten-container;
+        uses ipv6-acl-match-common-attribute;
+        uses ipv6-acl-icmp-match;
+      }
+    }
+  }
+
+  grouping ipv6-acl-match-proto-num-attribute {
+    container acl-match-attribute {
+      tailf:cli-drop-node-name;
+      tailf:cli-flatten-container;
+      tailf:cli-optional-in-sequence;
+      uses ipv6-acl-match-common-attribute;
+      container tcp-option {
+        when "../../../number = '6'";
+        tailf:cli-drop-node-name;
+        tailf:cli-flatten-container;
+        uses ipv6-acl-match-common-attribute;
+        uses acl-tcp-match;
+        uses acl-port-match-oper;
+      }
+      container icmp-option {
+        when "../../../number = '1'";
+        tailf:cli-drop-node-name;
+        tailf:cli-flatten-container;
+        uses ipv6-acl-match-common-attribute;
+        uses ipv6-acl-icmp-match;
+      }
+      container port-option {
+        when "(../../../number = '17') or (../../../number = '132')";
+        tailf:cli-drop-node-name;
+        tailf:cli-flatten-container;
+        uses ipv6-acl-match-common-attribute;
+        uses acl-port-match-oper;
+      }
+    }
+  }
+
+  grouping ace-log-grouping {
+    leaf log {
+      tailf:info "Log matches against this entry";
+      description
+        "Log matches against this entry";
+      tailf:cli-optional-in-sequence;
+      type empty;
+    }
+  }
+
+  grouping ipv4-std-ace-grouping {
+    container std-ace {
+      tailf:cli-drop-node-name;
+      tailf:cli-flatten-container;
+      tailf:cli-sequence-commands;
+      tailf:cli-compact-syntax;
+      choice source-choice {
+        case ipv4-prefix-case {
+          leaf ipv4-prefix {
+            tailf:cli-drop-node-name;
+            type ipv4-host-type {
+              tailf:info "Hostname or A.B.C.D;;Address to match";
+            }
+          }
+          leaf mask {
+            tailf:cli-drop-node-name;
+            tailf:cli-optional-in-sequence;
+            type inet:ipv4-address {
+              tailf:info "A.B.C.D;;Wildcard bits";
+            }
+          }
+        }
+        case any-case {
+          leaf any {
+            tailf:info "Any source prefix";
+            description
+              "Any source prefix";
+            type empty;
+          }
+        }
+        case host-case {
+          leaf host {
+            tailf:info "A single source host";
+            description
+              "A single source host";
+            type ipv4-host-type {
+              tailf:info "Hostname or A.B.C.D  Host address";
+            }
+          }
+        }
+      }
+      uses ace-log-grouping;
+    }
+  }
+
+  grouping ipv4-source-destination-main-grouping {
+    choice source-choice {
+      case ipv4-prefix-case {
+        leaf ipv4-address {
+          tailf:cli-drop-node-name;
+          tailf:cli-incomplete-command;
+          mandatory true;
+          type inet:ipv4-address {
+            tailf:info "A.B.C.D;;Source address";
+          }
+        }
+        leaf mask {
+          mandatory true;
+          tailf:cli-drop-node-name;
+          tailf:cli-incomplete-command;
+          type inet:ipv4-address {
+            tailf:info "A.B.C.D;;Source wildcard bits";
+          }
+        }
+      }
+      case any-case {
+        leaf any {
+          tailf:cli-incomplete-command;
+          tailf:info "Any source host";
+          description
+            "Any source host";
+          type empty;
+        }
+      }
+      case host-case {
+        leaf host {
+          tailf:info "A single source host";
+          description
+            "A single source host";
+          tailf:cli-incomplete-command;
+          type ipv4-host-type {
+            tailf:info "Hostname or A.B.C.D;;Source address";
+          }
+        }
+      }
+      case object-group-case {
+        leaf object-group {
+          tailf:cli-incomplete-command;
+          tailf:info "Source network object group";
+          description
+            "Source network object group";
+          type string {
+            tailf:info "WORD;;Source network object group name";
+          }
+        }
+      }
+    }
+    choice src-port-choice {
+      case src-eq-case {
+        leaf src-udp-eq {
+          tailf:alt-name "eq";
+          tailf:info "Match only packets on a given port number";
+          description
+            "Match only packets on a given port number";
+          tailf:cli-optional-in-sequence;
+          when "../../../udp";
+          type acl-udp-port-type;
+        }
+        leaf src-tcp-eq {
+          tailf:alt-name "eq";
+          tailf:info "Match only packets on a given port number";
+          description
+            "Match only packets on a given port number";
+          tailf:cli-optional-in-sequence;
+          when "../../../tcp";
+          type acl-tcp-port-type;
+        }
+      }
+      case src-gt-case {
+        leaf src-udp-gt {
+          tailf:alt-name "gt";
+          tailf:info "Match only packets with a greater port number";
+          description
+            "Match only packets with a greater port number";
+          tailf:cli-optional-in-sequence;
+          when "../../../udp";
+          type acl-udp-port-type;
+        }
+        leaf src-tcp-gt {
+          tailf:alt-name "gt";
+          tailf:info "Match only packets with a greater port number";
+          description
+            "Match only packets with a greater port number";
+          tailf:cli-optional-in-sequence;
+          when "../../../tcp";
+          type acl-tcp-port-type;
+        }
+      }
+      case src-lt-case {
+        leaf src-udp-lt {
+          tailf:alt-name "lt";
+          tailf:info "Match only packets with a lower port number";
+          description
+            "Match only packets with a lower port number";
+          tailf:cli-optional-in-sequence;
+          when "../../../udp";
+          type acl-udp-port-type;
+        }
+        leaf src-tcp-lt {
+          tailf:alt-name "lt";
+          tailf:info "Match only packets with a lower port number";
+          description
+            "Match only packets with a lower port number";
+          tailf:cli-optional-in-sequence;
+          when "../../../tcp";
+          type acl-tcp-port-type;
+        }
+      }
+      case src-neq-case {
+        leaf src-udp-neq {
+          tailf:alt-name "neq";
+          tailf:info "Match only packets not on a given port number";
+          description
+            "Match only packets not on a given port number";
+          tailf:cli-optional-in-sequence;
+          when "../../../udp";
+          type acl-udp-port-type;
+        }
+        leaf src-tcp-neq {
+          tailf:alt-name "neq";
+          tailf:info "Match only packets not on a given port number";
+          description
+            "Match only packets not on a given port number";
+          tailf:cli-optional-in-sequence;
+          when "../../../tcp";
+          type acl-tcp-port-type;
+        }
+      }
+    }
+    choice destination-choice {
+      case ipv4-prefix-case {
+        leaf dest-ipv4-address {
+          tailf:cli-drop-node-name;
+          tailf:cli-incomplete-command;
+          mandatory true;
+          type inet:ipv4-address {
+            tailf:info "A.B.C.D;;Destination address";
+          }
+        }
+        leaf dest-mask {
+          tailf:cli-drop-node-name;
+          mandatory true;
+          type inet:ipv4-address {
+            tailf:info "A.B.C.D;;Destination wildcard bits";
+          }
+        }
+      }
+      case any-case {
+        leaf dst-any {
+          tailf:alt-name "any";
+          tailf:info "Any destination host";
+          description
+            "Any destination host";
+          type empty;
+        }
+      }
+      case host-case {
+        leaf dst-host {
+          tailf:alt-name "host";
+          tailf:info "A single destination host";
+          description
+            "A single destination host";
+          type ipv4-host-type {
+            tailf:info "Hostname or A.B.C.D;;Destination address";
+          }
+        }
+      }
+      case object-group-case {
+        leaf dst-object-group {
+          tailf:alt-name "object-group";
+          tailf:info "Destination network object group";
+          description
+            "Destination network object group";
+          type string {
+            tailf:info "WORD;;Destination network object group name";
+          }
+        }
+      }
+    }
+  }
+
+  grouping ipv4-source-destination-proto-num-main-grouping {
+    choice source-choice {
+      case ipv4-prefix-case {
+        leaf ipv4-address {
+          tailf:cli-drop-node-name;
+          tailf:cli-incomplete-command;
+          mandatory true;
+          type inet:ipv4-address {
+            tailf:info "A.B.C.D;;Source address";
+          }
+        }
+        leaf mask {
+          mandatory true;
+          tailf:cli-drop-node-name;
+          tailf:cli-incomplete-command;
+          type inet:ipv4-address {
+            tailf:info "A.B.C.D;;Source wildcard bits";
+          }
+        }
+      }
+      case any-case {
+        leaf any {
+          tailf:cli-incomplete-command;
+          tailf:info "Any source host";
+          description
+            "Any source host";
+          type empty;
+        }
+      }
+      case host-case {
+        leaf host {
+          tailf:info "A single source host";
+          description
+            "A single source host";
+          tailf:cli-incomplete-command;
+          type ipv4-host-type {
+            tailf:info "Hostname or A.B.C.D;;Source address";
+          }
+        }
+      }
+      case object-group-case {
+        leaf object-group {
+          tailf:cli-incomplete-command;
+          tailf:info "Source network object group";
+          description
+            "Source network object group";
+          type string {
+            tailf:info "WORD;;Source network object group name";
+          }
+        }
+      }
+    }
+    choice src-port-choice {
+      case src-eq-case {
+        leaf src-udp-eq {
+          tailf:alt-name "eq";
+          tailf:info "Match only packets on a given port number";
+          description
+            "Match only packets on a given port number";
+          tailf:cli-optional-in-sequence;
+          when "../../number = 17";
+          type acl-udp-port-type;
+        }
+        leaf src-tcp-eq {
+          tailf:alt-name "eq";
+          tailf:info "Match only packets on a given port number";
+          description
+            "Match only packets on a given port number";
+          tailf:cli-optional-in-sequence;
+          when "../../number = 6";
+          type acl-tcp-port-type;
+        }
+      }
+      case src-gt-case {
+        leaf src-udp-gt {
+          tailf:alt-name "gt";
+          tailf:info "Match only packets with a greater port number";
+          description
+            "Match only packets with a greater port number";
+          tailf:cli-optional-in-sequence;
+          when "../../number = 17";
+          type acl-udp-port-type;
+        }
+        leaf src-tcp-gt {
+          tailf:alt-name "gt";
+          tailf:info "Match only packets with a greater port number";
+          description
+            "Match only packets with a greater port number";
+          tailf:cli-optional-in-sequence;
+          when "../../number = 6";
+          type acl-tcp-port-type;
+        }
+      }
+      case src-lt-case {
+        leaf src-udp-lt {
+          tailf:alt-name "lt";
+          tailf:info "Match only packets with a lower port number";
+          description
+            "Match only packets with a lower port number";
+          tailf:cli-optional-in-sequence;
+          when "../../number = 17";
+          type acl-udp-port-type;
+        }
+        leaf src-tcp-lt {
+          tailf:alt-name "lt";
+          tailf:info "Match only packets with a lower port number";
+          description
+            "Match only packets with a lower port number";
+          tailf:cli-optional-in-sequence;
+          when "../../number = 6";
+          type acl-tcp-port-type;
+        }
+      }
+      case src-neq-case {
+        leaf src-udp-neq {
+          tailf:alt-name "neq";
+          tailf:info "Match only packets not on a given port number";
+          description
+            "Match only packets not on a given port number";
+          tailf:cli-optional-in-sequence;
+          when "../../number = 17";
+          type acl-udp-port-type;
+        }
+        leaf src-tcp-neq {
+          tailf:alt-name "neq";
+          tailf:info "Match only packets not on a given port number";
+          description
+            "Match only packets not on a given port number";
+          tailf:cli-optional-in-sequence;
+          when "../../number = 6";
+          type acl-tcp-port-type;
+        }
+      }
+    }
+    choice destination-choice {
+      case ipv4-prefix-case {
+        leaf dest-ipv4-address {
+          tailf:cli-drop-node-name;
+          tailf:cli-incomplete-command;
+          mandatory true;
+          type inet:ipv4-address {
+            tailf:info "A.B.C.D;;Destination address";
+          }
+        }
+        leaf dest-mask {
+          tailf:cli-drop-node-name;
+          mandatory true;
+          type inet:ipv4-address {
+            tailf:info "A.B.C.D;;Destination wildcard bits";
+          }
+        }
+      }
+      case any-case {
+        leaf dst-any {
+          tailf:alt-name "any";
+          tailf:info "Any destination host";
+          description
+            "Any destination host";
+          type empty;
+        }
+      }
+      case host-case {
+        leaf dst-host {
+          tailf:alt-name "host";
+          tailf:info "A single destination host";
+          description
+            "A single destination host";
+          type ipv4-host-type {
+            tailf:info "Hostname or A.B.C.D;;Destination address";
+          }
+        }
+      }
+      case object-group-case {
+        leaf dst-object-group {
+          tailf:alt-name "object-group";
+          tailf:info "Destination network object group";
+          description
+            "Destination network object group";
+          type string {
+            tailf:info "WORD;;Destination network object group name";
+          }
+        }
+      }
+    }
+  }
+
+  grouping ipv6-source-grouping {
+    container source {
+      tailf:cli-drop-node-name;
+      tailf:cli-incomplete-command;
+      tailf:cli-flatten-container;
+      choice source-choice {
+        case ipv6-prefix {
+          leaf ipv6-prefix {
+            tailf:cli-drop-node-name;
+            type ipv6-prefix {
+              tailf:info "X:X:X:X::X/<0-128>;;IPv6 source prefix x:x::y/<z>";
+            }
+          }
+        }
+        case any-case {
+          leaf any {
+            tailf:info "Any source prefix";
+            description
+              "Any source prefix";
+            tailf:cli-incomplete-command;
+            type empty;
+          }
+        }
+        case host-case {
+          leaf host {
+            tailf:info "A single source host";
+            description
+              "A single source host";
+            tailf:cli-incomplete-command;
+            type inet:ipv6-address {
+              tailf:info "X:X:X:X::X;;IPv6 source address x:x::y";
+            }
+          }
+        }
+      }
+    }
+  }
+
+  grouping ipv6-destination-grouping {
+    container destination {
+      tailf:cli-drop-node-name;
+      tailf:cli-flatten-container;
+      choice destination-choice {
+        case ipv6-prefix-case {
+          leaf ipv6-prefix {
+            tailf:cli-drop-node-name;
+            type ipv6-prefix {
+              tailf:info "X:X:X:X::X/<0-128>;;IPv6 destination prefix x:x::y/<z>";
+            }
+          }
+        }
+        case any-case {
+          leaf any {
+            tailf:info "Any destination prefix";
+            description
+              "Any destination prefix";
+            type empty;
+          }
+        }
+        case host-case {
+          leaf host {
+            tailf:info "A single destination host";
+            description
+              "A single destination host";
+            type inet:ipv6-address {
+              tailf:info "X:X:X:X::X;;IPv6 destination address x:x::y";
+            }
+          }
+        }
+      }
+    }
+  }
+
+  grouping ipv6-source-destination-proto-num-grouping {
+    container source-destination {
+      tailf:cli-drop-node-name;
+      tailf:cli-flatten-container;
+      tailf:cli-sequence-commands;
+      uses ipv6-source-grouping;
+      uses ipv6-destination-grouping;
+      uses ipv6-acl-match-proto-num-attribute;
+    }
+  }
+
+  grouping ipv6-source-destination-match-grouping {
+    container source-destination-match {
+      tailf:cli-drop-node-name;
+      tailf:cli-flatten-container;
+      tailf:cli-sequence-commands;
+      uses ipv6-source-grouping;
+      uses ipv6-destination-grouping;
+      uses ipv6-acl-match-attribute;
+    }
+  }
+
+  grouping ipv6-source-destination-grouping {
+    container source-destination-match {
+      tailf:cli-drop-node-name;
+      tailf:cli-flatten-container;
+      tailf:cli-sequence-commands;
+      uses ipv6-source-grouping;
+      uses ipv6-destination-grouping;
+      container acl-match-attribute {
+        tailf:cli-drop-node-name;
+        tailf:cli-flatten-container;
+        tailf:cli-optional-in-sequence;
+        uses ipv6-acl-match-common-attribute;
+      }
+    }
+  }
+
+  grouping ipv4-source-destination-proto-num-grouping {
+    container source-destination-match {
+      tailf:cli-drop-node-name;
+      tailf:cli-flatten-container;
+      tailf:cli-sequence-commands;
+      tailf:cli-compact-syntax;
+      uses ipv4-source-destination-proto-num-main-grouping;
+      uses ipv4-acl-match-proto-num-attribute;
+    }
+  }
+
+  grouping ipv4-source-destination-match-grouping {
+    container source-destination-match {
+      tailf:cli-drop-node-name;
+      tailf:cli-flatten-container;
+      tailf:cli-sequence-commands;
+      tailf:cli-compact-syntax;
+      uses ipv4-source-destination-main-grouping;
+      uses ipv4-acl-match-attribute;
+    }
+  }
+
+  grouping ipv4-ext-acl-protocol-grouping {
+    container acl-protocol {
+      tailf:cli-drop-node-name;
+      tailf:cli-flatten-container;
+      tailf:cli-compact-syntax;
+      choice acl-protocol-choice {
+        case protocol-number-case {
+          container protocol-number {
+            tailf:cli-drop-node-name;
+            tailf:cli-sequence-commands;
+            tailf:cli-compact-syntax;
+            leaf number {
+              tailf:cli-drop-node-name;
+              type string {
+                tailf:info "<0-255>;;An IP protocol number";
+              }
+            }
+            uses ipv4-source-destination-proto-num-grouping;
+          }
+        }
+        case object-group-case {
+          container object-group-container {
+            tailf:cli-drop-node-name;
+            tailf:cli-sequence-commands;
+            tailf:cli-compact-syntax;
+            leaf object-group {
+              tailf:info "Service object group";
+              description
+                "Service object group";
+              type string {
+                tailf:info "WORD;;Service object group name";
+              }
+            }
+            uses ipv4-source-destination-match-grouping;
+          }
+        }
+        case ahp-case {
+          container ahp {
+            tailf:cli-compact-syntax;
+            tailf:info "Authentication Header Protocol";
+            description
+              "Authentication Header Protocol";
+            uses ipv4-source-destination-match-grouping;
+          }
+        }
+        case eigrp-case {
+          container eigrp {
+            tailf:cli-compact-syntax;
+            tailf:info "Cisco's EIGRP routing protocol";
+            description
+              "Cisco's EIGRP routing protocol";
+            uses ipv4-source-destination-match-grouping;
+          }
+        }
+        case esp-case {
+          container esp {
+            tailf:cli-compact-syntax;
+            tailf:info "Encapsulation Security Payload";
+            description
+              "Encapsulation Security Payload";
+            uses ipv4-source-destination-match-grouping;
+          }
+        }
+        case gre-case {
+          container gre {
+            tailf:cli-compact-syntax;
+            tailf:info "Cisco's GRE tunneling";
+            description
+              "Cisco's GRE tunneling";
+            uses ipv4-source-destination-match-grouping;
+          }
+        }
+        case icmp-case {
+          container icmp {
+            tailf:cli-compact-syntax;
+            tailf:info "Internet Control Message Protocol";
+            description
+              "Internet Control Message Protocol";
+            uses ipv4-source-destination-match-grouping;
+          }
+        }
+        case igmp-case {
+          container igmp {
+            tailf:cli-compact-syntax;
+            tailf:info "Internet Gateway Message Protocol";
+            description
+              "Internet Gateway Message Protocol";
+            uses ipv4-source-destination-match-grouping;
+          }
+        }
+        case ip-case {
+          container ip {
+            tailf:cli-compact-syntax;
+            tailf:info "Any Internet Protocol";
+            description
+              "Any Internet Protocol";
+            uses ipv4-source-destination-match-grouping;
+          }
+        }
+        case ipinip-case {
+          container ipinip {
+            tailf:cli-compact-syntax;
+            tailf:info "IP in IP tunneling";
+            description
+              "IP in IP tunneling";
+            uses ipv4-source-destination-match-grouping;
+          }
+        }
+        case nos-case {
+          container nos {
+            tailf:cli-compact-syntax;
+            tailf:info "KA9Q NOS compatible IP over IP tunneling";
+            description
+              "KA9Q NOS compatible IP over IP tunneling";
+            uses ipv4-source-destination-match-grouping;
+          }
+        }
+        case ospf-case {
+          container ospf {
+            tailf:cli-compact-syntax;
+            tailf:info "OSPF routing protocol";
+            description
+              "OSPF routing protocol";
+            uses ipv4-source-destination-match-grouping;
+          }
+        }
+        case pcp-case {
+          container pcp {
+            tailf:cli-compact-syntax;
+            tailf:info "Payload Compression Protocol";
+            description
+              "Payload Compression Protocol";
+            uses ipv4-source-destination-match-grouping;
+          }
+        }
+        case pim-case {
+          container pim {
+            tailf:cli-compact-syntax;
+            tailf:info "Protocol Independent Multicast";
+            description
+              "Protocol Independent Multicast";
+            uses ipv4-source-destination-match-grouping;
+          }
+        }
+        case tcp-case {
+          container tcp {
+            tailf:cli-compact-syntax;
+            tailf:info "Transmission Control Protocol";
+            description
+              "Transmission Control Protocol";
+            uses ipv4-source-destination-match-grouping;
+          }
+        }
+        case udp-case {
+          container udp {
+            tailf:cli-compact-syntax;
+            tailf:info "Datagram Protocol";
+            description
+              "Datagram Protocol";
+            uses ipv4-source-destination-match-grouping;
+          }
+        }
+      }
+    }
+  }
+
+  grouping ipv6-acl-protocol-grouping {
+    container acl-protocol {
+      tailf:cli-drop-node-name;
+      tailf:cli-flatten-container;
+      uses ipv6-source-destination-grouping;
+      choice acl-protocol-choice {
+        case protocol-number-case {
+          container protocol-number {
+            tailf:cli-drop-node-name;
+            tailf:cli-sequence-commands;
+            leaf number {
+              tailf:cli-drop-node-name;
+              type uint8 {
+                tailf:info "<0-255>;;An IPv6 protocol number";
+              }
+            }
+            uses ipv6-source-destination-proto-num-grouping;
+          }
+        }
+        case ahp-case {
+          container ahp {
+            tailf:info "Authentication Header Protocol";
+            description
+              "Authentication Header Protocol";
+            uses ipv6-source-destination-match-grouping;
+          }
+        }
+        case esp-case {
+          container esp {
+            tailf:info "Encapsulation Security Payload";
+            description
+              "Encapsulation Security Payload";
+            uses ipv6-source-destination-match-grouping;
+          }
+        }
+        case hbh-case {
+          container hbh {
+            tailf:info "Hop by Hop options header";
+            description
+              "Hop by Hop options header";
+            uses ipv6-source-destination-match-grouping;
+          }
+        }
+        case icmp-case {
+          container icmp {
+            tailf:info "Internet Control Message Protocol";
+            description
+              "Internet Control Message Protocol";
+            uses ipv6-source-destination-match-grouping;
+          }
+        }
+        case ipv6-case {
+          container ipv6 {
+            tailf:info "Any IPv6";
+            description
+              "Any IPv6";
+            uses ipv6-source-destination-match-grouping;
+          }
+        }
+        case pcp-case {
+          container pcp {
+            tailf:info "Payload Compression Protocol";
+            description
+              "Payload Compression Protocol";
+            uses ipv6-source-destination-match-grouping;
+          }
+        }
+        case sctp-case {
+          container sctp {
+            tailf:info "Streams Control Transmission Protocol";
+            description
+              "Streams Control Transmission Protocol";
+            uses ipv6-source-destination-match-grouping;
+          }
+        }
+        case tcp-case {
+          container tcp {
+            tailf:info "Transmission Control Protocol";
+            description
+              "Transmission Control Protocol";
+            uses ipv6-source-destination-match-grouping;
+          }
+        }
+        case udp-case {
+          container udp {
+            tailf:info "Datagram Protocol";
+            description
+              "Datagram Protocol";
+            uses ipv6-source-destination-match-grouping;
+          }
+        }
+      }
+    }
+  }
+
+  grouping acl-remark-grouping {
+    leaf remark {
+      tailf:info "Access list entry comment";
+      description
+        "Access list entry comment";
+      tailf:cli-hide-in-submode;
+      tailf:cli-multi-value;
+      type string {
+        tailf:info "LINE  Comment up to 100 characters";
+        length "1..100";
+      }
+    }
+  }
+
+  grouping ipv6-acl-grouping {
+    list access-list-seq-rule {
+      tailf:cli-suppress-mode;
+      tailf:cli-delete-when-empty;
+      tailf:cli-drop-node-name;
+      tailf:cli-show-long-obu-diffs;
+      ordered-by user;
+      key "sequence";
+      leaf sequence {
+        tailf:info "Sequence number for this entry";
+        description
+          "Sequence number for this entry";
+        tailf:cli-expose-key-name;
+        tailf:cli-incomplete-command;
+        type uint64 {
+          tailf:info "<1-4294967294>;;Sequence number for this entry";
+          range "1..4294967294";
+        }
+      }
+      choice deny-permit {
+        container deny {
+          presence "";
+          tailf:info "Specify packets to reject";
+          description
+            "Specify packets to reject";
+          tailf:cli-hide-in-submode;
+          uses ipv6-acl-protocol-grouping;
+        }
+        container permit {
+          presence "";
+          tailf:info "Specify packets to forward";
+          description
+            "Specify packets to forward";
+          tailf:cli-hide-in-submode;
+          uses ipv6-acl-protocol-grouping;
+        }
+      }
+      uses acl-remark-grouping;
+    }
+  }
+
+  grouping ipv4-std-acl-grouping {
+    list access-list-seq-rule {
+      tailf:cli-suppress-mode;
+      tailf:cli-delete-when-empty;
+      tailf:cli-drop-node-name;
+      tailf:cli-show-long-obu-diffs;
+      key "sequence";
+      leaf sequence {
+        tailf:cli-incomplete-command;
+        type uint64 {
+          tailf:info "<1-2147483647>;;Sequence Number";
+          range "1..2147483647";
+        }
+      }
+      choice deny-permit {
+        container deny {
+          tailf:info "Specify packets to reject";
+          description
+            "Specify packets to reject";
+          uses ipv4-std-ace-grouping;
+        }
+        container permit {
+          tailf:info "Specify packets to forward";
+          description
+            "Specify packets to forward";
+          uses ipv4-std-ace-grouping;
+        }
+      }
+    }
+  }
+
+  grouping ipv4-std-acl-remark-grouping {
+    list access-list-remark-seq-rule {
+      tailf:cli-suppress-mode;
+      tailf:cli-delete-when-empty;
+      tailf:cli-drop-node-name;
+      tailf:cli-show-long-obu-diffs;
+      key "sequence";
+      leaf sequence {
+        tailf:cli-incomplete-command;
+        type uint64 {
+          tailf:info "<1-2147483647>;;Sequence Number";
+          range "1..2147483647";
+        }
+      }
+    }
+  }
+
+  grouping ipv4-ext-acl-grouping {
+    list access-list-seq-rule {
+      tailf:cli-suppress-mode;
+      tailf:cli-delete-when-empty;
+      tailf:cli-drop-node-name;
+      tailf:cli-show-long-obu-diffs;
+      key "sequence";
+      leaf sequence {
+        tailf:cli-incomplete-command;
+        type uint64 {
+          tailf:info "<1-2147483647>;;Sequence Number";
+          range "1..2147483647";
+        }
+      }
+      choice deny-permit {
+        container deny {
+          tailf:info "Specify packets to reject";
+          description
+            "Specify packets to reject";
+          uses ipv4-ext-acl-protocol-grouping;
+        }
+        container permit {
+          tailf:info "Specify packets to forward";
+          description
+            "Specify packets to forward";
+          uses ipv4-ext-acl-protocol-grouping;
+        }
+      }
+    }
+  }
+
+  grouping ipv4-ext-acl-remark-grouping {
+    list access-list-remark-seq-rule {
+      tailf:cli-suppress-mode;
+      tailf:cli-delete-when-empty;
+      tailf:cli-drop-node-name;
+      tailf:cli-show-long-obu-diffs;
+      key "sequence";
+      leaf sequence {
+        tailf:cli-incomplete-command;
+        type uint64 {
+          tailf:info "<1-2147483647>;;Sequence Number";
+          range "1..2147483647";
+        }
+      }
+      uses acl-remark-grouping;
+    }
+  }
+
+  grouping flow-name-grouping {
+    container name {
+      tailf:info "Application name";
+      description
+        "Application name";
+      presence "true";
+      leaf account-on-resolution {
+        tailf:info "Account on resolution";
+        description
+          "Account on resolution";
+        type empty;
+      }
+    }
+  }
+
+  grouping flow-vendor-version-grouping {
+    leaf vendor {
+      tailf:info "Application vendor id";
+      description
+        "Application vendor id";
+      tailf:cli-full-command;
+      type empty;
+    }
+    leaf version {
+      tailf:info "Application version id";
+      description
+        "Application version id";
+      tailf:cli-full-command;
+      type empty;
+    }
+  }
+
+  grouping flow-client-ipv4-ipv6-transport-grouping {
+    container ipv4 {
+      tailf:info "Client side IPv4 metrics";
+      description
+        "Client side IPv4 metrics";
+      leaf address {
+        tailf:info "IPv4 address of the flow initiator";
+        description
+          "IPv4 address of the flow initiator";
+        tailf:cli-full-command;
+        type empty;
+      }
+    }
+    container ipv6 {
+      tailf:info "Client side IPv6 metrics";
+      description
+        "Client side IPv6 metrics";
+      leaf address {
+        tailf:info "IPv6 address of the flow initiator";
+        description
+          "IPv6 address of the flow initiator";
+        tailf:cli-full-command;
+        type empty;
+      }
+    }
+    container transport {
+      tailf:info "Client side transport metrics";
+      description
+        "Client side transport metrics";
+      leaf port {
+        tailf:info "Transport port of the flow initiator";
+        description
+          "Transport port of the flow initiator";
+        tailf:cli-full-command;
+        type empty;
+      }
+    }
+  }
+
+  grouping flow-server-ipv4-ipv6-transport-grouping {
+    container ipv4 {
+      tailf:info "Server side IPv4 metrics";
+      description
+        "Server side IPv4 metrics";
+      leaf address {
+        tailf:info "IPv4 address of the flow responder";
+        description
+          "IPv4 address of the flow responder";
+        tailf:cli-full-command;
+        type empty;
+      }
+    }
+    container ipv6 {
+      tailf:info "Server side IPv6 metrics";
+      description
+        "Server side IPv6 metrics";
+      leaf address {
+        tailf:info "IPv6 address of the flow responder";
+        description
+          "IPv6 address of the flow responder";
+        tailf:cli-full-command;
+        type empty;
+      }
+    }
+    container transport {
+      tailf:info "Server side transport metrics";
+      description
+        "Server side transport metrics";
+      leaf port {
+        tailf:info "Transport port of the flow responder";
+        description
+          "Transport port of the flow responder";
+        tailf:cli-full-command;
+        type empty;
+      }
+    }
+  }
+
+  grouping flow-transaction-id-grouping {
+    leaf transaction-id {
+      tailf:info "An identifier for a transaction between client and server";
+      description
+        "An identifier for a transaction between client and server";
+      tailf:cli-full-command;
+      type empty;
+    }
+  }
+
+  grouping flow-id-initiator-grouping {
+    leaf id {
+      tailf:info "An identifier for a connection between client and server";
+      description
+        "An identifier for a connection between client and server";
+      tailf:cli-full-command;
+      type empty;
+    }
+    leaf initiator {
+      tailf:info "The direction of the flow";
+      description
+        "The direction of the flow";
+      tailf:cli-full-command;
+      type empty;
+    }
+  }
+
+  grouping flow-datalink-grouping {
+    leaf destination-vlan-id {
+      tailf:info "ID of the VLAN that the packet is going to";
+      description
+        "ID of the VLAN that the packet is going to";
+      tailf:cli-full-command;
+      type empty;
+    }
+    container mac {
+      tailf:info "MAC fields";
+      description
+        "MAC fields";
+      container destination {
+        tailf:info "destination MAC fields";
+        description
+          "destination MAC fields";
+        container address {
+          tailf:info "Destination MAC address from packet";
+          description
+            "Destination MAC address from packet";
+          leaf input {
+            tailf:info "Destination MAC address from packet at input";
+            description
+              "Destination MAC address from packet at input";
+            tailf:cli-full-command;
+            type empty;
+          }
+          leaf output {
+            tailf:info "Destination MAC address from packet at output";
+            description
+              "Destination MAC address from packet at output";
+            tailf:cli-full-command;
+            type empty;
+          }
+        }
+      }
+      container source {
+        tailf:info "source MAC fields";
+        description
+          "source MAC fields";
+        container address {
+          tailf:info "Source MAC address from packet";
+          description
+            "Source MAC address from packet";
+          leaf input {
+            tailf:info "Source MAC address from packet at input";
+            description
+              "Source MAC address from packet at input";
+            tailf:cli-full-command;
+            type empty;
+          }
+          leaf output {
+            tailf:info "Source MAC address from packet at output";
+            description
+              "Source MAC address from packet at output";
+            tailf:cli-full-command;
+            type empty;
+          }
+        }
+      }
+    }
+    leaf source-vlan-id {
+      tailf:info "ID of the VLAN that the packet came from";
+      description
+        "ID of the VLAN that the packet came from";
+      tailf:cli-full-command;
+      type empty;
+    }
+  }
+
+  grouping flow-flow-common-grouping {
+    container cts {
+      tailf:info "Cisco Trusted Security fields";
+      description
+        "Cisco Trusted Security fields";
+      container destination {
+        tailf:info "Cisco Trusted Security destination fields";
+        description
+          "Cisco Trusted Security destination fields";
+        leaf group-tag {
+          tailf:info "destination group-tag";
+          description
+            "destination group-tag";
+          type empty;
+        }
+      }
+      container source {
+        tailf:info "Cisco Trusted Security source fields";
+        description
+          "Cisco Trusted Security source fields";
+        leaf group-tag {
+          tailf:info "source group-tag";
+          description
+            "source group-tag";
+          type empty;
+        }
+      }
+    }
+    leaf direction {
+      tailf:info "Direction the flow was monitored in";
+      description
+        "Direction the flow was monitored in";
+      tailf:cli-full-command;
+      type empty;
+    }
+    container observation {
+      tailf:info "Flow observation metrics";
+      description
+        "Flow observation metrics";
+      leaf point {
+        tailf:info "Observation point ID";
+        description
+          "Observation point ID";
+        type empty;
+      }
+    }
+    leaf sampler {
+      tailf:info "ID of the sampler";
+      description
+        "ID of the sampler";
+      tailf:cli-full-command;
+      type empty;
+    }
+  }
+
+  grouping flow-interface-grouping {
+    container input {
+      tailf:info "The input interface";
+      description
+        "The input interface";
+      presence "true";
+      leaf snmp {
+        tailf:info "SNMP Index of the input interface";
+        description
+          "SNMP Index of the input interface";
+        type empty;
+      }
+    }
+    container output {
+      tailf:info "The output interface";
+      description
+        "The output interface";
+      presence "true";
+      leaf snmp {
+        tailf:info "SNMP Index of the output interface";
+        description
+          "SNMP Index of the output interface";
+        type empty;
+      }
+    }
+  }
+
+  grouping flow-ipv4-grouping {
+    container destination {
+      tailf:info "IPv4 destination address based fields";
+      description
+        "IPv4 destination address based fields";
+      leaf address {
+        tailf:info "IPv4 destination address";
+        description
+          "IPv4 destination address";
+        tailf:cli-full-command;
+        type empty;
+      }
+      container mask {
+        tailf:info "IPv4 address mask for the IPv4 destination address";
+        description
+          "IPv4 address mask for the IPv4 destination address";
+        presence "true";
+        leaf minimum-mask {
+          tailf:info "Provide a minimum mask for this field";
+          description
+            "Provide a minimum mask for this field";
+          type uint8 {
+            tailf:info "<1-32>;;Specify optional minimum mask";
+            range "1..32";
+          }
+        }
+      }
+      container prefix {
+        tailf:info "IPv4 address prefix for the IPv4 destination address";
+        description
+          "IPv4 address prefix for the IPv4 destination address";
+        presence "true";
+        leaf minimum-mask {
+          tailf:info "Provide a minimum mask for this field";
+          description
+            "Provide a minimum mask for this field";
+          type uint8 {
+            tailf:info "<1-32>;;Specify optional minimum mask";
+            range "1..32";
+          }
+        }
+      }
+    }
+    leaf dscp {
+      tailf:info "IPv4 DSCP (part of TOS)";
+      description
+        "IPv4 DSCP (part of TOS)";
+      tailf:cli-full-command;
+      type empty;
+    }
+    container fragmentation {
+      tailf:info "IPv4 fragmentation fields";
+      description
+        "IPv4 fragmentation fields";
+      leaf flags {
+        tailf:info "IPv4 fragmentation flags";
+        description
+          "IPv4 fragmentation flags";
+        tailf:cli-full-command;
+        type empty;
+      }
+      leaf offset {
+        tailf:info "IPv4 fragmentation offset";
+        description
+          "IPv4 fragmentation offset";
+        tailf:cli-full-command;
+        type empty;
+      }
+    }
+    leaf header-length {
+      tailf:info "IPv4 header length (IHL in 32 bit words)";
+      description
+        "IPv4 header length (IHL in 32 bit words)";
+      tailf:cli-full-command;
+      type empty;
+    }
+    leaf id {
+      tailf:info "IPv4 ID";
+      description
+        "IPv4 ID";
+      tailf:cli-full-command;
+      type empty;
+    }
+    container length {
+      tailf:info "IPv4 length fields";
+      description
+        "IPv4 length fields";
+      leaf header {
+        tailf:info "Length of the IPv4 header in bytes";
+        description
+          "Length of the IPv4 header in bytes";
+        tailf:cli-full-command;
+        type empty;
+      }
+      leaf payload {
+        tailf:info "Length of the IPv4 payload in bytes";
+        description
+          "Length of the IPv4 payload in bytes";
+        tailf:cli-full-command;
+        type empty;
+      }
+      container total {
+        tailf:info "Total length of the IPv4 header and payload in bytes";
+        description
+          "Total length of the IPv4 header and payload in bytes";
+        presence "true";
+        leaf maximum {
+          tailf:info "Maximum total length in bytes";
+          description
+            "Maximum total length in bytes";
+          tailf:cli-full-command;
+          type empty;
+        }
+        leaf minimum {
+          tailf:info "Minimum total length in bytes";
+          description
+            "Minimum total length in bytes";
+          tailf:cli-full-command;
+          type empty;
+        }
+      }
+    }
+    container option {
+      tailf:info "IPv4 option fields";
+      description
+        "IPv4 option fields";
+      leaf map {
+        tailf:info "Bitmap of IPv4 options";
+        description
+          "Bitmap of IPv4 options";
+        tailf:cli-full-command;
+        type empty;
+      }
+    }
+    leaf precedence {
+      tailf:info "IPv4 precedence (part of TOS)";
+      description
+        "IPv4 precedence (part of TOS)";
+      tailf:cli-full-command;
+      type empty;
+    }
+    leaf protocol {
+      tailf:info "IPv4 protocol";
+      description
+        "IPv4 protocol";
+      tailf:cli-full-command;
+      type empty;
+    }
+    container section {
+      tailf:info "Part of the packet";
+      description
+        "Part of the packet";
+      container header {
+        tailf:info "Raw data starting at the IPv4 header";
+        description
+          "Raw data starting at the IPv4 header";
+        leaf size {
+          tailf:info "Specify the number of bytes to capture";
+          description
+            "Specify the number of bytes to capture";
+          type uint16 {
+            tailf:info "<1-1200>;;Number of bytes to capture";
+            range "1..1200";
+          }
+        }
+      }
+      container payload {
+        tailf:info "Raw data starting at the IPv4 payload";
+        description
+          "Raw data starting at the IPv4 payload";
+        leaf size {
+          tailf:info "Specify the number of bytes to capture";
+          description
+            "Specify the number of bytes to capture";
+          type uint16 {
+            tailf:info "<1-1200>;;Number of bytes to capture";
+            range "1..1200";
+          }
+        }
+      }
+    }
+    container source {
+      tailf:info "IPv4 source address based fields";
+      description
+        "IPv4 source address based fields";
+      leaf address {
+        tailf:info "IPv4 source address";
+        description
+          "IPv4 source address";
+        tailf:cli-full-command;
+        type empty;
+      }
+      container mask {
+        tailf:info "IPv4 address mask for the IPv4 source address";
+        description
+          "IPv4 address mask for the IPv4 source address";
+        presence "true";
+        leaf minimum-mask {
+          tailf:info "Provide a minimum mask for this field";
+          description
+            "Provide a minimum mask for this field";
+          type uint8 {
+            tailf:info "<1-32>;;Specify optional minimum mask";
+            range "1..32";
+          }
+        }
+      }
+      container prefix {
+        tailf:info "IPv4 address prefix for the IPv4 source address";
+        description
+          "IPv4 address prefix for the IPv4 source address";
+        presence "true";
+        leaf minimum-mask {
+          tailf:info "Provide a minimum mask for this field";
+          description
+            "Provide a minimum mask for this field";
+          type uint8 {
+            tailf:info "<1-32>;;Specify optional minimum mask";
+            range "1..32";
+          }
+        }
+      }
+    }
+    leaf tos {
+      tailf:info "IPv4 type of service";
+      description
+        "IPv4 type of service";
+      tailf:cli-full-command;
+      type empty;
+    }
+    container total-length {
+      tailf:info "IPv4 total length";
+      description
+        "IPv4 total length";
+      presence "true";
+      leaf maximum {
+        tailf:info "Largest value for IPv4 length seen in the flow";
+        description
+          "Largest value for IPv4 length seen in the flow";
+        tailf:cli-full-command;
+        type empty;
+      }
+      leaf minimum {
+        tailf:info "Smallest value for IPv4 length seen in the flow";
+        description
+          "Smallest value for IPv4 length seen in the flow";
+        tailf:cli-full-command;
+        type empty;
+      }
+    }
+    container ttl {
+      tailf:info "IPv4 TTL";
+      description
+        "IPv4 TTL";
+      presence "true";
+      leaf maximum {
+        tailf:info "Largest value seen for TTL in the flow";
+        description
+          "Largest value seen for TTL in the flow";
+        tailf:cli-full-command;
+        type empty;
+      }
+      leaf minimum {
+        tailf:info "Smallest value seen for TTL in the flow";
+        description
+          "Smallest value seen for TTL in the flow";
+        tailf:cli-full-command;
+        type empty;
+      }
+    }
+    leaf version {
+      tailf:info "IP version from IPv4 header";
+      description
+        "IP version from IPv4 header";
+      tailf:cli-full-command;
+      type empty;
+    }
+  }
+
+  grouping flow-ipv6-grouping {
+    container destination {
+      tailf:info "IPv6 destination address based fields";
+      description
+        "IPv6 destination address based fields";
+      leaf address {
+        tailf:info "IPv6 destination address";
+        description
+          "IPv6 destination address";
+        tailf:cli-full-command;
+        type empty;
+      }
+      container mask {
+        tailf:info "IPv6 address mask for the IPv6 destination address";
+        description
+          "IPv6 address mask for the IPv6 destination address";
+        presence "true";
+        leaf minimum-mask {
+          tailf:info "Provide a minimum mask for this field";
+          description
+            "Provide a minimum mask for this field";
+          type uint8 {
+            tailf:info "<1-128>;;Specify optional minimum mask";
+            range "1..128";
+          }
+        }
+      }
+      container prefix {
+        tailf:info "IPv6 address prefix for the IPv6 destination address";
+        description
+          "IPv6 address prefix for the IPv6 destination address";
+        presence "true";
+        leaf minimum-mask {
+          tailf:info "Provide a minimum mask for this field";
+          description
+            "Provide a minimum mask for this field";
+          type uint8 {
+            tailf:info "<1-128>;;Specify optional minimum mask";
+            range "1..128";
+          }
+        }
+      }
+    }
+    leaf dscp {
+      tailf:info "IPv6 DSCP (part of Traffic Class)";
+      description
+        "IPv6 DSCP (part of Traffic Class)";
+      tailf:cli-full-command;
+      type empty;
+    }
+    container extension {
+      tailf:info "IPv6 extension header fields";
+      description
+        "IPv6 extension header fields";
+      leaf map {
+        tailf:info "Bitmap of IPv6 extension headers";
+        description
+          "Bitmap of IPv6 extension headers";
+        tailf:cli-full-command;
+        type empty;
+      }
+    }
+    leaf flow-label {
+      tailf:info "IPv6 flow label";
+      description
+        "IPv6 flow label";
+      tailf:cli-full-command;
+      type empty;
+    }
+    container fragmentation {
+      tailf:info "IPv6 fragmentation fields";
+      description
+        "IPv6 fragmentation fields";
+      leaf flags {
+        tailf:info "IPv6 fragmentation flags";
+        description
+          "IPv6 fragmentation flags";
+        tailf:cli-full-command;
+        type empty;
+      }
+      leaf id {
+        tailf:info "IPv6 fragmentation ID";
+        description
+          "IPv6 fragmentation ID";
+        tailf:cli-full-command;
+        type empty;
+      }
+      leaf offset {
+        tailf:info "IPv6 fragmentation offset";
+        description
+          "IPv6 fragmentation offset";
+        tailf:cli-full-command;
+        type empty;
+      }
+    }
+    container hop-limit {
+      tailf:info "IPv6 hop limit";
+      description
+        "IPv6 hop limit";
+      presence "true";
+      leaf maximum {
+        tailf:info "Largest value seen for hop-limit in the flow";
+        description
+          "Largest value seen for hop-limit in the flow";
+        tailf:cli-full-command;
+        type empty;
+      }
+      leaf minimum {
+        tailf:info "Smallest value seen for hop-limit in the flow";
+        description
+          "Smallest value seen for hop-limit in the flow";
+        tailf:cli-full-command;
+        type empty;
+      }
+    }
+    container length {
+      tailf:info "IPv6 length fields";
+      description
+        "IPv6 length fields";
+      leaf header {
+        tailf:info "Length of the IPv6 header, not including any extension headers, in bytes";
+        description
+          "Length of the IPv6 header, not including any extension headers, in bytes";
+        tailf:cli-full-command;
+        type empty;
+      }
+      leaf payload {
+        tailf:info "Length of the IPv6 payload, including any extension headers, in bytes";
+        description
+          "Length of the IPv6 payload, including any extension headers, in bytes";
+        tailf:cli-full-command;
+        type empty;
+      }
+      container total {
+        tailf:info "Total length of the IPv6 header and payload in bytes";
+        description
+          "Total length of the IPv6 header and payload in bytes";
+        presence "true";
+        leaf maximum {
+          tailf:info "Maximum total length in bytes";
+          description
+            "Maximum total length in bytes";
+          tailf:cli-full-command;
+          type empty;
+        }
+        leaf minimum {
+          tailf:info "Minimum total length in bytes";
+          description
+            "Minimum total length in bytes";
+          tailf:cli-full-command;
+          type empty;
+        }
+      }
+    }
+    leaf next-header {
+      tailf:info "The value of the next-header field in the IPv6 header";
+      description
+        "The value of the next-header field in the IPv6 header";
+      tailf:cli-full-command;
+      type empty;
+    }
+    leaf payload-length {
+      tailf:info "Length of the IPv6 payload in bytes";
+      description
+        "Length of the IPv6 payload in bytes";
+      tailf:cli-full-command;
+      type empty;
+    }
+    leaf precedence {
+      tailf:info "IPv6 precedence (part of Traffic Class)";
+      description
+        "IPv6 precedence (part of Traffic Class)";
+      tailf:cli-full-command;
+      type empty;
+    }
+    leaf protocol {
+      tailf:info "IPv6 payload protocol";
+      description
+        "IPv6 payload protocol";
+      tailf:cli-full-command;
+      type empty;
+    }
+    container section {
+      tailf:info "Part of the packet";
+      description
+        "Part of the packet";
+      container header {
+        tailf:info "Raw data starting at the IPv6 header";
+        description
+          "Raw data starting at the IPv6 header";
+        leaf size {
+          tailf:info "Specify the number of bytes to capture";
+          description
+            "Specify the number of bytes to capture";
+          type uint16 {
+            tailf:info "<1-1200>;;Number of bytes to capture";
+            range "1..1200";
+          }
+        }
+      }
+      container payload {
+        tailf:info "Raw data starting at the IPv6 payload";
+        description
+          "Raw data starting at the IPv6 payload";
+        leaf size {
+          tailf:info "Specify the number of bytes to capture";
+          description
+            "Specify the number of bytes to capture";
+          type uint16 {
+            tailf:info "<1-1200>;;Number of bytes to capture";
+            range "1..1200";
+          }
+        }
+      }
+    }
+    container source {
+      tailf:info "IPv6 source address based fields";
+      description
+        "IPv6 source address based fields";
+      leaf address {
+        tailf:info "IPv6 source address";
+        description
+          "IPv6 source address";
+        tailf:cli-full-command;
+        type empty;
+      }
+      container mask {
+        tailf:info "IPv6 address mask for the IPv6 source address";
+        description
+          "IPv6 address mask for the IPv6 source address";
+        presence "true";
+        leaf minimum-mask {
+          tailf:info "Provide a minimum mask for this field";
+          description
+            "Provide a minimum mask for this field";
+          type uint8 {
+            tailf:info "<1-128>;;Specify optional minimum mask";
+            range "1..128";
+          }
+        }
+      }
+      container prefix {
+        tailf:info "IPv6 address prefix for the IPv6 source address";
+        description
+          "IPv6 address prefix for the IPv6 source address";
+        presence "true";
+        leaf minimum-mask {
+          tailf:info "Provide a minimum mask for this field";
+          description
+            "Provide a minimum mask for this field";
+          type uint8 {
+            tailf:info "<1-128>;;Specify optional minimum mask";
+            range "1..128";
+          }
+        }
+      }
+    }
+    leaf traffic-class {
+      tailf:info "IPv6 traffic class";
+      description
+        "IPv6 traffic class";
+      tailf:cli-full-command;
+      type empty;
+    }
+    leaf version {
+      tailf:info "IP version from IPv6 header";
+      description
+        "IP version from IPv6 header";
+      tailf:cli-full-command;
+      type empty;
+    }
+  }
+
+  grouping flow-mpls-grouping {
+    container label {
+      tailf:info "MPLS label details";
+      description
+        "MPLS label details";
+      container one {
+        tailf:info "MPLS label 1 information";
+        description
+          "MPLS label 1 information";
+        tailf:alt-name "1";
+        leaf details {
+          tailf:info "MPLS label 1 details";
+          description
+            "MPLS label 1 details";
+          tailf:cli-full-command;
+          type empty;
+        }
+        leaf exp {
+          tailf:info "MPLS EXP field from the last label that was pushed";
+          description
+            "MPLS EXP field from the last label that was pushed";
+          tailf:cli-full-command;
+          type empty;
+        }
+        leaf ttl {
+          tailf:info "MPLS TTL field from the last label that was pushed";
+          description
+            "MPLS TTL field from the last label that was pushed";
+          tailf:cli-full-command;
+          type empty;
+        }
+        leaf type {
+          tailf:info "MPLS label type of the last label that was pushed";
+          description
+            "MPLS label type of the last label that was pushed";
+          tailf:cli-full-command;
+          type empty;
+        }
+      }
+      container two {
+        tailf:info "MPLS label 2 information";
+        description
+          "MPLS label 2 information";
+        tailf:alt-name "2";
+        leaf details {
+          tailf:info "MPLS label 2 details";
+          description
+            "MPLS label 2 details";
+          tailf:cli-full-command;
+          type empty;
+        }
+      }
+      container three {
+        tailf:info "MPLS label 3 information";
+        description
+          "MPLS label 3 information";
+        tailf:alt-name "3";
+        leaf details {
+          tailf:info "MPLS label 3 details";
+          description
+            "MPLS label 3 details";
+          tailf:cli-full-command;
+          type empty;
+        }
+      }
+      container four {
+        tailf:info "MPLS label 4 information";
+        description
+          "MPLS label 4 information";
+        tailf:alt-name "4";
+        leaf details {
+          tailf:info "MPLS label 4 details";
+          description
+            "MPLS label 4 details";
+          tailf:cli-full-command;
+          type empty;
+        }
+      }
+      container five {
+        tailf:info "MPLS label 5 information";
+        description
+          "MPLS label 5 information";
+        tailf:alt-name "5";
+        leaf details {
+          tailf:info "MPLS label 5 details";
+          description
+            "MPLS label 5 details";
+          tailf:cli-full-command;
+          type empty;
+        }
+      }
+      container six {
+        tailf:info "MPLS label 6 information";
+        description
+          "MPLS label 6 information";
+        tailf:alt-name "6";
+        leaf details {
+          tailf:info "MPLS label 6 details";
+          description
+            "MPLS label 6 details";
+          tailf:cli-full-command;
+          type empty;
+        }
+      }
+    }
+  }
+
+  grouping flow-network-grouping {
+    container delay {
+      tailf:info "network delay metrics";
+      description
+        "network delay metrics";
+      leaf sample {
+        tailf:info "The number of samples of roundtrip delay";
+        description
+          "The number of samples of roundtrip delay";
+        tailf:cli-full-command;
+        type empty;
+      }
+      leaf sum {
+        tailf:info "The sum of roundtrip delay";
+        description
+          "The sum of roundtrip delay";
+        tailf:cli-full-command;
+        type empty;
+      }
+    }
+  }
+
+  grouping flow-pfr-grouping {
+    container label {
+      tailf:info "PfR label metrics";
+      description
+        "PfR label metrics";
+      leaf identifier {
+        tailf:info "pfr label id";
+        description
+          "pfr label id";
+        tailf:cli-full-command;
+        type empty;
+      }
+    }
+    container one-way-delay {
+      tailf:info "The packet transmission delay between specified nodes";
+      description
+        "The packet transmission delay between specified nodes";
+      leaf samples {
+        tailf:info "Total number of one-way-delay samples";
+        description
+          "Total number of one-way-delay samples";
+        tailf:cli-full-command;
+        type empty;
+      }
+      leaf sum {
+        tailf:info "The packet transmission delay sum between specified nodes";
+        description
+          "The packet transmission delay sum between specified nodes";
+        tailf:cli-full-command;
+        type empty;
+      }
+    }
+    container service {
+      tailf:info "PfR service metrics";
+      description
+        "PfR service metrics";
+      tailf:cli-sequence-commands;
+      tailf:cli-compact-syntax;
+      leaf provider {
+        tailf:info "PfR service provider metrics";
+        description
+          "PfR service provider metrics";
+        type empty;
+      }
+      leaf tag {
+        tailf:info "PfR service provider tag metrics";
+        description
+          "PfR service provider tag metrics";
+        type empty;
+      }
+      leaf identifier {
+        tailf:info "PfR service provider tag";
+        description
+          "PfR service provider tag";
+        type empty;
+      }
+    }
+    container site {
+      tailf:info "PfR site  metrics";
+      description
+        "PfR site  metrics";
+      container destination {
+        tailf:info "PfR site destination metrics";
+        description
+          "PfR site destination metrics";
+        container id {
+          tailf:info "PfR site destination ID metrics";
+          description
+            "PfR site destination ID metrics";
+          leaf ipv4 {
+            tailf:info "site ID of the packet destination";
+            description
+              "site ID of the packet destination";
+            tailf:cli-full-command;
+            type empty;
+          }
+        }
+        container prefix {
+          tailf:info "PfR site prefix of the packet destination";
+          description
+            "PfR site prefix of the packet destination";
+          leaf ipv4 {
+            tailf:info "site prefix of the packet destination";
+            description
+              "site prefix of the packet destination";
+            tailf:cli-full-command;
+            type empty;
+          }
+          container mask {
+            tailf:info "PfR site prefix mask of the packet destination";
+            description
+              "PfR site prefix mask of the packet destination";
+            leaf ipv4 {
+              tailf:info "site prefix mask of the packet destination";
+              description
+                "site prefix mask of the packet destination";
+              tailf:cli-full-command;
+              type empty;
+            }
+          }
+        }
+      }
+      container source {
+        tailf:info "PfR site source metrics";
+        description
+          "PfR site source metrics";
+        container id {
+          tailf:info "PfR site source ID metrics";
+          description
+            "PfR site source ID metrics";
+          leaf ipv4 {
+            tailf:info "site ID of the packet source";
+            description
+              "site ID of the packet source";
+            tailf:cli-full-command;
+            type empty;
+          }
+        }
+        container prefix {
+          tailf:info "PfR site prefix of the packet source";
+          description
+            "PfR site prefix of the packet source";
+          leaf ipv4 {
+            tailf:info "site prefix of the packet source";
+            description
+              "site prefix of the packet source";
+            tailf:cli-full-command;
+            type empty;
+          }
+          container mask {
+            tailf:info "PfR site prefix mask of the packet source";
+            description
+              "PfR site prefix mask of the packet source";
+            leaf ipv4 {
+              tailf:info "site prefix mask of the packet source";
+              description
+                "site prefix mask of the packet source";
+              tailf:cli-full-command;
+              type empty;
+            }
+          }
+        }
+      }
+    }
+  }
+
+  grouping flow-policy-grouping {
+    container performance-monitor {
+      tailf:info "Performance-monitor policy related metrics";
+      description
+        "Performance-monitor policy related metrics";
+      container classification {
+        tailf:info "Classification metrics";
+        description
+          "Classification metrics";
+        leaf hierarchy {
+          tailf:info "Performance-monitor class hierarchy";
+          description
+            "Performance-monitor class hierarchy";
+          tailf:cli-full-command;
+          type empty;
+        }
+      }
+    }
+    container qos {
+      tailf:info "QoS policy related metrics";
+      description
+        "QoS policy related metrics";
+      container classification {
+        tailf:info "Classification metrics";
+        description
+          "Classification metrics";
+        leaf hierarchy {
+          tailf:info "QoS class hierarchy";
+          description
+            "QoS class hierarchy";
+          tailf:cli-full-command;
+          type empty;
+        }
+      }
+      container queue {
+        tailf:info "Queue metrics";
+        description
+          "Queue metrics";
+        leaf drops {
+          tailf:info "QoS queue drops";
+          description
+            "QoS queue drops";
+          when "../../../../../collect";
+          tailf:cli-full-command;
+          type empty;
+        }
+        leaf index {
+          tailf:info "QoS queue index";
+          description
+            "QoS queue index";
+          tailf:cli-full-command;
+          type empty;
+        }
+      }
+    }
+  }
+
+  grouping flow-routing-grouping {
+    container destination {
+      tailf:info "Destination routing attributes";
+      description
+        "Destination routing attributes";
+      container as {
+        tailf:info "AS number of the destination network";
+        description
+          "AS number of the destination network";
+        presence "true";
+        leaf as4-octet {
+          tailf:alt-name "4-octet";
+          tailf:info "4 octet AS number of the destination network";
+          description
+            "4 octet AS number of the destination network";
+          tailf:cli-full-command;
+          type empty;
+        }
+        container peer {
+          tailf:info "AS number of the peer network we will forward to";
+          description
+            "AS number of the peer network we will forward to";
+          presence "true";
+          leaf peer4-octet {
+            tailf:alt-name "4-octet";
+            tailf:info "4 octet AS number of the peer network we will forward to";
+            description
+              "4 octet AS number of the peer network we will forward to";
+            tailf:cli-full-command;
+            type empty;
+          }
+        }
+      }
+      leaf traffic-index {
+        tailf:info "BGP destination traffic index";
+        description
+          "BGP destination traffic index";
+        tailf:cli-full-command;
+        type empty;
+      }
+    }
+    container forwarding-status {
+      tailf:info "Forwarding status of the packet";
+      description
+        "Forwarding status of the packet";
+      presence "true";
+      leaf reason {
+        tailf:info "Forwarding status reason of the packet";
+        description
+          "Forwarding status reason of the packet";
+        tailf:cli-full-command;
+        type empty;
+      }
+    }
+    leaf is-multicast {
+      tailf:info "Indicates if this is multicast";
+      description
+        "Indicates if this is multicast";
+      tailf:cli-full-command;
+      type empty;
+    }
+    container next-hop {
+      tailf:info "Information regarding the next hop";
+      description
+        "Information regarding the next hop";
+      container address {
+        tailf:info "IP address of the next hop";
+        description
+          "IP address of the next hop";
+        container ipv4 {
+          tailf:info "IPv4 address of the next hop";
+          description
+            "IPv4 address of the next hop";
+          presence "true";
+          leaf bgp {
+            tailf:info "IPv4 address of the BGP next hop";
+            description
+              "IPv4 address of the BGP next hop";
+            tailf:cli-full-command;
+            type empty;
+          }
+        }
+        container ipv6 {
+          tailf:info "IPv6 address of the next hop";
+          description
+            "IPv6 address of the next hop";
+          presence "true";
+          leaf bgp {
+            tailf:info "IPv6 address of the BGP next hop";
+            description
+              "IPv6 address of the BGP next hop";
+            tailf:cli-full-command;
+            type empty;
+          }
+        }
+      }
+    }
+    container pw {
+      tailf:info "Pseudowire fields";
+      description
+        "Pseudowire fields";
+      container destination {
+        tailf:info "Pseudowire destination";
+        description
+          "Pseudowire destination";
+        leaf address {
+          tailf:info "Pseudowire destination address";
+          description
+            "Pseudowire destination address";
+          tailf:cli-full-command;
+          type empty;
+        }
+      }
+    }
+    container source {
+      tailf:info "Source routing attributes";
+      description
+        "Source routing attributes";
+      container as {
+        tailf:info "AS number of the original network";
+        description
+          "AS number of the original network";
+        presence "true";
+        leaf orig4-octet {
+          tailf:alt-name "4-octet";
+          tailf:info "4 octet AS number of the original network";
+          description
+            "4 octet AS number of the original network";
+          tailf:cli-full-command;
+          type empty;
+        }
+        container peer {
+          tailf:info "AS number of the peer network where the packet came from";
+          description
+            "AS number of the peer network where the packet came from";
+          presence "true";
+          leaf peer4-octet {
+            tailf:alt-name "4-octet";
+            tailf:info "4 octet AS number of the peer network where the packet came from";
+            description
+              "4 octet AS number of the peer network where the packet came from";
+            tailf:cli-full-command;
+            type empty;
+          }
+        }
+      }
+      leaf traffic-index {
+        tailf:info "BGP source traffic index";
+        description
+          "BGP source traffic index";
+        tailf:cli-full-command;
+        type empty;
+      }
+    }
+    container vrf {
+      tailf:info "VRF routing attributes";
+      description
+        "VRF routing attributes";
+      leaf input {
+        tailf:info "VRF ID for incoming packet";
+        description
+          "VRF ID for incoming packet";
+        tailf:cli-full-command;
+        type empty;
+      }
+      leaf output {
+        tailf:info "VRF ID for outgoing packet";
+        description
+          "VRF ID for outgoing packet";
+        tailf:cli-full-command;
+        type empty;
+      }
+    }
+  }
+
+  grouping flow-services-grouping {
+    container waas {
+      tailf:info "WAAS (Wide Area Application Services) metrics";
+      description
+        "WAAS (Wide Area Application Services) metrics";
+      leaf passthrough-reason {
+        tailf:info "WAAS passthrough reason";
+        description
+          "WAAS passthrough reason";
+        when "../../../../collect";
+        tailf:cli-full-command;
+        type empty;
+      }
+      container segment {
+        tailf:info "WAAS optimization segment";
+        description
+          "WAAS optimization segment";
+        presence "true";
+        leaf account-on-resolution {
+          tailf:info "Account on resolution";
+          description
+            "Account on resolution";
+          tailf:cli-full-command;
+          type empty;
+        }
+      }
+    }
+  }
+
+  grouping flow-transport-common-grouping {
+    leaf destination-port {
+      tailf:info "Transport destination port";
+      description
+        "Transport destination port";
+      tailf:cli-full-command;
+      type empty;
+    }
+    container icmp {
+      tailf:info "ICMP fields";
+      description
+        "ICMP fields";
+      container ipv4 {
+        tailf:info "IPv4 ICMP fields";
+        description
+          "IPv4 ICMP fields";
+        leaf code {
+          tailf:info "IPv4 ICMP code";
+          description
+            "IPv4 ICMP code";
+          tailf:cli-full-command;
+          type empty;
+        }
+        leaf type {
+          tailf:info "IPv4 ICMP type";
+          description
+            "IPv4 ICMP type";
+          tailf:cli-full-command;
+          type empty;
+        }
+      }
+      container ipv6 {
+        tailf:info "IPv6 ICMP fields";
+        description
+          "IPv6 ICMP fields";
+        leaf code {
+          tailf:info "IPv6 ICMP code";
+          description
+            "IPv6 ICMP code";
+          tailf:cli-full-command;
+          type empty;
+        }
+        leaf type {
+          tailf:info "IPv6 ICMP type";
+          description
+            "IPv6 ICMP type";
+          tailf:cli-full-command;
+          type empty;
+        }
+      }
+    }
+    container igmp {
+      tailf:info "IGMP fields";
+      description
+        "IGMP fields";
+      leaf type {
+        tailf:info "IGMP type";
+        description
+          "IGMP type";
+        tailf:cli-full-command;
+        type empty;
+      }
+    }
+    leaf source-port {
+      tailf:info "Transport source port";
+      description
+        "Transport source port";
+      tailf:cli-full-command;
+      type empty;
+    }
+    container tcp {
+      tailf:info "TCP fields";
+      description
+        "TCP fields";
+      leaf acknowledgement-number {
+        tailf:info "TCP acknowledgement number";
+        description
+          "TCP acknowledgement number";
+        tailf:cli-full-command;
+        type empty;
+      }
+      leaf destination-port {
+        tailf:info "TCP destination port";
+        description
+          "TCP destination port";
+        tailf:cli-full-command;
+        type empty;
+      }
+      container flags {
+        tailf:info "TCP flags";
+        description
+          "TCP flags";
+        tailf:cli-compact-syntax;
+        presence "true";
+        leaf ack {
+          tailf:info "TCP acknowledgement flag";
+          description
+            "TCP acknowledgement flag";
+          type empty;
+        }
+        leaf cwr {
+          tailf:info "TCP congestion window reduced flag";
+          description
+            "TCP congestion window reduced flag";
+          type empty;
+        }
+        leaf ece {
+          tailf:info "TCP ECN echo flag";
+          description
+            "TCP ECN echo flag";
+          type empty;
+        }
+        leaf fin {
+          tailf:info "TCP finish flag";
+          description
+            "TCP finish flag";
+          type empty;
+        }
+        leaf psh {
+          tailf:info "TCP push flag";
+          description
+            "TCP push flag";
+          type empty;
+        }
+        leaf rst {
+          tailf:info "TCP reset flag";
+          description
+            "TCP reset flag";
+          type empty;
+        }
+        leaf syn {
+          tailf:info "TCP synchronise flag";
+          description
+            "TCP synchronise flag";
+          type empty;
+        }
+        leaf urg {
+          tailf:info "TCP urgent flag";
+          description
+            "TCP urgent flag";
+          type empty;
+        }
+      }
+      container flow {
+        tailf:info "TCP flow";
+        description
+          "TCP flow";
+        when "../../../../collect";
+        leaf count {
+          tailf:info "Number of tcp flows";
+          description
+            "Number of tcp flows";
+          tailf:cli-full-command;
+          type empty;
+        }
+      }
+      leaf header-length {
+        tailf:info "TCP header length (in 32 bit words)";
+        description
+          "TCP header length (in 32 bit words)";
+        tailf:cli-full-command;
+        type empty;
+      }
+      leaf maximum-segment-size {
+        tailf:info "The maximum size of TCP segment";
+        description
+          "The maximum size of TCP segment";
+        tailf:cli-full-command;
+        type empty;
+      }
+      container option {
+        tailf:info "TCP option fields";
+        description
+          "TCP option fields";
+        container map {
+          tailf:info "Bitmap of TCP options";
+          description
+            "Bitmap of TCP options";
+          presence "true";
+          leaf long {
+            tailf:info "Extended bitmap of TCP options";
+            description
+              "Extended bitmap of TCP options";
+            tailf:cli-full-command;
+            type empty;
+          }
+        }
+      }
+      leaf sequence-number {
+        tailf:info "TCP sequence number";
+        description
+          "TCP sequence number";
+        tailf:cli-full-command;
+        type empty;
+      }
+      leaf source-port {
+        tailf:info "TCP source port";
+        description
+          "TCP source port";
+        tailf:cli-full-command;
+        type empty;
+      }
+      leaf urgent-pointer {
+        tailf:info "TCP urgent pointer";
+        description
+          "TCP urgent pointer";
+        tailf:cli-full-command;
+        type empty;
+      }
+      container window-size {
+        tailf:info "TCP window size";
+        description
+          "TCP window size";
+        presence "true";
+        container average {
+          tailf:info "The average size of TCP window";
+          description
+            "The average size of TCP window";
+          presence "true";
+          leaf sum {
+            tailf:info "The sum of per flow TCP window average size";
+            description
+              "The sum of per flow TCP window average size";
+            tailf:cli-full-command;
+            type empty;
+          }
+        }
+        leaf maximum {
+          tailf:info "The maximum size of TCP window";
+          description
+            "The maximum size of TCP window";
+          tailf:cli-full-command;
+          type empty;
+        }
+        leaf minimum {
+          tailf:info "The minimum size of TCP window";
+          description
+            "The minimum size of TCP window";
+          tailf:cli-full-command;
+          type empty;
+        }
+        leaf sum {
+          tailf:info "The sum of TCP window size";
+          description
+            "The sum of TCP window size";
+          tailf:cli-full-command;
+          type empty;
+        }
+      }
+    }
+    container udp {
+      tailf:info "UDP fields";
+      description
+        "UDP fields";
+      leaf destination-port {
+        tailf:info "UDP destination port";
+        description
+          "UDP destination port";
+        tailf:cli-full-command;
+        type empty;
+      }
+      leaf message-length {
+        tailf:info "UDP message length";
+        description
+          "UDP message length";
+        tailf:cli-full-command;
+        type empty;
+      }
+      leaf source-port {
+        tailf:info "UDP source port";
+        description
+          "UDP source port";
+        tailf:cli-full-command;
+        type empty;
+      }
+    }
+  }
+
+  grouping flow-record-collect-grouping {
+    container collect {
+      tailf:info "Specify a non-key field";
+      description
+        "Specify a non-key field";
+      container application {
+        tailf:info "Application fields";
+        description
+          "Application fields";
+        container dns {
+          tailf:info "Domain Name Server lookup";
+          description
+            "Domain Name Server lookup";
+          leaf domain-name {
+            tailf:info "Domain name";
+            description
+              "Domain name";
+            type empty;
+          }
+        }
+        container http {
+          tailf:info "World Wide Web traffic";
+          description
+            "World Wide Web traffic";
+          leaf host {
+            tailf:info "Host name of Origin Server containing resource";
+            description
+              "Host name of Origin Server containing resource";
+            tailf:cli-full-command;
+            type empty;
+          }
+          leaf referer {
+            tailf:info "Address the resource request was obtained from";
+            description
+              "Address the resource request was obtained from";
+            tailf:cli-full-command;
+            type empty;
+          }
+          container uri {
+            tailf:info "List of URIs and associated hit counts";
+            description
+              "List of URIs and associated hit counts";
+            leaf statistics {
+              tailf:info "Collect URI statistics";
+              description
+                "Collect URI statistics";
+              tailf:cli-full-command;
+              type empty;
+            }
+          }
+          leaf url {
+            tailf:info "Uniform Resource Locator path";
+            description
+              "Uniform Resource Locator path";
+            tailf:cli-full-command;
+            type empty;
+          }
+          leaf user-agent {
+            tailf:info "Software used by agent sending the request";
+            description
+              "Software used by agent sending the request";
+            tailf:cli-full-command;
+            type empty;
+          }
+        }
+        container media {
+          tailf:info "Media fields";
+          description
+            "Media fields";
+          container bytes {
+            tailf:info "Media fields";
+            description
+              "Media fields";
+            container counter {
+              tailf:info "A count of the number of bytes of media payload";
+              description
+                "A count of the number of bytes of media payload";
+              presence "true";
+              leaf long {
+                tailf:info "A count of the number of bytes of media payload (64 bit counter)";
+                description
+                  "A count of the number of bytes of media payload (64 bit counter)";
+                type empty;
+              }
+            }
+            container rate {
+              tailf:info "Byte rate for the media stream";
+              description
+                "Byte rate for the media stream";
+              presence "true";
+              container per-flow {
+                tailf:info "Average media byte rate across flows";
+                description
+                  "Average media byte rate across flows";
+                presence "true";
+                leaf max {
+                  tailf:info "Maximum byte rate in the media stream";
+                  description
+                    "Maximum byte rate in the media stream";
+                  tailf:cli-full-command;
+                  type empty;
+                }
+                leaf min {
+                  tailf:info "Minumun byte rate in the media stream";
+                  description
+                    "Minumun byte rate in the media stream";
+                  tailf:cli-full-command;
+                  type empty;
+                }
+              }
+            }
+          }
+          leaf event {
+            tailf:info "Flags indicating media events";
+            description
+              "Flags indicating media events";
+            tailf:cli-full-command;
+            type empty;
+          }
+          container packets {
+            tailf:info "Media fields";
+            description
+              "Media fields";
+            container counter {
+              tailf:info "A count of the number of packets with a media payload";
+              description
+                "A count of the number of packets with a media payload";
+              presence "true";
+              leaf long {
+                tailf:info "A count of the number of packets with a media payload (64 bit counter)";
+                description
+                  "A count of the number of packets with a media payload (64 bit counter)";
+                type empty;
+              }
+            }
+            container rate {
+              tailf:info "Packet rate for the media stream";
+              description
+                "Packet rate for the media stream";
+              presence "true";
+              container variation {
+                tailf:info "Variation in packet rate from configured expected rate";
+                description
+                  "Variation in packet rate from configured expected rate";
+                presence "true";
+                leaf max {
+                  tailf:info "Max variation in packet rate from configured expected rate";
+                  description
+                    "Max variation in packet rate from configured expected rate";
+                  tailf:cli-full-command;
+                  type empty;
+                }
+                leaf min {
+                  tailf:info "Variation in packet rate from configured expected rate";
+                  description
+                    "Variation in packet rate from configured expected rate";
+                  tailf:cli-full-command;
+                  type empty;
+                }
+                leaf sum {
+                  tailf:info "The sum of media rate variation from the configured rate for the RTP stream";
+                  description
+                    "The sum of media rate variation from the configured rate for the RTP stream";
+                  tailf:cli-full-command;
+                  type empty;
+                }
+              }
+            }
+          }
+        }
+        uses flow-name-grouping;
+        container nntp {
+          tailf:info "Network news transfer protocol";
+          description
+            "Network news transfer protocol";
+          leaf group-name {
+            tailf:info "NNTP Group name";
+            description
+              "NNTP Group name";
+            type empty;
+          }
+        }
+        container pop3 {
+          tailf:info "Post Office Protocol 3";
+          description
+            "Post Office Protocol 3";
+          leaf server {
+            tailf:info "POP3 Server Name";
+            description
+              "POP3 Server Name";
+            type empty;
+          }
+        }
+        container rtmp {
+          tailf:info "Real Time Messaging Protocol";
+          description
+            "Real Time Messaging Protocol";
+          leaf pageUrl {
+            tailf:info "RTMP page url address";
+            description
+              "RTMP page url address";
+            type empty;
+          }
+        }
+        container rtsp {
+          tailf:info "Real Time Streaming Protocol";
+          description
+            "Real Time Streaming Protocol";
+          leaf host {
+            tailf:info "RTSP Host Name";
+            description
+              "RTSP Host Name";
+            type empty;
+          }
+        }
+        container sip {
+          tailf:info "Session Initiation Protocol";
+          description
+            "Session Initiation Protocol";
+          leaf destination {
+            tailf:info "The destination domain of SIP transactions";
+            description
+              "The destination domain of SIP transactions";
+            tailf:cli-full-command;
+            type empty;
+          }
+          leaf source {
+            tailf:info "The source domain of SIP transactions";
+            description
+              "The source domain of SIP transactions";
+            tailf:cli-full-command;
+            type empty;
+          }
+        }
+        container smtp {
+          tailf:info "Simple Mail Transfer Protocol";
+          description
+            "Simple Mail Transfer Protocol";
+          leaf sender {
+            tailf:info "SMTP Sender Mail Address";
+            description
+              "SMTP Sender Mail Address";
+            tailf:cli-full-command;
+            type empty;
+          }
+          leaf server {
+            tailf:info "SMTP Server Name";
+            description
+              "SMTP Server Name";
+            tailf:cli-full-command;
+            type empty;
+          }
+        }
+        container ssl {
+          tailf:info "Secure Socket Layer Protocol";
+          description
+            "Secure Socket Layer Protocol";
+          leaf common-name {
+            tailf:info "Certificate Common Name (CN)";
+            description
+              "Certificate Common Name (CN)";
+            type empty;
+          }
+        }
+        uses flow-vendor-version-grouping;
+      }
+      container connection {
+        tailf:info "Connection fields";
+        description
+          "Connection fields";
+        container client {
+          tailf:info "Client side (flow initiator) related metrics";
+          description
+            "Client side (flow initiator) related metrics";
+          leaf all {
+            tailf:info "All non-key client metrics";
+            description
+              "All non-key client metrics";
+            tailf:cli-full-command;
+            type empty;
+          }
+          container counter {
+            tailf:info "Client side counter metrics";
+            description
+              "Client side counter metrics";
+            container bytes {
+              tailf:info "Number of bytes sent by the client";
+              description
+                "Number of bytes sent by the client";
+              leaf long {
+                tailf:info "64 bits counter";
+                description
+                  "64 bits counter";
+                tailf:cli-full-command;
+                type empty;
+              }
+              container network {
+                tailf:info "Number of bytes sent by the client";
+                description
+                  "Number of bytes sent by the client";
+                leaf long {
+                  tailf:info "Total number of bytes transmitted by the client";
+                  description
+                    "Total number of bytes transmitted by the client";
+                  tailf:cli-full-command;
+                  type empty;
+                }
+              }
+              leaf retransmitted {
+                tailf:info "Number of bytes retransmitted by the client";
+                description
+                  "Number of bytes retransmitted by the client";
+                tailf:cli-full-command;
+                type empty;
+              }
+              container transport {
+                tailf:info "Number of bytes sent by the client";
+                description
+                  "Number of bytes sent by the client";
+                leaf long {
+                  tailf:info "64 bit counter";
+                  description
+                    "64 bit counter";
+                  tailf:cli-full-command;
+                  type empty;
+                }
+              }
+            }
+            container packets {
+              tailf:info "Number of packets sent by the client";
+              description
+                "Number of packets sent by the client";
+              leaf long {
+                tailf:info "64 bits counter";
+                description
+                  "64 bits counter";
+                tailf:cli-full-command;
+                type empty;
+              }
+              leaf retransmitted {
+                tailf:info "Number of packets retransmitted by the client";
+                description
+                  "Number of packets retransmitted by the client";
+                tailf:cli-full-command;
+                type empty;
+              }
+            }
+          }
+          uses flow-client-ipv4-ipv6-transport-grouping;
+        }
+        container delay {
+          tailf:info "Connection delay metrics";
+          description
+            "Connection delay metrics";
+          leaf all {
+            tailf:info "All non-key client metrics";
+            description
+              "All non-key client metrics";
+            tailf:cli-full-command;
+            type empty;
+          }
+          container application {
+            tailf:info "Application time metrics";
+            description
+              "Application time metrics";
+            leaf max {
+              tailf:info "Maximum application response time";
+              description
+                "Maximum application response time";
+              tailf:cli-full-command;
+              type empty;
+            }
+            leaf min {
+              tailf:info "Minimum application response time";
+              description
+                "Minimum application response time";
+              tailf:cli-full-command;
+              type empty;
+            }
+            leaf sum {
+              tailf:info "Total application response time";
+              description
+                "Total application response time";
+              tailf:cli-full-command;
+              type empty;
+            }
+          }
+          container network {
+            tailf:info "Network time metrics";
+            description
+              "Network time metrics";
+            container client-to-server {
+              tailf:info "RTT between the client and the server";
+              description
+                "RTT between the client and the server";
+              leaf max {
+                tailf:info "Maximum network time";
+                description
+                  "Maximum network time";
+                tailf:cli-full-command;
+                type empty;
+              }
+              leaf min {
+                tailf:info "Minimum network time";
+                description
+                  "Minimum network time";
+                tailf:cli-full-command;
+                type empty;
+              }
+              leaf num-samples {
+                tailf:info "The number of CSND samples";
+                description
+                  "The number of CSND samples";
+                tailf:cli-full-command;
+                type empty;
+              }
+              leaf sum {
+                tailf:info "Total network time";
+                description
+                  "Total network time";
+                tailf:cli-full-command;
+                type empty;
+              }
+            }
+            container long-lived {
+              tailf:info "Long-lived network delay metrics";
+              description
+                "Long-lived network delay metrics";
+              container client-to-serve {
+                tailf:info "Long-lived network delay client-to-server metrics";
+                description
+                  "Long-lived network delay client-to-server metrics";
+                leaf sum {
+                  tailf:info "Total network time";
+                  description
+                    "Total network time";
+                  type empty;
+                }
+              }
+              container to-client {
+                tailf:info "Long-lived network delay to-client metrics";
+                description
+                  "Long-lived network delay to-client metrics";
+                leaf sum {
+                  tailf:info "Total network time";
+                  description
+                    "Total network time";
+                  type empty;
+                }
+              }
+              container to-serve {
+                tailf:info "Long-lived network delay to-server metrics";
+                description
+                  "Long-lived network delay to-server metrics";
+                leaf sum {
+                  tailf:info "Total network time";
+                  description
+                    "Total network time";
+                  type empty;
+                }
+              }
+            }
+            container to-client {
+              tailf:info "RTT from observation point to the client";
+              description
+                "RTT from observation point to the client";
+              leaf max {
+                tailf:info "Maximum network time";
+                description
+                  "Maximum network time";
+                tailf:cli-full-command;
+                type empty;
+              }
+              leaf min {
+                tailf:info "Minimum network time";
+                description
+                  "Minimum network time";
+                tailf:cli-full-command;
+                type empty;
+              }
+              leaf num-samples {
+                tailf:info "The number of CND samples";
+                description
+                  "The number of CND samples";
+                tailf:cli-full-command;
+                type empty;
+              }
+              leaf sum {
+                tailf:info "Total network time";
+                description
+                  "Total network time";
+                tailf:cli-full-command;
+                type empty;
+              }
+            }
+            container to-server {
+              tailf:info "RTT from observation point to the server";
+              description
+                "RTT from observation point to the server";
+              leaf max {
+                tailf:info "Maximum network time";
+                description
+                  "Maximum network time";
+                tailf:cli-full-command;
+                type empty;
+              }
+              leaf min {
+                tailf:info "Minimum network time";
+                description
+                  "Minimum network time";
+                tailf:cli-full-command;
+                type empty;
+              }
+              leaf num-samples {
+                tailf:info "The number of SND samples";
+                description
+                  "The number of SND samples";
+                tailf:cli-full-command;
+                type empty;
+              }
+              leaf sum {
+                tailf:info "Total network time";
+                description
+                  "Total network time";
+                tailf:cli-full-command;
+                type empty;
+              }
+            }
+          }
+          container response {
+            tailf:info "Response time metrics";
+            description
+              "Response time metrics";
+            container client-to-server {
+              tailf:info "Response time as seen by the client";
+              description
+                "Response time as seen by the client";
+              leaf max {
+                tailf:info "Maximum response time";
+                description
+                  "Maximum response time";
+                tailf:cli-full-command;
+                type empty;
+              }
+              leaf min {
+                tailf:info "Minimum response time";
+                description
+                  "Minimum response time";
+                tailf:cli-full-command;
+                type empty;
+              }
+              leaf sum {
+                tailf:info "Total response time";
+                description
+                  "Total response time";
+                tailf:cli-full-command;
+                type empty;
+              }
+            }
+            container to-server {
+              tailf:info "Response time as seen from observation point";
+              description
+                "Response time as seen from observation point";
+              leaf histogram {
+                tailf:info "Histogram for response time";
+                description
+                  "Histogram for response time";
+                tailf:cli-full-command;
+                type empty;
+              }
+              leaf max {
+                tailf:info "Maximum response time";
+                description
+                  "Maximum response time";
+                tailf:cli-full-command;
+                type empty;
+              }
+              leaf min {
+                tailf:info "Minimum response time";
+                description
+                  "Minimum response time";
+                tailf:cli-full-command;
+                type empty;
+              }
+              leaf sum {
+                tailf:info "Total response time";
+                description
+                  "Total response time";
+                tailf:cli-full-command;
+                type empty;
+              }
+            }
+          }
+        }
+        uses flow-id-initiator-grouping;
+        leaf new-connections {
+          tailf:info "The number of connection initiations observed";
+          description
+            "The number of connection initiations observed";
+          tailf:cli-full-command;
+          type empty;
+        }
+        container server {
+          tailf:info "Server side (flow responder) related metrics";
+          description
+            "Server side (flow responder) related metrics";
+          leaf all {
+            tailf:info "All non-key server metrics";
+            description
+              "All non-key server metrics";
+            tailf:cli-full-command;
+            type empty;
+          }
+          container counter {
+            tailf:info "Server side counter metrics";
+            description
+              "Server side counter metrics";
+            container bytes {
+              tailf:info "Number of bytes sent by the server";
+              description
+                "Number of bytes sent by the server";
+              leaf long {
+                tailf:info "64 bits counter";
+                description
+                  "64 bits counter";
+                tailf:cli-full-command;
+                type empty;
+              }
+              container network {
+                tailf:info "Number of bytes sent by the server";
+                description
+                  "Number of bytes sent by the server";
+                leaf long {
+                  tailf:info "Total number of bytes transmitted by the server";
+                  description
+                    "Total number of bytes transmitted by the server";
+                  tailf:cli-full-command;
+                  type empty;
+                }
+              }
+              leaf retransmitted {
+                tailf:info "Number of bytes retransmitted by the server";
+                description
+                  "Number of bytes retransmitted by the server";
+                tailf:cli-full-command;
+                type empty;
+              }
+              container transport {
+                tailf:info "Number of bytes sent by the server";
+                description
+                  "Number of bytes sent by the server";
+                leaf long {
+                  tailf:info "64 bit counter";
+                  description
+                    "64 bit counter";
+                  tailf:cli-full-command;
+                  type empty;
+                }
+              }
+            }
+            container packets {
+              tailf:info "Number of packets sent by the server";
+              description
+                "Number of packets sent by the server";
+              leaf long {
+                tailf:info "64 bits counter";
+                description
+                  "64 bits counter";
+                tailf:cli-full-command;
+                type empty;
+              }
+              leaf retransmitted {
+                tailf:info "Number of packets retransmitted by the server";
+                description
+                  "Number of packets retransmitted by the server";
+                tailf:cli-full-command;
+                type empty;
+              }
+            }
+            leaf responses {
+              tailf:info "Number of responses sent by the server";
+              description
+                "Number of responses sent by the server";
+              tailf:cli-full-command;
+              type empty;
+            }
+          }
+          uses flow-server-ipv4-ipv6-transport-grouping;
+        }
+        leaf sum-duration {
+          tailf:info "The overall time in seconds for all connections";
+          description
+            "The overall time in seconds for all connections";
+          tailf:cli-full-command;
+          type empty;
+        }
+        container transaction {
+          tailf:info "Transaction related metrics";
+          description
+            "Transaction related metrics";
+          leaf all {
+            tailf:info "All non-key transaction metrics";
+            description
+              "All non-key transaction metrics";
+            tailf:cli-full-command;
+            type empty;
+          }
+          container counter {
+            tailf:info "Transaction counter metrics";
+            description
+              "Transaction counter metrics";
+            leaf complete {
+              tailf:info "Number of completed transactions";
+              description
+                "Number of completed transactions";
+              tailf:cli-full-command;
+              type empty;
+            }
+          }
+          container duration {
+            tailf:info "Transaction duration metrics";
+            description
+              "Transaction duration metrics";
+            leaf max {
+              tailf:info "Maximum transaction time";
+              description
+                "Maximum transaction time";
+              tailf:cli-full-command;
+              type empty;
+            }
+            leaf min {
+              tailf:info "Minimum transaction time";
+              description
+                "Minimum transaction time";
+              tailf:cli-full-command;
+              type empty;
+            }
+            leaf sum {
+              tailf:info "Total transaction time";
+              description
+                "Total transaction time";
+              tailf:cli-full-command;
+              type empty;
+            }
+          }
+        }
+        uses flow-transaction-id-grouping;
+      }
+      container counter {
+        tailf:info "Counter fields";
+        description
+          "Counter fields";
+        container bytes {
+          tailf:info "Total number of bytes";
+          description
+            "Total number of bytes";
+          presence "true";
+          leaf long {
+            tailf:info "Total number of bytes (64 bit counter)";
+            description
+              "Total number of bytes (64 bit counter)";
+            tailf:cli-full-command;
+            type empty;
+          }
+          container rate {
+            tailf:info "Byte rate for the flow";
+            description
+              "Byte rate for the flow";
+            presence "true";
+            container per-flow {
+              tailf:info "Average byte rate for the flow";
+              description
+                "Average byte rate for the flow";
+              presence "true";
+              leaf max {
+                tailf:info "Maximum byte rate among the aggregated flows";
+                description
+                  "Maximum byte rate among the aggregated flows";
+                tailf:cli-full-command;
+                type empty;
+              }
+              leaf min {
+                tailf:info "Minimum byte rate among the aggregated flows";
+                description
+                  "Minimum byte rate among the aggregated flows";
+                tailf:cli-full-command;
+                type empty;
+              }
+            }
+          }
+          container squared {
+            tailf:info "Total of the square of the number of bytes";
+            description
+              "Total of the square of the number of bytes";
+            leaf long {
+              tailf:info "Total of the square of the packet length in bytes (64 bit counter)";
+              description
+                "Total of the square of the packet length in bytes (64 bit counter)";
+              tailf:cli-full-command;
+              type empty;
+            }
+          }
+        }
+        leaf flows {
+          tailf:info "Total number of flows";
+          description
+            "Total number of flows";
+          tailf:cli-full-command;
+          type empty;
+        }
+        container packets {
+          tailf:info "Total number of packets";
+          description
+            "Total number of packets";
+          presence "true";
+          leaf dropped {
+            tailf:info "Dropped packets";
+            description
+              "Dropped packets";
+            type empty;
+          }
+          leaf long {
+            tailf:info "Total number of packets (64 bit counter)";
+            description
+              "Total number of packets (64 bit counter)";
+            tailf:cli-full-command;
+            type empty;
+          }
+          container rate {
+            tailf:info "Packet rate for the flow";
+            description
+              "Packet rate for the flow";
+            presence "true";
+            container per-flow {
+              tailf:info "Average packet rate for aggregated flows";
+              description
+                "Average packet rate for aggregated flows";
+              presence "true";
+              leaf max {
+                tailf:info "Maximum packet rate in the aggregated flows";
+                description
+                  "Maximum packet rate in the aggregated flows";
+                tailf:cli-full-command;
+                type empty;
+              }
+              leaf min {
+                tailf:info "Minimum packet rate in the aggregated flows";
+                description
+                  "Minimum packet rate in the aggregated flows";
+                tailf:cli-full-command;
+                type empty;
+              }
+            }
+          }
+        }
+      }
+      container datalink {
+        tailf:info "Datalink (layer2) fields";
+        description
+          "Datalink (layer2) fields";
+        uses flow-datalink-grouping;
+      }
+      container flow {
+        tailf:info "Flow identifying fields";
+        description
+          "Flow identifying fields";
+        uses flow-flow-common-grouping;
+        leaf end-reason {
+          tailf:info "The reason for a flow ending";
+          description
+            "The reason for a flow ending";
+          tailf:cli-full-command;
+          type empty;
+        }
+      }
+      container interface {
+        tailf:info "Interface fields";
+        description
+          "Interface fields";
+        uses flow-interface-grouping;
+      }
+      container ipv4 {
+        tailf:info "IPv4 fields";
+        description
+          "IPv4 fields";
+        uses flow-ipv4-grouping;
+      }
+      container ipv6 {
+        tailf:info "IPv6 fields";
+        description
+          "IPv6 fields";
+        uses flow-ipv6-grouping;
+      }
+      container metadata {
+        tailf:info "Metadata fields";
+        description
+          "Metadata fields";
+        leaf clock-rate {
+          tailf:info "Metadata clock-rate";
+          description
+            "Metadata clock-rate";
+          tailf:cli-full-command;
+          type empty;
+        }
+        leaf global-session-id {
+          tailf:info "Metadata global-session-id";
+          description
+            "Metadata global-session-id";
+          tailf:cli-full-command;
+          type empty;
+        }
+        leaf multi-party-session-id {
+          tailf:info "Metadata multi-party-session-id";
+          description
+            "Metadata multi-party-session-id";
+          tailf:cli-full-command;
+          type empty;
+        }
+      }
+      container monitor {
+        tailf:info "monitor fields";
+        description
+          "monitor fields";
+        leaf event {
+          tailf:info "Flags indicating monitor events";
+          description
+            "Flags indicating monitor events";
+          tailf:cli-full-command;
+          type empty;
+        }
+      }
+      container mpls {
+        tailf:info "MPLS fields";
+        description
+          "MPLS fields";
+        uses flow-mpls-grouping;
+      }
+      container network {
+        tailf:info "network metrics";
+        description
+          "network metrics";
+        uses flow-network-grouping;
+      }
+      container pfr {
+        tailf:info "PfR metrics";
+        description
+          "PfR metrics";
+        uses flow-pfr-grouping;
+      }
+      container policy {
+        tailf:info "policy fields";
+        description
+          "policy fields";
+        uses flow-policy-grouping;
+      }
+      container routing {
+        tailf:info "Routing attributes";
+        description
+          "Routing attributes";
+        uses flow-routing-grouping;
+      }
+      container services {
+        tailf:info "Services fields";
+        description
+          "Services fields";
+        uses flow-services-grouping;
+      }
+      container timestamp {
+        tailf:info "Timestamp fields";
+        description
+          "Timestamp fields";
+        container absolute {
+          tailf:info "Timestamps based on the epoch of 00:00 UTC 1st Jan 1970";
+          description
+            "Timestamps based on the epoch of 00:00 UTC 1st Jan 1970";
+          leaf first {
+            tailf:info "Absolute time the first packet was seen (milliseconds)";
+            description
+              "Absolute time the first packet was seen (milliseconds)";
+            tailf:cli-full-command;
+            type empty;
+          }
+          leaf last {
+            tailf:info "Absolute time the most recent packet was seen (milliseconds)";
+            description
+              "Absolute time the most recent packet was seen (milliseconds)";
+            tailf:cli-full-command;
+            type empty;
+          }
+          container monitoring-interval {
+            tailf:info "Monitoring interval timestamps";
+            description
+              "Monitoring interval timestamps";
+            leaf end {
+              tailf:info "Absolute end time of a monitoring interval (milliseconds)";
+              description
+                "Absolute end time of a monitoring interval (milliseconds)";
+              tailf:cli-full-command;
+              type empty;
+            }
+            leaf start {
+              tailf:info "Absolute start time of a monitoring interval (milliseconds)";
+              description
+                "Absolute start time of a monitoring interval (milliseconds)";
+              tailf:cli-full-command;
+              type empty;
+            }
+          }
+        }
+        leaf interval {
+          tailf:info "Epoch of a monitoring interval";
+          description
+            "Epoch of a monitoring interval";
+          tailf:cli-full-command;
+          type empty;
+        }
+        container sys-uptime {
+          tailf:info "Timestamps based on the sys-uptime";
+          description
+            "Timestamps based on the sys-uptime";
+          leaf first {
+            tailf:info "Time the first packet was seen";
+            description
+              "Time the first packet was seen";
+            tailf:cli-full-command;
+            type empty;
+          }
+          leaf last {
+            tailf:info "Time the most recent packet was seen";
+            description
+              "Time the most recent packet was seen";
+            tailf:cli-full-command;
+            type empty;
+          }
+        }
+      }
+      container transport {
+        tailf:info "Transport layer fields";
+        description
+          "Transport layer fields";
+        container bytes {
+          tailf:info "Bytes fields";
+          description
+            "Bytes fields";
+          leaf expected {
+            tailf:info "Transport bytes expected";
+            description
+              "Transport bytes expected";
+            tailf:cli-full-command;
+            type empty;
+          }
+          container lost {
+            tailf:info "Transport bytes lost";
+            description
+              "Transport bytes lost";
+            presence "true";
+            leaf rate {
+              tailf:info "Transport bytes lost rate";
+              description
+                "Transport bytes lost rate";
+              tailf:cli-full-command;
+              type empty;
+            }
+          }
+          leaf out-of-order {
+            tailf:info "Total number of out-of-order bytes";
+            description
+              "Total number of out-of-order bytes";
+            tailf:cli-full-command;
+            type empty;
+          }
+        }
+        uses flow-transport-common-grouping;
+        container event {
+          tailf:info "Transport event fields";
+          description
+            "Transport event fields";
+          container packet-loss {
+            tailf:info "Transport event packet-loss fields";
+            description
+              "Transport event packet-loss fields";
+            container counter {
+              tailf:info "Count of sets of packets that were lost";
+              description
+                "Count of sets of packets that were lost";
+              presence "true";
+              leaf max {
+                tailf:info "Highest packet loss counter when multiple flows are aggregated";
+                description
+                  "Highest packet loss counter when multiple flows are aggregated";
+                tailf:cli-full-command;
+                type empty;
+              }
+              leaf min {
+                tailf:info "Lowest packet loss counter when multiple flows are aggregated";
+                description
+                  "Lowest packet loss counter when multiple flows are aggregated";
+                tailf:cli-full-command;
+                type empty;
+              }
+            }
+          }
+        }
+        container packets {
+          tailf:info "Transport packet fields";
+          description
+            "Transport packet fields";
+          container expected {
+            tailf:info "Transport packets expected fields";
+            description
+              "Transport packets expected fields";
+            leaf counter {
+              tailf:info "Expected number of packets from sequencing information";
+              description
+                "Expected number of packets from sequencing information";
+              tailf:cli-full-command;
+              type empty;
+            }
+          }
+          container lost {
+            tailf:info "Transport packets lost fields";
+            description
+              "Transport packets lost fields";
+            container counter {
+              tailf:info "A count of the number of lost packets from sequencing information";
+              description
+                "A count of the number of lost packets from sequencing information";
+              presence "true";
+              leaf max {
+                tailf:info "Highest lost packet count seen among the aggregated flows";
+                description
+                  "Highest lost packet count seen among the aggregated flows";
+                tailf:cli-full-command;
+                type empty;
+              }
+              leaf min {
+                tailf:info "Lowest lost packet count seen among the aggregated flows";
+                description
+                  "Lowest lost packet count seen among the aggregated flows";
+                tailf:cli-full-command;
+                type empty;
+              }
+            }
+            container rate {
+              tailf:info "Packet loss rate from sequencing information";
+              description
+                "Packet loss rate from sequencing information";
+              presence "true";
+              leaf max {
+                tailf:info "Maximum packet loss rate in the aggregated flows";
+                description
+                  "Maximum packet loss rate in the aggregated flows";
+                tailf:cli-full-command;
+                type empty;
+              }
+              leaf min {
+                tailf:info "Minimum packet loss rate in the aggregated flows";
+                description
+                  "Minimum packet loss rate in the aggregated flows";
+                tailf:cli-full-command;
+                type empty;
+              }
+            }
+          }
+          leaf out-of-order {
+            tailf:info "Total number of out-of-order bytes";
+            description
+              "Total number of out-of-order bytes";
+            tailf:cli-full-command;
+            type empty;
+          }
+        }
+        container round-trip-time {
+          tailf:info "RTT calculation for flow";
+          description
+            "RTT calculation for flow";
+          presence "true";
+          leaf max {
+            tailf:info "Highest RTT among all flows";
+            description
+              "Highest RTT among all flows";
+            tailf:cli-full-command;
+            type empty;
+          }
+          leaf min {
+            tailf:info "Lowest RTT among all flows";
+            description
+              "Lowest RTT among all flows";
+            tailf:cli-full-command;
+            type empty;
+          }
+          leaf samples {
+            tailf:info "RTT samples";
+            description
+              "RTT samples";
+            tailf:cli-full-command;
+            type empty;
+          }
+          leaf sum {
+            tailf:info "Sum RTT for all flows";
+            description
+              "Sum RTT for all flows";
+            tailf:cli-full-command;
+            type empty;
+          }
+        }
+        container rtp {
+          tailf:info "RTP fields";
+          description
+            "RTP fields";
+          container flow {
+            tailf:info "RTP  flow";
+            description
+              "RTP  flow";
+            leaf count {
+              tailf:info "Number of RTP flows";
+              description
+                "Number of RTP flows";
+              tailf:cli-full-command;
+              type empty;
+            }
+          }
+          container jitter {
+            tailf:info "RTP jitter fields";
+            description
+              "RTP jitter fields";
+            leaf maximum {
+              tailf:info "Maximum jitter for the RTP stream";
+              description
+                "Maximum jitter for the RTP stream";
+              tailf:cli-full-command;
+              type empty;
+            }
+            container mean {
+              tailf:info "Mean jitter for the RTP stream";
+              description
+                "Mean jitter for the RTP stream";
+              presence "true";
+              leaf sum {
+                tailf:info "The sum of jitter mean for the RTP stream";
+                description
+                  "The sum of jitter mean for the RTP stream";
+                tailf:cli-full-command;
+                type empty;
+              }
+            }
+            leaf minimum {
+              tailf:info "Minimum jitter for the RTP stream";
+              description
+                "Minimum jitter for the RTP stream";
+              tailf:cli-full-command;
+              type empty;
+            }
+          }
+          leaf payload-type {
+            tailf:info "RTP payload type";
+            description
+              "RTP payload type";
+            tailf:cli-full-command;
+            type empty;
+          }
+          leaf ssrc {
+            tailf:info "RTP SSRC";
+            description
+              "RTP SSRC";
+            tailf:cli-full-command;
+            type empty;
+          }
+        }
+      }
+    }
+  }
+
+  grouping flow-record-match-grouping {
+    container match {
+      tailf:info "Specify a key field";
+      description
+        "Specify a key field";
+      container application {
+        tailf:info "Application fields";
+        description
+          "Application fields";
+        uses flow-name-grouping;
+        uses flow-vendor-version-grouping;
+      }
+      container connection {
+        tailf:info "Connection fields";
+        description
+          "Connection fields";
+        container client {
+          tailf:info "Client side (flow initiator) related metrics";
+          description
+            "Client side (flow initiator) related metrics";
+          uses flow-client-ipv4-ipv6-transport-grouping;
+        }
+        uses flow-id-initiator-grouping;
+        container server {
+          tailf:info "Server side (flow responder) related metrics";
+          description
+            "Server side (flow responder) related metrics";
+          uses flow-server-ipv4-ipv6-transport-grouping;
+        }
+        uses flow-transaction-id-grouping;
+      }
+      container datalink {
+        tailf:info "Datalink (layer2) fields";
+        description
+          "Datalink (layer2) fields";
+        uses flow-datalink-grouping;
+      }
+      container flow {
+        tailf:info "Flow identifying fields";
+        description
+          "Flow identifying fields";
+        uses flow-flow-common-grouping;
+      }
+      container interface {
+        tailf:info "Interface fields";
+        description
+          "Interface fields";
+        uses flow-interface-grouping;
+      }
+      container ipv4 {
+        tailf:info "IPv4 fields";
+        description
+          "IPv4 fields";
+        uses flow-ipv4-grouping;
+      }
+      container ipv6 {
+        tailf:info "IPv6 fields";
+        description
+          "IPv6 fields";
+        uses flow-ipv6-grouping;
+      }
+      container metadata {
+        tailf:info "Metadata fields";
+        description
+          "Metadata fields";
+        leaf global-session-id {
+          tailf:info "Metadata global-session-id";
+          description
+            "Metadata global-session-id";
+          tailf:cli-full-command;
+          type empty;
+        }
+        leaf multi-party-session-id {
+          tailf:info "Metadata multi-party-session-id";
+          description
+            "Metadata multi-party-session-id";
+          tailf:cli-full-command;
+          type empty;
+        }
+      }
+      container mpls {
+        tailf:info "MPLS fields";
+        description
+          "MPLS fields";
+        uses flow-mpls-grouping;
+      }
+      container network {
+        tailf:info "network metrics";
+        description
+          "network metrics";
+        uses flow-network-grouping;
+      }
+      container pfr {
+        tailf:info "PfR metrics";
+        description
+          "PfR metrics";
+        uses flow-pfr-grouping;
+      }
+      container policy {
+        tailf:info "policy fields";
+        description
+          "policy fields";
+        uses flow-policy-grouping;
+      }
+      container routing {
+        tailf:info "Routing attributes";
+        description
+          "Routing attributes";
+        uses flow-routing-grouping;
+      }
+      container services {
+        tailf:info "Services fields";
+        description
+          "Services fields";
+        uses flow-services-grouping;
+      }
+      container timestamp {
+        tailf:info "Timestamp fields";
+        description
+          "Timestamp fields";
+        container absolute {
+          tailf:info "Timestamps based on the epoch of 00:00 UTC 1st Jan 1970";
+          description
+            "Timestamps based on the epoch of 00:00 UTC 1st Jan 1970";
+          container monitoring-interval {
+            tailf:info "Monitoring interval timestamps";
+            description
+              "Monitoring interval timestamps";
+            leaf start {
+              tailf:info "Absolute start time of a monitoring interval (milliseconds)";
+              description
+                "Absolute start time of a monitoring interval (milliseconds)";
+              tailf:cli-full-command;
+              type empty;
+            }
+          }
+        }
+      }
+      container transport {
+        tailf:info "Transport layer fields";
+        description
+          "Transport layer fields";
+        container bytes {
+          tailf:info "Bytes fields";
+          description
+            "Bytes fields";
+          leaf expected {
+            tailf:info "Transport bytes expected";
+            description
+              "Transport bytes expected";
+            tailf:cli-full-command;
+            type empty;
+          }
+          container lost {
+            tailf:info "Transport bytes lost";
+            description
+              "Transport bytes lost";
+            presence "true";
+            leaf rate {
+              tailf:info "Transport bytes lost rate";
+              description
+                "Transport bytes lost rate";
+              tailf:cli-full-command;
+              type empty;
+            }
+          }
+        }
+        container rtp {
+          tailf:info "RTP fields";
+          description
+            "RTP fields";
+          leaf ssrc {
+            tailf:info "RTP SSRC";
+            description
+              "RTP SSRC";
+            tailf:cli-full-command;
+            type empty;
+          }
+        }
+        uses flow-transport-common-grouping;
+      }
+    }
+  }
+
+  grouping flow-monitor-record-netflow-grouping {
+    container as {
+      tailf:info "AS aggregation schemes";
+      description
+        "AS aggregation schemes";
+      presence "true";
+      leaf peer {
+        tailf:info "AS aggregation scheme with peer ASs";
+        description
+          "AS aggregation scheme with peer ASs";
+        tailf:cli-full-command;
+        type empty;
+      }
+    }
+    container destination-prefix {
+      tailf:info "Destination Prefix aggregation schemes";
+      description
+        "Destination Prefix aggregation schemes";
+      presence "true";
+      leaf peer {
+        tailf:info "Destination Prefix aggregation scheme with peer AS";
+        description
+          "Destination Prefix aggregation scheme with peer AS";
+        tailf:cli-full-command;
+        type empty;
+      }
+    }
+    container original-input {
+      tailf:info "Traditional IPv6 input NetFlow with ASs";
+      description
+        "Traditional IPv6 input NetFlow with ASs";
+      presence "true";
+      leaf peer {
+        tailf:info "Traditional IPv6 input NetFlow with peer ASs";
+        description
+          "Traditional IPv6 input NetFlow with peer ASs";
+        tailf:cli-full-command;
+        type empty;
+      }
+    }
+    container original-output {
+      tailf:info "Traditional IPv6 output NetFlow with ASs";
+      description
+        "Traditional IPv6 output NetFlow with ASs";
+      presence "true";
+      leaf peer {
+        tailf:info "Traditional IPv6 output NetFlow with peer ASs";
+        description
+          "Traditional IPv6 output NetFlow with peer ASs";
+        tailf:cli-full-command;
+        type empty;
+      }
+    }
+    container prefix {
+      tailf:info "Source and Destination Prefixes aggregation schemes";
+      description
+        "Source and Destination Prefixes aggregation schemes";
+      presence "true";
+      leaf peer {
+        tailf:info "Source and Destination Prefixes aggregation scheme with peer ASs";
+        description
+          "Source and Destination Prefixes aggregation scheme with peer ASs";
+        tailf:cli-full-command;
+        type empty;
+      }
+    }
+    leaf protocol-port {
+      tailf:info "Protocol and Ports aggregation scheme";
+      description
+        "Protocol and Ports aggregation scheme";
+      tailf:cli-full-command;
+      type empty;
+    }
+    container source-prefix {
+      tailf:info "Source AS and Prefix aggregation schemes";
+      description
+        "Source AS and Prefix aggregation schemes";
+      presence "true";
+      leaf peer {
+        tailf:info "Source AS and Prefix aggregation scheme with peer AS";
+        description
+          "Source AS and Prefix aggregation scheme with peer AS";
+        tailf:cli-full-command;
+        type empty;
+      }
+    }
+  }
+
+  grouping flow-monitor-grouping {
+    container cache {
+      tailf:info "Monitor cache entries";
+      description
+        "Monitor cache entries";
+      leaf entries {
+        tailf:info "Number of cache entries";
+        description
+          "Number of cache entries";
+        tailf:cli-full-command;
+        type uint32 {
+          tailf:info "<16-2000000>;;Number of cache entries";
+          range "16..2000000";
+        }
+      }
+      container timeout {
+        tailf:info "Cache timeout";
+        description
+          "Cache timeout";
+        leaf active {
+          tailf:info "Active timeout";
+          description
+            "Active timeout";
+          tailf:cli-full-command;
+          type uint32 {
+            tailf:info "<1-604800>;;Active timeout value";
+            range "1..604800";
+          }
+        }
+        container event {
+          tailf:info "Timeout event";
+          description
+            "Timeout event";
+          leaf transaction-end {
+            tailf:info "Transaction-end event";
+            description
+              "Transaction-end event";
+            tailf:cli-full-command;
+            type empty;
+          }
+        }
+        leaf inactive {
+          tailf:info "Inactive timeout";
+          description
+            "Inactive timeout";
+          tailf:cli-full-command;
+          type uint32 {
+            tailf:info "<1-604800>;;Inactive timeout value";
+            range "1..604800";
+          }
+        }
+        leaf synchronized {
+          tailf:info "Synchronized timeout";
+          description
+            "Synchronized timeout";
+          tailf:cli-full-command;
+          type uint16 {
+            tailf:info "<1-300>;;Synchronized timeout value";
+            range "1..300";
+          }
+        }
+      }
+      leaf type {
+        tailf:info "Cache type";
+        description
+          "Cache type";
+        tailf:cli-full-command;
+        type enumeration {
+          enum "immediate" {
+            tailf:info "Immediate cache type";
+          }
+          enum "normal" {
+            tailf:info "Normal cache type";
+          }
+          enum "permanent" {
+            tailf:info "Permanent cache type";
+          }
+          enum "synchronized" {
+            tailf:info "synchronized cache type";
+          }
+        }
+      }
+    }
+    leaf description {
+      tailf:info "Provide a description for this Flow Monitor";
+      description
+        "Provide a description for this Flow Monitor";
+      tailf:cli-multi-value;
+      tailf:cli-full-command;
+      type string {
+        tailf:info "LINE;;Flow Monitor description";
+      }
+    }
+    list exporter {
+      tailf:info "Add an Exporter to use to export records";
+      description
+        "Add an Exporter to use to export records";
+      tailf:cli-suppress-mode;
+      key "name";
+      leaf name {
+        type string {
+          tailf:info "xxx;;User defined";
+        }
+      }
+    }
+    container history {
+      tailf:info "Monitor history intervals";
+      description
+        "Monitor history intervals";
+      tailf:cli-sequence-commands;
+      tailf:cli-compact-syntax;
+      leaf size {
+        tailf:info "History size";
+        description
+          "History size";
+        type uint8 {
+          tailf:info "<0-60>;;Number of intervals monitored";
+          range "0..60";
+        }
+      }
+      leaf timeout {
+        tailf:info "Specify timeout interval";
+        description
+          "Specify timeout interval";
+        tailf:cli-optional-in-sequence;
+        type uint8 {
+          tailf:info "<1-30>;;Timeout interval length";
+          range "1..30";
+        }
+      }
+    }
+    container record {
+      tailf:info "Specify Flow Record to use to define Cache";
+      description
+        "Specify Flow Record to use to define Cache";
+      leaf type {
+        tailf:cli-drop-node-name;
+        type union {
+          type enumeration {
+            enum "default-rtp" {
+              tailf:info "VM default RTP record";
+            }
+            enum "default-tcp" {
+              tailf:info "VM default TCP record";
+            }
+            enum "netflow-original" {
+              tailf:info "Traditional IPv4 input NetFlow with origin ASs";
+            }
+          }
+          type string {
+            tailf:info "xxx;;User defined";
+          }
+        }
+      }
+      container netflow {
+        tailf:info "Traditional NetFlow collection schemes";
+        description
+          "Traditional NetFlow collection schemes";
+        container ipv4 {
+          tailf:info "Traditional IPv4 NetFlow collection schemes";
+          description
+            "Traditional IPv4 NetFlow collection schemes";
+          uses flow-monitor-record-netflow-grouping;
+          container as-tos {
+            tailf:info "AS and TOS aggregation schemes";
+            description
+              "AS and TOS aggregation schemes";
+            presence "true";
+            leaf peer {
+              tailf:info "AS and TOS aggregation scheme with peer ASs";
+              description
+                "AS and TOS aggregation scheme with peer ASs";
+              tailf:cli-full-command;
+              type empty;
+            }
+          }
+          container bgp-nexthop-tos {
+            tailf:info "BGP next-hop and TOS aggregation schemes";
+            description
+              "BGP next-hop and TOS aggregation schemes";
+            presence "true";
+            leaf peer {
+              tailf:info "BGP next-hop and TOS aggregation scheme with peer ASs";
+              description
+                "BGP next-hop and TOS aggregation scheme with peer ASs";
+              tailf:cli-full-command;
+              type empty;
+            }
+          }
+          container destination-prefix-tos {
+            tailf:info "Destination Prefix and TOS  aggregation schemes";
+            description
+              "Destination Prefix and TOS  aggregation schemes";
+            presence "true";
+            leaf peer {
+              tailf:info "Destination Prefix and TOS aggregation scheme with peer AS";
+              description
+                "Destination Prefix and TOS aggregation scheme with peer AS";
+              tailf:cli-full-command;
+              type empty;
+            }
+          }
+          leaf prefix-port {
+            tailf:info "Prefixes and Ports aggregation scheme";
+            description
+              "Prefixes and Ports aggregation scheme";
+            tailf:cli-full-command;
+            type empty;
+          }
+          container prefix-tos {
+            tailf:info "Prefixes and TOS aggregation schemes";
+            description
+              "Prefixes and TOS aggregation schemes";
+            presence "true";
+            leaf peer {
+              tailf:info "Prefixes and TOS aggregation scheme with peer ASs";
+              description
+                "Prefixes and TOS aggregation scheme with peer ASs";
+              tailf:cli-full-command;
+              type empty;
+            }
+          }
+          leaf protocol-port-tos {
+            tailf:info "Protocol, Ports and TOS aggregation scheme";
+            description
+              "Protocol, Ports and TOS aggregation scheme";
+            tailf:cli-full-command;
+            type empty;
+          }
+          container source-prefix-tos {
+            tailf:info "Source Prefix and TOS aggregation schemes";
+            description
+              "Source Prefix and TOS aggregation schemes";
+            presence "true";
+            leaf peer {
+              tailf:info "Source Prefix and TOS aggregation scheme with peer AS";
+              description
+                "Source Prefix and TOS aggregation scheme with peer AS";
+              tailf:cli-full-command;
+              type empty;
+            }
+          }
+        }
+        container ipv6 {
+          tailf:info "Traditional IPv6 NetFlow collection schemes";
+          description
+            "Traditional IPv6 NetFlow collection schemes";
+          uses flow-monitor-record-netflow-grouping;
+          container bgp-nexthop {
+            tailf:info "BGP next-hop aggregation schemes";
+            description
+              "BGP next-hop aggregation schemes";
+            presence "true";
+            leaf peer {
+              tailf:info "BGP next-hop aggregation scheme with peer ASs";
+              description
+                "BGP next-hop aggregation scheme with peer ASs";
+              tailf:cli-full-command;
+              type empty;
+            }
+          }
+        }
+      }
+    }
+    container statistics {
+      tailf:info "Collect statistics";
+      description
+        "Collect statistics";
+      container packet {
+        tailf:info "Collect packet statistics";
+        description
+          "Collect packet statistics";
+        leaf protocol {
+          tailf:info "Collect packet protocol distribution statistics";
+          description
+            "Collect packet protocol distribution statistics";
+          tailf:cli-full-command;
+          type empty;
+        }
+        leaf size {
+          tailf:info "Collect packet size distribution statistics";
+          description
+            "Collect packet size distribution statistics";
+          tailf:cli-full-command;
+          type empty;
+        }
+      }
+    }
+  }
+
+  grouping flow-default-monitor-grouping {
+    container cache {
+      tailf:info "Monitor cache entries";
+      description
+        "Monitor cache entries";
+      leaf entries {
+        tailf:info "Maximum flow entries in the Flow Cache";
+        description
+          "Maximum flow entries in the Flow Cache";
+        tailf:cli-full-command;
+        type empty;
+      }
+      container timeout {
+        tailf:info "Configure flow cache timeout parameters";
+        description
+          "Configure flow cache timeout parameters";
+        leaf active {
+          tailf:info "Specify the active flow timeout";
+          description
+            "Specify the active flow timeout";
+          tailf:cli-full-command;
+          type empty;
+        }
+        container event {
+          tailf:info "Event-based export";
+          description
+            "Event-based export";
+          leaf transaction-end {
+            tailf:info "Export on transaction end event";
+            description
+              "Export on transaction end event";
+            tailf:cli-full-command;
+            type empty;
+          }
+        }
+        leaf inactive {
+          tailf:info "Specify the inactive flow timeout";
+          description
+            "Specify the inactive flow timeout";
+          tailf:cli-full-command;
+          type empty;
+        }
+        leaf synchronized {
+          tailf:info "Specify the timeout for a synchronized Flow Cache";
+          description
+            "Specify the timeout for a synchronized Flow Cache";
+          tailf:cli-full-command;
+          type empty;
+        }
+        leaf update {
+          tailf:info "Specify the update timeout for a permanent Flow Cache";
+          description
+            "Specify the update timeout for a permanent Flow Cache";
+          tailf:cli-full-command;
+          type empty;
+        }
+      }
+      leaf type {
+        tailf:info "Set the type of the Flow Cache";
+        description
+          "Set the type of the Flow Cache";
+        tailf:cli-full-command;
+        type empty;
+      }
+    }
+    leaf description {
+      tailf:info "Provide a description for this Flow Monitor";
+      description
+        "Provide a description for this Flow Monitor";
+      tailf:cli-full-command;
+      type empty;
+    }
+    leaf exporter {
+      tailf:info "Add an Exporter to use to export records";
+      description
+        "Add an Exporter to use to export records";
+      tailf:cli-full-command;
+      type empty;
+    }
+    leaf record {
+      tailf:info "Specify Flow Record to use to define Cache";
+      description
+        "Specify Flow Record to use to define Cache";
+      tailf:cli-full-command;
+      type empty;
+    }
+    container statistics {
+      tailf:info "Collect statistics";
+      description
+        "Collect statistics";
+      container packet {
+        tailf:info "Collect packet statistics";
+        description
+          "Collect packet statistics";
+        leaf protocol {
+          tailf:info "Collect packet protocol distribution statistics";
+          description
+            "Collect packet protocol distribution statistics";
+          tailf:cli-full-command;
+          type empty;
+        }
+        leaf size {
+          tailf:info "Collect packet size distribution statistics";
+          description
+            "Collect packet size distribution statistics";
+          tailf:cli-full-command;
+          type empty;
+        }
+      }
+    }
+  }
+
+  grouping flow-exporter-option-timeout-grouping {
+    leaf timeout {
+      tailf:info "Option resend time";
+      description
+        "Option resend time";
+      type uint32 {
+        tailf:info "<1-86400>;;Time in seconds";
+        range "1..86400";
+      }
+    }
+  }
+
+  grouping flow-exporter-grouping {
+    leaf description {
+      tailf:info "Provide a description for this Flow Exporter";
+      description
+        "Provide a description for this Flow Exporter";
+      tailf:cli-multi-value;
+      tailf:cli-full-command;
+      type string {
+        tailf:info "LINE;;Flow Exporter description";
+      }
+    }
+    container destination {
+      tailf:info "Export destination configuration";
+      description
+        "Export destination configuration";
+      tailf:cli-sequence-commands;
+      tailf:cli-compact-syntax;
+      leaf ip {
+        tailf:cli-drop-node-name;
+        type inet:ip-address {
+          tailf:info "Hostname or A.B.C.D;;Destination IPv4 address or hostnameHostname or X:X:X:X::X;;Destination IPv6 address or hostname";
+        }
+      }
+      leaf vrf {
+        tailf:info "Optional VRF label";
+        description
+          "Optional VRF label";
+        tailf:cli-optional-in-sequence;
+        type string {
+          tailf:info "WORD;;VRF Label";
+        }
+      }
+    }
+    leaf dscp {
+      tailf:info "Optional DSCP";
+      description
+        "Optional DSCP";
+      tailf:cli-full-command;
+      type uint8 {
+        tailf:info "<0-63>;;Differentiated services codepoint value";
+        range "0..63";
+      }
+    }
+    leaf export-protocol {
+      tailf:info "Export protocol version";
+      description
+        "Export protocol version";
+      tailf:cli-full-command;
+      type enumeration {
+        enum "ipfix" {
+          tailf:info "IPFIX (Version 10)";
+        }
+        enum "netflow-v5" {
+          tailf:info "NetFlow Version 5";
+        }
+        enum "netflow-v9" {
+          tailf:info "NetFlow Version 9";
+        }
+      }
+    }
+    container option {
+      tailf:info "Select an option for exporting";
+      description
+        "Select an option for exporting";
+      container application-attributes {
+        tailf:info "Application Attributes Table Option";
+        description
+          "Application Attributes Table Option";
+        presence "true";
+        uses flow-exporter-option-timeout-grouping;
+      }
+      container application-table {
+        tailf:info "Application Table Option";
+        description
+          "Application Table Option";
+        presence "true";
+        uses flow-exporter-option-timeout-grouping;
+      }
+      container c3pl-class-table {
+        tailf:info "C3PL class cce-id table";
+        description
+          "C3PL class cce-id table";
+        presence "true";
+        uses flow-exporter-option-timeout-grouping;
+      }
+      container c3pl-policy-table {
+        tailf:info "C3PL policy cce-id table";
+        description
+          "C3PL policy cce-id table";
+        presence "true";
+        uses flow-exporter-option-timeout-grouping;
+      }
+      container exporter-stats {
+        tailf:info "Exporter Statistics Option";
+        description
+          "Exporter Statistics Option";
+        presence "true";
+        uses flow-exporter-option-timeout-grouping;
+      }
+      container interface-table {
+        tailf:info "Interface SNMP-index-to-name Table Option";
+        description
+          "Interface SNMP-index-to-name Table Option";
+        presence "true";
+        uses flow-exporter-option-timeout-grouping;
+      }
+      container metadata-version-table {
+        tailf:info "Metadata Version Table Option";
+        description
+          "Metadata Version Table Option";
+        presence "true";
+        uses flow-exporter-option-timeout-grouping;
+      }
+      container sampler-table {
+        tailf:info "Export Sampler Option";
+        description
+          "Export Sampler Option";
+        presence "true";
+        uses flow-exporter-option-timeout-grouping;
+      }
+      container sub-application-table {
+        tailf:info "Sub Application Table Option";
+        description
+          "Sub Application Table Option";
+        presence "true";
+        uses flow-exporter-option-timeout-grouping;
+      }
+      container vrf-table {
+        tailf:info "VRF ID-to-name Table Option";
+        description
+          "VRF ID-to-name Table Option";
+        presence "true";
+        uses flow-exporter-option-timeout-grouping;
+      }
+    }
+    container output-features {
+      presence "true";
+    }
+    container source {
+      tailf:info "Originating interface";
+      description
+        "Originating interface";
+      uses interface-grouping;
+    }
+    container template {
+      tailf:info "Flow Exporter template configuration";
+      description
+        "Flow Exporter template configuration";
+      container data {
+        tailf:info "Flow Exporter data configuration";
+        description
+          "Flow Exporter data configuration";
+        leaf timeout {
+          tailf:info "Resend data based on a timeout";
+          description
+            "Resend data based on a timeout";
+          tailf:cli-full-command;
+          type uint32 {
+            tailf:info "<1-86400>;;Value given in seconds";
+            range "1..86400";
+          }
+        }
+      }
+    }
+    container transport {
+      tailf:info "Transport protocol";
+      description
+        "Transport protocol";
+      leaf udp {
+        tailf:info "UDP transport protocol";
+        description
+          "UDP transport protocol";
+        tailf:cli-full-command;
+        type uint16 {
+          tailf:info " <1-65535>;;Port value";
+        }
+      }
+    }
+    leaf ttl {
+      tailf:info "Optional TTL or hop limit";
+      description
+        "Optional TTL or hop limit";
+      tailf:cli-full-command;
+      type uint8 {
+        tailf:info "<1-255>;;TTL value";
+      }
+    }
+  }
+
+  grouping flow-default-exporter-grouping {
+    leaf description {
+      tailf:info "Provide a description for this Flow Exporter";
+      description
+        "Provide a description for this Flow Exporter";
+      tailf:cli-full-command;
+      type empty;
+    }
+    leaf dscp {
+      tailf:info "Optional DSCP";
+      description
+        "Optional DSCP";
+      tailf:cli-full-command;
+      type empty;
+    }
+    leaf export-protocol {
+      tailf:info "Export protocol version";
+      description
+        "Export protocol version";
+      tailf:cli-full-command;
+      type empty;
+    }
+    container option {
+      tailf:info "Select an option for exporting";
+      description
+        "Select an option for exporting";
+      container application-attributes {
+        tailf:info "Application Attributes Table Option";
+        description
+          "Application Attributes Table Option";
+        presence "true";
+      }
+      container c3pl-class-table {
+        tailf:info "C3PL class cce-id table";
+        description
+          "C3PL class cce-id table";
+        presence "true";
+      }
+      container c3pl-policy-table {
+        tailf:info "C3PL policy cce-id table";
+        description
+          "C3PL policy cce-id table";
+        presence "true";
+      }
+      container exporter-stats {
+        tailf:info "Exporter Statistics Option";
+        description
+          "Exporter Statistics Option";
+        presence "true";
+      }
+      container interface-table {
+        tailf:info "Interface SNMP-index-to-name Table Option";
+        description
+          "Interface SNMP-index-to-name Table Option";
+        presence "true";
+      }
+      container metadata-version-table {
+        tailf:info "Metadata Version Table Option";
+        description
+          "Metadata Version Table Option";
+        presence "true";
+      }
+      container sampler-table {
+        tailf:info "Export Sampler Option";
+        description
+          "Export Sampler Option";
+        presence "true";
+      }
+      container sub-application-table {
+        tailf:info "Sub Application Table Option";
+        description
+          "Sub Application Table Option";
+        presence "true";
+      }
+      container vrf-table {
+        tailf:info "VRF ID-to-name Table Option";
+        description
+          "VRF ID-to-name Table Option";
+        presence "true";
+      }
+    }
+    container template {
+      tailf:info "Flow Exporter template configuration";
+      description
+        "Flow Exporter template configuration";
+      container data {
+        tailf:info "Flow Exporter data configuration";
+        description
+          "Flow Exporter data configuration";
+        leaf timeout {
+          tailf:info "Resend data based on a timeout";
+          description
+            "Resend data based on a timeout";
+          tailf:cli-full-command;
+          type empty;
+        }
+      }
+    }
+    leaf transport {
+      tailf:info "Transport protocol";
+      description
+        "Transport protocol";
+      tailf:cli-full-command;
+      type empty;
+    }
+    leaf ttl {
+      tailf:info "Optional TTL or hop limit";
+      description
+        "Optional TTL or hop limit";
+      tailf:cli-full-command;
+      type empty;
+    }
+  }
+
+  grouping pm-context-traffic-monitor-app-traffic-stats-grouping {
+    leaf cache-size {
+      tailf:info "Maximum flow entries in the Flow Cache";
+      description
+        "Maximum flow entries in the Flow Cache";
+      type uint32 {
+        tailf:info "<64-2000000>  Maximum number of entries";
+        range "64..2000000";
+      }
+    }
+    leaf class-replace {
+      tailf:info "Replace traffic classification";
+      description
+        "Replace traffic classification";
+      type string {
+        tailf:info "WORD;;User defined class name";
+      }
+    }
+    leaf interval-timeout {
+      tailf:info "The exporting interval timeout";
+      description
+        "The exporting interval timeout";
+      type uint32 {
+        tailf:info "<1-604800>;;Export interval timeout";
+        range "1..604800";
+      }
+    }
+  }
+
+  grouping pm-context-traffic-monitor-ip-grouping {
+    leaf ipv4 {
+      tailf:info "Activate monitor for ipv4 traffic";
+      description
+        "Activate monitor for ipv4 traffic";
+      type empty;
+    }
+    leaf ipv6 {
+      tailf:info "Activate monitor for ipv6 traffic";
+      description
+        "Activate monitor for ipv6 traffic";
+      type empty;
+    }
+  }
+
+  grouping performance-monitor-context-grouping {
+    container exporter {
+      tailf:info "Create exporter";
+      description
+        "Create exporter";
+      tailf:cli-sequence-commands {
+        tailf:cli-reset-all-siblings;
+      }
+      tailf:cli-compact-syntax;
+      leaf destination {
+        tailf:info "Export destination configuration";
+        description
+          "Export destination configuration";
+        type inet:ip-address {
+          tailf:info "Hostname or A.B.C.D;;Destination IPv4 address or hostnameHostname or X:X:X:X::X;;Destination IPv6 address or hostname";
+        }
+      }
+      leaf source {
+        tailf:info "Originating interface";
+        description
+          "Originating interface";
+        type string;
+      }
+      leaf port {
+        tailf:info "port";
+        description
+          "port";
+        tailf:cli-break-sequence-commands;
+        type uint16 {
+          tailf:info "<1-65535>;;Optional port value";
+        }
+      }
+      leaf transport {
+        tailf:info "transport";
+        description
+          "transport";
+        type enumeration {
+          enum "udp" {
+            tailf:info "UDP transport protocol";
+          }
+        }
+      }
+      leaf vrf {
+        tailf:info "vrf";
+        description
+          "vrf";
+        type string {
+          tailf:info "WORD;;VRF label";
+        }
+      }
+    }
+    container traffic-monitor {
+      tailf:info "Select traffic monitor";
+      description
+        "Select traffic monitor";
+      container all {
+        tailf:info "All traffic monitors in this profile";
+        description
+          "All traffic monitors in this profile";
+        when "../../profile = 'application-experience' and ../../profile = 'application-performance'";
+        presence "true";
+        leaf ipv4 {
+          tailf:info "Activate monitor for ipv4 traffic";
+          description
+            "Activate monitor for ipv4 traffic";
+          tailf:cli-full-command;
+          type empty;
+        }
+        leaf ipv6 {
+          tailf:info "Activate monitor for ipv6 traffic";
+          description
+            "Activate monitor for ipv6 traffic";
+          tailf:cli-full-command;
+          type empty;
+        }
+      }
+      container application-response-time {
+        tailf:info "Application response time (ART) metrics and counters for TCP traffic";
+        description
+          "Application response time (ART) metrics and counters for TCP traffic";
+        when "../../profile = 'application-experience' and ../../profile = 'application-performance'";
+        presence "true";
+        uses pm-context-traffic-monitor-app-traffic-stats-grouping;
+        leaf cache-type {
+          tailf:info "The type of the Flow Cache";
+          description
+            "The type of the Flow Cache";
+          type enumeration {
+            enum "normal" {
+              tailf:info "Normal flow removal from the Flow Cache";
+            }
+            enum "synchronized" {
+              tailf:info "The periodic and synchronized removal of all flows from the Flow Cache";
+            }
+          }
+        }
+        leaf class-and {
+          tailf:info "Narrow down default traffic classification";
+          description
+            "Narrow down default traffic classification";
+          type string {
+            tailf:info "WORD;;User defined class name";
+          }
+        }
+        uses pm-context-traffic-monitor-ip-grouping;
+      }
+      container application-traffic-stats {
+        tailf:info "Application level counters for dns and dht protocol";
+        description
+          "Application level counters for dns and dht protocol";
+        when "../../profile = 'application-experience'";
+        presence "true";
+        uses pm-context-traffic-monitor-app-traffic-stats-grouping;
+      }
+      container conversation-traffic-stats {
+        tailf:info "Conversation level counters for IP traffic";
+        description
+          "Conversation level counters for IP traffic";
+        when "../../profile = 'application-experience'";
+        presence "true";
+        uses pm-context-traffic-monitor-app-traffic-stats-grouping;
+        leaf cache-type {
+          tailf:info "The type of the Flow Cache";
+          description
+            "The type of the Flow Cache";
+          type enumeration {
+            enum "normal" {
+              tailf:info "Normal flow removal from the Flow Cache";
+            }
+            enum "synchronized" {
+              tailf:info "The periodic and synchronized removal of all flows from the Flow Cache";
+            }
+          }
+        }
+        uses pm-context-traffic-monitor-ip-grouping;
+      }
+      container media {
+        tailf:info "Media metrics and counters for rtp and telepresence-media traffic";
+        description
+          "Media metrics and counters for rtp and telepresence-media traffic";
+        when "../../profile = 'application-experience' and ../../profile = 'application-performance'";
+        presence "true";
+        uses pm-context-traffic-monitor-app-traffic-stats-grouping;
+        leaf class-and {
+          tailf:info "Narrow down default traffic classification";
+          description
+            "Narrow down default traffic classification";
+          type string {
+            tailf:info "WORD;;User defined class name";
+          }
+        }
+        leaf egress {
+          tailf:info "Activate monitor on egress direction";
+          description
+            "Activate monitor on egress direction";
+          type empty;
+        }
+        leaf ingress {
+          tailf:info "Activate monitor on ingress direction";
+          description
+            "Activate monitor on ingress direction";
+          type empty;
+        }
+        uses pm-context-traffic-monitor-ip-grouping;
+      }
+      container url {
+        tailf:info "URL information, application response time (ART) metrics and counters";
+        description
+          "URL information, application response time (ART) metrics and counters";
+        when "../../profile = 'application-experience' and ../../profile = 'application-performance'";
+        presence "true";
+        leaf cache-size {
+          tailf:info "Maximum flow entries in the Flow Cache";
+          description
+            "Maximum flow entries in the Flow Cache";
+          type uint32 {
+            tailf:info "<64-2000000>  Maximum number of entries";
+            range "64..2000000";
+          }
+        }
+        leaf class-and {
+          tailf:info "Narrow down default traffic classification";
+          description
+            "Narrow down default traffic classification";
+          type string {
+            tailf:info "WORD;;User defined class name";
+          }
+        }
+        leaf class-replace {
+          tailf:info "Replace traffic classification";
+          description
+            "Replace traffic classification";
+          type string {
+            tailf:info "WORD;;User defined class name";
+          }
+        }
+        uses pm-context-traffic-monitor-ip-grouping;
+        leaf sampling-rate {
+          tailf:info "Sampling rate of flow sampler";
+          description
+            "Sampling rate of flow sampler";
+          type uint32 {
+            tailf:info "<1-32768>;;Sampler rate";
+            range "1..32768";
+          }
+        }
+      }
+      container application-client-server-stats {
+        tailf:info "Per interface, client, server and application statistics";
+        description
+          "Per interface, client, server and application statistics";
+        presence "true";
+        when "../../profile = 'application-performance' and ../../profile = 'application-statistics'";
+        uses pm-context-traffic-monitor-app-traffic-stats-grouping;
+        leaf cache-type {
+          tailf:info "The type of the Flow Cache";
+          description
+            "The type of the Flow Cache";
+          type enumeration {
+            enum "normal" {
+              tailf:info "Normal flow removal from the Flow Cache";
+            }
+            enum "synchronized" {
+              tailf:info "The periodic and synchronized removal of all flows from the Flow Cache";
+            }
+          }
+        }
+        uses pm-context-traffic-monitor-ip-grouping;
+      }
+      container application-stats {
+        tailf:info "Per application and interface statistics";
+        description
+          "Per application and interface statistics";
+        presence "true";
+        when "../../profile = 'application-performance' and ../../profile = 'application-statistics'";
+        uses pm-context-traffic-monitor-app-traffic-stats-grouping;
+      }
+    }
+  }
+
+  grouping performance-monitor-context-default-grouping {
+    container exporter {
+      tailf:info "Create exporter";
+      description
+        "Create exporter";
+      tailf:cli-sequence-commands {
+        tailf:cli-reset-all-siblings;
+      }
+      tailf:cli-compact-syntax;
+      leaf destination {
+        tailf:info "Export destination configuration";
+        description
+          "Export destination configuration";
+        type inet:ip-address {
+          tailf:info "Hostname or A.B.C.D;;Destination IPv4 address or hostnameHostname or X:X:X:X::X;;Destination IPv6 address or hostname";
+        }
+      }
+      leaf source {
+        tailf:info "Originating interface";
+        description
+          "Originating interface";
+        type string;
+      }
+      leaf port {
+        tailf:info "port";
+        description
+          "port";
+        tailf:cli-break-sequence-commands;
+        type uint16 {
+          tailf:info "<1-65535>;;Optional port value";
+        }
+      }
+      leaf transport {
+        tailf:info "transport";
+        description
+          "transport";
+        type enumeration {
+          enum "udp" {
+            tailf:info "UDP transport protocol";
+          }
+        }
+      }
+      leaf vrf {
+        tailf:info "vrf";
+        description
+          "vrf";
+        type string {
+          tailf:info "WORD;;VRF label";
+        }
+      }
+    }
+    container traffic-monitor {
+      tailf:info "Select traffic monitor";
+      description
+        "Select traffic monitor";
+      container all {
+        tailf:info "All traffic monitors in this profile";
+        description
+          "All traffic monitors in this profile";
+        when "../../../profile = 'application-experience' and ../../../profile = 'application-performance'";
+        presence "true";
+        leaf ipv4 {
+          tailf:info "Activate monitor for ipv4 traffic";
+          description
+            "Activate monitor for ipv4 traffic";
+          tailf:cli-full-command;
+          type empty;
+        }
+        leaf ipv6 {
+          tailf:info "Activate monitor for ipv6 traffic";
+          description
+            "Activate monitor for ipv6 traffic";
+          tailf:cli-full-command;
+          type empty;
+        }
+      }
+      container application-response-time {
+        tailf:info "Application response time (ART) metrics and counters for TCP traffic";
+        description
+          "Application response time (ART) metrics and counters for TCP traffic";
+        when "../../../profile = 'application-experience' and ../../../profile = 'application-performance'";
+        presence "true";
+        uses pm-context-traffic-monitor-app-traffic-stats-grouping;
+        leaf cache-type {
+          tailf:info "The type of the Flow Cache";
+          description
+            "The type of the Flow Cache";
+          type enumeration {
+            enum "normal" {
+              tailf:info "Normal flow removal from the Flow Cache";
+            }
+            enum "synchronized" {
+              tailf:info "The periodic and synchronized removal of all flows from the Flow Cache";
+            }
+          }
+        }
+        leaf class-and {
+          tailf:info "Narrow down default traffic classification";
+          description
+            "Narrow down default traffic classification";
+          type string {
+            tailf:info "WORD;;User defined class name";
+          }
+        }
+        uses pm-context-traffic-monitor-ip-grouping;
+      }
+      container application-traffic-stats {
+        tailf:info "Application level counters for dns and dht protocol";
+        description
+          "Application level counters for dns and dht protocol";
+        when "../../../profile = 'application-experience'";
+        presence "true";
+        uses pm-context-traffic-monitor-app-traffic-stats-grouping;
+      }
+      container conversation-traffic-stats {
+        tailf:info "Conversation level counters for IP traffic";
+        description
+          "Conversation level counters for IP traffic";
+        when "../../../profile = 'application-experience'";
+        presence "true";
+        uses pm-context-traffic-monitor-app-traffic-stats-grouping;
+        leaf cache-type {
+          tailf:info "The type of the Flow Cache";
+          description
+            "The type of the Flow Cache";
+          type enumeration {
+            enum "normal" {
+              tailf:info "Normal flow removal from the Flow Cache";
+            }
+            enum "synchronized" {
+              tailf:info "The periodic and synchronized removal of all flows from the Flow Cache";
+            }
+          }
+        }
+        uses pm-context-traffic-monitor-ip-grouping;
+      }
+      container media {
+        tailf:info "Media metrics and counters for rtp and telepresence-media traffic";
+        description
+          "Media metrics and counters for rtp and telepresence-media traffic";
+        when "../../../profile = 'application-experience' and ../../../profile = 'application-performance'";
+        presence "true";
+        uses pm-context-traffic-monitor-app-traffic-stats-grouping;
+        leaf class-and {
+          tailf:info "Narrow down default traffic classification";
+          description
+            "Narrow down default traffic classification";
+          type string {
+            tailf:info "WORD;;User defined class name";
+          }
+        }
+        leaf egress {
+          tailf:info "Activate monitor on egress direction";
+          description
+            "Activate monitor on egress direction";
+          type empty;
+        }
+        leaf ingress {
+          tailf:info "Activate monitor on ingress direction";
+          description
+            "Activate monitor on ingress direction";
+          type empty;
+        }
+        uses pm-context-traffic-monitor-ip-grouping;
+      }
+      container url {
+        tailf:info "URL information, application response time (ART) metrics and counters";
+        description
+          "URL information, application response time (ART) metrics and counters";
+        when "../../../profile = 'application-experience' and ../../../profile = 'application-performance'";
+        presence "true";
+        leaf cache-size {
+          tailf:info "Maximum flow entries in the Flow Cache";
+          description
+            "Maximum flow entries in the Flow Cache";
+          type uint32 {
+            tailf:info "<64-2000000>  Maximum number of entries";
+            range "64..2000000";
+          }
+        }
+        leaf class-and {
+          tailf:info "Narrow down default traffic classification";
+          description
+            "Narrow down default traffic classification";
+          type string {
+            tailf:info "WORD;;User defined class name";
+          }
+        }
+        leaf class-replace {
+          tailf:info "Replace traffic classification";
+          description
+            "Replace traffic classification";
+          type string {
+            tailf:info "WORD;;User defined class name";
+          }
+        }
+        uses pm-context-traffic-monitor-ip-grouping;
+        leaf sampling-rate {
+          tailf:info "Sampling rate of flow sampler";
+          description
+            "Sampling rate of flow sampler";
+          type uint32 {
+            tailf:info "<1-32768>;;Sampler rate";
+            range "1..32768";
+          }
+        }
+      }
+      container application-client-server-stats {
+        tailf:info "Per interface, client, server and application statistics";
+        description
+          "Per interface, client, server and application statistics";
+        presence "true";
+        when "../../../profile = 'application-performance' and ../../../profile = 'application-statistics'";
+        uses pm-context-traffic-monitor-app-traffic-stats-grouping;
+        leaf cache-type {
+          tailf:info "The type of the Flow Cache";
+          description
+            "The type of the Flow Cache";
+          type enumeration {
+            enum "normal" {
+              tailf:info "Normal flow removal from the Flow Cache";
+            }
+            enum "synchronized" {
+              tailf:info "The periodic and synchronized removal of all flows from the Flow Cache";
+            }
+          }
+        }
+        uses pm-context-traffic-monitor-ip-grouping;
+      }
+      container application-stats {
+        tailf:info "Per application and interface statistics";
+        description
+          "Per application and interface statistics";
+        presence "true";
+        when "../../../profile = 'application-performance' and ../../../profile = 'application-statistics'";
+        uses pm-context-traffic-monitor-app-traffic-stats-grouping;
+      }
+    }
+  }
+
+  grouping ip-nbar-attribute-custom-grouping {
+    list custom {
+      tailf:info "custom group value to be created for attribute";
+      description
+        "custom group value to be created for attribute";
+      tailf:cli-suppress-mode;
+      key "name";
+      leaf name {
+        type string {
+          tailf:info "WORD;;Custom group value";
+        }
+      }
+      leaf help {
+        tailf:cli-drop-node-name;
+        type string {
+          tailf:info "WORD;;Help string";
+        }
+      }
+    }
+  }
+
+  grouping crypto-map-common-grouping {
+    leaf description {
+      tailf:info "Description of the crypto map statement policy";
+      description
+        "Description of the crypto map statement policy";
+      tailf:cli-multi-value;
+      type string {
+        tailf:info "LINE;;A Short description";
+      }
+    }
+    container dialer {
+      tailf:info "Dialer related commands";
+      description
+        "Dialer related commands";
+      leaf pre-classify {
+        tailf:info "Enable dialer list classification before initiating IKE";
+        description
+          "Enable dialer list classification before initiating IKE";
+        type empty;
+      }
+    }
+    container match {
+      tailf:info "Match values";
+      description
+        "Match values";
+      leaf address {
+        tailf:info "Match address of packets to encrypt";
+        description
+          "Match address of packets to encrypt";
+        type ext-acl-type;
+      }
+    }
+    container qos {
+      tailf:info "Quality of Service related commands";
+      description
+        "Quality of Service related commands";
+      leaf pre-classify {
+        tailf:info "Enable QOS classification before packets are tunnel encapsulated";
+        description
+          "Enable QOS classification before packets are tunnel encapsulated";
+        type empty;
+      }
+    }
+    container reverse-route {
+      tailf:info "Reverse Route Injection.";
+      description
+        "Reverse Route Injection.";
+      presence "true";
+      choice remote-peer-static {
+        case remote-peer-case {
+          container remote-peer-conatiner {
+            tailf:cli-drop-node-name;
+            tailf:cli-sequence-commands;
+            tailf:cli-compact-syntax;
+            leaf remote-peer {
+              tailf:info "Create route in route table for remote tunnel endpoint";
+              description
+                "Create route in route table for remote tunnel endpoint";
+              type inet:ip-address {
+                tailf:info "A.B.C.D;;IPv4 address overrides remote tunnel endpointX:X:X:X::X;;IPv6 address overrides remote tunnel endpoint";
+              }
+            }
+            leaf gateway {
+              tailf:info "Force encrypted traffic via this preferred gateway";
+              description
+                "Force encrypted traffic via this preferred gateway";
+              tailf:cli-break-sequence-commands;
+              type empty;
+            }
+            leaf static {
+              tailf:info "Create routes based on static ACLs permanently";
+              description
+                "Create routes based on static ACLs permanently";
+              type empty;
+            }
+          }
+        }
+        case static-case {
+          leaf static {
+            tailf:info "Create routes based on static ACLs permanently";
+            description
+              "Create routes based on static ACLs permanently";
+            type empty;
+          }
+        }
+      }
+    }
+  }
+
+  grouping crypto-map-common-set-security-association-grouping {
+    leaf dfbit {
+      tailf:info "Handling of encapsulated DF bit.";
+      description
+        "Handling of encapsulated DF bit.";
+      type enumeration {
+        enum "clear" {
+          tailf:info "Clear DF bit for encapsulated packets.";
+        }
+        enum "copy" {
+          tailf:info "Copy DF bit from inner for encapsulated packets.";
+        }
+        enum "set" {
+          tailf:info "Set DF bit for encapsulated packets.";
+        }
+      }
+    }
+    container dummy {
+      tailf:info "Enable transmitting dummy packets";
+      description
+        "Enable transmitting dummy packets";
+      leaf pps {
+        tailf:info "Simulated traffic rate (in pps)";
+        description
+          "Simulated traffic rate (in pps)";
+        type uint8 {
+          tailf:info "<0-25>;;Rate of simulated traffic (in PPS)";
+          range "0..25";
+        }
+      }
+      leaf seconds {
+        tailf:info "Simulated traffic rate (in seconds)";
+        description
+          "Simulated traffic rate (in seconds)";
+        type uint16 {
+          tailf:info "<1-3600>;;Rate of simulated traffic (seconds between packets)";
+          range "1..3600";
+        }
+      }
+    }
+    leaf ecn {
+      tailf:info "Handling of ECN bit";
+      description
+        "Handling of ECN bit";
+      type enumeration {
+        enum "discard" {
+          tailf:info "Discard the Explicit Congestion Notification bits on decryption";
+        }
+        enum "propagate" {
+          tailf:info "Propagate the Explicit Congestion Notification bits on decryption (RFC4301)";
+        }
+      }
+    }
+    container idle-time-container {
+      tailf:cli-drop-node-name;
+      tailf:cli-sequence-commands;
+      tailf:cli-compact-syntax;
+      leaf idle-time {
+        tailf:info "Automatically delete IPSec SAs after a given idle period.";
+        description
+          "Automatically delete IPSec SAs after a given idle period.";
+        type uint32 {
+          tailf:info "<60-86400>;;Idle time at which IPSec SAs are deleted";
+          range "60..86400";
+        }
+      }
+      leaf default {
+        tailf:info "All SAs idle-out reset to default peer";
+        description
+          "All SAs idle-out reset to default peer";
+        tailf:cli-optional-in-sequence;
+        type empty;
+      }
+    }
+    container lifetime {
+      tailf:info "security association lifetime";
+      description
+        "security association lifetime";
+      leaf days {
+        tailf:info "Time-based key duration in days";
+        description
+          "Time-based key duration in days";
+        type uint8 {
+          tailf:info "<1-30>;;Security association duration in days";
+          range "1..30";
+        }
+      }
+      leaf kilobytes {
+        tailf:info "Volume-based key duration";
+        description
+          "Volume-based key duration";
+        type union {
+          type uint64 {
+            tailf:info "<2560-4294967295>;;Security association duration in kilobytes encrypted";
+            range "2560..4294967295";
+          }
+          type enumeration {
+            enum "disable" {
+              tailf:info "Disable Volume-based Rekey";
+            }
+          }
+        }
+      }
+      leaf seconds {
+        tailf:info "Time-based key duration in seconds";
+        description
+          "Time-based key duration in seconds";
+        type uint64 {
+          tailf:info "<120-2592000>;;Security association duration in seconds";
+          range "120..2592000";
+        }
+      }
+    }
+    container replay {
+      tailf:info "Set replay checking.";
+      description
+        "Set replay checking.";
+      leaf disable {
+        tailf:info "Disable replay checking";
+        description
+          "Disable replay checking";
+        type empty;
+      }
+      leaf window-size {
+        tailf:info "Set replay window size.";
+        description
+          "Set replay window size.";
+        type enumeration {
+          enum "1024" {
+            tailf:info "Window size of 1024";
+          }
+          enum "128" {
+            tailf:info "Window size of 128";
+          }
+          enum "256" {
+            tailf:info "Window size of 256";
+          }
+          enum "512" {
+            tailf:info "Window size of 512";
+          }
+          enum "64" {
+            tailf:info "Window size of 64 (default)";
+          }
+        }
+      }
+    }
+  }
+
+  grouping crypto-map-common-set-grouping {
+    leaf group {
+      tailf:info "Set the san group parameters";
+      description
+        "Set the san group parameters";
+      type string {
+        tailf:info "WORD;;Set GDOI san group name";
+      }
+    }
+    leaf identity {
+      tailf:info "Identity restriction";
+      description
+        "Identity restriction";
+      type string {
+        tailf:info "WORD;;Identity name";
+      }
+    }
+    leaf ikev2-profile {
+      tailf:info "Specify ikev2 Profile";
+      description
+        "Specify ikev2 Profile";
+      type string {
+        tailf:info "WORD;;Name the ikev2 profile";
+      }
+    }
+    leaf isakmp-profile {
+      tailf:info "Specify isakmp Profile";
+      description
+        "Specify isakmp Profile";
+      type string {
+        tailf:info "WORD;;Name the isakmp profile";
+      }
+    }
+    container peer {
+      tailf:info "Allowed Encryption/Decryption peer.";
+      description
+        "Allowed Encryption/Decryption peer.";
+      tailf:cli-sequence-commands;
+      tailf:cli-compact-syntax;
+      leaf address {
+        tailf:cli-drop-node-name;
+        type union {
+          type inet:ipv4-address {
+            tailf:info "A.B.C.D;;IP address of peer";
+          }
+          type string {
+            tailf:info "WORD;;Host name of the peer";
+          }
+          type inet:ipv6-address {
+            tailf:info "X:X:X:X::X;;IPv6 address of peer";
+          }
+        }
+      }
+      leaf default {
+        tailf:info "Reset to default peer in list in the event of a failure";
+        description
+          "Reset to default peer in list in the event of a failure";
+        tailf:cli-break-sequence-commands;
+        type empty;
+      }
+      leaf dynamic {
+        tailf:info "Resolve the peer address at the time of negotiation";
+        description
+          "Resolve the peer address at the time of negotiation";
+        type empty;
+      }
+    }
+    container pfs {
+      tailf:info "Specify pfs settings";
+      description
+        "Specify pfs settings";
+      presence "true";
+      leaf group {
+        tailf:cli-drop-node-name;
+        type enumeration {
+          enum "group1" {
+            tailf:info "D-H Group1 (768-bit modp)";
+          }
+          enum "group14" {
+            tailf:info "D-H Group14 (2048-bit modp)";
+          }
+          enum "group15" {
+            tailf:info "D-H Group15 (3072-bit modp)";
+          }
+          enum "group16" {
+            tailf:info "D-H Group16 (4096-bit modp)";
+          }
+          enum "group19" {
+            tailf:info "D-H Group19 (256-bit ecp)";
+          }
+          enum "group2" {
+            tailf:info "D-H Group2 (1024-bit modp)";
+          }
+          enum "group20" {
+            tailf:info "D-H Group20 (384-bit ecp)";
+          }
+          enum "group21" {
+            tailf:info "D-H Group21 (521-bit ecp)";
+          }
+          enum "group24" {
+            tailf:info "D-H Group24 (2048-bit modp, 256 bit subgroup)";
+          }
+          enum "group5" {
+            tailf:info "D-H Group5 (1536-bit modp)";
+          }
+        }
+      }
+    }
+    container reverse-route {
+      tailf:info "Reverse Route Injection";
+      description
+        "Reverse Route Injection";
+      leaf distance {
+        tailf:info "Distance metric for this static route";
+        description
+          "Distance metric for this static route";
+        type uint8 {
+          tailf:info "<1-255>;;Routing distance";
+        }
+      }
+      leaf tag {
+        tailf:info "Create route and tag it";
+        description
+          "Create route and tag it";
+        type uint64 {
+          tailf:info "<1-4294967295>;;Routing Tag ID";
+          range "1..4294967295";
+        }
+      }
+    }
+    leaf-list transform-set {
+      tailf:info "Specify list of transform sets in priority order";
+      description
+        "Specify list of transform sets in priority order";
+      type string {
+        tailf:info "WORD;;Proposal tag";
+      }
+    }
+  }
+
+  grouping crypto-dynamic-map-grouping {
+    uses crypto-map-common-grouping;
+    container set {
+      tailf:info "Set values for encryption/decryption";
+      description
+        "Set values for encryption/decryption";
+      uses crypto-map-common-set-grouping;
+      container ip-in {
+        tailf:cli-drop-node-name;
+        container ip {
+          tailf:info "Interface Internet Protocol config commands";
+          description
+            "Interface Internet Protocol config commands";
+          tailf:cli-sequence-commands;
+          tailf:cli-compact-syntax;
+          leaf access-group {
+            tailf:info "Specify access control for packets";
+            description
+              "Specify access control for packets";
+            type exp-acl-type;
+          }
+          leaf in {
+            tailf:info "inbound packets";
+            description
+              "inbound packets";
+            type empty;
+          }
+        }
+      }
+      container ip-out {
+        tailf:cli-drop-node-name;
+        container ip {
+          tailf:info "Interface Internet Protocol config commands";
+          description
+            "Interface Internet Protocol config commands";
+          tailf:cli-sequence-commands;
+          tailf:cli-compact-syntax;
+          leaf access-group {
+            tailf:info "Specify access control for packets";
+            description
+              "Specify access control for packets";
+            type exp-acl-type;
+          }
+          leaf out {
+            tailf:info "outbound packets";
+            description
+              "outbound packets";
+            type empty;
+          }
+        }
+      }
+      container nat {
+        tailf:info "Set NAT translation";
+        description
+          "Set NAT translation";
+        leaf demux {
+          tailf:info "Set NAT demultiplexing";
+          description
+            "Set NAT demultiplexing";
+          type empty;
+        }
+      }
+      container peer-container {
+        tailf:cli-drop-node-name;
+        tailf:cli-sequence-commands;
+        tailf:cli-compact-syntax;
+        leaf peer {
+          tailf:info "Allowed Encryption/Decryption peer.";
+          description
+            "Allowed Encryption/Decryption peer.";
+          type host-v4v6-type;
+        }
+        leaf default {
+          tailf:info "Reset to default peer in list in the event of a failure";
+          description
+            "Reset to default peer in list in the event of a failure";
+          tailf:cli-optional-in-sequence;
+          type empty;
+        }
+      }
+      container security-association {
+        tailf:info "Security association parameters";
+        description
+          "Security association parameters";
+        uses crypto-map-common-set-security-association-grouping;
+      }
+    }
+  }
+
+  grouping crypto-dynamic-map-default-grouping {
+    leaf description {
+      tailf:info "Description of the crypto map statement policy";
+      description
+        "Description of the crypto map statement policy";
+      type empty;
+    }
+    container dialer {
+      tailf:info "Dialer related commands";
+      description
+        "Dialer related commands";
+      leaf pre-classify {
+        tailf:info "Enable dialer list classification before initiating IKE";
+        description
+          "Enable dialer list classification before initiating IKE";
+        type empty;
+      }
+    }
+    container match {
+      tailf:info "Match values";
+      description
+        "Match values";
+      leaf address {
+        tailf:info "Match address of packets to encrypt";
+        description
+          "Match address of packets to encrypt";
+        type empty;
+      }
+    }
+    container qos {
+      tailf:info "Quality of Service related commands";
+      description
+        "Quality of Service related commands";
+      leaf pre-classify {
+        tailf:info "Enable QOS classification before packets are tunnel encapsulated";
+        description
+          "Enable QOS classification before packets are tunnel encapsulated";
+        type empty;
+      }
+    }
+    container reverse-route {
+      tailf:info "Reverse Route Injection.";
+      description
+        "Reverse Route Injection.";
+      presence "true";
+    }
+    container set {
+      tailf:info "Set values for encryption/decryption";
+      description
+        "Set values for encryption/decryption";
+      leaf group {
+        tailf:info "Set the san group parameters";
+        description
+          "Set the san group parameters";
+        type empty;
+      }
+      leaf identity {
+        tailf:info "Identity restriction";
+        description
+          "Identity restriction";
+        type empty;
+      }
+      leaf ikev2-profile {
+        tailf:info "Specify ikev2 Profile";
+        description
+          "Specify ikev2 Profile";
+        type string {
+          tailf:info "WORD;;Name the ikev2 profile";
+        }
+      }
+      container ip {
+        tailf:info "Interface Internet Protocol config commands";
+        description
+          "Interface Internet Protocol config commands";
+        tailf:cli-sequence-commands;
+        tailf:cli-compact-syntax;
+        leaf access-group {
+          tailf:info "Specify access control for packets";
+          description
+            "Specify access control for packets";
+          type exp-acl-type;
+        }
+        leaf direction {
+          tailf:cli-drop-node-name;
+          type enumeration {
+            enum "in" {
+              tailf:info "inbound packets";
+            }
+            enum "out" {
+              tailf:info "outbound packets";
+            }
+          }
+        }
+      }
+      leaf isakmp-profile {
+        tailf:info "Specify isakmp Profile";
+        description
+          "Specify isakmp Profile";
+        type string {
+          tailf:info "WORD;;Name the isakmp profile";
+        }
+      }
+      container nat {
+        tailf:info "Set NAT translation";
+        description
+          "Set NAT translation";
+        leaf demux {
+          tailf:info "Set NAT demultiplexing";
+          description
+            "Set NAT demultiplexing";
+          type empty;
+        }
+      }
+      container peer-container {
+        tailf:cli-drop-node-name;
+        tailf:cli-sequence-commands;
+        tailf:cli-compact-syntax;
+        leaf peer {
+          tailf:info "Allowed Encryption/Decryption peer.";
+          description
+            "Allowed Encryption/Decryption peer.";
+          type host-v4v6-type;
+        }
+        leaf default {
+          tailf:info "Reset to default peer in list in the event of a failure";
+          description
+            "Reset to default peer in list in the event of a failure";
+          tailf:cli-optional-in-sequence;
+          type empty;
+        }
+      }
+      container pfs {
+        tailf:info "Specify pfs settings";
+        description
+          "Specify pfs settings";
+        presence "true";
+      }
+      container reverse-route {
+        tailf:info "Reverse Route Injection";
+        description
+          "Reverse Route Injection";
+        presence "true";
+      }
+      container security-association {
+        tailf:info "Security association parameters";
+        description
+          "Security association parameters";
+        leaf dfbit {
+          tailf:info "Handling of encapsulated DF bit.";
+          description
+            "Handling of encapsulated DF bit.";
+          type empty;
+        }
+        container dummy {
+          tailf:info "Enable transmitting dummy packets";
+          description
+            "Enable transmitting dummy packets";
+          presence "true";
+        }
+        leaf ecn {
+          tailf:info "Handling of ECN bit";
+          description
+            "Handling of ECN bit";
+          type empty;
+        }
+        container idle-time-container {
+          tailf:cli-drop-node-name;
+          tailf:cli-sequence-commands;
+          tailf:cli-compact-syntax;
+          leaf idle-time {
+            tailf:info "Automatically delete IPSec SAs after a given idle period.";
+            description
+              "Automatically delete IPSec SAs after a given idle period.";
+            type empty;
+          }
+          leaf default {
+            tailf:info "All SAs idle-out reset to default peer";
+            description
+              "All SAs idle-out reset to default peer";
+            tailf:cli-optional-in-sequence;
+            type empty;
+          }
+        }
+        container lifetime {
+          tailf:info "security association lifetime";
+          description
+            "security association lifetime";
+          leaf days {
+            tailf:info "Time-based key duration in days";
+            description
+              "Time-based key duration in days";
+            type empty;
+          }
+          leaf kilobytes {
+            tailf:info "Volume-based key duration";
+            description
+              "Volume-based key duration";
+            type empty;
+          }
+          leaf seconds {
+            tailf:info "Time-based key duration in seconds";
+            description
+              "Time-based key duration in seconds";
+            type empty;
+          }
+        }
+        container replay {
+          tailf:info "Set replay checking.";
+          description
+            "Set replay checking.";
+          leaf disable {
+            tailf:info "Disable replay checking";
+            description
+              "Disable replay checking";
+            type empty;
+          }
+          leaf window-size {
+            tailf:info "Set replay window size.";
+            description
+              "Set replay window size.";
+            type empty;
+          }
+        }
+      }
+      leaf transform-set {
+        tailf:info "Specify list of transform sets in priority order";
+        description
+          "Specify list of transform sets in priority order";
+        type empty;
+      }
+    }
+  }
+
+  grouping crypto-gkm-local-server-id-grouping {
+    container range {
+      tailf:info "Assign range of Key Server Sender IDs (unique in entire group)";
+      description
+        "Assign range of Key Server Sender IDs (unique in entire group)";
+      tailf:cli-sequence-commands;
+      tailf:cli-compact-syntax;
+      leaf lowest {
+        tailf:cli-drop-node-name;
+        type uint8 {
+          tailf:info "<0-1>;;Lowest Key Server Sender ID in range (unique in entire group)";
+          range "0..1";
+        }
+      }
+      leaf hyphen {
+        tailf:alt-name "-";
+        type empty;
+      }
+      leaf highest {
+        tailf:cli-drop-node-name;
+        type uint8 {
+          tailf:info "<0-1>;;Highest Key Server Sender ID in range (unique in entire group)";
+          range "0..1";
+        }
+      }
+    }
+    leaf value {
+      tailf:info "Assign Key Server Sender ID (unique in entire group)";
+      description
+        "Assign Key Server Sender ID (unique in entire group)";
+      type uint8 {
+        tailf:info "<0-1>;;Single Key Server Sender ID (unique in entire group)";
+        range "0..1";
+      }
+    }
+  }
+
+  grouping crypto-gdoi-coop-ks-config-grouping {
+    container local {
+      tailf:info "Local key server configurations";
+      description
+        "Local key server configurations";
+      presence "true";
+      leaf priority {
+        tailf:info "Set local server priority";
+        description
+          "Set local server priority";
+        type uint8 {
+          tailf:info "<1-255>;;Local server priority";
+        }
+      }
+    }
+    container peer {
+      tailf:info "Peer server configurations";
+      description
+        "Peer server configurations";
+      container address {
+        tailf:info "Peer server address";
+        description
+          "Peer server address";
+        leaf ipv4 {
+          tailf:info "Set peer server ipv4 address";
+          description
+            "Set peer server ipv4 address";
+          type inet:ipv4-address {
+            tailf:info "A.B.C.D;;Peer server ipv4 address";
+          }
+        }
+      }
+    }
+    container protocol {
+      tailf:info "Specify various protocol operational values";
+      description
+        "Specify various protocol operational values";
+      presence "true";
+      leaf pdu {
+        tailf:info "Maximum size of COOP messages";
+        description
+          "Maximum size of COOP messages";
+        type uint32 {
+          tailf:info "<1-65000>;;Maximum number of bytes";
+          range "1..65000";
+        }
+      }
+      leaf version {
+        tailf:info "Set COOP ANN version";
+        description
+          "Set COOP ANN version";
+        type enumeration {
+          enum "base" {
+            tailf:info "Base version COOP protocol (4000 GM scale)";
+          }
+          enum "optimize" {
+            tailf:info "Optimized version COOP protocol (8000 GM scale)";
+          }
+        }
+      }
+    }
+  }
+
+  grouping crypto-gkm-sa-ipsec-grouping {
+    container match {
+      tailf:info "Match characteristics of packets to encrypt";
+      description
+        "Match characteristics of packets to encrypt";
+      container address {
+        tailf:info "Match addresses of packets to encrypt";
+        description
+          "Match addresses of packets to encrypt";
+        leaf ipv4 {
+          tailf:info "Match ipv4 packets";
+          description
+            "Match ipv4 packets";
+          type ext-acl-type;
+        }
+        leaf ipv6 {
+          tailf:info "Match ipv6 packets";
+          description
+            "Match ipv6 packets";
+          type string {
+            tailf:info "WORD;;Access-list name";
+          }
+        }
+      }
+    }
+    leaf profile {
+      tailf:info "Configure an ipsec profile for the SA";
+      description
+        "Configure an ipsec profile for the SA";
+      type string {
+        tailf:info "WORD;;Profile name";
+      }
+    }
+    container replay {
+      tailf:info "Set replay method";
+      description
+        "Set replay method";
+      container counter {
+        tailf:info "Enable anti-replay check for single source traffic by using sequence number";
+        description
+          "Enable anti-replay check for single source traffic by using sequence number";
+        presence "true";
+        leaf window-size {
+          tailf:info "Set replay window size.";
+          description
+            "Set replay window size.";
+          type enumeration {
+            enum "1024" {
+              tailf:info "Window size of 1024";
+            }
+            enum "128" {
+              tailf:info "Window size of 128";
+            }
+            enum "256" {
+              tailf:info "Window size of 256";
+            }
+            enum "512" {
+              tailf:info "Window size of 512";
+            }
+            enum "64" {
+              tailf:info "Window size of 64 (default)";
+            }
+          }
+        }
+      }
+      container time {
+        tailf:info "Enable anti-replay check for any traffic by using time";
+        description
+          "Enable anti-replay check for any traffic by using time";
+        presence "true";
+        leaf window-size {
+          tailf:info "Time based replay window size";
+          description
+            "Time based replay window size";
+          type uint8 {
+            tailf:info "<1-100>;;Window-size seconds";
+            range "1..100";
+          }
+        }
+      }
+    }
+    container tag {
+      tailf:info "Set inline tagging method";
+      description
+        "Set inline tagging method";
+      container cts {
+        tailf:info "Cisco Trust Security";
+        description
+          "Cisco Trust Security";
+        leaf sgt {
+          tailf:info "Security Group Tag";
+          description
+            "Security Group Tag";
+          type empty;
+        }
+      }
+    }
+  }
+
+  grouping crypto-gkm-sa-ipsec-default-grouping {
+    container match {
+      tailf:info "Match characteristics of packets to encrypt";
+      description
+        "Match characteristics of packets to encrypt";
+      container address {
+        tailf:info "Match addresses of packets to encrypt";
+        description
+          "Match addresses of packets to encrypt";
+        presence "true";
+      }
+    }
+    leaf profile {
+      tailf:info "Configure an ipsec profile for the SA";
+      description
+        "Configure an ipsec profile for the SA";
+      type empty;
+    }
+    container replay {
+      tailf:info "Set replay method";
+      description
+        "Set replay method";
+      presence "true";
+    }
+    container tag {
+      tailf:info "Set inline tagging method";
+      description
+        "Set inline tagging method";
+      presence "true";
+    }
+  }
+
+  grouping crypto-gkm-local-server-grouping {
+    container address {
+      tailf:info "Configure server source address";
+      description
+        "Configure server source address";
+      leaf ipv4 {
+        tailf:info "Set ipv4 address of local server";
+        description
+          "Set ipv4 address of local server";
+        type inet:ipv4-address {
+          tailf:info "A.B.C.D;;IPv4 local address";
+        }
+      }
+    }
+    container authorization {
+      tailf:info "Configure authorization for the group";
+      description
+        "Configure authorization for the group";
+      container address {
+        tailf:info "Set authorization by address";
+        description
+          "Set authorization by address";
+        leaf ipv4 {
+          tailf:info "Set authorization by address";
+          description
+            "Set authorization by address";
+          type union {
+            type uint16 {
+              tailf:info "<1-99>;;Standard IP access-list number";
+              range "1..99";
+            }
+            type string {
+              tailf:info "WORD;;Access-list name";
+            }
+          }
+        }
+      }
+      leaf identity {
+        tailf:info "Set authorization by identity";
+        description
+          "Set authorization by identity";
+        type string {
+          tailf:info "WORD;;Identity tag";
+        }
+      }
+    }
+    leaf gdoi {
+      tailf:info "Enable GDOI (ISAKMP) Protocol for Registration & Rekey";
+      description
+        "Enable GDOI (ISAKMP) Protocol for Registration & Rekey";
+      tailf:cli-full-command;
+      type empty;
+    }
+    leaf gikev2 {
+      tailf:info "Enable G-IKEv2 (IKEv2) Protocol for Registration & Rekey";
+      description
+        "Enable G-IKEv2 (IKEv2) Protocol for Registration & Rekey";
+      tailf:cli-full-command;
+      type string {
+        tailf:info "WORD;;IKEv2 Profile Name";
+      }
+    }
+    container group {
+      tailf:info "Configure parameters for the group (e.g. Suite-B)";
+      description
+        "Configure parameters for the group (e.g. Suite-B)";
+      container size {
+        tailf:info "Set Group Size for Suite-B counter transforms (SID length)";
+        description
+          "Set Group Size for Suite-B counter transforms (SID length)";
+        leaf large {
+          tailf:info "32-bit Sender ID (FIPS 140-2 Operating Mode)";
+          description
+            "32-bit Sender ID (FIPS 140-2 Operating Mode)";
+          tailf:cli-full-command;
+          type empty;
+        }
+        leaf medium {
+          tailf:info "24-bit Sender ID (Default)";
+          description
+            "24-bit Sender ID (Default)";
+          tailf:cli-full-command;
+          type empty;
+        }
+        leaf small {
+          tailf:info "Interoperable with GDOI / G-IKEv2 Standard";
+          description
+            "Interoperable with GDOI / G-IKEv2 Standard";
+          tailf:cli-full-command;
+          type enumeration {
+            enum "12" {
+              tailf:info "12-bit Sender ID";
+            }
+            enum "16" {
+              tailf:info "16-bit Sender ID";
+            }
+            enum "8" {
+              tailf:info "8-bit Sender ID";
+            }
+          }
+        }
+      }
+    }
+    container identifier {
+      tailf:info "Enter Suite-B KSSID (Key Server Sender ID) config mode";
+      description
+        "Enter Suite-B KSSID (Key Server Sender ID) config mode";
+      tailf:cli-add-mode;
+      tailf:cli-mode-name "gkm-local-server-id";
+      container default {
+        tailf:info "Set a command to its defaults";
+        description
+          "Set a command to its defaults";
+        uses crypto-gkm-local-server-id-grouping;
+      }
+      uses crypto-gkm-local-server-id-grouping;
+    }
+    container redundancy {
+      tailf:info "Enter cooperative key server configuration mode";
+      description
+        "Enter cooperative key server configuration mode";
+      tailf:cli-add-mode;
+      tailf:cli-mode-name "gdoi-coop-ks-config";
+      container default {
+        tailf:info "Set a command to its defaults";
+        description
+          "Set a command to its defaults";
+        uses crypto-gdoi-coop-ks-config-grouping;
+      }
+      uses crypto-gdoi-coop-ks-config-grouping;
+    }
+    container registration {
+      tailf:info "Configure registration for the group";
+      description
+        "Configure registration for the group";
+      leaf interface {
+        tailf:info "Identify an interface on which to respond to GKM registrations";
+        description
+          "Identify an interface on which to respond to GKM registrations";
+        type string;
+      }
+      container periodic {
+        tailf:info "Define periodic registrations for the group";
+        description
+          "Define periodic registrations for the group";
+        container crl {
+          tailf:info "On every new CRL";
+          description
+            "On every new CRL";
+          leaf trustpoint {
+            tailf:info "For a PKI trustpoint";
+            description
+              "For a PKI trustpoint";
+            type string {
+              tailf:info "WORD;;trustpoint name";
+            }
+          }
+        }
+      }
+    }
+    container rekey {
+      tailf:info "Configure rekey policy for the group";
+      description
+        "Configure rekey policy for the group";
+      leaf acknowledgement {
+        tailf:info "Request group members to acknowledge rekeys";
+        description
+          "Request group members to acknowledge rekeys";
+        type enumeration {
+          enum "any" {
+            tailf:info "Request based on GKM version & accept any supported Rekey ACK";
+          }
+          enum "cisco" {
+            tailf:info "Only accept Cisco Rekey ACK (encrypted)";
+          }
+          enum "interoperable" {
+            tailf:info "Request & only accept Interoperable Rekey ACK (unencrypted)";
+          }
+        }
+      }
+      container address {
+        tailf:info "Define the rekey packet format";
+        description
+          "Define the rekey packet format";
+        leaf ipv4 {
+          tailf:info "Match ipv4 packets";
+          description
+            "Match ipv4 packets";
+          type ext-acl-type;
+        }
+      }
+      container algorithm {
+        tailf:info "Set the rekey encryption algorithm";
+        description
+          "Set the rekey encryption algorithm";
+        leaf a3des-cbc {
+          tailf:info "Triple DES in CBC mode";
+          description
+            "Triple DES in CBC mode";
+          tailf:alt-name "3des-cbc";
+          tailf:cli-full-command;
+          type empty;
+        }
+        leaf aes-128 {
+          tailf:info "128 bit AES";
+          description
+            "128 bit AES";
+          tailf:alt-name "aes 128";
+          tailf:cli-full-command;
+          type empty;
+        }
+        leaf aes-192 {
+          tailf:info "192 bit AES";
+          description
+            "192 bit AES";
+          tailf:alt-name "aes 192";
+          tailf:cli-full-command;
+          type empty;
+        }
+        leaf aes-256 {
+          tailf:info "256 bit AES";
+          description
+            "256 bit AES";
+          tailf:alt-name "aes 256";
+          tailf:cli-full-command;
+          type empty;
+        }
+        leaf des-cbc {
+          tailf:info "DES in CBC mode";
+          description
+            "DES in CBC mode";
+          tailf:cli-full-command;
+          type empty;
+        }
+      }
+      container authentication {
+        tailf:info "Identify the rekey authentication keypair";
+        description
+          "Identify the rekey authentication keypair";
+        container mypubkey {
+          tailf:info "Identify a keypair associated with this device";
+          description
+            "Identify a keypair associated with this device";
+          leaf rsa {
+            tailf:info "Identify an RSA keypair";
+            description
+              "Identify an RSA keypair";
+            type string {
+              tailf:info "WORD;;Key name";
+            }
+          }
+        }
+      }
+      container lifetime {
+        tailf:info "Define the rekey lifetime";
+        description
+          "Define the rekey lifetime";
+        leaf days {
+          tailf:info "Time-based key duration in days";
+          description
+            "Time-based key duration in days";
+          type uint8 {
+            tailf:info "<1-30>;;Lifetime in days";
+            range "1..30";
+          }
+        }
+        leaf seconds {
+          tailf:info "Time-based key duration in seconds";
+          description
+            "Time-based key duration in seconds";
+          type uint64 {
+            tailf:info "<300-2592000>;;Lifetime in seconds";
+            range "300..2592000";
+          }
+        }
+      }
+      container retransmit {
+        tailf:info "Define the rekey retransmission parameters";
+        description
+          "Define the rekey retransmission parameters";
+        tailf:cli-sequence-commands;
+        tailf:cli-compact-syntax;
+        leaf seconds {
+          tailf:cli-drop-node-name;
+          type uint8 {
+            tailf:info "<10-60>;;Retransmit after this many seconds";
+            range "10..60";
+          }
+        }
+        choice number-periodic {
+          case number-case {
+            leaf number {
+              tailf:info "Retransmit this many times";
+              description
+                "Retransmit this many times";
+              tailf:cli-full-command;
+              type uint8 {
+                tailf:info "<1-10>;;Number of retransmissions";
+              }
+            }
+          }
+          case periodic-case {
+            leaf periodic {
+              tailf:info "Periodically send retransmit rekeys";
+              description
+                "Periodically send retransmit rekeys";
+              tailf:cli-full-command;
+              type empty;
+            }
+          }
+        }
+      }
+      container sig-hash {
+        tailf:info "Set rekey signature-hash parameters";
+        description
+          "Set rekey signature-hash parameters";
+        leaf algorithm {
+          tailf:info "Set the rekey signature-hash algorithm";
+          description
+            "Set the rekey signature-hash algorithm";
+          type enumeration {
+            enum "sha" {
+              tailf:info "Secure Hash Standard 1 (96 bit)";
+            }
+            enum "sha256" {
+              tailf:info "Secure Hash Standard 2 (256 bit)";
+            }
+            enum "sha384" {
+              tailf:info "Secure Hash Standard 2 (384 bit)";
+            }
+            enum "sha512" {
+              tailf:info "Secure Hash Standard 2 (512 bit)";
+            }
+          }
+        }
+      }
+      container transport {
+        tailf:info "Specify the rekey distribution method";
+        description
+          "Specify the rekey distribution method";
+        leaf unicast {
+          tailf:info "specify unicast rekey distribution";
+          description
+            "specify unicast rekey distribution";
+          tailf:cli-full-command;
+          type empty;
+        }
+      }
+    }
+    container sa {
+      tailf:info "Configure a security association";
+      description
+        "Configure a security association";
+      container d3p {
+        tailf:info "Enable IP delivery delay detection protocol for all SAs within the group";
+        description
+          "Enable IP delivery delay detection protocol for all SAs within the group";
+        container window {
+          tailf:info "IP-D3P window size";
+          description
+            "IP-D3P window size";
+          leaf msec {
+            tailf:info "IP-D3P window size in milliseconds";
+            description
+              "IP-D3P window size in milliseconds";
+            tailf:cli-full-command;
+            type uint32 {
+              tailf:info "<1000-100000>;;IP-D3P window size in nilliseconds";
+              range "1000..100000";
+            }
+          }
+          leaf sec {
+            tailf:info "IP-D3P window size in seconds";
+            description
+              "IP-D3P window size in seconds";
+            tailf:cli-full-command;
+            type uint8 {
+              tailf:info "<1-100>;;IP-D3P window size in seconds";
+            }
+          }
+        }
+      }
+      list ipsec {
+        tailf:info "Configure an IPsec SA";
+        description
+          "Configure an IPsec SA";
+        tailf:cli-mode-name "gkm-sa-ipsec";
+        key "sequence";
+        leaf sequence {
+          type uint16 {
+            tailf:info "<1-65535>;;Sequence to insert into SA list";
+          }
+        }
+        container default {
+          tailf:info "Set a command to its defaults";
+          description
+            "Set a command to its defaults";
+          uses crypto-gkm-sa-ipsec-default-grouping;
+        }
+        uses crypto-gkm-sa-ipsec-grouping;
+      }
+      container pair-wise-keying {
+        tailf:info "Enable KGS pair-wise-keying";
+        description
+          "Enable KGS pair-wise-keying";
+        leaf safety-limit {
+          tailf:info "KGS safety limit";
+          description
+            "KGS safety limit";
+          type uint8 {
+            tailf:info "<10-300>;;KGS safety limit value";
+          }
+        }
+      }
+      leaf receive-only {
+        tailf:info "Configure SA to work only in inbound direction";
+        description
+          "Configure SA to work only in inbound direction";
+        tailf:cli-full-command;
+        type empty;
+      }
+    }
+  }
+
+  grouping crypto-gkm-local-server-default-grouping {
+    container address {
+      tailf:info "Configure server source address";
+      description
+        "Configure server source address";
+      presence "true";
+    }
+    container authorization {
+      tailf:info "Configure authorization for the group";
+      description
+        "Configure authorization for the group";
+      container address {
+        tailf:info "Set authorization by address";
+        description
+          "Set authorization by address";
+        leaf ipv4 {
+          tailf:info "Set authorization by address";
+          description
+            "Set authorization by address";
+          type empty;
+        }
+      }
+      leaf identity {
+        tailf:info "Set authorization by identity";
+        description
+          "Set authorization by identity";
+        type empty;
+      }
+    }
+    leaf gdoi {
+      tailf:info "Enable GDOI (ISAKMP) Protocol for Registration & Rekey";
+      description
+        "Enable GDOI (ISAKMP) Protocol for Registration & Rekey";
+      tailf:cli-full-command;
+      type empty;
+    }
+    leaf gikev2 {
+      tailf:info "Enable G-IKEv2 (IKEv2) Protocol for Registration & Rekey";
+      description
+        "Enable G-IKEv2 (IKEv2) Protocol for Registration & Rekey";
+      tailf:cli-full-command;
+      type empty;
+    }
+    container group {
+      tailf:info "Configure parameters for the group (e.g. Suite-B)";
+      description
+        "Configure parameters for the group (e.g. Suite-B)";
+      container size {
+        tailf:info "Set Group Size for Suite-B counter transforms (SID length)";
+        description
+          "Set Group Size for Suite-B counter transforms (SID length)";
+        presence "true";
+      }
+    }
+    container identifier {
+      tailf:info "Enter Suite-B KSSID (Key Server Sender ID) config mode";
+      description
+        "Enter Suite-B KSSID (Key Server Sender ID) config mode";
+      presence "true";
+    }
+    container redundancy {
+      tailf:info "Enter cooperative key server configuration mode";
+      description
+        "Enter cooperative key server configuration mode";
+      presence "true";
+    }
+    container registration {
+      tailf:info "Configure registration for the group";
+      description
+        "Configure registration for the group";
+      leaf interface {
+        tailf:info "Identify an interface on which to respond to GKM registrations";
+        description
+          "Identify an interface on which to respond to GKM registrations";
+        type string;
+      }
+      container periodic {
+        tailf:info "Define periodic registrations for the group";
+        description
+          "Define periodic registrations for the group";
+        container crl {
+          tailf:info "On every new CRL";
+          description
+            "On every new CRL";
+          leaf trustpoint {
+            tailf:info "For a PKI trustpoint";
+            description
+              "For a PKI trustpoint";
+            type empty;
+          }
+        }
+      }
+    }
+    container rekey {
+      tailf:info "Configure rekey policy for the group";
+      description
+        "Configure rekey policy for the group";
+      leaf acknowledgement {
+        tailf:info "Request group members to acknowledge rekeys";
+        description
+          "Request group members to acknowledge rekeys";
+        type empty;
+      }
+      container address {
+        tailf:info "Define the rekey packet format";
+        description
+          "Define the rekey packet format";
+        presence "true";
+      }
+      container algorithm {
+        tailf:info "Set the rekey encryption algorithm";
+        description
+          "Set the rekey encryption algorithm";
+        presence "true";
+      }
+      container authentication {
+        tailf:info "Identify the rekey authentication keypair";
+        description
+          "Identify the rekey authentication keypair";
+        presence "true";
+      }
+      container lifetime {
+        tailf:info "Define the rekey lifetime";
+        description
+          "Define the rekey lifetime";
+        leaf days {
+          tailf:info "Time-based key duration in days";
+          description
+            "Time-based key duration in days";
+          type empty;
+        }
+        leaf seconds {
+          tailf:info "Time-based key duration in seconds";
+          description
+            "Time-based key duration in seconds";
+          type empty;
+        }
+      }
+      container retransmit {
+        tailf:info "Define the rekey retransmission parameters";
+        description
+          "Define the rekey retransmission parameters";
+        presence "true";
+      }
+      container sig-hash {
+        tailf:info "Set rekey signature-hash parameters";
+        description
+          "Set rekey signature-hash parameters";
+        leaf algorithm {
+          tailf:info "Set the rekey signature-hash algorithm";
+          description
+            "Set the rekey signature-hash algorithm";
+          type empty;
+        }
+      }
+      container transport {
+        tailf:info "Specify the rekey distribution method";
+        description
+          "Specify the rekey distribution method";
+        leaf unicast {
+          tailf:info "specify unicast rekey distribution";
+          description
+            "specify unicast rekey distribution";
+          tailf:cli-full-command;
+          type empty;
+        }
+      }
+    }
+    container sa {
+      tailf:info "Configure a security association";
+      description
+        "Configure a security association";
+      container d3p {
+        tailf:info "Enable IP delivery delay detection protocol for all SAs within the group";
+        description
+          "Enable IP delivery delay detection protocol for all SAs within the group";
+        presence "true";
+      }
+      list ipsec {
+        tailf:info "Configure an IPsec SA";
+        description
+          "Configure an IPsec SA";
+        tailf:cli-mode-name "gkm-sa-ipsec";
+        key "sequence";
+        leaf sequence {
+          type uint16 {
+            tailf:info "<1-65535>;;Sequence to insert into SA list";
+          }
+        }
+      }
+      container pair-wise-keying {
+        tailf:info "Enable KGS pair-wise-keying";
+        description
+          "Enable KGS pair-wise-keying";
+        presence "true";
+      }
+      leaf receive-only {
+        tailf:info "Configure SA to work only in inbound direction";
+        description
+          "Configure SA to work only in inbound direction";
+        tailf:cli-full-command;
+        type empty;
+      }
+    }
+  }
+
+  grouping crypto-gdio-grouping {
+    container client {
+      tailf:info "Set the group client parameters";
+      description
+        "Set the group client parameters";
+      leaf bypass-policy {
+        tailf:info "Allow group-key management traffic sent to this GM only";
+        description
+          "Allow group-key management traffic sent to this GM only";
+        tailf:cli-full-command;
+        type empty;
+      }
+      container protocol {
+        tailf:info "Group Member Registration & Rekey Protocol";
+        description
+          "Group Member Registration & Rekey Protocol";
+        leaf gdoi {
+          tailf:info "Use GDOI (ISAKMP) Protocol for Registration & Rekey";
+          description
+            "Use GDOI (ISAKMP) Protocol for Registration & Rekey";
+          tailf:cli-full-command;
+          type empty;
+        }
+        leaf gikev2 {
+          tailf:info "Use G-IKEv2 Protocol for Registration & Rekey";
+          description
+            "Use G-IKEv2 Protocol for Registration & Rekey";
+          tailf:cli-full-command;
+          type string {
+            tailf:info "WORD;;IKEv2 Profile Name for G-IKEv2 Registration";
+          }
+        }
+      }
+      container recovery-check {
+        tailf:info "Specify GM recovery check parameters";
+        description
+          "Specify GM recovery check parameters";
+        leaf interval {
+          tailf:info "Waiting period(sec) between consecutive recovery registrations";
+          description
+            "Waiting period(sec) between consecutive recovery registrations";
+          type uint16 {
+            tailf:info "<100-1000>;;Waiting period seconds";
+            range "100..1000";
+          }
+        }
+      }
+      container registration {
+        tailf:info "Set the group client management/register interface";
+        description
+          "Set the group client management/register interface";
+        leaf interface {
+          tailf:info "Set the group client management/register interface";
+          description
+            "Set the group client management/register interface";
+          type string;
+        }
+      }
+      container rekey {
+        tailf:info "Set the group client acceptable rekey ciphers and hashs";
+        description
+          "Set the group client acceptable rekey ciphers and hashs";
+        container encryption {
+          tailf:info "Set the group client acceptable rekey ciphers";
+          description
+            "Set the group client acceptable rekey ciphers";
+          leaf rekey_3des-cbc {
+            tailf:alt-name "3des-cbc";
+            tailf:info "Triple DES in CBC mode";
+            type empty;
+          }
+          leaf aes-128 {
+            tailf:alt-name "aes 128";
+            tailf:info "128 bit AES";
+            description
+              "128 bit AES";
+            type empty;
+          }
+          leaf aes-192 {
+            tailf:alt-name "aes 192";
+            tailf:info "192 bit AES";
+            description
+              "192 bit AES";
+            type empty;
+          }
+          leaf aes-256 {
+            tailf:alt-name "aes 256";
+            tailf:info "256 bit AES";
+            description
+              "256 bit AES";
+            type empty;
+          }
+          leaf des-cbc {
+            tailf:info "DES in CBC mode";
+            description
+              "DES in CBC mode";
+            type empty;
+          }
+        }
+        container hash {
+          tailf:info "Set the group client acceptable rekey hash";
+          description
+            "Set the group client acceptable rekey hash";
+          leaf sha {
+            tailf:info "Secure Hash Standard";
+            description
+              "Secure Hash Standard";
+            type empty;
+          }
+          leaf sha256 {
+            tailf:info "Secure Hash Standard 2 (256 bit)";
+            description
+              "Secure Hash Standard 2 (256 bit)";
+            type empty;
+          }
+          leaf sha384 {
+            tailf:info "Secure Hash Standard 2 (384 bit)";
+            description
+              "Secure Hash Standard 2 (384 bit)";
+            type empty;
+          }
+          leaf sha512 {
+            tailf:info "Secure Hash Standard 2 (512 bit)";
+            description
+              "Secure Hash Standard 2 (512 bit)";
+            type empty;
+          }
+        }
+      }
+      container status {
+        tailf:info "group-member status";
+        description
+          "group-member status";
+        container active-sa {
+          tailf:info "TEK SA with positive remaining lifetime";
+          description
+            "TEK SA with positive remaining lifetime";
+          leaf track {
+            tailf:info "enable stub tracking object";
+            description
+              "enable stub tracking object";
+            type uint16 {
+              tailf:info "<1-1000>;;Tracking object number";
+              range "1..1000";
+            }
+          }
+        }
+      }
+      leaf-list transform-sets {
+        tailf:info "Specify list of group client acceptable transform sets";
+        description
+          "Specify list of group client acceptable transform sets";
+        type string {
+          tailf:info "WORD;;Proposal tag";
+        }
+      }
+      leaf transport-encrypt-key {
+        tailf:info "Enforce group or pair-wise keying";
+        description
+          "Enforce group or pair-wise keying";
+        type enumeration {
+          enum "group-key" {
+            tailf:info "Use only Group Key for Traffic Encryption";
+          }
+          enum "pair-wise-key" {
+            tailf:info "Use only Pair-Wise Keys for Traffic Encryption";
+          }
+        }
+      }
+    }
+    container identity {
+      tailf:info "Set the identity of the group";
+      description
+        "Set the identity of the group";
+      container address {
+        tailf:info "Set the identity of the group as an address";
+        description
+          "Set the identity of the group as an address";
+        leaf ipv4 {
+          tailf:info "Set the identity of the group as an IPv4 address";
+          description
+            "Set the identity of the group as an IPv4 address";
+          type inet:ipv4-address {
+            tailf:info "A.B.C.D;;Group IPv4 address";
+          }
+        }
+      }
+      leaf number {
+        tailf:info "Set the identity of the group as a number";
+        description
+          "Set the identity of the group as a number";
+        type uint64 {
+          tailf:info "<0-4294967295>;;Set the group number";
+        }
+      }
+    }
+    leaf passive {
+      tailf:info "Set the group in passive mode";
+      description
+        "Set the group in passive mode";
+      tailf:cli-full-command;
+      type empty;
+    }
+    container server {
+      tailf:info "Set the group server for of the group";
+      description
+        "Set the group server for of the group";
+      container address {
+        tailf:info "Identify the group server by address";
+        description
+          "Identify the group server by address";
+        leaf ipv4 {
+          tailf:info "Set the IPv4 address of the group server";
+          description
+            "Set the IPv4 address of the group server";
+          type inet:ipv4-address {
+            tailf:info "A.B.C.D;;Group server IPv4 address";
+          }
+        }
+      }
+      container hostname {
+        tailf:info "Identify the group server by hostname";
+        description
+          "Identify the group server by hostname";
+        leaf ipv4 {
+          tailf:info "Set the IPv4 hostname of the group server";
+          description
+            "Set the IPv4 hostname of the group server";
+          type string {
+            tailf:info "WORD;;Hostname";
+          }
+        }
+      }
+      container local {
+        tailf:info "Configure GKM group server defined locally";
+        description
+          "Configure GKM group server defined locally";
+        tailf:cli-add-mode;
+        tailf:cli-mode-name "gkm-local-server";
+        uses crypto-gkm-local-server-grouping;
+        container default {
+          tailf:info "Set a command to its defaults";
+          description
+            "Set a command to its defaults";
+          uses crypto-gkm-local-server-default-grouping;
+        }
+      }
+    }
+  }
+
+  grouping crypto-gdio-default-grouping {
+    container client {
+      tailf:info "Set the group client parameters";
+      description
+        "Set the group client parameters";
+      leaf bypass-policy {
+        tailf:info "Allow group-key management traffic sent to this GM only";
+        description
+          "Allow group-key management traffic sent to this GM only";
+        tailf:cli-full-command;
+        type empty;
+      }
+      container protocol {
+        tailf:info "Group Member Registration & Rekey Protocol";
+        description
+          "Group Member Registration & Rekey Protocol";
+        presence "true";
+      }
+      container recovery-check {
+        tailf:info "Specify GM recovery check parameters";
+        description
+          "Specify GM recovery check parameters";
+        presence "true";
+      }
+      container registration {
+        tailf:info "Set the group client management/register interface";
+        description
+          "Set the group client management/register interface";
+        leaf interface {
+          tailf:info "Set the group client management/register interface";
+          description
+            "Set the group client management/register interface";
+          type empty;
+        }
+      }
+      container rekey {
+        tailf:info "Set the group client acceptable rekey ciphers and hashs";
+        description
+          "Set the group client acceptable rekey ciphers and hashs";
+        container encryption {
+          tailf:info "Set the group client acceptable rekey ciphers";
+          description
+            "Set the group client acceptable rekey ciphers";
+          presence "true";
+        }
+        container hash {
+          tailf:info "Set the group client acceptable rekey hash";
+          description
+            "Set the group client acceptable rekey hash";
+          presence "true";
+        }
+      }
+      container status {
+        tailf:info "group-member status";
+        description
+          "group-member status";
+        container active-sa {
+          tailf:info "TEK SA with positive remaining lifetime";
+          description
+            "TEK SA with positive remaining lifetime";
+          presence "true";
+        }
+      }
+      leaf transform-sets {
+        tailf:info "Specify list of group client acceptable transform sets";
+        description
+          "Specify list of group client acceptable transform sets";
+        type empty;
+      }
+      leaf transport-encrypt-key {
+        tailf:info "Enforce group or pair-wise keying";
+        description
+          "Enforce group or pair-wise keying";
+        type enumeration {
+          enum "group-key" {
+            tailf:info "Use only Group Key for Traffic Encryption";
+          }
+          enum "pair-wise-key" {
+            tailf:info "Use only Pair-Wise Keys for Traffic Encryption";
+          }
+        }
+      }
+    }
+    container identity {
+      tailf:info "Set the identity of the group";
+      description
+        "Set the identity of the group";
+      presence "true";
+    }
+    leaf passive {
+      tailf:info "Set the group in passive mode";
+      description
+        "Set the group in passive mode";
+      tailf:cli-full-command;
+      type empty;
+    }
+    container server {
+      tailf:info "Set the group server for of the group";
+      description
+        "Set the group server for of the group";
+      container address {
+        tailf:info "Identify the group server by address";
+        description
+          "Identify the group server by address";
+        leaf ipv4 {
+          tailf:info "Set the IPv4 address of the group server";
+          description
+            "Set the IPv4 address of the group server";
+          type inet:ipv4-address {
+            tailf:info "A.B.C.D;;Group server IPv4 address";
+          }
+        }
+      }
+      container hostname {
+        tailf:info "Identify the group server by hostname";
+        description
+          "Identify the group server by hostname";
+        leaf ipv4 {
+          tailf:info "Set the IPv4 hostname of the group server";
+          description
+            "Set the IPv4 hostname of the group server";
+          type string {
+            tailf:info "WORD;;Hostname";
+          }
+        }
+      }
+      leaf local {
+        tailf:info "Configure GKM group server defined locally";
+        description
+          "Configure GKM group server defined locally";
+        type empty;
+      }
+    }
+  }
+
+  grouping crypto-identity-grouping {
+    leaf description {
+      tailf:info "Description of the crypto identity";
+      description
+        "Description of the crypto identity";
+      tailf:cli-multi-value;
+      type string {
+        tailf:info "LINE;;A Short description";
+      }
+    }
+    leaf dn {
+      tailf:info "Distinguished name identifier";
+      description
+        "Distinguished name identifier";
+      tailf:cli-multi-value;
+      type string {
+        tailf:info "LINE;;Distinguished name qualifier";
+      }
+    }
+    leaf fqdn {
+      tailf:info "Fully qualified distinguished name identifier";
+      description
+        "Fully qualified distinguished name identifier";
+      tailf:cli-multi-value;
+      type string {
+        tailf:info "LINE;Fully qualified distinguished name";
+      }
+    }
+  }
+
+  grouping crypto-identity-default-grouping {
+    leaf description {
+      tailf:info "Description of the crypto identity";
+      description
+        "Description of the crypto identity";
+      type empty;
+    }
+    leaf dn {
+      tailf:info "Distinguished name identifier";
+      description
+        "Distinguished name identifier";
+      tailf:cli-multi-value;
+      type string {
+        tailf:info "LINE;;Distinguished name qualifier";
+      }
+    }
+    leaf fqdn {
+      tailf:info "Fully qualified distinguished name identifier";
+      description
+        "Fully qualified distinguished name identifier";
+      tailf:cli-multi-value;
+      type string {
+        tailf:info "LINE;Fully qualified distinguished name";
+      }
+    }
+  }
+
+  grouping crypto-ikev2-keyring-peer-grouping {
+    container address {
+      tailf:info "Specify IPv4/IPv6 address of peer";
+      description
+        "Specify IPv4/IPv6 address of peer";
+      choice ipv4-ipv6 {
+        case ipv4-case {
+          container ipv4 {
+            tailf:cli-drop-node-name;
+            tailf:cli-sequence-commands;
+            tailf:cli-compact-syntax;
+            leaf ipv4-address {
+              tailf:cli-drop-node-name;
+              type inet:ipv4-address {
+                tailf:info "A.B.C.D;;IPv4 Address";
+              }
+            }
+            leaf ipv4-mask {
+              tailf:cli-drop-node-name;
+              tailf:cli-optional-in-sequence;
+              type inet:ipv4-address {
+                tailf:info "A.B.C.D;;specify mask";
+              }
+            }
+          }
+        }
+        case ipv6-case {
+          leaf ipv6-prefix {
+            tailf:cli-drop-node-name;
+            type inet:ipv6-prefix {
+              tailf:info "X:X:X:X::X/<0-128>;;IPv6 address/prefix";
+            }
+          }
+        }
+      }
+    }
+    leaf description {
+      tailf:info "Specify a description of this peer";
+      description
+        "Specify a description of this peer";
+      tailf:cli-multi-value;
+      type string {
+        tailf:info "LINE;;description of the peer";
+      }
+    }
+    leaf hostname {
+      tailf:info "Hostname of peer";
+      description
+        "Hostname of peer";
+      type string {
+        tailf:info "WORD;;Name";
+      }
+    }
+    container identity {
+      tailf:info "Specify IKE identity to use";
+      description
+        "Specify IKE identity to use";
+      leaf address {
+        tailf:info "IP address";
+        description
+          "IP address";
+        type union {
+          type inet:ipv4-address {
+            tailf:info "A.B.C.D;;IPv4 Address";
+          }
+          type inet:ipv6-address {
+            tailf:info "X:X:X:X::X;;IPv6 address";
+          }
+        }
+      }
+      container email {
+        tailf:info "Use email address";
+        description
+          "Use email address";
+        leaf name {
+          tailf:cli-drop-node-name;
+          tailf:cli-full-command;
+          type string {
+            tailf:info "WORD;;Specify the name string";
+          }
+        }
+        leaf domain {
+          tailf:info "email Domain Name";
+          description
+            "email Domain Name";
+          tailf:cli-full-command;
+          type string {
+            tailf:info "WORD;;Specify the name string";
+          }
+        }
+      }
+      container fqdn {
+        tailf:info "Use FQDN";
+        description
+          "Use FQDN";
+        leaf name {
+          tailf:cli-drop-node-name;
+          tailf:cli-full-command;
+          type string {
+            tailf:info "WORD;;Specify the name string";
+          }
+        }
+        leaf domain {
+          tailf:info "email Domain Name";
+          description
+            "email Domain Name";
+          tailf:cli-full-command;
+          type string {
+            tailf:info "WORD;;Specify the name string";
+          }
+        }
+      }
+      leaf key-id {
+        tailf:info "proprietary types of identification (ID KEY ID)";
+        description
+          "proprietary types of identification (ID KEY ID)";
+        type string {
+          tailf:info "WORD;;ID_KEY_ID <string>";
+        }
+      }
+    }
+    container pre-shared-key {
+      tailf:info "specify the pre-shared key";
+      description
+        "specify the pre-shared key";
+      tailf:cli-compact-syntax;
+      leaf local {
+        tailf:info "specify signing key";
+        description
+          "specify signing key";
+        type empty;
+      }
+      leaf remote {
+        tailf:info "specify verifying key";
+        description
+          "specify verifying key";
+        type empty;
+      }
+      choice encryption-hex {
+        case encryption-case {
+          leaf encryption {
+            tailf:cli-drop-node-name;
+            tailf:cli-incomplete-command;
+            type enumeration {
+              enum "0" {
+                tailf:info "Specifies an UNENCRYPTED password will follow";
+              }
+              enum "6" {
+                tailf:info "Specifies an ENCRYPTED password will follow";
+              }
+            }
+          }
+          leaf key {
+            tailf:cli-drop-node-name;
+            tailf:cli-multi-value;
+            type string {
+              tailf:info "LINE;;The UNENCRYPTED (cleartext) user password";
+            }
+          }
+        }
+        case hex-case {
+          leaf hex {
+            tailf:info "Key entered in hex string";
+            description
+              "Key entered in hex string";
+            tailf:cli-multi-value;
+            type string {
+              tailf:info "Hex-string;;pre-shared key in hex";
+            }
+          }
+        }
+      }
+    }
+  }
+
+  grouping crypto-ikev2-profile-aaa-authorization-grouping {
+    list list {
+      tailf:info "AAA method list";
+      description
+        "AAA method list";
+      tailf:cli-suppress-mode;
+      key "name";
+      leaf name {
+        type string {
+          tailf:info "WORD;;AAA list name";
+        }
+      }
+      leaf username {
+        tailf:cli-drop-node-name;
+        tailf:cli-hide-in-submode;
+        type string {
+          tailf:info "WORD;;AAA username";
+        }
+      }
+      leaf local {
+        tailf:info "Local AAA Authorization";
+        description
+          "Local AAA Authorization";
+        tailf:cli-hide-in-submode;
+        when "../username";
+        type empty;
+      }
+      leaf name-mangler {
+        tailf:info "Specify the name-mangler to derive AAA username";
+        description
+          "Specify the name-mangler to derive AAA username";
+        tailf:cli-hide-in-submode;
+        type string {
+          tailf:info "WORD;;mangler name";
+        }
+      }
+      container password {
+        tailf:info "Specify the AAA password";
+        description
+          "Specify the AAA password";
+        tailf:cli-hide-in-submode;
+        tailf:cli-sequence-commands;
+        tailf:cli-compact-syntax;
+        leaf encryption {
+          tailf:cli-drop-node-name;
+          tailf:cli-incomplete-command;
+          tailf:cli-optional-in-sequence;
+          type enumeration {
+            enum "0" {
+              tailf:info "Specifies an UNENCRYPTED password will follow";
+            }
+            enum "6" {
+              tailf:info "Specifies an ENCRYPTED password will follow";
+            }
+          }
+        }
+        leaf key {
+          tailf:cli-drop-node-name;
+          tailf:cli-multi-value;
+          type string {
+            tailf:info "LINE;;The UNENCRYPTED (cleartext) user password";
+          }
+        }
+      }
+    }
+  }
+
+  grouping crypto-ikev2-profile-authentication-grouping {
+    leaf username {
+      tailf:info "EAP username";
+      description
+        "EAP username";
+      tailf:cli-break-sequence-commands;
+      tailf:cli-incomplete-command;
+      type string {
+        tailf:info "WORD;;Enter the username for EAP";
+      }
+    }
+    container password {
+      tailf:info "EAP password";
+      description
+        "EAP password";
+      tailf:cli-flatten-container;
+      tailf:cli-sequence-commands;
+      tailf:cli-compact-syntax;
+      leaf encryption {
+        tailf:cli-drop-node-name;
+        tailf:cli-incomplete-command;
+        tailf:cli-optional-in-sequence;
+        type enumeration {
+          enum "0" {
+            tailf:info "Specifies an UNENCRYPTED password will follow";
+          }
+          enum "6" {
+            tailf:info "Specifies an ENCRYPTED password will follow";
+          }
+        }
+      }
+      leaf key {
+        tailf:cli-drop-node-name;
+        tailf:cli-multi-value;
+        type string {
+          tailf:info "LINE;;The UNENCRYPTED (cleartext) user password";
+        }
+      }
+    }
+  }
+
+  grouping crypto-ikev2-profile-authentication-key-grouping {
+    container key {
+      tailf:info "specify key";
+      description
+        "specify key";
+      tailf:cli-sequence-commands;
+      tailf:cli-compact-syntax;
+      leaf encryption {
+        tailf:cli-drop-node-name;
+        tailf:cli-incomplete-command;
+        tailf:cli-optional-in-sequence;
+        type enumeration {
+          enum "0" {
+            tailf:info "Specifies an UNENCRYPTED password will follow";
+          }
+          enum "6" {
+            tailf:info "Specifies an ENCRYPTED password will follow";
+          }
+        }
+      }
+      leaf key {
+        tailf:cli-drop-node-name;
+        tailf:cli-multi-value;
+        type string {
+          tailf:info "LINE;;The UNENCRYPTED (cleartext) user password";
+        }
+      }
+    }
+  }
+
+  grouping crypto-ikev2-profile-grouping {
+    container aaa {
+      tailf:info "Specify AAA related configs";
+      description
+        "Specify AAA related configs";
+      container accounting {
+        tailf:info "AAA accounting";
+        description
+          "AAA accounting";
+        leaf anyconnect-eap {
+          tailf:info "AAA list to use when IKEv2 remote auth method is AnyConnect EAP";
+          description
+            "AAA list to use when IKEv2 remote auth method is AnyConnect EAP";
+          tailf:cli-full-command;
+          type string {
+            tailf:info "WORD;;AAA list name";
+          }
+        }
+        leaf cert {
+          tailf:info "AAA list to use when IKEv2 remote auth method is certificate based";
+          description
+            "AAA list to use when IKEv2 remote auth method is certificate based";
+          tailf:cli-full-command;
+          type string {
+            tailf:info "WORD;;AAA list name";
+          }
+        }
+        leaf eap {
+          tailf:info "AAA list to use when IKEv2 remote auth method is EAP";
+          description
+            "AAA list to use when IKEv2 remote auth method is EAP";
+          tailf:cli-full-command;
+          type string {
+            tailf:info "WORD;;AAA list name";
+          }
+        }
+        leaf psk {
+          tailf:info "AAA list to use when IKEv2 remote auth method is PSK";
+          description
+            "AAA list to use when IKEv2 remote auth method is PSK";
+          tailf:cli-full-command;
+          type string {
+            tailf:info "WORD;;AAA list name";
+          }
+        }
+      }
+      container authentication {
+        tailf:info "AAA authentication";
+        description
+          "AAA authentication";
+        leaf anyconnect-eap {
+          tailf:info "AAA AnyConnect EAP authentication";
+          description
+            "AAA AnyConnect EAP authentication";
+          tailf:cli-full-command;
+          type string {
+            tailf:info "WORD;;AAA list name";
+          }
+        }
+        leaf eap {
+          tailf:info "AAA EAP authentication";
+          description
+            "AAA EAP authentication";
+          tailf:cli-full-command;
+          type string {
+            tailf:info "WORD;;AAA list name";
+          }
+        }
+      }
+      container authorization {
+        tailf:info "AAA authorization";
+        description
+          "AAA authorization";
+        container group {
+          tailf:info "AAA group authorization";
+          description
+            "AAA group authorization";
+          container anyconnect-eap {
+            tailf:info "AAA list to use when IKEv2 remote auth method is anyconnect eap based";
+            description
+              "AAA list to use when IKEv2 remote auth method is anyconnect eap based";
+            uses crypto-ikev2-profile-aaa-authorization-grouping;
+          }
+          container cert {
+            tailf:info "AAA list to use when IKEv2 remote auth method is certificate based";
+            description
+              "AAA list to use when IKEv2 remote auth method is certificate based";
+            uses crypto-ikev2-profile-aaa-authorization-grouping;
+          }
+          container eap {
+            tailf:info "AAA list to use when IKEv2 remote auth method is EAP";
+            description
+              "AAA list to use when IKEv2 remote auth method is EAP";
+            uses crypto-ikev2-profile-aaa-authorization-grouping;
+          }
+          container psk {
+            tailf:info "AAA list to use when IKEv2 remote auth method is PSK";
+            description
+              "AAA list to use when IKEv2 remote auth method is PSK";
+            uses crypto-ikev2-profile-aaa-authorization-grouping;
+          }
+          leaf override {
+            tailf:info "Override user authorization with group authorization.By default, group authorization isoverridden with user authorization";
+            description
+              "Override user authorization with group authorization.By default, group authorization isoverridden with user authorization";
+            tailf:cli-incomplete-command;
+            type empty;
+          }
+        }
+        container user {
+          tailf:info "AAA user authorization";
+          description
+            "AAA user authorization";
+          container anyconnect-eap {
+            tailf:info "AAA list to use when IKEv2 remote auth method is anyconnect eap based";
+            description
+              "AAA list to use when IKEv2 remote auth method is anyconnect eap based";
+            leaf cached {
+              tailf:info "Use cached attributes from EAP authentication or AAA pre-shared key fetch";
+              description
+                "Use cached attributes from EAP authentication or AAA pre-shared key fetch";
+              tailf:cli-full-command;
+              type empty;
+            }
+            uses crypto-ikev2-profile-aaa-authorization-grouping;
+          }
+          container cert {
+            tailf:info "AAA list to use when IKEv2 remote auth method is certificate based";
+            description
+              "AAA list to use when IKEv2 remote auth method is certificate based";
+            uses crypto-ikev2-profile-aaa-authorization-grouping;
+          }
+          container eap {
+            tailf:info "AAA list to use when IKEv2 remote auth method is EAP";
+            description
+              "AAA list to use when IKEv2 remote auth method is EAP";
+            leaf cached {
+              tailf:info "Use cached attributes from EAP authentication or AAA pre-shared key fetch";
+              description
+                "Use cached attributes from EAP authentication or AAA pre-shared key fetch";
+              tailf:cli-full-command;
+              type empty;
+            }
+            uses crypto-ikev2-profile-aaa-authorization-grouping;
+          }
+          container psk {
+            tailf:info "AAA list to use when IKEv2 remote auth method is PSK";
+            description
+              "AAA list to use when IKEv2 remote auth method is PSK";
+            leaf cached {
+              tailf:info "Use cached attributes from EAP authentication or AAA pre-shared key fetch";
+              description
+                "Use cached attributes from EAP authentication or AAA pre-shared key fetch";
+              tailf:cli-full-command;
+              type empty;
+            }
+            uses crypto-ikev2-profile-aaa-authorization-grouping;
+          }
+        }
+      }
+    }
+    container authentication {
+      tailf:info "Set authentication method";
+      description
+        "Set authentication method";
+      container local {
+        tailf:info "Set local authentication method";
+        description
+          "Set local authentication method";
+        container eap {
+          tailf:info "Extended Authentication Protocol";
+          description
+            "Extended Authentication Protocol";
+          presence "true";
+          container gtc {
+            tailf:info "eap method gtc credentials";
+            description
+              "eap method gtc credentials";
+            tailf:cli-sequence-commands;
+            tailf:cli-compact-syntax;
+            uses crypto-ikev2-profile-authentication-grouping;
+          }
+          container md5 {
+            tailf:info "eap method md5 credentials";
+            description
+              "eap method md5 credentials";
+            tailf:cli-sequence-commands;
+            tailf:cli-compact-syntax;
+            uses crypto-ikev2-profile-authentication-grouping;
+          }
+          container mschapv2 {
+            tailf:info "eap method mschapv2 credentials";
+            description
+              "eap method mschapv2 credentials";
+            tailf:cli-sequence-commands;
+            tailf:cli-compact-syntax;
+            uses crypto-ikev2-profile-authentication-grouping;
+          }
+        }
+        leaf ecdsa-sig {
+          tailf:info "ECDSA Signature";
+          description
+            "ECDSA Signature";
+          tailf:cli-full-command;
+          type empty;
+        }
+        container pre-share {
+          tailf:info "Pre-Shared Key";
+          description
+            "Pre-Shared Key";
+          presence "true";
+          tailf:cli-sequence-commands;
+          tailf:cli-compact-syntax;
+          uses crypto-ikev2-profile-authentication-key-grouping;
+        }
+        leaf rsa-sig {
+          tailf:info "Rivest-Shamir-Adleman Signature";
+          description
+            "Rivest-Shamir-Adleman Signature";
+          tailf:cli-full-command;
+          type empty;
+        }
+      }
+      container remote {
+        tailf:info "Set remote authentication method";
+        description
+          "Set remote authentication method";
+        container anyconnect-eap {
+          tailf:info "AnyConnect EAP";
+          description
+            "AnyConnect EAP";
+          container aggregate {
+            tailf:info "use aggregate auth for anyconnect eap";
+            description
+              "use aggregate auth for anyconnect eap";
+            presence "true";
+            leaf cert-request {
+              tailf:info "use double authentication during anyconnect eap";
+              description
+                "use double authentication during anyconnect eap";
+              tailf:cli-full-command;
+              type empty;
+            }
+          }
+        }
+        container eap {
+          tailf:info "Extended Authentication Protocol";
+          description
+            "Extended Authentication Protocol";
+          presence "true";
+          leaf query-identity {
+            tailf:info "query EAP identity from peer";
+            description
+              "query EAP identity from peer";
+            tailf:cli-full-command;
+            type empty;
+          }
+          leaf timeout {
+            tailf:info "timeout";
+            description
+              "timeout";
+            tailf:cli-full-command;
+            type uint8 {
+              tailf:info "<45-180>;;EAP authentication timeout in seconds";
+              range "45..180";
+            }
+          }
+        }
+        leaf ecdsa-sig {
+          tailf:info "ECDSA Signature";
+          description
+            "ECDSA Signature";
+          tailf:cli-full-command;
+          type empty;
+        }
+        container pre-share {
+          tailf:info "Pre-Shared Key";
+          description
+            "Pre-Shared Key";
+          presence "true";
+          uses crypto-ikev2-profile-authentication-key-grouping;
+        }
+        leaf rsa-sig {
+          tailf:info "Rivest-Shamir-Adleman Signature";
+          description
+            "Rivest-Shamir-Adleman Signature";
+          tailf:cli-full-command;
+          type empty;
+        }
+      }
+    }
+    container config-exchange {
+      tailf:info "config-exchange options";
+      description
+        "config-exchange options";
+      leaf request {
+        tailf:info "enable config-exchange request";
+        description
+          "enable config-exchange request";
+        tailf:cli-full-command;
+        type empty;
+      }
+      leaf set {
+        tailf:info "config-exchange set options";
+        description
+          "config-exchange set options";
+        tailf:cli-full-command;
+        type enumeration {
+          enum "accept" {
+            tailf:info "accept config-exchange set";
+          }
+          enum "send" {
+            tailf:info "enable sending of config-exchange set";
+          }
+        }
+      }
+    }
+    leaf description {
+      tailf:info "Specify a description of this profile";
+      description
+        "Specify a description of this profile";
+      tailf:cli-multi-value;
+      type string {
+        tailf:info "LINE;;a 1 line description of the profile";
+      }
+    }
+    container dpd {
+      tailf:info "Enable IKE liveness check for peers";
+      description
+        "Enable IKE liveness check for peers";
+      tailf:cli-sequence-commands;
+      tailf:cli-compact-syntax;
+      leaf interval {
+        tailf:cli-drop-node-name;
+        type uint16 {
+          tailf:info "<10-3600>;;DPD R-U-THERE interval";
+          range "10..3600";
+        }
+      }
+      leaf retry {
+        tailf:cli-drop-node-name;
+        type uint8 {
+          tailf:info "<2-60>;;DPD Retry Interval";
+          range "2..60";
+        }
+      }
+      leaf query {
+        tailf:cli-drop-node-name;
+        type enumeration {
+          enum "on-demand" {
+            tailf:info "Send DPD queries only as needed";
+          }
+          enum "periodic" {
+            tailf:info "Send DPD queries at regular intervals";
+          }
+        }
+      }
+    }
+    container identity {
+      tailf:info "Specify IKE identity to use";
+      description
+        "Specify IKE identity to use";
+      leaf address {
+        tailf:info "address";
+        description
+          "address";
+        tailf:cli-full-command;
+        type inet:ip-address {
+          tailf:info "A.B.C.D;;IPv4 addressX:X:X:X::X;;IPv6 address";
+        }
+      }
+      leaf dn {
+        tailf:info "Distinguished Name";
+        description
+          "Distinguished Name";
+        tailf:cli-full-command;
+        type empty;
+      }
+      leaf email {
+        tailf:info "Fully qualified email string";
+        description
+          "Fully qualified email string";
+        tailf:cli-full-command;
+        type string {
+          tailf:info "WORD;;email <user@domain>";
+        }
+      }
+      leaf fqdn {
+        tailf:info "Fully qualified domain name string";
+        description
+          "Fully qualified domain name string";
+        tailf:cli-full-command;
+        type string {
+          tailf:info "WORD;;FQDN <host.domain>";
+        }
+      }
+      leaf key-id {
+        tailf:info "key-id opaque string - proprietary types of identification";
+        description
+          "key-id opaque string - proprietary types of identification";
+        tailf:cli-full-command;
+        type string {
+          tailf:info "WORD;;key-id string";
+        }
+      }
+    }
+    container initial-contact {
+      tailf:info "initial-contact processing options";
+      description
+        "initial-contact processing options";
+      leaf force {
+        tailf:info "Enforces initial-contact based clean-up";
+        description
+          "Enforces initial-contact based clean-up";
+        tailf:cli-full-command;
+        type empty;
+      }
+    }
+    leaf ivrf {
+      tailf:info "I-VRF of the profile";
+      description
+        "I-VRF of the profile";
+      type string {
+        tailf:info "WORD;;VRF Name";
+      }
+    }
+    container keyring {
+      tailf:info "Specify keyring to use";
+      description
+        "Specify keyring to use";
+      list aaa {
+        tailf:info "AAA based keyring";
+        description
+          "AAA based keyring";
+        tailf:cli-suppress-mode;
+        key "name";
+        leaf name {
+          type string {
+            tailf:info "WORD;;AAA list name";
+          }
+        }
+        leaf name-mangler {
+          tailf:info "Specify the name-mangler to derive username";
+          description
+            "Specify the name-mangler to derive username";
+          tailf:cli-hide-in-submode;
+          type string {
+            tailf:info "WORD;;mangler name";
+          }
+        }
+        container password {
+          tailf:info "Specify the AAA password";
+          description
+            "Specify the AAA password";
+          tailf:cli-hide-in-submode;
+          tailf:cli-sequence-commands;
+          tailf:cli-compact-syntax;
+          leaf encryption {
+            tailf:cli-drop-node-name;
+            tailf:cli-incomplete-command;
+            tailf:cli-optional-in-sequence;
+            type enumeration {
+              enum "0" {
+                tailf:info "Specifies an UNENCRYPTED password will follow";
+              }
+              enum "6" {
+                tailf:info "Specifies an ENCRYPTED password will follow";
+              }
+            }
+          }
+          leaf key {
+            tailf:cli-drop-node-name;
+            tailf:cli-multi-value;
+            type string {
+              tailf:info "LINE;;The UNENCRYPTED (cleartext) user password";
+            }
+          }
+        }
+      }
+      leaf local {
+        tailf:info "Local keyring";
+        description
+          "Local keyring";
+        type string {
+          tailf:info "WORD;;Keyring name";
+        }
+      }
+    }
+    container lifetime {
+      tailf:info "Set lifetime for ISAKMP security association";
+      description
+        "Set lifetime for ISAKMP security association";
+      leaf seconds {
+        tailf:cli-drop-node-name;
+        tailf:cli-full-command;
+        type uint32 {
+          tailf:info "<120-86400>;;lifetime in seconds";
+          range "120..86400";
+        }
+      }
+      leaf certificate {
+        tailf:info "Enable certificate based lifetime";
+        description
+          "Enable certificate based lifetime";
+        tailf:cli-full-command;
+        type empty;
+      }
+    }
+    container match {
+      tailf:info "Match values of peer";
+      description
+        "Match values of peer";
+      container address {
+        tailf:info "IP address";
+        description
+          "IP address";
+        container local {
+          tailf:info "Local address";
+          description
+            "Local address";
+          leaf ip {
+            tailf:cli-drop-node-name;
+            tailf:cli-full-command;
+            type inet:ip-address {
+              tailf:info "A.B.C.D;;Specify an IPv4 addressX:X:X:X::X;;Specify an IPv6 address";
+            }
+          }
+          leaf interface {
+            tailf:info "Specify an interface";
+            description
+              "Specify an interface";
+            tailf:cli-full-command;
+            type string;
+          }
+        }
+      }
+      leaf certificate {
+        tailf:info "Peer certificate attributes";
+        description
+          "Peer certificate attributes";
+        type string {
+          tailf:info "WORD;;Specify the certificate map";
+        }
+      }
+      container fvrf {
+        tailf:info "fvrf of the profile";
+        description
+          "fvrf of the profile";
+        leaf name {
+          tailf:cli-drop-node-name;
+          tailf:cli-full-command;
+          type string {
+            tailf:info "WORD;;fvrf name (default:global)";
+          }
+        }
+        leaf any {
+          tailf:info "Any fvrf";
+          description
+            "Any fvrf";
+          tailf:cli-full-command;
+          type empty;
+        }
+      }
+      container identity {
+        tailf:info "IKE identity";
+        description
+          "IKE identity";
+        container remote {
+          tailf:info "Remote identity";
+          description
+            "Remote identity";
+          container address {
+            tailf:info "IP address(es)";
+            description
+              "IP address(es)";
+            choice ipv4-ipv6 {
+              case ipv4-case {
+                container ipv4 {
+                  tailf:cli-drop-node-name;
+                  tailf:cli-sequence-commands;
+                  tailf:cli-compact-syntax;
+                  leaf ipv4-address {
+                    tailf:cli-drop-node-name;
+                    type inet:ipv4-address {
+                      tailf:info "A.B.C.D;;IPv4 Address prefix";
+                    }
+                  }
+                  leaf ipv4-mask {
+                    tailf:cli-drop-node-name;
+                    tailf:cli-optional-in-sequence;
+                    type inet:ipv4-address {
+                      tailf:info "A.B.C.D;;specify mask";
+                    }
+                  }
+                }
+              }
+              case ipv6-case {
+                leaf ipv6-prefix {
+                  tailf:cli-drop-node-name;
+                  type inet:ipv6-prefix {
+                    tailf:info "X:X:X:X::X/<0-128>;;IPv6 address/prefix-length";
+                  }
+                }
+              }
+            }
+          }
+          leaf any {
+            tailf:info "match any peer identity";
+            description
+              "match any peer identity";
+            tailf:cli-full-command;
+            type empty;
+          }
+          container email {
+            tailf:info "Fully qualified email string [Max. 255 char(s)]";
+            description
+              "Fully qualified email string [Max. 255 char(s)]";
+            leaf name {
+              tailf:cli-drop-node-name;
+              tailf:cli-full-command;
+              type string {
+                tailf:info "WORD;;Specify the name string";
+              }
+            }
+            leaf domain {
+              tailf:info "match domain instead of exact";
+              description
+                "match domain instead of exact";
+              tailf:cli-full-command;
+              type string {
+                tailf:info "WORD;;Specify the name string";
+              }
+            }
+          }
+          container fqdn {
+            tailf:info "Fully qualified domain name string [Max. 255 char(s)]";
+            description
+              "Fully qualified domain name string [Max. 255 char(s)]";
+            leaf name {
+              tailf:cli-drop-node-name;
+              tailf:cli-full-command;
+              type string {
+                tailf:info "WORD;;Specify the name string";
+              }
+            }
+            leaf domain {
+              tailf:info "match domain instead of exact";
+              description
+                "match domain instead of exact";
+              tailf:cli-full-command;
+              type string {
+                tailf:info "WORD;;Specify the name string";
+              }
+            }
+          }
+          leaf key-id {
+            tailf:info "key-id opaque string";
+            description
+              "key-id opaque string";
+            type string {
+              tailf:info "WORD;;Specify the key-id string";
+            }
+          }
+        }
+      }
+    }
+    container nat {
+      tailf:info "NAT-transparency";
+      description
+        "NAT-transparency";
+      leaf keepalive {
+        tailf:info "NAT keepalive interval";
+        description
+          "NAT keepalive interval";
+        type uint16 {
+          tailf:info "<5-3600>;;NAT keepalive interval in seconds";
+          range "5..3600";
+        }
+      }
+    }
+    container pki {
+      tailf:info "Specify certificate authorities to trust";
+      description
+        "Specify certificate authorities to trust";
+      tailf:cli-sequence-commands;
+      tailf:cli-compact-syntax;
+      leaf trustpoint {
+        tailf:info "Cert authority trustpoint for RSA sig";
+        description
+          "Cert authority trustpoint for RSA sig";
+        type string {
+          tailf:info "WORD;;Specify the trustpoint label to use";
+        }
+      }
+      leaf use {
+        tailf:cli-drop-node-name;
+        tailf:cli-optional-in-sequence;
+        type enumeration {
+          enum "sign" {
+            tailf:info "Set trustpoint for sign";
+          }
+          enum "verify" {
+            tailf:info "Set trustpoint for verify";
+          }
+        }
+      }
+    }
+    container reconnect {
+      tailf:info "Enable profile for auto re-connect";
+      description
+        "Enable profile for auto re-connect";
+      presence "true";
+      leaf timeout {
+        tailf:info "timeout value for session in reconnect state";
+        description
+          "timeout value for session in reconnect state";
+        type uint32 {
+          tailf:info "<600-86400>;;reconnect timeout interval in seconds";
+          range "600..86400";
+        }
+      }
+    }
+    container redirect {
+      tailf:info "IKEv2 Redirect Mechanism for load-balancing";
+      description
+        "IKEv2 Redirect Mechanism for load-balancing";
+      container gateway {
+        tailf:info "Enables Redirect Mechanism on Gateway";
+        description
+          "Enables Redirect Mechanism on Gateway";
+        leaf auth {
+          tailf:info "Redirect at SA authentication";
+          description
+            "Redirect at SA authentication";
+          type empty;
+        }
+      }
+    }
+    leaf shutdown {
+      tailf:info "shutdown the IKEv2 profile";
+      description
+        "shutdown the IKEv2 profile";
+      tailf:cli-full-command;
+      type empty;
+    }
+    container virtual-template {
+      tailf:info "Specify the virtual-template for dynamic interface creation.";
+      description
+        "Specify the virtual-template for dynamic interface creation.";
+      tailf:cli-sequence-commands;
+      tailf:cli-compact-syntax;
+      leaf number {
+        tailf:cli-drop-node-name;
+        type uint16 {
+          tailf:info "<1-4095>;;Virtual-template number";
+          range "1..4095";
+        }
+      }
+      leaf mode {
+        tailf:info "Enabling Tunnel Auto Mode";
+        description
+          "Enabling Tunnel Auto Mode";
+        tailf:cli-optional-in-sequence;
+        type enumeration {
+          enum "auto" {
+            tailf:info "Auto - Enable Auto feature on the ike profile";
+          }
+        }
+      }
+    }
+  }
+
+  grouping crypto-ikev2-grouping {
+    container authorization {
+      tailf:info "IKEv2 authorization";
+      description
+        "IKEv2 authorization";
+      leaf policy {
+        tailf:info "IKEv2 authorization policy";
+        description
+          "IKEv2 authorization policy";
+        type string {
+          tailf:info "WORD;;Name of the policy";
+        }
+      }
+    }
+    leaf certificate-cache {
+      tailf:info "Cache for storing certs fetched from HTTP URLs";
+      description
+        "Cache for storing certs fetched from HTTP URLs";
+      type uint16 {
+        tailf:info "<1-2000>;;Maximum number of certificates stored in certificate cache";
+      }
+    }
+    container client {
+      tailf:info "IKEv2 client configuration";
+      description
+        "IKEv2 client configuration";
+      leaf flexvpn {
+        tailf:info "Configure an IKEv2 FlexVPN client";
+        description
+          "Configure an IKEv2 FlexVPN client";
+        type string {
+          tailf:info "WORD;;IKEv2 FlexVPN name";
+        }
+      }
+    }
+    leaf cluster {
+      tailf:info "Cluster load-balancer settings";
+      description
+        "Cluster load-balancer settings";
+      type empty;
+    }
+    leaf cookie-challenge {
+      tailf:info "Set Cookie-challenge watermark";
+      description
+        "Set Cookie-challenge watermark";
+      type uint16 {
+        tailf:info "<0-1000>;;Maximum number of in-negotiation SAs that enable Cookie-challenge";
+      }
+    }
+    container cts {
+      tailf:info "Cisco Trust Security";
+      description
+        "Cisco Trust Security";
+      leaf sgt {
+        tailf:info "Security Group Tag";
+        description
+          "Security Group Tag";
+        type empty;
+      }
+    }
+    container diagnose {
+      tailf:info "IKEV2 diagnose";
+      description
+        "IKEV2 diagnose";
+      leaf error {
+        tailf:info "Start IKEv2 error trace debug";
+        description
+          "Start IKEv2 error trace debug";
+        type uint16 {
+          tailf:info "<1-1000>;;Maximum number of exit path entry";
+          range "1..1000";
+        }
+      }
+    }
+    leaf disconnect-revoked-peers {
+      tailf:info "Disconnect Crypto Session with Cert Revoked Peer";
+      description
+        "Disconnect Crypto Session with Cert Revoked Peer";
+      type empty;
+    }
+    container dpd-container {
+      tailf:cli-drop-node-name;
+      tailf:cli-sequence-commands;
+      tailf:cli-compact-syntax;
+      leaf dpd {
+        tailf:info "Enable IKE liveness check for peers";
+        description
+          "Enable IKE liveness check for peers";
+        type uint16 {
+          tailf:info "<10-3600>;;DPD R-U-THERE interval";
+          range "10..3600";
+        }
+      }
+      leaf retry-interval {
+        tailf:cli-drop-node-name;
+        type uint8 {
+          tailf:info "<2-60>;;DPD Retry Interval";
+          range "2..60";
+        }
+      }
+      leaf dpd-query {
+        tailf:cli-drop-node-name;
+        type enumeration {
+          enum "on-demand" {
+            tailf:info "Send DPD queries only as needed";
+          }
+          enum "periodic" {
+            tailf:info "Send DPD queries at regular intervals";
+          }
+        }
+      }
+    }
+    container fragmentation {
+      tailf:info "Enable fragmentation of ikev2 packets";
+      description
+        "Enable fragmentation of ikev2 packets";
+      presence "true";
+      leaf mtu {
+        tailf:info "MTU size for fragmentation";
+        description
+          "MTU size for fragmentation";
+        type uint16 {
+          tailf:info "<68-1500>;;ikev2 MTU including IP and UDP header size";
+          range "68..1500";
+        }
+      }
+    }
+    container http-url {
+      tailf:info "Enable http URL lookup";
+      description
+        "Enable http URL lookup";
+      leaf cert {
+        tailf:info "Enable certificate lookup based on HTTP-based URL";
+        description
+          "Enable certificate lookup based on HTTP-based URL";
+        type empty;
+      }
+    }
+    list keyring {
+      tailf:info "Define IKEv2 Keyring";
+      description
+        "Define IKEv2 Keyring";
+      tailf:cli-mode-name "config-ikev2-keyring";
+      key "name";
+      leaf name {
+        type string {
+          tailf:info "WORD;;Name of IKEv2 Keyring";
+        }
+      }
+      list peer {
+        tailf:info "Configure a Peer and associated keys";
+        description
+          "Configure a Peer and associated keys";
+        tailf:cli-mode-name "config-ikev2-keyring-peer";
+        key "name";
+        leaf name {
+          type string {
+            tailf:info "WORD;;Name of the peer block";
+          }
+        }
+        uses crypto-ikev2-keyring-peer-grouping;
+      }
+    }
+    container limit {
+      tailf:info "Limit the number of maximum and negotiating sa";
+      description
+        "Limit the number of maximum and negotiating sa";
+      container max-neg-sa {
+        tailf:cli-drop-node-name;
+        tailf:cli-sequence-commands;
+        tailf:cli-compact-syntax;
+        leaf max-in-negotation-sa {
+          tailf:info "Limit the maximum number of negotiating SA";
+          description
+            "Limit the maximum number of negotiating SA";
+          type uint32 {
+            tailf:info "<1-9999>;;Set the limit";
+            range "1..9999";
+          }
+        }
+        leaf direction {
+          tailf:cli-drop-node-name;
+          tailf:cli-optional-in-sequence;
+          type enumeration {
+            enum "incoming" {
+              tailf:info "Limit the maximum number of incoming negotiating SA";
+            }
+            enum "outgoing" {
+              tailf:info "Limit the maximum number of outgoing negotiating SA";
+            }
+          }
+        }
+      }
+      leaf max-sa {
+        tailf:info "Limit the maximum number of SA allowed";
+        description
+          "Limit the maximum number of SA allowed";
+        type uint32 {
+          tailf:info "<1-9999>;;Set the limit";
+          range "1..9999";
+        }
+      }
+    }
+    leaf name-mangler {
+      tailf:info "Name mangler";
+      description
+        "Name mangler";
+      type string {
+        tailf:info "WORD;;Name of the mangler";
+      }
+    }
+    container nat {
+      tailf:info "NAT-transparency";
+      description
+        "NAT-transparency";
+      leaf keepalive {
+        tailf:info "Set NAT keepalive interval";
+        description
+          "Set NAT keepalive interval";
+        type uint16 {
+          tailf:info "<5-3600>;;Number of seconds between NAT keepalive";
+          range "5..3600";
+        }
+      }
+    }
+    list policy {
+      tailf:info "Define IKEV2 policies";
+      description
+        "Define IKEV2 policies";
+      tailf:cli-mode-name "config-ikev2-policy";
+      key "name";
+      leaf name {
+        type string {
+          tailf:info "WORD;;Name of IKEv2 policy";
+        }
+      }
+      container match {
+        tailf:info "Match values of local fields";
+        description
+          "Match values of local fields";
+        container address {
+          tailf:info "Specify the address to match";
+          description
+            "Specify the address to match";
+          leaf local {
+            tailf:info "Local address";
+            description
+              "Local address";
+            type inet:ip-address {
+              tailf:info "A.B.C.D;;IPv4 addressX:X:X:X::X;;IPv6 address";
+            }
+          }
+        }
+        container fvrf {
+          tailf:info "Specify fvrf";
+          description
+            "Specify fvrf";
+          leaf name {
+            tailf:cli-drop-node-name;
+            tailf:cli-full-command;
+            type string {
+              tailf:info "WORD;;fvrf name (default:global)";
+            }
+          }
+          leaf any {
+            tailf:info "Any fvrf";
+            description
+              "Any fvrf";
+            tailf:cli-full-command;
+            type empty;
+          }
+        }
+      }
+      leaf proposal {
+        tailf:info "Specify Proposal";
+        description
+          "Specify Proposal";
+        type string {
+          tailf:info "WORD;;Specify the name of proposal to be attached";
+        }
+      }
+    }
+    list profile {
+      tailf:info "Define IKEV2 profiles";
+      description
+        "Define IKEV2 profiles";
+      tailf:cli-mode-name "config-ikev2-profile";
+      key "name";
+      leaf name {
+        type string {
+          tailf:info "WORD;;Name of IKEv2 profile";
+        }
+      }
+      uses crypto-ikev2-profile-grouping;
+    }
+    list proposal {
+      tailf:info "Define IKEV2 proposals";
+      description
+        "Define IKEV2 proposals";
+      tailf:cli-mode-name "config-ikev2-proposal";
+      key "name";
+      leaf name {
+        type string {
+          tailf:info "WORD;;Name of IKEv2 proposal";
+        }
+      }
+      container encryption {
+        tailf:info "Set encryption algorithm(s) for proposal";
+        description
+          "Set encryption algorithm(s) for proposal";
+        tailf:cli-compact-syntax;
+        leaf en-3des {
+          tailf:alt-name "3des";
+          tailf:info "3DES";
+          description
+            "3DES";
+          type empty;
+        }
+        leaf aes-cbc-128 {
+          tailf:info "AES-CBC-128";
+          description
+            "AES-CBC-128";
+          type empty;
+        }
+        leaf aes-cbc-192 {
+          tailf:info "AES-CBC-192";
+          description
+            "AES-CBC-192";
+          type empty;
+        }
+        leaf aes-cbc-256 {
+          tailf:info "AES-CBC-256";
+          description
+            "AES-CBC-256";
+          type empty;
+        }
+        leaf aes-gcm-128 {
+          tailf:info "Combined-mode,128 bit key,16 byte ICV(Authentication Tag)";
+          description
+            "Combined-mode,128 bit key,16 byte ICV(Authentication Tag)";
+          type empty;
+        }
+        leaf aes-gcm-256 {
+          tailf:info "Combined-mode,256 bit key,16 byte ICV(Authentication Tag)";
+          description
+            "Combined-mode,256 bit key,16 byte ICV(Authentication Tag)";
+          type empty;
+        }
+        leaf des {
+          tailf:info "DES";
+          description
+            "DES";
+          type empty;
+        }
+      }
+      container group {
+        tailf:info "Set the Diffie-Hellman group(s)";
+        description
+          "Set the Diffie-Hellman group(s)";
+        tailf:cli-compact-syntax;
+        leaf one {
+          tailf:alt-name "1";
+          tailf:info "DH 768 MODP";
+          description
+            "DH 768 MODP";
+          type empty;
+        }
+        leaf fourteen {
+          tailf:alt-name "14";
+          tailf:info "DH 2048 MODP";
+          description
+            "DH 2048 MODP";
+          type empty;
+        }
+        leaf fifteen {
+          tailf:alt-name "15";
+          tailf:info "DH 3072 MODP";
+          description
+            "DH 3072 MODP";
+          type empty;
+        }
+        leaf sixteen {
+          tailf:alt-name "16";
+          tailf:info "DH 4096 MODP";
+          description
+            "DH 4096 MODP";
+          type empty;
+        }
+        leaf nineteen {
+          tailf:alt-name "19";
+          tailf:info "DH 256 ECP";
+          description
+            "DH 256 ECP";
+          type empty;
+        }
+        leaf two {
+          tailf:alt-name "2";
+          tailf:info "DH 1024 MODP";
+          description
+            "DH 1024 MODP";
+          type empty;
+        }
+        leaf twenty {
+          tailf:alt-name "20";
+          tailf:info "DH 384 ECP";
+          description
+            "DH 384 ECP";
+          type empty;
+        }
+        leaf twenty-one {
+          tailf:alt-name "21";
+          tailf:info "DH 521 ECP";
+          description
+            "DH 521 ECP";
+          type empty;
+        }
+        leaf twenty-four {
+          tailf:alt-name "24";
+          tailf:info "DH 2048 (256 subgroup) MODP";
+          description
+            "DH 2048 (256 subgroup) MODP";
+          type empty;
+        }
+        leaf five {
+          tailf:alt-name "5";
+          tailf:info "DH 1536 MODP";
+          description
+            "DH 1536 MODP";
+          type empty;
+        }
+      }
+      container integrity {
+        tailf:info "Set integrity hash algorithm(s) for proposal";
+        description
+          "Set integrity hash algorithm(s) for proposal";
+        tailf:cli-compact-syntax;
+        leaf md5 {
+          tailf:info "Message Digest 5";
+          description
+            "Message Digest 5";
+          type empty;
+        }
+        leaf sha1 {
+          tailf:info "Secure Hash Standard";
+          description
+            "Secure Hash Standard";
+          type empty;
+        }
+        leaf sha256 {
+          tailf:info "Secure Hash Standard 2 (256 bit)";
+          description
+            "Secure Hash Standard 2 (256 bit)";
+          type empty;
+        }
+        leaf sha384 {
+          tailf:info "Secure Hash Standard 2 (384 bit)";
+          description
+            "Secure Hash Standard 2 (384 bit)";
+          type empty;
+        }
+        leaf sha512 {
+          tailf:info "Secure Hash Standard 2 (512 bit)";
+          description
+            "Secure Hash Standard 2 (512 bit)";
+          type empty;
+        }
+      }
+      container prf {
+        tailf:info "Set prf algorithm(s) for proposal";
+        description
+          "Set prf algorithm(s) for proposal";
+        tailf:cli-compact-syntax;
+        leaf md5 {
+          tailf:info "Message Digest 5";
+          description
+            "Message Digest 5";
+          type empty;
+        }
+        leaf sha1 {
+          tailf:info "Secure Hash Standard";
+          description
+            "Secure Hash Standard";
+          type empty;
+        }
+        leaf sha256 {
+          tailf:info "Secure Hash Standard 2 (256 bit)";
+          description
+            "Secure Hash Standard 2 (256 bit)";
+          type empty;
+        }
+        leaf sha384 {
+          tailf:info "Secure Hash Standard 2 (384 bit)";
+          description
+            "Secure Hash Standard 2 (384 bit)";
+          type empty;
+        }
+        leaf sha512 {
+          tailf:info "Secure Hash Standard 2 (512 bit)";
+          description
+            "Secure Hash Standard 2 (512 bit)";
+          type empty;
+        }
+      }
+    }
+    container reconnect {
+      tailf:info "Cluster Reconnect";
+      description
+        "Cluster Reconnect";
+      tailf:cli-sequence-commands;
+      tailf:cli-compact-syntax;
+      leaf key {
+        tailf:info "Cluster Reconnect key";
+        description
+          "Cluster Reconnect key";
+        type uint8 {
+          tailf:info "<1-2>;;Key index";
+          range "1..2";
+        }
+      }
+      choice value-active {
+        case value-case {
+          leaf value {
+            tailf:cli-drop-node-name;
+            type string {
+              tailf:info "WORD;;key value [Max 128 Chars]";
+              length "1..128";
+            }
+          }
+        }
+        case active-case {
+          leaf active {
+            tailf:info "Current active cluster reconnect key";
+            description
+              "Current active cluster reconnect key";
+            type string {
+              tailf:info "WORD;;key value [Max 128 Chars]";
+              length "1..128";
+            }
+          }
+        }
+      }
+    }
+    container redirect {
+      tailf:info "IKEv2 Redirect Mechanism for load-balancing";
+      description
+        "IKEv2 Redirect Mechanism for load-balancing";
+      container client {
+        tailf:info "Enables Redirect Mechanism on Client";
+        description
+          "Enables Redirect Mechanism on Client";
+        presence "true";
+        leaf max-redirects {
+          tailf:info "Redirect loop detection";
+          description
+            "Redirect loop detection";
+          type uint8 {
+            tailf:info "<1-255>;;Max no. of Redirects per session, Default value is 5";
+          }
+        }
+      }
+      leaf gateway {
+        tailf:info "Enables Redirect Mechanism on Gateway";
+        description
+          "Enables Redirect Mechanism on Gateway";
+        type enumeration {
+          enum "auth" {
+            tailf:info "Redirect at SA authentication";
+          }
+          enum "init" {
+            tailf:info "Redirect at SA initiation";
+          }
+        }
+      }
+    }
+    leaf window {
+      tailf:info "IKEV2 window size";
+      description
+        "IKEV2 window size";
+      type uint8 {
+        tailf:info "<1-200>;;Maximum number of overlapping requests with a peer";
+      }
+    }
+  }
+
+  grouping crypto-ipsec-profile-grouping {
+    leaf description {
+      tailf:info "Description of the crypto map statement policy";
+      description
+        "Description of the crypto map statement policy";
+      tailf:cli-multi-value;
+      type string {
+        tailf:info "LINE;;A Short description";
+      }
+    }
+    container dialer {
+      tailf:info "Dialer related commands";
+      description
+        "Dialer related commands";
+      leaf pre-classify {
+        tailf:info "Enable dialer list classification before initiating IKE";
+        description
+          "Enable dialer list classification before initiating IKE";
+        type empty;
+      }
+    }
+    container redundancy {
+      tailf:info "Configure HA for this ipsec profile";
+      description
+        "Configure HA for this ipsec profile";
+      tailf:cli-sequence-commands;
+      tailf:cli-compact-syntax;
+      leaf name {
+        tailf:cli-drop-node-name;
+        type string {
+          tailf:info "WORD;;Redundancy group name";
+        }
+      }
+      leaf stateful {
+        tailf:info "enable stateful failover";
+        description
+          "enable stateful failover";
+        type empty;
+      }
+    }
+    leaf responder-only {
+      tailf:info "Do not initiate SAs from this device";
+      description
+        "Do not initiate SAs from this device";
+      type empty;
+    }
+    container set {
+      tailf:info "Set values for encryption/decryption";
+      description
+        "Set values for encryption/decryption";
+      uses crypto-map-common-set-grouping;
+      leaf mixed-mode {
+        tailf:info "Turn on IPSec mixed-mode";
+        description
+          "Turn on IPSec mixed-mode";
+        type empty;
+      }
+      container security-association {
+        tailf:info "Security association parameters";
+        description
+          "Security association parameters";
+        uses crypto-map-common-set-security-association-grouping;
+        leaf level {
+          tailf:info "specify a security association granularity level for identities";
+          description
+            "specify a security association granularity level for identities";
+          type enumeration {
+            enum "per-host" {
+              tailf:info "granularity to host level";
+            }
+          }
+        }
+      }
+      container security-policy {
+        tailf:info "Maximum number of Security Policy entries that can be negotiated with the peer";
+        description
+          "Maximum number of Security Policy entries that can be negotiated with the peer";
+        leaf limit {
+          tailf:info "limit  0 - 50000";
+          description
+            "limit  0 - 50000";
+          type uint32 {
+            tailf:info "0 - 50000";
+            range "0..50000";
+          }
+        }
+      }
+    }
+  }
+
+  grouping crypto-ipsec-profile-default-grouping {
+    leaf description {
+      tailf:info "Description of the crypto map statement policy";
+      description
+        "Description of the crypto map statement policy";
+      type empty;
+    }
+    container dialer {
+      tailf:info "Dialer related commands";
+      description
+        "Dialer related commands";
+      leaf pre-classify {
+        tailf:info "Enable dialer list classification before initiating IKE";
+        description
+          "Enable dialer list classification before initiating IKE";
+        type empty;
+      }
+    }
+    leaf redundancy {
+      tailf:info "Configure HA for this ipsec profile";
+      description
+        "Configure HA for this ipsec profile";
+      type empty;
+    }
+    leaf responder-only {
+      tailf:info "Do not initiate SAs from this device";
+      description
+        "Do not initiate SAs from this device";
+      type empty;
+    }
+    container set {
+      tailf:info "Set values for encryption/decryption";
+      description
+        "Set values for encryption/decryption";
+      leaf group {
+        tailf:info "Set the san group parameters";
+        description
+          "Set the san group parameters";
+        type empty;
+      }
+      leaf identity {
+        tailf:info "Identity restriction";
+        description
+          "Identity restriction";
+        type empty;
+      }
+      leaf ikev2-profile {
+        tailf:info "Specify ikev2 Profile";
+        description
+          "Specify ikev2 Profile";
+        type string {
+          tailf:info "WORD;;Name the ikev2 profile";
+        }
+      }
+      leaf isakmp-profile {
+        tailf:info "Specify isakmp Profile";
+        description
+          "Specify isakmp Profile";
+        type empty;
+      }
+      leaf mixed-mode {
+        tailf:info "Turn on IPSec mixed-mode";
+        description
+          "Turn on IPSec mixed-mode";
+        type empty;
+      }
+      container pfs {
+        tailf:info "Specify pfs settings";
+        description
+          "Specify pfs settings";
+        presence "true";
+      }
+      container reverse-route {
+        tailf:info "Reverse Route Injection";
+        description
+          "Reverse Route Injection";
+        presence "true";
+      }
+      container security-association {
+        tailf:info "Security association parameters";
+        description
+          "Security association parameters";
+        leaf dfbit {
+          tailf:info "Handling of encapsulated DF bit.";
+          description
+            "Handling of encapsulated DF bit.";
+          type empty;
+        }
+        container dummy {
+          tailf:info "Enable transmitting dummy packets";
+          description
+            "Enable transmitting dummy packets";
+          presence "true";
+        }
+        leaf ecn {
+          tailf:info "Handling of ECN bit";
+          description
+            "Handling of ECN bit";
+          type empty;
+        }
+        container idle-time-container {
+          tailf:cli-drop-node-name;
+          tailf:cli-sequence-commands;
+          tailf:cli-compact-syntax;
+          leaf idle-time {
+            tailf:info "Automatically delete IPSec SAs after a given idle period.";
+            description
+              "Automatically delete IPSec SAs after a given idle period.";
+            type empty;
+          }
+          leaf default {
+            tailf:info "All SAs idle-out reset to default peer";
+            description
+              "All SAs idle-out reset to default peer";
+            tailf:cli-optional-in-sequence;
+            type empty;
+          }
+        }
+        leaf level {
+          tailf:info "specify a security association granularity level for identities";
+          description
+            "specify a security association granularity level for identities";
+          type enumeration {
+            enum "per-host" {
+              tailf:info "granularity to host level";
+            }
+          }
+        }
+        container lifetime {
+          tailf:info "security association lifetime";
+          description
+            "security association lifetime";
+          leaf days {
+            tailf:info "Time-based key duration in days";
+            description
+              "Time-based key duration in days";
+            type empty;
+          }
+          leaf kilobytes {
+            tailf:info "Volume-based key duration";
+            description
+              "Volume-based key duration";
+            type empty;
+          }
+          leaf seconds {
+            tailf:info "Time-based key duration in seconds";
+            description
+              "Time-based key duration in seconds";
+            type empty;
+          }
+        }
+        container replay {
+          tailf:info "Set replay checking.";
+          description
+            "Set replay checking.";
+          leaf disable {
+            tailf:info "Disable replay checking";
+            description
+              "Disable replay checking";
+            type empty;
+          }
+          leaf window-size {
+            tailf:info "Set replay window size.";
+            description
+              "Set replay window size.";
+            type empty;
+          }
+        }
+      }
+      container security-policy {
+        tailf:info "Maximum number of Security Policy entries that can be negotiated with the peer";
+        description
+          "Maximum number of Security Policy entries that can be negotiated with the peer";
+        leaf limit {
+          tailf:info "limit  0 - 50000";
+          description
+            "limit  0 - 50000";
+          type uint32 {
+            tailf:info "0 - 50000";
+            range "0..50000";
+          }
+        }
+      }
+      leaf transform-set {
+        tailf:info "Specify list of transform sets in priority order";
+        description
+          "Specify list of transform sets in priority order";
+        type empty;
+      }
+    }
+  }
+
+  grouping crypto-ipsec-grouping {
+    leaf df-bit {
+      tailf:info "Handling of encapsulated DF bit.";
+      description
+        "Handling of encapsulated DF bit.";
+      type enumeration {
+        enum "clear" {
+          tailf:info "Clear DF bit for encapsulated packets.";
+        }
+        enum "copy" {
+          tailf:info "Copy DF bit from inner for encapsulated packets.";
+        }
+        enum "set" {
+          tailf:info "Set DF bit for encapsulated packets.";
+        }
+      }
+    }
+    leaf fragmentation {
+      tailf:info "Handling of fragmentation of near-MTU sized packets";
+      description
+        "Handling of fragmentation of near-MTU sized packets";
+      type enumeration {
+        enum "after-encryption" {
+          tailf:info "Perform fragmentation of large packets after IPSec encapsulation.";
+        }
+        enum "before-encryption" {
+          tailf:info "Perform fragmentation of large packets before IPSec encapsulation.";
+        }
+      }
+    }
+    leaf ipv4-deny {
+      tailf:info "Configure global ipv4 deny policy.";
+      description
+        "Configure global ipv4 deny policy.";
+      type enumeration {
+        enum "clear" {
+          tailf:info "Pass packet in clear when deny acl is matched";
+        }
+        enum "drop" {
+          tailf:info "Drop packet when deny acl is matched";
+        }
+        enum "jump" {
+          tailf:info "Jump to next crypto map chain when deny acl is matched";
+        }
+      }
+    }
+    leaf nat-transparency {
+      tailf:info "IPsec NAT transparency model";
+      description
+        "IPsec NAT transparency model";
+      type enumeration {
+        enum "spi-matching" {
+          tailf:info "Match inbound SPI to outbound SPI for IPsec aware NAT";
+        }
+        enum "udp-encapsulation" {
+          tailf:info "UDP encapsulation of IPsec protocols";
+        }
+      }
+    }
+    container optional {
+      tailf:info "Enable optional encryption for IPSec";
+      description
+        "Enable optional encryption for IPSec";
+      presence "true";
+      leaf retry {
+        tailf:info "Configure length of IPSec retry interval";
+        description
+          "Configure length of IPSec retry interval";
+        type uint32 {
+          tailf:info "<60-86400>;;Number of seconds between IPSec retries";
+          range "60..86400";
+        }
+      }
+    }
+    list profile {
+      tailf:info "Configure an ipsec policy profile";
+      description
+        "Configure an ipsec policy profile";
+      tailf:cli-mode-name "ipsec-profile";
+      key "name";
+      leaf name {
+        type string {
+          tailf:info "WORD;;Profile name";
+        }
+      }
+      container default {
+        tailf:info "Set a command to its defaults";
+        description
+          "Set a command to its defaults";
+        uses crypto-ipsec-profile-default-grouping;
+      }
+      uses crypto-ipsec-profile-grouping;
+    }
+    container security-association {
+      tailf:info "Security association parameters";
+      description
+        "Security association parameters";
+      container dummy {
+        tailf:info "Enable transmitting dummy packets";
+        description
+          "Enable transmitting dummy packets";
+        leaf pps {
+          tailf:info "Simulated traffic rate (in pps)";
+          description
+            "Simulated traffic rate (in pps)";
+          type uint8 {
+            tailf:info "<0-25>;;Rate of simulated traffic (in PPS)";
+            range "0..25";
+          }
+        }
+        leaf seconds {
+          tailf:info "Simulated traffic rate (in seconds)";
+          description
+            "Simulated traffic rate (in seconds)";
+          type uint16 {
+            tailf:info "<1-3600>;;Rate of simulated traffic (seconds between packets)";
+            range "1..3600";
+          }
+        }
+      }
+      leaf ecn {
+        tailf:info "Handling of ECN bit";
+        description
+          "Handling of ECN bit";
+        type enumeration {
+          enum "discard" {
+            tailf:info "Discard the Explicit Congestion Notification bits on decryption";
+          }
+          enum "propagate" {
+            tailf:info "Propagate the Explicit Congestion Notification bits on decryption (RFC4301)";
+          }
+        }
+      }
+      leaf idle-time {
+        tailf:info "Automatically delete IPSec SAs after a given idle period.";
+        description
+          "Automatically delete IPSec SAs after a given idle period.";
+        type uint32 {
+          tailf:info "<60-86400>;;Idle time at which IPSec SAs are deleted";
+          range "60..86400";
+        }
+      }
+      container lifetime {
+        tailf:info "security association lifetime";
+        description
+          "security association lifetime";
+        leaf days {
+          tailf:info "Time-based key duration in days";
+          description
+            "Time-based key duration in days";
+          type uint8 {
+            tailf:info "<1-30>;;Security association duration in days";
+            range "1..30";
+          }
+        }
+        leaf kilobytes {
+          tailf:info "Volume-based key duration";
+          description
+            "Volume-based key duration";
+          type union {
+            type uint64 {
+              tailf:info "<2560-4294967295>;;Security association duration in kilobytes encrypted";
+              range "2560..4294967295";
+            }
+            type enumeration {
+              enum "disable" {
+                tailf:info "Disable Volume-based Rekey";
+              }
+            }
+          }
+        }
+        leaf seconds {
+          tailf:info "Time-based key duration in seconds";
+          description
+            "Time-based key duration in seconds";
+          type uint64 {
+            tailf:info "<120-2592000>;;Security association duration in seconds";
+            range "120..2592000";
+          }
+        }
+      }
+      container replay {
+        tailf:info "Set replay checking.";
+        description
+          "Set replay checking.";
+        leaf disable {
+          tailf:info "Disable replay checking";
+          description
+            "Disable replay checking";
+          type empty;
+        }
+        leaf window-size {
+          tailf:info "Set replay window size.";
+          description
+            "Set replay window size.";
+          type enumeration {
+            enum "1024" {
+              tailf:info "Window size of 1024";
+            }
+            enum "128" {
+              tailf:info "Window size of 128";
+            }
+            enum "256" {
+              tailf:info "Window size of 256";
+            }
+            enum "512" {
+              tailf:info "Window size of 512";
+            }
+            enum "64" {
+              tailf:info "Window size of 64 (default)";
+            }
+          }
+        }
+      }
+    }
+    list transform-set {
+      tailf:info "Define transform and settings";
+      description
+        "Define transform and settings";
+      tailf:cli-mode-name "cfg-crypto-trans";
+      key "tag";
+      leaf tag {
+        type string {
+          tailf:info "WORD;;Transform set tag";
+        }
+      }
+      leaf ah-hmac {
+        tailf:cli-drop-node-name;
+        tailf:cli-hide-in-submode;
+        type enumeration {
+          enum "ah-md5-hmac" {
+            tailf:info "AH-HMAC-MD5 transform";
+          }
+          enum "ah-sha-hmac" {
+            tailf:info "AH-HMAC-SHA transform";
+          }
+          enum "ah-sha256-hmac" {
+            tailf:info "AH-HMAC-SHA256 transform";
+          }
+          enum "ah-sha384-hmac" {
+            tailf:info "AH-HMAC-SHA384 transform";
+          }
+          enum "ah-sha512-hmac" {
+            tailf:info "AH-HMAC-SHA512 transform";
+          }
+        }
+      }
+      leaf comp-lzs {
+        tailf:info "IP Compression using the LZS compression algorithm";
+        description
+          "IP Compression using the LZS compression algorithm";
+        tailf:cli-hide-in-submode;
+        type empty;
+      }
+      leaf esp {
+        tailf:cli-drop-node-name;
+        tailf:cli-hide-in-submode;
+        type enumeration {
+          enum "esp-3des" {
+            tailf:info "ESP transform using 3DES(EDE) cipher (168 bits)";
+          }
+          enum "esp-aes" {
+            tailf:info "ESP transform using AES cipher";
+          }
+          enum "esp-des" {
+            tailf:info "ESP transform using DES cipher (56 bits)";
+          }
+          enum "esp-gcm" {
+            tailf:info "ESP transform using GCM cipher";
+          }
+          enum "esp-gmac" {
+            tailf:info "ESP transform using GMAC cipher";
+          }
+          enum "esp-null" {
+            tailf:info "ESP transform w/o cipher";
+          }
+          enum "esp-seal" {
+            tailf:info "ESP transform using SEAL cipher (160 bits)";
+          }
+        }
+      }
+      leaf key-bit {
+        tailf:cli-drop-node-name;
+        tailf:cli-hide-in-submode;
+        when "../esp = 'esp-aes'";
+        type enumeration {
+          enum "128" {
+            tailf:info "128 bit keys";
+          }
+          enum "192" {
+            tailf:info "192 bit keys";
+          }
+          enum "256" {
+            tailf:info "256 bit keys";
+          }
+        }
+      }
+      leaf esp-hmac {
+        tailf:cli-drop-node-name;
+        tailf:cli-hide-in-submode;
+        type enumeration {
+          enum "esp-md5-hmac" {
+            tailf:info "ESP transform using HMAC-MD5 auth";
+          }
+          enum "esp-sha-hmac" {
+            tailf:info "ESP transform using HMAC-SHA auth";
+          }
+          enum "esp-sha256-hmac" {
+            tailf:info "ESP transform using HMAC-SHA256 auth";
+          }
+          enum "esp-sha384-hmac" {
+            tailf:info "ESP transform using HMAC-SHA384 auth";
+          }
+          enum "esp-sha512-hmac" {
+            tailf:info "ESP transform using HMAC-SHA512 auth";
+          }
+        }
+      }
+      container default {
+        tailf:info "Set a command to its defaults";
+        description
+          "Set a command to its defaults";
+        leaf mode {
+          tailf:info "encapsulation mode (transport/tunnel)";
+          description
+            "encapsulation mode (transport/tunnel)";
+          type empty;
+        }
+      }
+      container mode {
+        tailf:info "encapsulation mode (transport/tunnel)";
+        description
+          "encapsulation mode (transport/tunnel)";
+        container transport {
+          tailf:info "transport (payload encapsulation) mode";
+          description
+            "transport (payload encapsulation) mode";
+          presence "true";
+          leaf require {
+            tailf:info "Accept only the configured encapsulation mode.";
+            description
+              "Accept only the configured encapsulation mode.";
+            type empty;
+          }
+        }
+        leaf tunnel {
+          tailf:info "tunnel (datagram encapsulation) mode";
+          description
+            "tunnel (datagram encapsulation) mode";
+          type empty;
+        }
+      }
+    }
+  }
+
+  grouping crypto-isakmp-policy-grouping {
+    leaf authentication {
+      tailf:info "Set authentication method for protection suite";
+      description
+        "Set authentication method for protection suite";
+      type enumeration {
+        enum "pre-share" {
+          tailf:info "Pre-Shared Key";
+        }
+        enum "rsa-encr" {
+          tailf:info "Rivest-Shamir-Adleman Encryption";
+        }
+        enum "rsa-sig" {
+          tailf:info "Rivest-Shamir-Adleman Signature";
+        }
+      }
+    }
+    container encryption {
+      tailf:info "Set encryption algorithm for protection suite";
+      description
+        "Set encryption algorithm for protection suite";
+      leaf a3des {
+        tailf:alt-name "3des";
+        tailf:info "Three key triple DES";
+        type empty;
+      }
+      container aes {
+        tailf:info "AES - Advanced Encryption Standard.";
+        description
+          "AES - Advanced Encryption Standard.";
+        presence "true";
+        leaf key {
+          tailf:cli-drop-node-name;
+          type enumeration {
+            enum "128" {
+              tailf:info "128 bit keys.";
+            }
+            enum "192" {
+              tailf:info "192 bit keys.";
+            }
+            enum "256" {
+              tailf:info "256 bit keys.";
+            }
+          }
+        }
+      }
+      leaf des {
+        tailf:info "DES - Data Encryption Standard (56 bit keys).";
+        description
+          "DES - Data Encryption Standard (56 bit keys).";
+        type empty;
+      }
+    }
+    leaf group {
+      tailf:info "Set the Diffie-Hellman group";
+      description
+        "Set the Diffie-Hellman group";
+      type enumeration {
+        enum "1" {
+          tailf:info "Diffie-Hellman group 1 (768 bit)";
+        }
+        enum "14" {
+          tailf:info "Diffie-Hellman group 14 (2048 bit)";
+        }
+        enum "15" {
+          tailf:info "Diffie-Hellman group 15 (3072 bit)";
+        }
+        enum "16" {
+          tailf:info "Diffie-Hellman group 16 (4096 bit)";
+        }
+        enum "19" {
+          tailf:info "Diffie-Hellman group 19 (256 bit ecp)";
+        }
+        enum "2" {
+          tailf:info "Diffie-Hellman group 2 (1024 bit)";
+        }
+        enum "20" {
+          tailf:info "Diffie-Hellman group 20 (384 bit ecp)";
+        }
+        enum "21" {
+          tailf:info "Diffie-Hellman group 21 (521 bit ecp)";
+        }
+        enum "24" {
+          tailf:info "Diffie-Hellman group 24 (2048 bit, 256 bit subgroup)";
+        }
+        enum "5" {
+          tailf:info "Diffie-Hellman group 5 (1536 bit)";
+        }
+      }
+    }
+    leaf hash {
+      tailf:info "Set hash algorithm for protection suite";
+      description
+        "Set hash algorithm for protection suite";
+      type enumeration {
+        enum "md5" {
+          tailf:info "Message Digest 5";
+        }
+        enum "sha" {
+          tailf:info "Secure Hash Standard";
+        }
+        enum "sha256" {
+          tailf:info "Secure Hash Standard 2 (256 bit)";
+        }
+        enum "sha384" {
+          tailf:info "Secure Hash Standard 2 (384 bit)";
+        }
+        enum "sha512" {
+          tailf:info "Secure Hash Standard 2 (512 bit)";
+        }
+      }
+    }
+  }
+
+  grouping crypto-isakmp-profile-grouping {
+    leaf accounting {
+      tailf:info "Enable AAA Accounting for IPSec Sessions";
+      description
+        "Enable AAA Accounting for IPSec Sessions";
+      type string {
+        tailf:info "WORD;;Name of accounting list.";
+      }
+    }
+    container ca {
+      tailf:info "Specify certificate authorities to trust";
+      description
+        "Specify certificate authorities to trust";
+      leaf trust-point {
+        tailf:info "Cert authority trustpoint for RSA sig";
+        description
+          "Cert authority trustpoint for RSA sig";
+        type string {
+          tailf:info "WORD;;Specify the trust-point label to use";
+        }
+      }
+    }
+    container client {
+      tailf:info "Specify client configuration settings";
+      description
+        "Specify client configuration settings";
+      container authentication {
+        tailf:info "Use Extended Authentication";
+        description
+          "Use Extended Authentication";
+        leaf list {
+          tailf:info "AAA authentication list to use";
+          description
+            "AAA authentication list to use";
+          type string {
+            tailf:info "WORD;;Named authentication list.";
+          }
+        }
+      }
+      container configuration {
+        tailf:info "Specify client configuration settings";
+        description
+          "Specify client configuration settings";
+        leaf address {
+          tailf:info "Specify client network address configuration";
+          description
+            "Specify client network address configuration";
+          type enumeration {
+            enum "initiate" {
+              tailf:info "Push the network address to the client";
+            }
+            enum "respond" {
+              tailf:info "Respond to network address requests from the client";
+            }
+          }
+        }
+        leaf group {
+          tailf:info "Specify group profile attributes for client";
+          description
+            "Specify group profile attributes for client";
+          type string {
+            tailf:info "WORD;;group name";
+          }
+        }
+      }
+      container pki {
+        tailf:info "Use username in the crypto certificate for authorization";
+        description
+          "Use username in the crypto certificate for authorization";
+        container authorization {
+          tailf:info "User authorization parameters";
+          description
+            "User authorization parameters";
+          leaf list {
+            tailf:info "AAA user authorization list";
+            description
+              "AAA user authorization list";
+            type string {
+              tailf:info "WORD;;Named user authorization list";
+            }
+          }
+        }
+      }
+    }
+    leaf description {
+      tailf:info "Specify a description of this profile";
+      description
+        "Specify a description of this profile";
+      tailf:cli-multi-value;
+      type string {
+        tailf:info "LINE;;a 1 line description of the profile";
+      }
+    }
+    container initiate {
+      tailf:info "Initiator property";
+      description
+        "Initiator property";
+      container mode {
+        tailf:info "Phase 1 negotiation mode to use";
+        description
+          "Phase 1 negotiation mode to use";
+        presence "true";
+        leaf aggressive {
+          tailf:info "Start agressive mode negotiation";
+          description
+            "Start agressive mode negotiation";
+          type empty;
+        }
+      }
+    }
+    container isakmp {
+      tailf:info "ISAKMP Authorization command";
+      description
+        "ISAKMP Authorization command";
+      container authorization {
+        tailf:info "Authorization parameters.";
+        description
+          "Authorization parameters.";
+        leaf list {
+          tailf:info "AAA authorization list to use";
+          description
+            "AAA authorization list to use";
+          type string {
+            tailf:info "WORD;;Named authorization list.";
+          }
+        }
+      }
+    }
+    container keepalive {
+      tailf:info "Set a keepalive interval for use with IOS peers";
+      description
+        "Set a keepalive interval for use with IOS peers";
+      tailf:cli-sequence-commands;
+      tailf:cli-compact-syntax;
+      leaf number {
+        tailf:cli-drop-node-name;
+        type uint16 {
+          tailf:info "<10-3600>;;Number of seconds between keep alives";
+          range "10..3600";
+        }
+      }
+      leaf retry {
+        tailf:info "Retry interval if keepalive fails";
+        description
+          "Retry interval if keepalive fails";
+        type uint8 {
+          tailf:info "<2-60>;;Number of seconds between retries if keepalive fails";
+          range "2..60";
+        }
+      }
+    }
+    leaf keyring {
+      tailf:info "Specify keyring to use";
+      description
+        "Specify keyring to use";
+      type union {
+        type string {
+          tailf:info "WORD;;Name of the keyring to use";
+        }
+        type enumeration {
+          enum "default" {
+            tailf:info "Use global keyring";
+          }
+        }
+      }
+    }
+    leaf local-address {
+      tailf:info "Interface to use for local address for this isakmp profile";
+      description
+        "Interface to use for local address for this isakmp profile";
+      type string;
+    }
+    container match {
+      tailf:info "Match values of peer";
+      description
+        "Match values of peer";
+      leaf certificate {
+        tailf:info "Peer certificate attributes";
+        description
+          "Peer certificate attributes";
+        type string {
+          tailf:info "WORD;;Specify the certificate map";
+        }
+      }
+      container identity {
+        tailf:info "Peer identity";
+        description
+          "Peer identity";
+        container ipv4-address {
+          tailf:cli-drop-node-name;
+          tailf:cli-sequence-commands;
+          tailf:cli-compact-syntax;
+          leaf address {
+            tailf:info "IP Address(es)";
+            description
+              "IP Address(es)";
+            type inet:ipv4-address {
+              tailf:info "A.B.C.D;;IP address prefix";
+            }
+          }
+          leaf mask {
+            tailf:cli-drop-node-name;
+            tailf:cli-break-sequence-commands;
+            type inet:ipv4-address {
+              tailf:info "A.B.C.D;;specify mask";
+            }
+          }
+          leaf vrf {
+            tailf:cli-drop-node-name;
+            type string {
+              tailf:info "WORD;;Specify the F VRF (default global)";
+            }
+          }
+        }
+        container address {
+          tailf:info "IP Address(es)";
+          description
+            "IP Address(es)";
+          tailf:cli-sequence-commands;
+          tailf:cli-compact-syntax;
+          leaf ipv6 {
+            tailf:info "IPv6 Address(es)";
+            description
+              "IPv6 Address(es)";
+            type inet:ipv6-prefix {
+              tailf:info "X:X:X:X::X/<0-128>;;IPv6 address prefix";
+            }
+          }
+          leaf vrf {
+            tailf:cli-drop-node-name;
+            tailf:cli-optional-in-sequence;
+            type string {
+              tailf:info "WORD;;Specify the F VRF (default global)";
+            }
+          }
+        }
+        leaf group {
+          tailf:info "Group name";
+          description
+            "Group name";
+          type string {
+            tailf:info "WORD;;Specify the group name";
+          }
+        }
+        container host {
+          tailf:info "match a hostname/domain";
+          description
+            "match a hostname/domain";
+          container domain-name {
+            tailf:cli-drop-node-name;
+            tailf:cli-sequence-commands;
+            tailf:cli-compact-syntax;
+            leaf name {
+              tailf:cli-drop-node-name;
+              type string {
+                tailf:info "WORD;;Specify the domain name";
+              }
+            }
+            leaf vrf {
+              tailf:cli-drop-node-name;
+              tailf:cli-optional-in-sequence;
+              type string {
+                tailf:info "WORD;;Specify the F VRF (default global)";
+              }
+            }
+          }
+          container domain-match {
+            tailf:cli-drop-node-name;
+            tailf:cli-sequence-commands;
+            tailf:cli-compact-syntax;
+            leaf domain {
+              tailf:info "match domain instead of exact";
+              description
+                "match domain instead of exact";
+              type string {
+                tailf:info "WORD;;Specify the domain name";
+              }
+            }
+            leaf vrf {
+              tailf:cli-drop-node-name;
+              tailf:cli-optional-in-sequence;
+              type string {
+                tailf:info "WORD;;Specify the F VRF (default global)";
+              }
+            }
+          }
+        }
+        container user-fqdn {
+          tailf:info "match a hostname/domain";
+          description
+            "match a hostname/domain";
+          container domain-name {
+            tailf:cli-drop-node-name;
+            tailf:cli-sequence-commands;
+            tailf:cli-compact-syntax;
+            leaf name {
+              tailf:cli-drop-node-name;
+              type string {
+                tailf:info "WORD;;Specify the domain name";
+              }
+            }
+            leaf vrf {
+              tailf:cli-drop-node-name;
+              tailf:cli-optional-in-sequence;
+              type string {
+                tailf:info "WORD;;Specify the F VRF (default global)";
+              }
+            }
+          }
+          container domain-match {
+            tailf:cli-drop-node-name;
+            tailf:cli-sequence-commands;
+            tailf:cli-compact-syntax;
+            leaf domain {
+              tailf:info "match domain instead of exact";
+              description
+                "match domain instead of exact";
+              type string {
+                tailf:info "WORD;;Specify the domain name";
+              }
+            }
+            leaf vrf {
+              tailf:cli-drop-node-name;
+              tailf:cli-optional-in-sequence;
+              type string {
+                tailf:info "WORD;;Specify the F VRF (default global)";
+              }
+            }
+          }
+        }
+      }
+    }
+    leaf qos-group {
+      tailf:info "Apply a Qos policy class map for this profile";
+      description
+        "Apply a Qos policy class map for this profile";
+      type uint16 {
+        tailf:info "<1-1023>;;Qos Group value";
+        range "1..1023";
+      }
+    }
+    container self-identity {
+      tailf:info "Specify Identity to use";
+      description
+        "Specify Identity to use";
+      container address {
+        tailf:info "Use IPv4 address";
+        description
+          "Use IPv4 address";
+        presence "true";
+        leaf ipv6 {
+          tailf:info "Use IPv6 address";
+          description
+            "Use IPv6 address";
+          type empty;
+        }
+      }
+      container fqdn {
+        tailf:info "Use FQDN";
+        description
+          "Use FQDN";
+        presence "true";
+        leaf id {
+          tailf:cli-drop-node-name;
+          type string {
+            tailf:info "WORD;;FQDN ID";
+          }
+        }
+      }
+      leaf user-fqdn {
+        tailf:info "Use user FQDN";
+        description
+          "Use user FQDN";
+        type string {
+          tailf:info "WORD;;User FQDN <user@full.domain.name>";
+        }
+      }
+    }
+    leaf virtual-template {
+      tailf:info "Specify the virtual-template for dynamic interface creation.";
+      description
+        "Specify the virtual-template for dynamic interface creation.";
+      type uint16 {
+        tailf:info "<1-4095>;;Virtual-template Number to clone";
+        range "1..4095";
+      }
+    }
+    leaf vrf {
+      tailf:info "Specify the VRF it is related to";
+      description
+        "Specify the VRF it is related to";
+      type string {
+        tailf:info "WORD;;VRF Name";
+      }
+    }
+  }
+
+  grouping crypto-isakmp-profile-default-grouping {
+    leaf accounting {
+      tailf:info "Enable AAA Accounting for IPSec Sessions";
+      description
+        "Enable AAA Accounting for IPSec Sessions";
+      type empty;
+    }
+    container ca {
+      tailf:info "Specify certificate authorities to trust";
+      description
+        "Specify certificate authorities to trust";
+      leaf trust-point {
+        tailf:info "Cert authority trustpoint for RSA sig";
+        description
+          "Cert authority trustpoint for RSA sig";
+        type string {
+          tailf:info "WORD;;Specify the trust-point label to use";
+        }
+      }
+    }
+    container client {
+      tailf:info "Specify client configuration settings";
+      description
+        "Specify client configuration settings";
+      container authentication {
+        tailf:info "Use Extended Authentication";
+        description
+          "Use Extended Authentication";
+        leaf list {
+          tailf:info "AAA authentication list to use";
+          description
+            "AAA authentication list to use";
+          type empty;
+        }
+      }
+      container configuration {
+        tailf:info "Specify client configuration settings";
+        description
+          "Specify client configuration settings";
+        leaf address {
+          tailf:info "Specify client network address configuration";
+          description
+            "Specify client network address configuration";
+          type enumeration {
+            enum "initiate" {
+              tailf:info "Push the network address to the client";
+            }
+            enum "respond" {
+              tailf:info "Respond to network address requests from the client";
+            }
+          }
+        }
+        leaf group {
+          tailf:info "Specify group profile attributes for client";
+          description
+            "Specify group profile attributes for client";
+          type string {
+            tailf:info "WORD;;group name";
+          }
+        }
+      }
+      container pki {
+        tailf:info "Use username in the crypto certificate for authorization";
+        description
+          "Use username in the crypto certificate for authorization";
+        container authorization {
+          tailf:info "User authorization parameters";
+          description
+            "User authorization parameters";
+          presence "true";
+        }
+      }
+    }
+    leaf description {
+      tailf:info "Specify a description of this profile";
+      description
+        "Specify a description of this profile";
+      tailf:cli-multi-value;
+      type string {
+        tailf:info "LINE;;a 1 line description of the profile";
+      }
+    }
+    container initiate {
+      tailf:info "Initiator property";
+      description
+        "Initiator property";
+      container mode {
+        tailf:info "Phase 1 negotiation mode to use";
+        description
+          "Phase 1 negotiation mode to use";
+        presence "true";
+      }
+    }
+    container isakmp {
+      tailf:info "ISAKMP Authorization command";
+      description
+        "ISAKMP Authorization command";
+      container authorization {
+        tailf:info "Authorization parameters.";
+        description
+          "Authorization parameters.";
+        leaf list {
+          tailf:info "AAA authorization list to use";
+          description
+            "AAA authorization list to use";
+          type empty;
+        }
+      }
+    }
+    container keepalive {
+      tailf:info "Set a keepalive interval for use with IOS peers";
+      description
+        "Set a keepalive interval for use with IOS peers";
+      presence "true";
+    }
+    leaf keyring {
+      tailf:info "Specify keyring to use";
+      description
+        "Specify keyring to use";
+      type union {
+        type string {
+          tailf:info "WORD;;Name of the keyring to use";
+        }
+        type enumeration {
+          enum "default" {
+            tailf:info "Use global keyring";
+          }
+        }
+      }
+    }
+    leaf local-address {
+      tailf:info "Interface to use for local address for this isakmp profile";
+      description
+        "Interface to use for local address for this isakmp profile";
+      type empty;
+    }
+    container match {
+      tailf:info "Match values of peer";
+      description
+        "Match values of peer";
+      leaf certificate {
+        tailf:info "Peer certificate attributes";
+        description
+          "Peer certificate attributes";
+        type string {
+          tailf:info "WORD;;Specify the certificate map";
+        }
+      }
+      container identity {
+        tailf:info "Peer identity";
+        description
+          "Peer identity";
+        container ipv4-address {
+          tailf:cli-drop-node-name;
+          tailf:cli-sequence-commands;
+          tailf:cli-compact-syntax;
+          leaf address {
+            tailf:info "IP Address(es)";
+            description
+              "IP Address(es)";
+            type inet:ipv4-address {
+              tailf:info "A.B.C.D;;IP address prefix";
+            }
+          }
+          leaf mask {
+            tailf:cli-drop-node-name;
+            tailf:cli-break-sequence-commands;
+            type inet:ipv4-address {
+              tailf:info "A.B.C.D;;specify mask";
+            }
+          }
+          leaf vrf {
+            tailf:cli-drop-node-name;
+            type string {
+              tailf:info "WORD;;Specify the F VRF (default global)";
+            }
+          }
+        }
+        container address {
+          tailf:info "IP Address(es)";
+          description
+            "IP Address(es)";
+          tailf:cli-sequence-commands;
+          tailf:cli-compact-syntax;
+          leaf ipv6 {
+            tailf:info "IPv6 Address(es)";
+            description
+              "IPv6 Address(es)";
+            type inet:ipv6-prefix {
+              tailf:info "X:X:X:X::X/<0-128>;;IPv6 address prefix";
+            }
+          }
+          leaf vrf {
+            tailf:cli-drop-node-name;
+            tailf:cli-optional-in-sequence;
+            type string {
+              tailf:info "WORD;;Specify the F VRF (default global)";
+            }
+          }
+        }
+        leaf group {
+          tailf:info "Group name";
+          description
+            "Group name";
+          type string {
+            tailf:info "WORD;;Specify the group name";
+          }
+        }
+        container host {
+          tailf:info "match a hostname/domain";
+          description
+            "match a hostname/domain";
+          container domain-name {
+            tailf:cli-drop-node-name;
+            tailf:cli-sequence-commands;
+            tailf:cli-compact-syntax;
+            leaf name {
+              tailf:cli-drop-node-name;
+              type string {
+                tailf:info "WORD;;Specify the domain name";
+              }
+            }
+            leaf vrf {
+              tailf:cli-drop-node-name;
+              tailf:cli-optional-in-sequence;
+              type string {
+                tailf:info "WORD;;Specify the F VRF (default global)";
+              }
+            }
+          }
+          container domain-match {
+            tailf:cli-drop-node-name;
+            tailf:cli-sequence-commands;
+            tailf:cli-compact-syntax;
+            leaf domain {
+              tailf:info "match domain instead of exact";
+              description
+                "match domain instead of exact";
+              type string {
+                tailf:info "WORD;;Specify the domain name";
+              }
+            }
+            leaf vrf {
+              tailf:cli-drop-node-name;
+              tailf:cli-optional-in-sequence;
+              type string {
+                tailf:info "WORD;;Specify the F VRF (default global)";
+              }
+            }
+          }
+        }
+        container user-fqdn {
+          tailf:info "match a hostname/domain";
+          description
+            "match a hostname/domain";
+          container domain-name {
+            tailf:cli-drop-node-name;
+            tailf:cli-sequence-commands;
+            tailf:cli-compact-syntax;
+            leaf name {
+              tailf:cli-drop-node-name;
+              type string {
+                tailf:info "WORD;;Specify the domain name";
+              }
+            }
+            leaf vrf {
+              tailf:cli-drop-node-name;
+              tailf:cli-optional-in-sequence;
+              type string {
+                tailf:info "WORD;;Specify the F VRF (default global)";
+              }
+            }
+          }
+          container domain-match {
+            tailf:cli-drop-node-name;
+            tailf:cli-sequence-commands;
+            tailf:cli-compact-syntax;
+            leaf domain {
+              tailf:info "match domain instead of exact";
+              description
+                "match domain instead of exact";
+              type string {
+                tailf:info "WORD;;Specify the domain name";
+              }
+            }
+            leaf vrf {
+              tailf:cli-drop-node-name;
+              tailf:cli-optional-in-sequence;
+              type string {
+                tailf:info "WORD;;Specify the F VRF (default global)";
+              }
+            }
+          }
+        }
+      }
+    }
+    leaf qos-group {
+      tailf:info "Apply a Qos policy class map for this profile";
+      description
+        "Apply a Qos policy class map for this profile";
+      type empty;
+    }
+    container self-identity {
+      tailf:info "Specify Identity to use";
+      description
+        "Specify Identity to use";
+      presence "true";
+    }
+    leaf virtual-template {
+      tailf:info "Specify the virtual-template for dynamic interface creation.";
+      description
+        "Specify the virtual-template for dynamic interface creation.";
+      type empty;
+    }
+    leaf vrf {
+      tailf:info "Specify the VRF it is related to";
+      description
+        "Specify the VRF it is related to";
+      type empty;
+    }
+  }
+
+  grouping crypto-isakmp-client-configuration-group-grouping {
+    leaf access-restrict {
+      tailf:info "Restrict clients in this group to an interface";
+      description
+        "Restrict clients in this group to an interface";
+      type string;
+    }
+    leaf acl {
+      tailf:info "Specify split tunneling inclusion access-list number";
+      description
+        "Specify split tunneling inclusion access-list number";
+      type union {
+        type uint16 {
+          tailf:info "<100-199>;;access-list number for split-tunneling";
+          range "100..199";
+        }
+        type string {
+          tailf:info "WORD;;Access-list name";
+          pattern "[a-zA-Z].*";
+        }
+      }
+    }
+    container auto-update {
+      tailf:info "Configure auto-upgrade";
+      description
+        "Configure auto-upgrade";
+      tailf:cli-sequence-commands;
+      tailf:cli-compact-syntax;
+      leaf client {
+        tailf:info "Configure client";
+        description
+          "Configure client";
+        type string {
+          tailf:info "WORD;;Client name";
+        }
+      }
+      leaf url {
+        tailf:info "Configure URL to download from";
+        description
+          "Configure URL to download from";
+        type string {
+          tailf:info "WORD;;protocol://username:password@a.b.c.d/dir";
+        }
+      }
+      leaf rev {
+        tailf:info "Use comma delimited list of revision strings only";
+        description
+          "Use comma delimited list of revision strings only";
+        type string {
+          tailf:info "WORD;;revision";
+        }
+      }
+    }
+    leaf backup-gateway {
+      tailf:info "Specify backup gateway";
+      description
+        "Specify backup gateway";
+      type string {
+        tailf:info "WORD;;Backup Server IP address or hostname";
+      }
+    }
+    leaf banner {
+      tailf:info "Specify mode config banner";
+      description
+        "Specify mode config banner";
+      tailf:cli-multi-value;
+      type string {
+        tailf:info "LINE;;c banner-text c, where 'c' is a delimiting character";
+      }
+    }
+    leaf browser-proxy {
+      tailf:info "Configure browser-proxy";
+      description
+        "Configure browser-proxy";
+      type string {
+        tailf:info "WORD;;Browser proxy map name";
+      }
+    }
+    container configuration {
+      tailf:info "Push configuration to the client";
+      description
+        "Push configuration to the client";
+      leaf url {
+        tailf:info "URL for the client to fetch configuration";
+        description
+          "URL for the client to fetch configuration";
+        type enumeration {
+          enum "bootflash:" {
+            tailf:info "URL the client will use to fetch configuration";
+          }
+          enum "cns:" {
+            tailf:info "URL the client will use to fetch configuration";
+          }
+          enum "flash:" {
+            tailf:info "URL the client will use to fetch configuration";
+          }
+          enum "ftp:" {
+            tailf:info "URL the client will use to fetch configuration";
+          }
+          enum "http:" {
+            tailf:info "URL the client will use to fetch configuration";
+          }
+          enum "https:" {
+            tailf:info "URL the client will use to fetch configuration";
+          }
+          enum "null:" {
+            tailf:info "URL the client will use to fetch configuration";
+          }
+          enum "nvram:" {
+            tailf:info "URL the client will use to fetch configuration";
+          }
+          enum "pram:" {
+            tailf:info "URL the client will use to fetch configuration";
+          }
+          enum "rcp:" {
+            tailf:info "URL the client will use to fetch configuration";
+          }
+          enum "scp:" {
+            tailf:info "URL the client will use to fetch configuration";
+          }
+          enum "system:" {
+            tailf:info "URL the client will use to fetch configuration";
+          }
+          enum "tar:" {
+            tailf:info "URL the client will use to fetch configuration";
+          }
+          enum "tftp:" {
+            tailf:info "URL the client will use to fetch configuration";
+          }
+          enum "tmpsys:" {
+            tailf:info "URL the client will use to fetch configuration";
+          }
+        }
+      }
+      leaf version {
+        tailf:info "version of the configuration available at the URL";
+        description
+          "version of the configuration available at the URL";
+        type uint32 {
+          tailf:info "<1-32767>;;The version number";
+          range "1..32767";
+        }
+      }
+    }
+    container crypto {
+      tailf:info "Client group crypto aaa attribute list";
+      description
+        "Client group crypto aaa attribute list";
+      container aaa {
+        tailf:info "AAA directive";
+        description
+          "AAA directive";
+        container attribute {
+          tailf:info "AAA attribute directive";
+          description
+            "AAA attribute directive";
+          leaf list {
+            tailf:info "AAA attribute list";
+            description
+              "AAA attribute list";
+            type string {
+              tailf:info "WORD;;AAA attribute list name";
+            }
+          }
+        }
+      }
+    }
+    container dhcp {
+      tailf:info "Configure DHCP parameters";
+      description
+        "Configure DHCP parameters";
+      leaf giaddr {
+        tailf:info "Specify giaddr for dhcp scope";
+        description
+          "Specify giaddr for dhcp scope";
+        type inet:ipv4-address {
+          tailf:info "A.B.C.D;;giaddr to select address range";
+        }
+      }
+      leaf server {
+        tailf:info "Specify dhcp server";
+        description
+          "Specify dhcp server";
+        type union {
+          type inet:ipv4-address {
+            tailf:info "A.B.C.D;;DHCP server IP address";
+          }
+          type string {
+            tailf:info "WORD;;DHCP Server hostname";
+          }
+        }
+      }
+      leaf timeout {
+        tailf:info "Configure DHCP response timeout in seconds";
+        description
+          "Configure DHCP response timeout in seconds";
+        type uint8 {
+          tailf:info "<4-30>;;response time seconds";
+          range "4..30";
+        }
+      }
+    }
+    container dns {
+      tailf:info "Specify DNS Addresses";
+      description
+        "Specify DNS Addresses";
+      tailf:cli-sequence-commands;
+      tailf:cli-compact-syntax;
+      leaf primary {
+        tailf:cli-drop-node-name;
+        type inet:ipv4-address {
+          tailf:info "A.B.C.D;;Primary DNS IP address";
+        }
+      }
+      leaf secondary {
+        tailf:cli-drop-node-name;
+        type inet:ipv4-address {
+          tailf:info "A.B.C.D;;Secondary DNS IP address";
+        }
+      }
+    }
+    leaf domain {
+      tailf:info "Set default domain name to send to client";
+      description
+        "Set default domain name to send to client";
+      type string {
+        tailf:info "WORD;;default domain name";
+      }
+    }
+    container firewall {
+      tailf:info "Enforce group firewall feature";
+      description
+        "Enforce group firewall feature";
+      leaf are-u-there {
+        tailf:info "firewall attribute, are-u-there";
+        description
+          "firewall attribute, are-u-there";
+        type empty;
+      }
+      leaf policy {
+        tailf:info "Specify firewall policy";
+        description
+          "Specify firewall policy";
+        type string {
+          tailf:info "WORD;;policy name";
+        }
+      }
+    }
+    leaf group-lock {
+      tailf:info "Enforce group lock feature";
+      description
+        "Enforce group lock feature";
+      type empty;
+    }
+    leaf include-local-lan {
+      tailf:info "Enable Local LAN Access with no split tunnel";
+      description
+        "Enable Local LAN Access with no split tunnel";
+      type empty;
+    }
+    container key {
+      tailf:info "pre-shared key/IKE password";
+      description
+        "pre-shared key/IKE password";
+      tailf:cli-sequence-commands;
+      tailf:cli-compact-syntax;
+      leaf encryption {
+        tailf:cli-drop-node-name;
+        tailf:cli-incomplete-command;
+        tailf:cli-optional-in-sequence;
+        type enumeration {
+          enum "0" {
+            tailf:info "Specifies an UNENCRYPTED password will follow";
+          }
+          enum "6" {
+            tailf:info "Specifies an ENCRYPTED password will follow";
+          }
+        }
+      }
+      leaf key {
+        tailf:cli-drop-node-name;
+        tailf:cli-multi-value;
+        type string {
+          tailf:info "LINE;;The UNENCRYPTED (cleartext) user password";
+        }
+      }
+    }
+    leaf max-logins {
+      tailf:info "Set maximum simultaneous logins for users in this group";
+      description
+        "Set maximum simultaneous logins for users in this group";
+      type uint8 {
+        tailf:info "<1-10>;;Max logins for users for this group";
+        range "1..10";
+      }
+    }
+    leaf max-users {
+      tailf:info "Set maximum number of users for this group";
+      description
+        "Set maximum number of users for this group";
+      type uint32 {
+        tailf:info "<1-5000>;;Max connected users for this group";
+        range "1..5000";
+      }
+    }
+    leaf netmask {
+      tailf:info "netmask used by the client for local connectivity";
+      description
+        "netmask used by the client for local connectivity";
+      type inet:ipv4-address {
+        tailf:info "A.B.C.D;;Subnet Mask to be issued for client use";
+      }
+    }
+    leaf pfs {
+      tailf:info "The client should propose PFS";
+      description
+        "The client should propose PFS";
+      type empty;
+    }
+    leaf pool {
+      tailf:info "Set name of address pool";
+      description
+        "Set name of address pool";
+      type string {
+        tailf:info "WORD;;address pool name";
+      }
+    }
+    leaf save-password {
+      tailf:info "Allows remote client to save XAUTH password";
+      description
+        "Allows remote client to save XAUTH password";
+      type empty;
+    }
+    leaf smartcard-removal-disconnect {
+      tailf:info "Enables smartcard-removal-disconnect";
+      description
+        "Enables smartcard-removal-disconnect";
+      type empty;
+    }
+    leaf split-dns {
+      tailf:info "DNS name to append for resolution";
+      description
+        "DNS name to append for resolution";
+      type string {
+        tailf:info "WORD;;DNS extension";
+      }
+    }
+    container wins {
+      tailf:info "Specify WINS Addresses";
+      description
+        "Specify WINS Addresses";
+      tailf:cli-sequence-commands;
+      tailf:cli-compact-syntax;
+      leaf primary {
+        tailf:cli-drop-node-name;
+        type inet:ipv4-address {
+          tailf:info "A.B.C.D;;Primary WINS IP address";
+        }
+      }
+      leaf secondary {
+        tailf:cli-drop-node-name;
+        type inet:ipv4-address {
+          tailf:info "A.B.C.D;;Secondary WINS IP address";
+        }
+      }
+    }
+  }
+
+  grouping crypto-isakmp-peer-grouping {
+    leaf description {
+      tailf:info "IKE peer specific description";
+      description
+        "IKE peer specific description";
+      tailf:cli-multi-value;
+      type string {
+        tailf:info "LINE;;Up to 80 characters describing this peer";
+        length "1..80";
+      }
+    }
+    container set {
+      tailf:info "set peer policy attributes";
+      description
+        "set peer policy attributes";
+      container aggressive-mode {
+        tailf:info "aggressive mode attributes";
+        description
+          "aggressive mode attributes";
+        container client-endpoint {
+          tailf:info "specify a tunnel-client-endpoint attribute";
+          description
+            "specify a tunnel-client-endpoint attribute";
+          leaf fqdn {
+            tailf:info "Use the fqdn as tunnel-client-endpoint";
+            description
+              "Use the fqdn as tunnel-client-endpoint";
+            tailf:cli-full-command;
+            type string {
+              tailf:info "WORD;;fqdn";
+            }
+          }
+          leaf ipv4-address {
+            tailf:info "Use the IP address as tunnel-client-endpoint";
+            description
+              "Use the IP address as tunnel-client-endpoint";
+            tailf:cli-full-command;
+            type inet:ipv4-address {
+              tailf:info "A.B.C.D;;IPv4 address";
+            }
+          }
+          leaf ipv6-address {
+            tailf:info "Use the IPv6 address as tunnel-client-endpoint";
+            description
+              "Use the IPv6 address as tunnel-client-endpoint";
+            tailf:cli-full-command;
+            type inet:ipv6-address {
+              tailf:info "X:X:X:X::X;;IPv6 address";
+            }
+          }
+          leaf user-fqdn {
+            tailf:info "Use the user-fqdn as tunnel-client-endpoint";
+            description
+              "Use the user-fqdn as tunnel-client-endpoint";
+            tailf:cli-full-command;
+            type string {
+              tailf:info "WORD;;user-fqdn";
+            }
+          }
+        }
+        container password {
+          tailf:info "specify a tunnel-password attribute";
+          description
+            "specify a tunnel-password attribute";
+          tailf:cli-sequence-commands;
+          tailf:cli-compact-syntax;
+          leaf encryption {
+            tailf:cli-drop-node-name;
+            tailf:cli-incomplete-command;
+            tailf:cli-optional-in-sequence;
+            type enumeration {
+              enum "0" {
+                tailf:info "Specifies an UNENCRYPTED password will follow";
+              }
+              enum "6" {
+                tailf:info "Specifies an ENCRYPTED password will follow";
+              }
+            }
+          }
+          leaf key {
+            tailf:cli-drop-node-name;
+            tailf:cli-multi-value;
+            type string {
+              tailf:info "LINE;;The UNENCRYPTED (cleartext) user password";
+            }
+          }
+        }
+      }
+    }
+  }
+
+  grouping crypto-isakmp-grouping {
+    leaf aggressive-mode {
+      tailf:info "Disable ISAKMP aggressive mode";
+      description
+        "Disable ISAKMP aggressive mode";
+      type enumeration {
+        enum "disable" {
+          tailf:info "Disable ISAKMP aggressive mode";
+        }
+      }
+    }
+    container client {
+      tailf:info "Set client configuration policy";
+      description
+        "Set client configuration policy";
+      container configuration {
+        tailf:info "Set client configuration policy";
+        description
+          "Set client configuration policy";
+        container address-pool {
+          tailf:info "Set network address for client";
+          description
+            "Set network address for client";
+          leaf local {
+            tailf:info "Set a local address pool for clients";
+            description
+              "Set a local address pool for clients";
+            type string {
+              tailf:info "WORD;;Name of address pool";
+            }
+          }
+        }
+        leaf browser-proxy {
+          tailf:info "Set browser proxy attributes for client";
+          description
+            "Set browser proxy attributes for client";
+          type string {
+            tailf:info "WORD;;browser-proxy name";
+          }
+        }
+        list group {
+          tailf:info "Set group profile attributes for client";
+          description
+            "Set group profile attributes for client";
+          tailf:cli-mode-name "config-isakmp-group";
+          key "name";
+          leaf name {
+            type string {
+              tailf:info "WORD;;group name";
+            }
+          }
+          uses crypto-isakmp-client-configuration-group-grouping;
+        }
+      }
+      list firewall {
+        tailf:info "Define client firewall";
+        description
+          "Define client firewall";
+        tailf:cli-mode-name "config-ikmp-client-fw";
+        key "policy-name";
+        leaf policy-name {
+          type string {
+            tailf:info "WORD;;policy name";
+          }
+        }
+        leaf optional {
+          tailf:info "firewall policy is optional";
+          description
+            "firewall policy is optional";
+          tailf:cli-hide-in-submode;
+          type enumeration {
+            enum "cisco-integrated-client-firewall" {
+              tailf:info "Cisco Integrated Client";
+            }
+            enum "cisco-security-agent" {
+              tailf:info "Cisco Security Agent";
+            }
+            enum "zonelabs-zonealarm" {
+              tailf:info "Zonelabs Zonealarm Firewall";
+            }
+            enum "zonelabs-zonealarmpro" {
+              tailf:info "Zonelabs Zonealarmpro Firewall";
+            }
+          }
+        }
+        leaf required {
+          tailf:info "firewall policy is mandatory";
+          description
+            "firewall policy is mandatory";
+          tailf:cli-hide-in-submode;
+          type enumeration {
+            enum "cisco-integrated-client-firewall" {
+              tailf:info "Cisco Integrated Client";
+            }
+            enum "cisco-security-agent" {
+              tailf:info "Cisco Security Agent";
+            }
+            enum "zonelabs-zonealarm" {
+              tailf:info "Zonelabs Zonealarm Firewall";
+            }
+            enum "zonelabs-zonealarmpro" {
+              tailf:info "Zonelabs Zonealarmpro Firewall";
+            }
+          }
+        }
+        container policy {
+          tailf:info "Define Cisco firewall Policy";
+          description
+            "Define Cisco firewall Policy";
+          container central-policy-push {
+            tailf:info "Define Cisco Protection Policy";
+            description
+              "Define Cisco Protection Policy";
+            when "../../optional = 'cisco-integrated-client-firewall' or ../../required = 'cisco-integrated-client-firewall' or ../../optional = 'zonelabs-zonealarm' or ../../required = 'zonelabs-zonealarm' or ../../optional = 'zonelabs-zonealarmpro' or ../../required = 'zonelabs-zonealarmpro'";
+            container access-list {
+              tailf:info "Specify access list";
+              description
+                "Specify access list";
+              tailf:cli-sequence-commands;
+              tailf:cli-compact-syntax;
+              leaf direction {
+                tailf:cli-drop-node-name;
+                type enumeration {
+                  enum "in" {
+                    tailf:info "Specify inbound access list";
+                  }
+                  enum "out" {
+                    tailf:info "Specify outbound access list";
+                  }
+                }
+              }
+              leaf acl {
+                tailf:cli-drop-node-name;
+                type union {
+                  type uint16 {
+                    tailf:info "<100-199>;;access-list number for client-fw policy";
+                    range "100..199";
+                  }
+                  type string {
+                    tailf:info "WORD;;Access-list name";
+                    pattern "[a-zA-Z].*";
+                  }
+                }
+              }
+            }
+          }
+          leaf check-presence {
+            tailf:info "Define firewall are-you-there policy";
+            description
+              "Define firewall are-you-there policy";
+            when "../../optional = 'cisco-security-agent' or ../../required = 'cisco-security-agent' or ../../optional = 'zonelabs-zonealarm' or ../../required = 'zonelabs-zonealarm' or ../../optional = 'zonelabs-zonealarmpro' or ../../required = 'zonelabs-zonealarmpro'";
+            type empty;
+          }
+        }
+      }
+    }
+    container default {
+      tailf:info "ISAKMP default policy";
+      description
+        "ISAKMP default policy";
+      leaf policy {
+        tailf:info "Enable default policies for ISAKMP protection suite";
+        description
+          "Enable default policies for ISAKMP protection suite";
+        type empty;
+      }
+    }
+    leaf disconnect-revoked-peers {
+      tailf:info "Disconnect Crypto Session with Revoked Peer";
+      description
+        "Disconnect Crypto Session with Revoked Peer";
+      type empty;
+    }
+    leaf enable {
+      tailf:info "Enable ISAKMP";
+      description
+        "Enable ISAKMP";
+      type empty;
+    }
+    leaf fragmentation {
+      tailf:info "IKE Fragmentation enabled if required";
+      description
+        "IKE Fragmentation enabled if required";
+      type empty;
+    }
+    leaf identity {
+      tailf:info "Set the identity which ISAKMP will use";
+      description
+        "Set the identity which ISAKMP will use";
+      type enumeration {
+        enum "address" {
+          tailf:info "Use the IP address of the interface for the identity";
+        }
+        enum "dn" {
+          tailf:info "Use the distinguished name of the router cert for the identity";
+        }
+        enum "hostname" {
+          tailf:info "Use the hostname of the router for the identity";
+        }
+      }
+    }
+    leaf invalid-spi-recovery {
+      tailf:info "Initiate IKE and send Invalid SPI Notify";
+      description
+        "Initiate IKE and send Invalid SPI Notify";
+      type empty;
+    }
+    container keepalive {
+      tailf:info "Set a keepalive interval for use with IOS peers";
+      description
+        "Set a keepalive interval for use with IOS peers";
+      tailf:cli-sequence-commands;
+      tailf:cli-compact-syntax;
+      leaf number {
+        tailf:cli-drop-node-name;
+        type uint16 {
+          tailf:info "<10-3600>;;Number of seconds between keep alives";
+          range "10..3600";
+        }
+      }
+      leaf retry-number {
+        tailf:cli-drop-node-name;
+        tailf:cli-break-sequence-commands;
+        type uint8 {
+          tailf:info "<2-60>;;Number of seconds between retries if keepalive fails";
+          range "2..60";
+        }
+      }
+      leaf send {
+        tailf:cli-drop-node-name;
+        type enumeration {
+          enum "on-demand" {
+            tailf:info "When using Dead Peer Detection (DPD), send DPD messages only as needed";
+          }
+          enum "periodic" {
+            tailf:info "When using Dead Peer Detection (DPD), send periodic DPD messages";
+          }
+        }
+      }
+    }
+    container key {
+      tailf:info "Set pre-shared key for remote peer";
+      description
+        "Set pre-shared key for remote peer";
+      container key-address {
+        tailf:cli-drop-node-name;
+        tailf:cli-sequence-commands;
+        tailf:cli-compact-syntax;
+        leaf encryption {
+          tailf:cli-drop-node-name;
+          tailf:cli-incomplete-command;
+          tailf:cli-optional-in-sequence;
+          type enumeration {
+            enum "0" {
+              tailf:info "Specifies an UNENCRYPTED key will follow";
+            }
+            enum "6" {
+              tailf:info "Specifies HIDDEN key will follow";
+            }
+          }
+        }
+        leaf key {
+          tailf:cli-drop-node-name;
+          type string {
+            tailf:info "LINE;;The UNENCRYPTED (cleartext) shared key";
+          }
+        }
+        choice ipv4-ipv6 {
+          case ipv4 {
+            container addr4-container {
+              tailf:cli-drop-node-name;
+              tailf:cli-flatten-container;
+              tailf:cli-sequence-commands;
+              tailf:cli-compact-syntax;
+              leaf address {
+                tailf:info "define shared key with IP address";
+                description
+                  "define shared key with IP address";
+                type inet:ipv4-address {
+                  tailf:info "A.B.C.D;;Peer IP address";
+                }
+              }
+              leaf mask {
+                tailf:cli-drop-node-name;
+                tailf:cli-break-sequence-commands;
+                type inet:ipv4-address {
+                  tailf:info "A.B.C.D;;Peer IP subnet mask";
+                }
+              }
+              leaf no-xauth {
+                tailf:info "Bypasses XAuth for this peer";
+                description
+                  "Bypasses XAuth for this peer";
+                type empty;
+              }
+            }
+          }
+          case ipv6 {
+            container addr6-container {
+              tailf:cli-drop-node-name;
+              tailf:cli-flatten-container;
+              container address {
+                tailf:info "define shared key with IP address";
+                description
+                  "define shared key with IP address";
+                tailf:cli-sequence-commands;
+                tailf:cli-compact-syntax;
+                leaf ipv6 {
+                  tailf:info "define shared key with IPv6 address";
+                  description
+                    "define shared key with IPv6 address";
+                  type inet:ipv6-prefix {
+                    tailf:info "X:X:X:X::X/<0-128>;;Peer IPv6 prefix";
+                  }
+                }
+                leaf no-xauth {
+                  tailf:info "Bypasses XAuth for this peer";
+                  description
+                    "Bypasses XAuth for this peer";
+                  tailf:cli-break-sequence-commands;
+                  type empty;
+                }
+              }
+            }
+          }
+        }
+      }
+      container key-host {
+        tailf:cli-drop-node-name;
+        tailf:cli-sequence-commands;
+        tailf:cli-compact-syntax;
+        leaf encryption {
+          tailf:cli-drop-node-name;
+          tailf:cli-incomplete-command;
+          tailf:cli-optional-in-sequence;
+          type enumeration {
+            enum "0" {
+              tailf:info "Specifies an UNENCRYPTED key will follow";
+            }
+            enum "6" {
+              tailf:info "Specifies HIDDEN key will follow";
+            }
+          }
+        }
+        leaf key {
+          tailf:cli-drop-node-name;
+          type string {
+            tailf:info "LINE;;The UNENCRYPTED (cleartext) shared key";
+          }
+        }
+        container host-container {
+          tailf:cli-drop-node-name;
+          tailf:cli-flatten-container;
+          tailf:cli-sequence-commands;
+          tailf:cli-compact-syntax;
+          leaf hostname {
+            tailf:info "define shared key with hostname";
+            description
+              "define shared key with hostname";
+            type string {
+              tailf:info "WORD;;hostname of peer with whom the key is shared";
+            }
+          }
+          leaf no-xauth {
+            tailf:info "Bypasses XAuth for this peer";
+            description
+              "Bypasses XAuth for this peer";
+            tailf:cli-break-sequence-commands;
+            type empty;
+          }
+        }
+      }
+    }
+    container nat {
+      tailf:info "Set a nat  keepalive interval for use with IOS peers";
+      description
+        "Set a nat  keepalive interval for use with IOS peers";
+      leaf keepalive {
+        tailf:info "Set a nat keepalive interval for use with IOS peers";
+        description
+          "Set a nat keepalive interval for use with IOS peers";
+        type uint16 {
+          tailf:info "<5-3600>;;Number of seconds between keep alives";
+          range "5..3600";
+        }
+      }
+    }
+    container peer {
+      tailf:info "Set Peer Policy";
+      description
+        "Set Peer Policy";
+      container ipv4-addr {
+        tailf:cli-drop-node-name;
+        list address {
+          tailf:info "define peer policy for IP address";
+          description
+            "define peer policy for IP address";
+          tailf:cli-mode-name "config-isakmp-peer";
+          key "ipv4";
+          leaf ipv4 {
+            type inet:ipv4-address {
+              tailf:info "A.B.C.D;;Peer IP address";
+            }
+          }
+          leaf vrf {
+            tailf:info "specify front door vrf of the peer";
+            description
+              "specify front door vrf of the peer";
+            tailf:cli-hide-in-submode;
+            type string {
+              tailf:info "WORD;;VRF tag";
+            }
+          }
+          uses crypto-isakmp-peer-grouping;
+        }
+      }
+      container ipv6-addr {
+        tailf:cli-drop-node-name;
+        list address {
+          tailf:info "define peer policy for IP address";
+          description
+            "define peer policy for IP address";
+          tailf:cli-mode-name "config-isakmp-peer";
+          key "ipv6";
+          leaf ipv6 {
+            tailf:info "define peer policy for IPv6 address";
+            description
+              "define peer policy for IPv6 address";
+            tailf:cli-expose-key-name;
+            type inet:ipv6-address {
+              tailf:info "X:X:X:X::X  Peer IPv6 address";
+            }
+          }
+          leaf vrf {
+            tailf:info "specify front door vrf of the peer";
+            description
+              "specify front door vrf of the peer";
+            tailf:cli-hide-in-submode;
+            type string {
+              tailf:info "WORD;;VRF tag";
+            }
+          }
+          uses crypto-isakmp-peer-grouping;
+        }
+      }
+      list hostname {
+        tailf:info "hostname  define peer policy for hostname";
+        description
+          "hostname  define peer policy for hostname";
+        tailf:cli-mode-name "config-isakmp-peer";
+        key "name";
+        leaf name {
+          type string {
+            tailf:info "WORD;;hostname of peer";
+          }
+        }
+        leaf vrf {
+          tailf:info "specify front door vrf of the peer";
+          description
+            "specify front door vrf of the peer";
+          tailf:cli-hide-in-submode;
+          type string {
+            tailf:info "WORD;;VRF tag";
+          }
+        }
+        uses crypto-isakmp-peer-grouping;
+      }
+    }
+    list policy {
+      tailf:info "Set policy for an ISAKMP protection suite";
+      description
+        "Set policy for an ISAKMP protection suite";
+      tailf:cli-mode-name "config-isakmp";
+      key "number";
+      leaf number {
+        type uint32 {
+          tailf:info "<1-10000>;;Priority of protection suite";
+          range "1..10000";
+        }
+      }
+      container default {
+        tailf:info "Set a command to its defaults";
+        description
+          "Set a command to its defaults";
+        uses crypto-isakmp-policy-grouping;
+        leaf lifetime {
+          tailf:info "Set lifetime for ISAKMP security association";
+          description
+            "Set lifetime for ISAKMP security association";
+          type empty;
+        }
+      }
+      uses crypto-isakmp-policy-grouping;
+      leaf lifetime {
+        tailf:info "Set lifetime for ISAKMP security association";
+        description
+          "Set lifetime for ISAKMP security association";
+        type uint32 {
+          tailf:info "<60-86400>;;lifetime in seconds";
+          range "60..86400";
+        }
+      }
+    }
+    list profile {
+      tailf:info "Define ISAKMP Profiles";
+      description
+        "Define ISAKMP Profiles";
+      tailf:cli-mode-name "conf-isa-prof";
+      key "name";
+      leaf name {
+        type string {
+          tailf:info "WORD;;Name of ISAKMP Profile";
+        }
+      }
+      container default {
+        tailf:info "Set a command to its defaults";
+        description
+          "Set a command to its defaults";
+        uses crypto-isakmp-profile-default-grouping;
+      }
+      uses crypto-isakmp-profile-grouping;
+    }
+    container xauth {
+      tailf:info "Set Extended Authentication values";
+      description
+        "Set Extended Authentication values";
+      leaf timeout {
+        tailf:info "Set Extended Authentication timeout";
+        description
+          "Set Extended Authentication timeout";
+        type uint8 {
+          tailf:info "<5-90>;;Number of seconds before Xauth wait for Reply times out";
+          range "5..90";
+        }
+      }
+    }
+  }
+
+  grouping crypto-key-decrypt-rc-rsa-np-grouping {
+    leaf name {
+      tailf:info "Name of keypair to decrypt.";
+      description
+        "Name of keypair to decrypt.";
+      type string {
+        tailf:info "WORD;;Name of keypair.";
+      }
+    }
+    leaf passphrase {
+      tailf:info "decryption key.";
+      description
+        "decryption key.";
+      tailf:cli-multi-value;
+      type string {
+        tailf:info "LINE;;decryption Key.";
+      }
+    }
+  }
+
+  grouping crypto-key-decrypt-rc-rsa-grouping {
+    container ec {
+      tailf:info "EC keys";
+      description
+        "EC keys";
+      presence "true";
+      uses crypto-key-decrypt-rc-rsa-np-grouping;
+    }
+    container rsa {
+      tailf:info "RSA keys";
+      description
+        "RSA keys";
+      presence "true";
+      uses crypto-key-decrypt-rc-rsa-np-grouping;
+    }
+  }
+
+  grouping crypto-key-encrypt-rc-rsa-np-grouping {
+    leaf name {
+      tailf:info "Name of keypair to encrypt.";
+      description
+        "Name of keypair to encrypt.";
+      type string {
+        tailf:info "WORD;;Name of keypair.";
+      }
+    }
+    leaf passphrase {
+      tailf:info "encryption key.";
+      description
+        "encryption key.";
+      tailf:cli-multi-value;
+      type string {
+        tailf:info "LINE;;encryption Key.";
+      }
+    }
+  }
+
+  grouping crypto-key-encrypt-rc-rsa-grouping {
+    container ec {
+      tailf:info "EC keys";
+      description
+        "EC keys";
+      presence "true";
+      uses crypto-key-encrypt-rc-rsa-np-grouping;
+    }
+    container rsa {
+      tailf:info "RSA keys";
+      description
+        "RSA keys";
+      presence "true";
+      uses crypto-key-encrypt-rc-rsa-np-grouping;
+    }
+  }
+
+  grouping crypto-key-url-file-ex-grouping {
+    leaf file {
+      tailf:cli-drop-node-name;
+      type enumeration {
+        enum "bootflash:" {
+          tailf:info "Export to bootflash: file system";
+        }
+        enum "flash:" {
+          tailf:info "Export to flash: file system";
+        }
+        enum "ftp:" {
+          tailf:info "Export to ftp: file system";
+        }
+        enum "http:" {
+          tailf:info "Export to http: file system";
+        }
+        enum "https:" {
+          tailf:info "Export to https: file system";
+        }
+        enum "null:" {
+          tailf:info "Export to null: file system";
+        }
+        enum "nvram:" {
+          tailf:info "Export to nvram: file system";
+        }
+        enum "pram:" {
+          tailf:info "Export to pram: file system";
+        }
+        enum "rcp:" {
+          tailf:info "Export to rcp: file system";
+        }
+        enum "scp:" {
+          tailf:info "Export to scp: file system";
+        }
+        enum "system:" {
+          tailf:info "Export to system: file system";
+        }
+        enum "tftp:" {
+          tailf:info "Export to tftp: file system";
+        }
+        enum "tmpsys:" {
+          tailf:info "Export to tmpsys: file system";
+        }
+      }
+    }
+  }
+
+  grouping crypto-key-url-file-im-grouping {
+    leaf file {
+      tailf:cli-drop-node-name;
+      type enumeration {
+        enum "bootflash:" {
+          tailf:info "Import from bootflash: file system";
+        }
+        enum "cns:" {
+          tailf:info "Import from cns: file system";
+        }
+        enum "flash:" {
+          tailf:info "Import from flash: file system";
+        }
+        enum "ftp:" {
+          tailf:info "Import from ftp: file system";
+        }
+        enum "http:" {
+          tailf:info "Import from http: file system";
+        }
+        enum "https:" {
+          tailf:info "Import from https: file system";
+        }
+        enum "null:" {
+          tailf:info "Import from null: file system";
+        }
+        enum "nvram:" {
+          tailf:info "Import from nvram: file system";
+        }
+        enum "pram:" {
+          tailf:info "Import from pram: file system";
+        }
+        enum "rcp:" {
+          tailf:info "Import from rcp: file system";
+        }
+        enum "scp:" {
+          tailf:info "Import from scp: file system";
+        }
+        enum "system:" {
+          tailf:info "Import from system: file system";
+        }
+        enum "tar:" {
+          tailf:info "Import from tar: file system";
+        }
+        enum "tftp:" {
+          tailf:info "Import from tftp: file system";
+        }
+        enum "tmpsys:" {
+          tailf:info "Import from tmpsys: file system";
+        }
+      }
+    }
+  }
+
+  grouping crypto-key-export-pem-grouping {
+    container pem {
+      tailf:info "File type to export";
+      description
+        "File type to export";
+      tailf:cli-flatten-container;
+      choice terminal-url {
+        case terminal-case {
+          container terminal {
+            tailf:info "Export via the terminal (cut-and-paste)";
+            description
+              "Export via the terminal (cut-and-paste)";
+            choice des-3des {
+              case pk-3des-case {
+                leaf pk-3des {
+                  tailf:alt-name "3des";
+                  tailf:info "Encrypt the private key with 3DES";
+                  description
+                    "Encrypt the private key with 3DES";
+                  tailf:cli-multi-value;
+                  tailf:cli-optional-in-sequence;
+                  tailf:cli-full-command;
+                  type string {
+                    tailf:info "LINE;;Passphrase used to protect the private key";
+                  }
+                }
+              }
+              case des-case {
+                leaf des {
+                  tailf:info "Encrypt the private key with DES";
+                  description
+                    "Encrypt the private key with DES";
+                  tailf:cli-multi-value;
+                  tailf:cli-full-command;
+                  type string {
+                    tailf:info "LINE;;Passphrase used to protect the private key";
+                  }
+                }
+              }
+            }
+          }
+        }
+        case url-case {
+          container url {
+            tailf:info "Export via the file systems";
+            description
+              "Export via the file systems";
+            tailf:cli-sequence-commands;
+            tailf:cli-compact-syntax;
+            uses crypto-key-url-file-ex-grouping;
+            choice des-3des {
+              case pk-3des-case {
+                leaf pk-3des {
+                  tailf:alt-name "3des";
+                  tailf:info "Encrypt the private key with 3DES";
+                  description
+                    "Encrypt the private key with 3DES";
+                  tailf:cli-multi-value;
+                  tailf:cli-optional-in-sequence;
+                  tailf:cli-full-command;
+                  type string {
+                    tailf:info "LINE;;Passphrase used to protect the private key";
+                  }
+                }
+              }
+              case des-case {
+                leaf des {
+                  tailf:info "Encrypt the private key with DES";
+                  description
+                    "Encrypt the private key with DES";
+                  tailf:cli-multi-value;
+                  tailf:cli-full-command;
+                  type string {
+                    tailf:info "LINE;;Passphrase used to protect the private key";
+                  }
+                }
+              }
+            }
+          }
+        }
+      }
+    }
+  }
+
+  grouping crypto-key-pubkey-key-grouping {
+    leaf address {
+      tailf:info "Assign an address to the key";
+      description
+        "Assign an address to the key";
+      type inet:ipv4-address {
+        tailf:info "A.B.C.D;;IP address";
+      }
+    }
+    container key-string {
+      tailf:info "Key data";
+      description
+        "Key data";
+      tailf:cli-add-mode;
+      tailf:cli-mode-name "config-pubkey";
+      leaf hex-data {
+        tailf:cli-drop-node-name;
+        tailf:cli-multi-value;
+        tailf:cli-full-command;
+        type string {
+          tailf:info "Hex-data;;Hex data to append to parse buffer";
+        }
+      }
+      leaf quit {
+        tailf:info "Exit data entry mode";
+        description
+          "Exit data entry mode";
+        tailf:cli-full-command;
+        type empty;
+      }
+    }
+    leaf serial-number {
+      tailf:info "Serial number of the device";
+      description
+        "Serial number of the device";
+      type string {
+        tailf:info "<0-FFFFFFFF>;;Device serial number";
+      }
+    }
+  }
+
+  grouping crypto-key-pubkey-key-default-grouping {
+    leaf address {
+      tailf:info "Assign an address to the key";
+      description
+        "Assign an address to the key";
+      type empty;
+    }
+    container key-string {
+      tailf:info "Key data";
+      description
+        "Key data";
+      presence "true";
+    }
+    leaf serial-number {
+      tailf:info "Serial number of the device";
+      description
+        "Serial number of the device";
+      type empty;
+    }
+  }
+
+  grouping crypto-key-pubkey-chain-grouping {
+    list addressed-key {
+      tailf:info "Public key associated with an address";
+      description
+        "Public key associated with an address";
+      tailf:cli-mode-name "config-pubkey-key";
+      key "ip";
+      leaf ip {
+        type inet:ipv4-address {
+          tailf:info "A.B.C.D;;IP address";
+        }
+      }
+      leaf use {
+        tailf:cli-drop-node-name;
+        tailf:cli-hide-in-submode;
+        type enumeration {
+          enum "encryption" {
+            tailf:info "Key is to be used for encryption only";
+          }
+          enum "signature" {
+            tailf:info "Key is to be used for verifying signatures only";
+          }
+        }
+      }
+      uses crypto-key-pubkey-key-grouping;
+      container default {
+        tailf:info "Set a command to its defaults";
+        description
+          "Set a command to its defaults";
+        uses crypto-key-pubkey-key-default-grouping;
+      }
+    }
+    list named-key {
+      tailf:info "Public key associated with a name";
+      description
+        "Public key associated with a name";
+      tailf:cli-mode-name "config-pubkey-key";
+      key "name";
+      leaf name {
+        type string {
+          tailf:info "WORD;;Name of key";
+        }
+      }
+      leaf use {
+        tailf:cli-drop-node-name;
+        tailf:cli-hide-in-submode;
+        type enumeration {
+          enum "encryption" {
+            tailf:info "Key is to be used for encryption only";
+          }
+          enum "signature" {
+            tailf:info "Key is to be used for verifying signatures only";
+          }
+        }
+      }
+      uses crypto-key-pubkey-key-grouping;
+      container default {
+        tailf:info "Set a command to its defaults";
+        description
+          "Set a command to its defaults";
+        uses crypto-key-pubkey-key-default-grouping;
+      }
+    }
+  }
+
+  grouping crypto-key-pubkey-chain-default-grouping {
+    list addressed-key {
+      tailf:info "Public key associated with an address";
+      description
+        "Public key associated with an address";
+      tailf:cli-suppress-mode;
+      key "ip";
+      leaf ip {
+        type inet:ipv4-address {
+          tailf:info "A.B.C.D;;IP address";
+        }
+      }
+      leaf use {
+        tailf:cli-drop-node-name;
+        tailf:cli-hide-in-submode;
+        type enumeration {
+          enum "encryption" {
+            tailf:info "Key is to be used for encryption only";
+          }
+          enum "signature" {
+            tailf:info "Key is to be used for verifying signatures only";
+          }
+        }
+      }
+    }
+    list named-key {
+      tailf:info "Public key associated with a name";
+      description
+        "Public key associated with a name";
+      tailf:cli-suppress-mode;
+      key "name";
+      leaf name {
+        type string {
+          tailf:info "WORD;;Name of key";
+        }
+      }
+      leaf use {
+        tailf:cli-drop-node-name;
+        tailf:cli-hide-in-submode;
+        type enumeration {
+          enum "encryption" {
+            tailf:info "Key is to be used for encryption only";
+          }
+          enum "signature" {
+            tailf:info "Key is to be used for verifying signatures only";
+          }
+        }
+      }
+    }
+  }
+
+  grouping crypto-key-grouping {
+    container decrypt {
+      tailf:info "Decrypt a keypair.";
+      description
+        "Decrypt a keypair.";
+      uses crypto-key-decrypt-rc-rsa-grouping;
+      container write {
+        tailf:info "Will write the configuration to startup-config.";
+        description
+          "Will write the configuration to startup-config.";
+        uses crypto-key-decrypt-rc-rsa-grouping;
+      }
+    }
+    container encrypt {
+      tailf:info "Encrypt a keypair.";
+      description
+        "Encrypt a keypair.";
+      uses crypto-key-encrypt-rc-rsa-grouping;
+      container write {
+        tailf:info "Will write the configuration to startup-config.";
+        description
+          "Will write the configuration to startup-config.";
+        uses crypto-key-encrypt-rc-rsa-grouping;
+      }
+    }
+    container export {
+      tailf:info "Export keys";
+      description
+        "Export keys";
+      list ec {
+        tailf:info "Export EC keys";
+        description
+          "Export EC keys";
+        tailf:cli-suppress-mode;
+        key "label";
+        leaf label {
+          type string {
+            tailf:info "WORD;;ec key label";
+          }
+        }
+        uses crypto-key-export-pem-grouping;
+      }
+      list rsa {
+        tailf:info "Export RSRA keys";
+        description
+          "Export RSRA keys";
+        tailf:cli-suppress-mode;
+        key "label";
+        leaf label {
+          type string {
+            tailf:info "WORD;;RSA key label";
+          }
+        }
+        uses crypto-key-export-pem-grouping;
+      }
+    }
+    container generate {
+      tailf:info "Generate new keys";
+      description
+        "Generate new keys";
+      container ec {
+        tailf:info "Generate EC keys for ECDSA";
+        description
+          "Generate EC keys for ECDSA";
+        tailf:cli-sequence-commands;
+        tailf:cli-compact-syntax;
+        leaf keysize {
+          tailf:info "Number of bits";
+          description
+            "Number of bits";
+          type enumeration {
+            enum "256" {
+              tailf:info "<256-256>;;256 bit keys";
+            }
+            enum "384" {
+              tailf:info "<384-384>;;384 bit keys";
+            }
+          }
+        }
+        leaf exportable {
+          tailf:info "Allow key to be exported";
+          description
+            "Allow key to be exported";
+          tailf:cli-break-sequence-commands;
+          type empty;
+        }
+        leaf label {
+          tailf:info "Provide a label";
+          description
+            "Provide a label";
+          tailf:cli-full-command;
+          type string {
+            tailf:info "WORD;;Label for the keypair";
+          }
+        }
+      }
+      container rsa {
+        tailf:info "Generate RSA keys";
+        description
+          "Generate RSA keys";
+        tailf:cli-compact-syntax;
+        presence "true";
+        leaf encryption {
+          tailf:info "Generate a general purpose RSA key pair for signing and encryption";
+          description
+            "Generate a general purpose RSA key pair for signing and encryption";
+          type empty;
+        }
+        leaf exportable {
+          tailf:info "Allow the key to be exported";
+          description
+            "Allow the key to be exported";
+          type empty;
+        }
+        leaf general-keys {
+          tailf:info "Generate a general purpose RSA key pair for signing and encryption";
+          description
+            "Generate a general purpose RSA key pair for signing and encryption";
+          type empty;
+        }
+        leaf label {
+          tailf:info "Provide a label";
+          description
+            "Provide a label";
+          type string {
+            tailf:info "WORD;;RSA keypair label";
+          }
+        }
+        leaf modulus {
+          tailf:info "Provide number of modulus bits on the command line";
+          description
+            "Provide number of modulus bits on the command line";
+          type uint16 {
+            tailf:info "<360-4096>;;size of the key modulus [360-4096]";
+            range "360..4096";
+          }
+        }
+        leaf on {
+          tailf:info "create key on specified device.";
+          description
+            "create key on specified device.";
+          type string {
+            tailf:info "WORD;;RSA keypair storage device";
+          }
+        }
+        leaf redundancy {
+          tailf:info "Allow the key to be synced to high-availability peer";
+          description
+            "Allow the key to be synced to high-availability peer";
+          type empty;
+        }
+        leaf signature {
+          tailf:info "Generate a general purpose RSA key pair for signing and encryption";
+          description
+            "Generate a general purpose RSA key pair for signing and encryption";
+          type empty;
+        }
+        leaf storage {
+          tailf:info "Store key on specified device";
+          description
+            "Store key on specified device";
+          type string {
+            tailf:info "WORD;;RSA keypair storage device";
+          }
+        }
+        leaf usage-keys {
+          tailf:info "Generate separate RSA key pairs for signing and encryption";
+          description
+            "Generate separate RSA key pairs for signing and encryption";
+          type empty;
+        }
+      }
+    }
+    container import {
+      tailf:info "Import keys";
+      description
+        "Import keys";
+      list ec {
+        tailf:info "Import EC keys";
+        description
+          "Import EC keys";
+        tailf:cli-suppress-mode;
+        key "name";
+        leaf name {
+          type string {
+            tailf:info "WORD  EC key label";
+          }
+        }
+        leaf exportable {
+          tailf:info "Allow key to be exported";
+          description
+            "Allow key to be exported";
+          tailf:cli-hide-in-submode;
+          type empty;
+        }
+        choice terminal-url {
+          case terminal-case {
+            leaf terminal {
+              tailf:info "Import via the terminal (cut-and-paste)";
+              description
+                "Import via the terminal (cut-and-paste)";
+              tailf:cli-multi-value;
+              tailf:cli-full-command;
+              type string {
+                tailf:info "LINE;;Passphrase used to protect the private key";
+              }
+            }
+          }
+          case url-case {
+            container url {
+              tailf:info "Export via the file systems";
+              description
+                "Export via the file systems";
+              tailf:cli-flatten-container;
+              tailf:cli-sequence-commands;
+              tailf:cli-compact-syntax;
+              uses crypto-key-url-file-im-grouping;
+              leaf key {
+                tailf:cli-drop-node-name;
+                tailf:cli-multi-value;
+                tailf:cli-optional-in-sequence;
+                type string {
+                  tailf:info "LINE;;Passphrase used to protect the private key";
+                }
+              }
+            }
+          }
+        }
+      }
+      list rsa {
+        tailf:info "Import RSA keys";
+        description
+          "Import RSA keys";
+        tailf:cli-suppress-mode;
+        tailf:cli-compact-syntax;
+        key "label";
+        leaf label {
+          type string {
+            tailf:info "WORD;;RSA key label";
+          }
+        }
+        leaf encryption {
+          tailf:info "Encryption key";
+          description
+            "Encryption key";
+          type empty;
+        }
+        leaf exportable {
+          tailf:info "Allow the key to be exported";
+          description
+            "Allow the key to be exported";
+          type empty;
+        }
+        leaf general-purpose {
+          tailf:info "General Purpose key";
+          description
+            "General Purpose key";
+          type empty;
+        }
+        leaf on {
+          tailf:info "Make this an on-token key";
+          description
+            "Make this an on-token key";
+          type string {
+            tailf:info "WORD;;RSA keypair storage device";
+          }
+        }
+        leaf pem {
+          tailf:info "File type to import";
+          description
+            "File type to import";
+          type empty;
+        }
+        leaf redundancy {
+          tailf:info "Sync this key to the standby";
+          description
+            "Sync this key to the standby";
+          type empty;
+        }
+        leaf signature {
+          tailf:info "Signature key";
+          description
+            "Signature key";
+          type empty;
+        }
+        leaf storage {
+          tailf:info "Store key on specified device";
+          description
+            "Store key on specified device";
+          type string {
+            tailf:info "WORD;;RSA keypair storage device";
+          }
+        }
+        leaf usage-keys {
+          tailf:info "Usage key pairs";
+          description
+            "Usage key pairs";
+          type empty;
+        }
+        choice terminal-url {
+          case terminal-case {
+            leaf terminal {
+              tailf:info "Import via the terminal (cut-and-paste)";
+              description
+                "Import via the terminal (cut-and-paste)";
+              tailf:cli-multi-value;
+              tailf:cli-full-command;
+              type string {
+                tailf:info "LINE;;Passphrase used to protect the private key";
+              }
+            }
+          }
+          case url-case {
+            container url {
+              tailf:info "Export via the file systems";
+              description
+                "Export via the file systems";
+              tailf:cli-flatten-container;
+              tailf:cli-sequence-commands;
+              tailf:cli-compact-syntax;
+              uses crypto-key-url-file-im-grouping;
+              leaf key {
+                tailf:cli-drop-node-name;
+                tailf:cli-multi-value;
+                tailf:cli-optional-in-sequence;
+                type string {
+                  tailf:info "LINE;;Passphrase used to protect the private key";
+                }
+              }
+            }
+          }
+        }
+      }
+    }
+    container move {
+      tailf:info "Move keys";
+      description
+        "Move keys";
+      container rsa {
+        tailf:info "Move RSA keys";
+        description
+          "Move RSA keys";
+        tailf:cli-flatten-container;
+        tailf:cli-sequence-commands;
+        tailf:cli-compact-syntax;
+        leaf label {
+          tailf:cli-drop-node-name;
+          type string {
+            tailf:info "WORD;;RSA key label";
+          }
+        }
+        leaf non-exportable {
+          tailf:info "Do Not allow the key to be exported";
+          description
+            "Do Not allow the key to be exported";
+          tailf:cli-break-sequence-commands;
+          type empty;
+        }
+        leaf on {
+          tailf:info "Make this an on-token key";
+          description
+            "Make this an on-token key";
+          type string {
+            tailf:info "WORD;;RSA keypair storage device";
+          }
+        }
+        leaf redundancy {
+          tailf:info "Sync this key to the standby";
+          description
+            "Sync this key to the standby";
+          type empty;
+        }
+        leaf storage {
+          tailf:info "Store key on specified device";
+          description
+            "Store key on specified device";
+          type string {
+            tailf:info "WORD;;RSA keypair storage device";
+          }
+        }
+      }
+    }
+    container pubkey-chain {
+      tailf:info "Peer public key chain management";
+      description
+        "Peer public key chain management";
+      container rsa {
+        tailf:info "Peer RSA public key chain management";
+        description
+          "Peer RSA public key chain management";
+        tailf:cli-add-mode;
+        tailf:cli-mode-name "config-pubkey-chain";
+        uses crypto-key-pubkey-chain-grouping;
+        container default {
+          tailf:info "Set a command to its defaults";
+          description
+            "Set a command to its defaults";
+          uses crypto-key-pubkey-chain-default-grouping;
+        }
+      }
+    }
+    leaf storage {
+      tailf:info "default storage location for keypairs";
+      description
+        "default storage location for keypairs";
+      type string {
+        tailf:info "WORD;;keypair storage location";
+      }
+    }
+    container zeroize {
+      tailf:info "Remove keys";
+      description
+        "Remove keys";
+      container ec {
+        tailf:info "Remove EC keys";
+        description
+          "Remove EC keys";
+        presence "true";
+        leaf label {
+          tailf:cli-drop-node-name;
+          type string {
+            tailf:info "WORD;;keypair label";
+          }
+        }
+      }
+      container pubkey-chain {
+        tailf:info "Remove peer's cached public key";
+        description
+          "Remove peer's cached public key";
+        presence "true";
+        leaf index {
+          tailf:cli-drop-node-name;
+          type uint16 {
+            tailf:info "<1-65535>;;Public key index";
+          }
+        }
+      }
+      container rsa {
+        tailf:info "Remove RSA keys";
+        description
+          "Remove RSA keys";
+        presence "true";
+        leaf label {
+          tailf:cli-drop-node-name;
+          type string {
+            tailf:info "WORD;;keypair label";
+          }
+        }
+      }
+    }
+  }
+
+  grouping crypto-keyring-key-grouping {
+    leaf key {
+      tailf:info "specify the key";
+      description
+        "specify the key";
+      type empty;
+    }
+    leaf encryption {
+      tailf:cli-drop-node-name;
+      tailf:cli-break-sequence-commands;
+      type enumeration {
+        enum "0" {
+          tailf:info "Specifies an UNENCRYPTED key will follow";
+        }
+        enum "6" {
+          tailf:info "Specifies HIDDEN key will follow";
+        }
+      }
+    }
+    leaf unencryt-key {
+      tailf:cli-drop-node-name;
+      tailf:cli-multi-value;
+      type string {
+        tailf:info "LINE;;The UNENCRYPTED (cleartext) shared key";
+      }
+    }
+  }
+
+  grouping crypto-keyring-grouping {
+    leaf description {
+      tailf:info "Specify a description about this keyring";
+      description
+        "Specify a description about this keyring";
+      tailf:cli-multi-value;
+      type string {
+        tailf:info "LINE;;a 1 line description of the keyring";
+      }
+    }
+    leaf local-address {
+      tailf:info "Limit the keyring usage to a local address";
+      description
+        "Limit the keyring usage to a local address";
+      type string;
+    }
+    container pre-shared-key {
+      tailf:info "Pre-Shared Key";
+      description
+        "Pre-Shared Key";
+      container ipv4-addr {
+        tailf:cli-drop-node-name;
+        tailf:cli-sequence-commands;
+        tailf:cli-compact-syntax;
+        leaf address {
+          tailf:info "pre shared key by address";
+          description
+            "pre shared key by address";
+          type inet:ipv4-address {
+            tailf:info "A.B.C.D;;address prefix";
+          }
+        }
+        leaf mask {
+          tailf:info "pre shared key by address";
+          description
+            "pre shared key by address";
+          tailf:cli-drop-node-name;
+          tailf:cli-optional-in-sequence;
+          type inet:ipv4-address {
+            tailf:info "A.B.C.D;;address prefix mask";
+          }
+        }
+        uses crypto-keyring-key-grouping;
+      }
+      container address {
+        tailf:info "pre shared key by address";
+        description
+          "pre shared key by address";
+        tailf:cli-sequence-commands;
+        tailf:cli-compact-syntax;
+        leaf ipv6 {
+          tailf:info "define shared key with IPv6 address";
+          description
+            "define shared key with IPv6 address";
+          type inet:ipv6-prefix {
+            tailf:info "X:X:X:X::X/<0-128>;;IPv6 address prefix";
+          }
+        }
+        uses crypto-keyring-key-grouping;
+      }
+      container hostname {
+        tailf:info "hostname  define peer policy for hostname";
+        description
+          "hostname  define peer policy for hostname";
+        tailf:cli-sequence-commands;
+        tailf:cli-compact-syntax;
+        leaf name {
+          tailf:cli-drop-node-name;
+          type string {
+            tailf:info "WORD;;hostname of peer";
+          }
+        }
+        uses crypto-keyring-key-grouping;
+      }
+    }
+    container rsa-pubkey {
+      tailf:info "Peer RSA public key chain management";
+      description
+        "Peer RSA public key chain management";
+      container addr {
+        tailf:cli-drop-node-name;
+        tailf:cli-sequence-commands;
+        tailf:cli-compact-syntax;
+        leaf address {
+          tailf:info "Public key associated with an address";
+          description
+            "Public key associated with an address";
+          type inet:ipv4-address {
+            tailf:info "A.B.C.D;;ip address";
+          }
+        }
+        leaf way {
+          tailf:cli-drop-node-name;
+          tailf:cli-optional-in-sequence;
+          type enumeration {
+            enum "encryption" {
+              tailf:info "Key is to be used for encryption only";
+            }
+            enum "signature" {
+              tailf:info "Key is to be used for verifying signatures only (default)";
+            }
+          }
+        }
+      }
+      container hostname {
+        tailf:cli-drop-node-name;
+        tailf:cli-sequence-commands;
+        tailf:cli-compact-syntax;
+        leaf name {
+          tailf:info "Public key associated with a hostname";
+          description
+            "Public key associated with a hostname";
+          type string {
+            tailf:info "WORD;;name of key";
+          }
+        }
+        leaf way {
+          tailf:cli-drop-node-name;
+          tailf:cli-optional-in-sequence;
+          type enumeration {
+            enum "encryption" {
+              tailf:info "Key is to be used for encryption only";
+            }
+            enum "signature" {
+              tailf:info "Key is to be used for verifying signatures only (default)";
+            }
+          }
+        }
+      }
+    }
+  }
+
+  grouping crypto-map-grouping {
+    uses crypto-map-common-grouping;
+    container set {
+      tailf:info "Set values for encryption/decryption";
+      description
+        "Set values for encryption/decryption";
+      uses crypto-map-common-set-grouping;
+      container security-association {
+        tailf:info "Security association parameters";
+        description
+          "Security association parameters";
+        uses crypto-map-common-set-security-association-grouping;
+        leaf level {
+          tailf:info "specify a security association granularity level for identities";
+          description
+            "specify a security association granularity level for identities";
+          type enumeration {
+            enum "per-host" {
+              tailf:info "granularity to host level";
+            }
+          }
+        }
+      }
+    }
+  }
+
+  grouping crypto-map-default-grouping {
+    leaf description {
+      tailf:info "Description of the crypto map statement policy";
+      description
+        "Description of the crypto map statement policy";
+      type empty;
+    }
+    container dialer {
+      tailf:info "Dialer related commands";
+      description
+        "Dialer related commands";
+      leaf pre-classify {
+        tailf:info "Enable dialer list classification before initiating IKE";
+        description
+          "Enable dialer list classification before initiating IKE";
+        type empty;
+      }
+    }
+    container match {
+      tailf:info "Match values";
+      description
+        "Match values";
+      leaf address {
+        tailf:info "Match address of packets to encrypt";
+        description
+          "Match address of packets to encrypt";
+        type empty;
+      }
+    }
+    container qos {
+      tailf:info "Quality of Service related commands";
+      description
+        "Quality of Service related commands";
+      leaf pre-classify {
+        tailf:info "Enable QOS classification before packets are tunnel encapsulated";
+        description
+          "Enable QOS classification before packets are tunnel encapsulated";
+        type empty;
+      }
+    }
+    container reverse-route {
+      tailf:info "Reverse Route Injection.";
+      description
+        "Reverse Route Injection.";
+      presence "true";
+    }
+    container set {
+      tailf:info "Set values for encryption/decryption";
+      description
+        "Set values for encryption/decryption";
+      leaf group {
+        tailf:info "Set the san group parameters";
+        description
+          "Set the san group parameters";
+        type empty;
+      }
+      leaf identity {
+        tailf:info "Identity restriction";
+        description
+          "Identity restriction";
+        type empty;
+      }
+      leaf ikev2-profile {
+        tailf:info "Specify ikev2 Profile";
+        description
+          "Specify ikev2 Profile";
+        type string {
+          tailf:info "WORD;;Name the ikev2 profile";
+        }
+      }
+      leaf isakmp-profile {
+        tailf:info "Specify isakmp Profile";
+        description
+          "Specify isakmp Profile";
+        type empty;
+      }
+      container pfs {
+        tailf:info "Specify pfs settings";
+        description
+          "Specify pfs settings";
+        presence "true";
+      }
+      container reverse-route {
+        tailf:info "Reverse Route Injection";
+        description
+          "Reverse Route Injection";
+        presence "true";
+      }
+      container security-association {
+        tailf:info "Security association parameters";
+        description
+          "Security association parameters";
+        leaf dfbit {
+          tailf:info "Handling of encapsulated DF bit.";
+          description
+            "Handling of encapsulated DF bit.";
+          type empty;
+        }
+        container dummy {
+          tailf:info "Enable transmitting dummy packets";
+          description
+            "Enable transmitting dummy packets";
+          presence "true";
+        }
+        leaf ecn {
+          tailf:info "Handling of ECN bit";
+          description
+            "Handling of ECN bit";
+          type empty;
+        }
+        container idle-time-container {
+          tailf:cli-drop-node-name;
+          tailf:cli-sequence-commands;
+          tailf:cli-compact-syntax;
+          leaf idle-time {
+            tailf:info "Automatically delete IPSec SAs after a given idle period.";
+            description
+              "Automatically delete IPSec SAs after a given idle period.";
+            type empty;
+          }
+          leaf default {
+            tailf:info "All SAs idle-out reset to default peer";
+            description
+              "All SAs idle-out reset to default peer";
+            tailf:cli-optional-in-sequence;
+            type empty;
+          }
+        }
+        leaf level {
+          tailf:info "specify a security association granularity level for identities";
+          description
+            "specify a security association granularity level for identities";
+          type enumeration {
+            enum "per-host" {
+              tailf:info "granularity to host level";
+            }
+          }
+        }
+        container lifetime {
+          tailf:info "security association lifetime";
+          description
+            "security association lifetime";
+          leaf days {
+            tailf:info "Time-based key duration in days";
+            description
+              "Time-based key duration in days";
+            type empty;
+          }
+          leaf kilobytes {
+            tailf:info "Volume-based key duration";
+            description
+              "Volume-based key duration";
+            type empty;
+          }
+          leaf seconds {
+            tailf:info "Time-based key duration in seconds";
+            description
+              "Time-based key duration in seconds";
+            type empty;
+          }
+        }
+        container replay {
+          tailf:info "Set replay checking.";
+          description
+            "Set replay checking.";
+          leaf disable {
+            tailf:info "Disable replay checking";
+            description
+              "Disable replay checking";
+            type empty;
+          }
+          leaf window-size {
+            tailf:info "Set replay window size.";
+            description
+              "Set replay window size.";
+            type empty;
+          }
+        }
+      }
+      leaf transform-set {
+        tailf:info "Specify list of transform sets in priority order";
+        description
+          "Specify list of transform sets in priority order";
+        type empty;
+      }
+    }
+  }
+
+  grouping crypto-map-gdoi-mapping {
+    leaf activate {
+      tailf:info "Activate the crypto map to work in fail-close mode";
+      description
+        "Activate the crypto map to work in fail-close mode";
+      type empty;
+    }
+    container match {
+      tailf:info "Match address of packets for fail-close";
+      description
+        "Match address of packets for fail-close";
+      leaf address {
+        tailf:info "Match address of packets for fail-close.";
+        description
+          "Match address of packets for fail-close.";
+        type ext-acl-type;
+      }
+    }
+  }
+
+  grouping crypto-map-gdoi-default-mapping {
+    leaf activate {
+      tailf:info "Activate the crypto map to work in fail-close mode";
+      description
+        "Activate the crypto map to work in fail-close mode";
+      type empty;
+    }
+    container match {
+      tailf:info "Match address of packets for fail-close";
+      description
+        "Match address of packets for fail-close";
+      leaf address {
+        tailf:info "Match address of packets for fail-close.";
+        description
+          "Match address of packets for fail-close.";
+        type empty;
+      }
+    }
+  }
+
+  grouping time-grouping {
+    container time {
+      tailf:cli-sequence-commands;
+      tailf:cli-compact-syntax;
+      choice date-month {
+        case date1 {
+          leaf date1 {
+            tailf:cli-drop-node-name;
+            type uint8 {
+              tailf:info "<1-31>;;Date (ddd)";
+              range "1..31";
+            }
+          }
+        }
+        case month1 {
+          leaf month1 {
+            tailf:cli-drop-node-name;
+            type string {
+              tailf:info "MONTH;;Month (mmm)";
+            }
+          }
+        }
+      }
+      choice month-date {
+        case date2 {
+          leaf date2 {
+            tailf:cli-drop-node-name;
+            when "../month1";
+            type uint8 {
+              tailf:info "<1-31>;;Date (ddd)";
+              range "1..31";
+            }
+          }
+        }
+        case month2 {
+          leaf month2 {
+            tailf:cli-drop-node-name;
+            when "../date1";
+            type string {
+              tailf:info "MONTH;;Month (mmm)";
+            }
+          }
+        }
+      }
+      leaf year {
+        tailf:cli-drop-node-name;
+        type uint16 {
+          tailf:info "<1993-2035>;;Year (yyyy)";
+          range "1993..2035";
+        }
+      }
+      leaf clock {
+        tailf:cli-drop-node-name;
+        tailf:cli-break-sequence-commands;
+        type string {
+          tailf:info "hh:mm:ss;;Time (hh:mm:ss)";
+        }
+      }
+      leaf utc {
+        tailf:info "Time is in UTC (not local Time Zone)";
+        description
+          "Time is in UTC (not local Time Zone)";
+        tailf:cli-full-command;
+        type empty;
+      }
+    }
+  }
+
+  grouping compare-time-grouping {
+    container eq {
+      tailf:info "Equal";
+      description
+        "Equal";
+      uses time-grouping;
+    }
+    container ge {
+      tailf:info "Greater than or equal";
+      description
+        "Greater than or equal";
+      uses time-grouping;
+    }
+    container lt {
+      tailf:info "Less Than";
+      description
+        "Less Than";
+      uses time-grouping;
+    }
+    container ne {
+      tailf:info "Not Equal";
+      description
+        "Not Equal";
+      uses time-grouping;
+    }
+  }
+
+  grouping compare-string-grouping {
+    leaf co {
+      tailf:info "Contains";
+      description
+        "Contains";
+      tailf:cli-multi-value;
+      type string {
+        tailf:info "LINE;;Compare string";
+      }
+    }
+    leaf eq {
+      tailf:info "Equal";
+      description
+        "Equal";
+      tailf:cli-multi-value;
+      type string {
+        tailf:info "LINE;;Compare string";
+      }
+    }
+    leaf nc {
+      tailf:info "Does not contain";
+      description
+        "Does not contain";
+      tailf:cli-multi-value;
+      type string {
+        tailf:info "LINE;;Compare string";
+      }
+    }
+    leaf ne {
+      tailf:info "Not Equal";
+      description
+        "Not Equal";
+      tailf:cli-multi-value;
+      type string {
+        tailf:info "LINE;;Compare string";
+      }
+    }
+  }
+
+  grouping crypto-pki-certificate-map-grouping {
+    container alt-subject-name {
+      tailf:info "Alternate subject name";
+      description
+        "Alternate subject name";
+      uses compare-string-grouping;
+    }
+    container expires-on {
+      tailf:info "Expiration date/time";
+      description
+        "Expiration date/time";
+      uses compare-time-grouping;
+    }
+    container issuer-name {
+      tailf:info "Certificate issuer name";
+      description
+        "Certificate issuer name";
+      uses compare-string-grouping;
+    }
+    container name {
+      tailf:info "Any subject name field";
+      description
+        "Any subject name field";
+      uses compare-string-grouping;
+    }
+    container serial-number {
+      tailf:info "Certificate serial number (hexidecimal)";
+      description
+        "Certificate serial number (hexidecimal)";
+      uses compare-string-grouping;
+    }
+    container subject-name {
+      tailf:info "Certificate subject name";
+      description
+        "Certificate subject name";
+      uses compare-string-grouping;
+    }
+    container unstructured-subject-name {
+      tailf:info "Unstructured subject name";
+      description
+        "Unstructured subject name";
+      uses compare-string-grouping;
+    }
+    container valid-start {
+      tailf:info "Valid after date/time";
+      description
+        "Valid after date/time";
+      uses compare-time-grouping;
+    }
+  }
+
+  grouping crypto-pki-profile-enrollment-auth-grouping {
+    leaf command {
+      tailf:info "command to authenticate or enroll";
+      description
+        "command to authenticate or enroll";
+      tailf:cli-multi-value;
+      type string {
+        tailf:info "LINE;;Text string (proceed any ? character with ^V)";
+      }
+    }
+    leaf terminal {
+      tailf:info "authenticate or enroll using terminal";
+      description
+        "authenticate or enroll using terminal";
+      type empty;
+    }
+    container url {
+      tailf:info "url to authenticate/enroll";
+      description
+        "url to authenticate/enroll";
+      tailf:cli-sequence-commands;
+      tailf:cli-compact-syntax;
+      leaf name {
+        tailf:cli-drop-node-name;
+        type string {
+          tailf:info "WORD;;http or tftp url";
+        }
+      }
+      leaf vrf {
+        tailf:info "VRF to use for certificate enrollment ";
+        description
+          "VRF to use for certificate enrollment ";
+        tailf:cli-optional-in-sequence;
+        type string {
+          tailf:info "WORD;;Name of VRF to use for enrollment";
+        }
+      }
+    }
+  }
+
+  grouping crypto-pki-profile-enrollment-grouping {
+    container authentication {
+      tailf:info "Retrieve CA certificate(s)";
+      description
+        "Retrieve CA certificate(s)";
+      uses crypto-pki-profile-enrollment-auth-grouping;
+    }
+    container enrollment {
+      tailf:info "Enroll router with a CA";
+      description
+        "Enroll router with a CA";
+      uses crypto-pki-profile-enrollment-auth-grouping;
+      leaf credential {
+        tailf:info "Use existing router cert for new enrollment";
+        description
+          "Use existing router cert for new enrollment";
+        type string {
+          tailf:info "WORD;;Label of trustpoint holding existing router cert";
+        }
+      }
+    }
+    leaf method-est {
+      tailf:info "Use EST for this profile";
+      description
+        "Use EST for this profile";
+      type empty;
+    }
+    list parameter {
+      tailf:info "Define a parameter value or prompt";
+      description
+        "Define a parameter value or prompt";
+      tailf:cli-suppress-mode;
+      key "number";
+      leaf number {
+        type uint8 {
+          tailf:info "<1-8>;;Parameter number (1 - 8)";
+          range "1..8";
+        }
+      }
+      choice prompt-value {
+        case prompt-case {
+          leaf prompt {
+            tailf:info "Define a parameter prompt";
+            description
+              "Define a parameter prompt";
+            tailf:cli-hide-in-submode;
+            tailf:cli-multi-value;
+            type string {
+              tailf:info "LINE;;Parameter value or prompt";
+            }
+          }
+        }
+        case value-case {
+          leaf value {
+            tailf:info "Define a parameter value";
+            description
+              "Define a parameter value";
+            tailf:cli-hide-in-submode;
+            tailf:cli-multi-value;
+            type string {
+              tailf:info "LINE;;Parameter value or prompt";
+            }
+          }
+        }
+      }
+    }
+    container reenrollment {
+      tailf:info "Re-enroll router with a CA";
+      description
+        "Re-enroll router with a CA";
+      uses crypto-pki-profile-enrollment-auth-grouping;
+    }
+    leaf source-interface {
+      tailf:info "Interface used as source address";
+      description
+        "Interface used as source address";
+      type string;
+    }
+  }
+
+  grouping hour-minute-grouping {
+    leaf hours {
+      tailf:cli-drop-node-name;
+      type uint8 {
+        tailf:info "<0-23>;;Hours of the day in 24-hr time, 0-23, examples: 13 or 7";
+        range "0..23";
+      }
+    }
+    leaf minutes {
+      tailf:cli-drop-node-name;
+      type uint8 {
+        tailf:info "<0-59>;;The minutes from the top of the hour";
+        range "0..59";
+      }
+    }
+  }
+
+  grouping username-password-grouping {
+    leaf username {
+      tailf:info "Provide the username for authentication";
+      description
+        "Provide the username for authentication";
+      type string {
+        tailf:info "WORD;;Provide the username for authentication";
+      }
+    }
+    leaf password {
+      tailf:info "Provide the password for authentication";
+      description
+        "Provide the password for authentication";
+      type string {
+        tailf:info "WORD;;Provide the password for authentication";
+      }
+    }
+  }
+
+  grouping utd-engine-standard-grouping {
+    container logging {
+      tailf:info "Provide config options for logging the alerts";
+      description
+        "Provide config options for logging the alerts";
+      container server {
+        tailf:info "Log the alerts to a server";
+        description
+          "Log the alerts to a server";
+        tailf:cli-sequence-commands;
+        tailf:cli-compact-syntax;
+        leaf name {
+          tailf:cli-drop-node-name;
+          type string {
+            tailf:info "WORD;;Provide the URL/IP address of the server";
+          }
+        }
+        leaf level {
+          tailf:info "Provide the log level";
+          description
+            "Provide the log level";
+          tailf:cli-break-sequence-commands;
+          tailf:cli-full-command;
+          type syslog-level-type;
+        }
+        leaf syslog {
+          tailf:info "Log the alerts to IOS syslogs";
+          description
+            "Log the alerts to IOS syslogs";
+          type empty;
+        }
+      }
+      container syslog {
+        tailf:info "Log the alerts to IOS syslogs";
+        description
+          "Log the alerts to IOS syslogs";
+        presence "true";
+        leaf level {
+          tailf:info "Provide the log level";
+          description
+            "Provide the log level";
+          tailf:cli-full-command;
+          type syslog-level-type;
+        }
+      }
+    }
+    leaf policy {
+      tailf:info "Provide the policy option (default=balanced)";
+      description
+        "Provide the policy option (default=balanced)";
+      type enumeration {
+        enum "balanced" {
+          tailf:info "Set the policy to balanced (this is the default option)";
+        }
+        enum "connectivity" {
+          tailf:info "Set the policy to connectivity (stresses on connectivity over security)";
+        }
+        enum "security" {
+          tailf:info "Set the policy to security (provide mode exhaustive coverage)";
+        }
+      }
+    }
+    container signature {
+      tailf:info "Provide config options for the signatures";
+      description
+        "Provide config options for the signatures";
+      container update {
+        tailf:info "Provide config options for the signature updates";
+        description
+          "Provide config options for the signature updates";
+        container occur-at {
+          tailf:info "Specify update occurence by calendar time";
+          description
+            "Specify update occurence by calendar time";
+          container daily {
+            tailf:info "Option for daily update";
+            description
+              "Option for daily update";
+            tailf:cli-sequence-commands;
+            tailf:cli-compact-syntax;
+            uses hour-minute-grouping;
+          }
+          container monthly {
+            tailf:info "Option for monthly update";
+            description
+              "Option for monthly update";
+            tailf:cli-sequence-commands;
+            tailf:cli-compact-syntax;
+            leaf days {
+              tailf:cli-drop-node-name;
+              type string {
+                tailf:info "WORD;;Days of the month from 1-31, examples: 1,10,20,30 or 1-11";
+              }
+            }
+            uses hour-minute-grouping;
+          }
+          container weekly {
+            tailf:info "Option for weekly update";
+            description
+              "Option for weekly update";
+            leaf days {
+              tailf:cli-drop-node-name;
+              type string {
+                tailf:info "WORD;;Days of the week from 0-6, Sunday=0, examples: 0-2 or 1,3,5";
+              }
+            }
+            uses hour-minute-grouping;
+          }
+        }
+        container server {
+          tailf:info "Provide config options for the signature update server";
+          description
+            "Provide config options for the signature update server";
+          container cisco {
+            tailf:info "Use Cisco site to provide updates";
+            description
+              "Use Cisco site to provide updates";
+            tailf:cli-sequence-commands;
+            tailf:cli-compact-syntax;
+            uses username-password-grouping;
+          }
+          container url {
+            tailf:info "Enter the complete URL for the path to the update server";
+            description
+              "Enter the complete URL for the path to the update server";
+            choice url-uname-passwd {
+              case all-case {
+                container all {
+                  tailf:cli-drop-node-name;
+                  tailf:cli-sequence-commands;
+                  tailf:cli-compact-syntax;
+                  leaf name {
+                    tailf:cli-drop-node-name;
+                    type string {
+                      tailf:info "WORD;;URL for update location(http/https). Example: http://1.2.3.4/path/";
+                    }
+                  }
+                  uses username-password-grouping;
+                }
+              }
+              case name-only {
+                leaf name {
+                  tailf:cli-drop-node-name;
+                  type string {
+                    tailf:info "WORD;;URL for update location(http/https). Example: http://1.2.3.4/path/";
+                  }
+                }
+              }
+            }
+          }
+        }
+      }
+    }
+    leaf threat {
+      tailf:info "Provide the threat detection/protection option (default=detection)";
+      description
+        "Provide the threat detection/protection option (default=detection)";
+      tailf:cli-full-command;
+      type enumeration {
+        enum "detection" {
+          tailf:info "Provide threat detection";
+        }
+        enum "protection" {
+          tailf:info "Provide threat protection";
+        }
+      }
+    }
+    leaf whitelist {
+      tailf:info "Enable whitelisting under the utd engine";
+      description
+        "Enable whitelisting under the utd engine";
+      tailf:cli-full-command;
+      type empty;
+    }
+  }
+
+  grouping pseudowire-grouping {
+    leaf encapsulation {
+      tailf:info "Data encapsulation method";
+      description
+        "Data encapsulation method";
+      type enumeration {
+        enum "l2tpv2" {
+          tailf:info "Use L2TPv2 encapsulation";
+        }
+        enum "l2tpv3" {
+          tailf:info "Use L2TPv3 encapsulation";
+        }
+        enum "mpls" {
+          tailf:info "Use MPLS encapsulation";
+        }
+        enum "udp" {
+          tailf:info "Use UDP encapsulation";
+        }
+      }
+    }
+    container ip {
+      tailf:info "Specify IP parameters";
+      description
+        "Specify IP parameters";
+      when "../encapsulation = 'l2tpv2' or ../encapsulation = 'l2tpv3'";
+      container dfbit {
+        tailf:info "DF bit options for tunnel";
+        description
+          "DF bit options for tunnel";
+        leaf set {
+          tailf:info "Set the DF bit in the tunnel header";
+          description
+            "Set the DF bit in the tunnel header";
+          tailf:cli-full-command;
+          type empty;
+        }
+      }
+      container local {
+        tailf:info "Specify local information";
+        description
+          "Specify local information";
+        container interface {
+          tailf:info "Source interface for pseudowire";
+          description
+            "Source interface for pseudowire";
+          uses interface-grouping;
+        }
+      }
+      container pmtu {
+        tailf:info "Enable Path MTU for tunnel";
+        description
+          "Enable Path MTU for tunnel";
+        presence "true";
+        leaf max {
+          tailf:info "Maximum Path MTU for session";
+          description
+            "Maximum Path MTU for session";
+          type uint16 {
+            tailf:info "<68-65535>;;Maximum Path MTU";
+            range "68..65535";
+          }
+        }
+      }
+      leaf protocol {
+        tailf:info "Specific IP protocol number to use";
+        description
+          "Specific IP protocol number to use";
+        when "../../encapsulation = 'l2tpv3'";
+        type enumeration {
+          enum "l2tp" {
+            tailf:info "L2TP over IP (protocol 115)";
+          }
+          enum "uti" {
+            tailf:info "Legacy UTI mode (protocol 120)";
+          }
+        }
+      }
+      container tos {
+        tailf:info "Specify ToS options for IP tunnel header";
+        description
+          "Specify ToS options for IP tunnel header";
+        leaf reflect {
+          tailf:info "Reflect IP payload ToS on tunnel";
+          description
+            "Reflect IP payload ToS on tunnel";
+          tailf:cli-full-command;
+          type empty;
+        }
+        leaf value {
+          tailf:info "IP ToS value";
+          description
+            "IP ToS value";
+          type uint8 {
+            tailf:info "<0-255>;;ToS byte value";
+          }
+        }
+      }
+      leaf ttl {
+        tailf:info "Specify TTL value for IP tunnel header";
+        description
+          "Specify TTL value for IP tunnel header";
+        type uint8 {
+          tailf:info "<1-255>;;TTL value";
+        }
+      }
+    }
+    leaf control-word {
+      tailf:info "Include control-word in pseudowire packets";
+      description
+        "Include control-word in pseudowire packets";
+      tailf:cli-show-no;
+      when "../encapsulation = 'mpls'";
+      tailf:cli-full-command;
+      type empty;
+    }
+    leaf interworking {
+      tailf:info "Interworking options for pseudowire";
+      description
+        "Interworking options for pseudowire";
+      type enumeration {
+        enum "ethernet" {
+          tailf:info "Ethernet interworking";
+        }
+        enum "ip" {
+          tailf:info "IP interworking";
+        }
+        enum "vlan" {
+          tailf:info "VLAN interworking";
+        }
+      }
+    }
+    container load-balance {
+      tailf:info "Loadbalancing for pseudowire";
+      description
+        "Loadbalancing for pseudowire";
+      when "../encapsulation = 'mpls'";
+      container flow {
+        tailf:info "Enable flow based load balancing for pseudowire";
+        description
+          "Enable flow based load balancing for pseudowire";
+        presence "true";
+        leaf ethernet {
+          tailf:info "Ethernet pseudowire flow classification";
+          description
+            "Ethernet pseudowire flow classification";
+          tailf:cli-full-command;
+          type enumeration {
+            enum "dst-mac" {
+              tailf:info "Destination mac address";
+            }
+            enum "src-dst-mac" {
+              tailf:info "Source and destination mac address";
+            }
+            enum "src-mac" {
+              tailf:info "Source mac address";
+            }
+          }
+        }
+      }
+    }
+    container monitor {
+      tailf:info "Active monitoring of xconnect peer";
+      description
+        "Active monitoring of xconnect peer";
+      when "../encapsulation = 'mpls'";
+      container peer {
+        tailf:info "Active monitoring of xconnect peer";
+        description
+          "Active monitoring of xconnect peer";
+        container bfd {
+          tailf:info "BFD active monitoring for the xconnect peer";
+          description
+            "BFD active monitoring for the xconnect peer";
+          presence "true";
+          container local {
+            tailf:info "Specify local endpoint information to map to a BFD session";
+            description
+              "Specify local endpoint information to map to a BFD session";
+            container interface {
+              tailf:info "Source interface for pseudowire";
+              description
+                "Source interface for pseudowire";
+              uses interface-grouping;
+            }
+          }
+        }
+      }
+    }
+    container preferred-path {
+      tailf:info "Preferred path";
+      description
+        "Preferred path";
+      container interface {
+        tailf:info "Output Interface";
+        description
+          "Output Interface";
+        tailf:cli-sequence-commands;
+        tailf:cli-compact-syntax;
+        choice Tunnel-Tunnel-tp {
+          case Tunnel-case {
+            leaf Tunnel {
+              tailf:info "Tunnel interface";
+              description
+                "Tunnel interface";
+              tailf:cli-allow-join-with-value {
+                tailf:cli-display-joined;
+              }
+              type uint64 {
+                tailf:info "<0-2147483647>;;Tunnel interface number";
+                range "0..2147483647";
+              }
+            }
+          }
+          case Tunnel-tp-case {
+            leaf Tunnel-tp {
+              tailf:info "MPLS Transport Profile interface";
+              description
+                "MPLS Transport Profile interface";
+              tailf:cli-allow-join-with-value {
+                tailf:cli-display-joined;
+              }
+              type uint16 {
+                tailf:info "<0-65535>;;Tunnel-tp interface number";
+              }
+            }
+          }
+        }
+        leaf disable-fallback {
+          tailf:info "disable fall back to alternative route";
+          description
+            "disable fall back to alternative route";
+          tailf:cli-optional-in-sequence;
+          type empty;
+        }
+      }
+      container peer-container {
+        tailf:cli-drop-node-name;
+        tailf:cli-sequence-commands;
+        tailf:cli-compact-syntax;
+        leaf peer {
+          tailf:info "Peer Address";
+          description
+            "Peer Address";
+          type union {
+            type string;
+            type inet:ipv4-address {
+              tailf:info "Hostname or A.B.C.D;;IP address or host name of Peer PE";
+            }
+          }
+        }
+        leaf disable-fallback {
+          tailf:info "disable fall back to alternative route";
+          description
+            "disable fall back to alternative route";
+          tailf:cli-optional-in-sequence;
+          type empty;
+        }
+      }
+    }
+    container protocol-mpls {
+      tailf:cli-drop-node-name;
+      when "../encapsulation = 'mpls'";
+      leaf protocol {
+        tailf:info "Signaling protocol to use";
+        description
+          "Signaling protocol to use";
+        type enumeration {
+          enum "ldp" {
+            tailf:info "Use LDP signaling";
+          }
+          enum "none" {
+            tailf:info "No signaling, use manually configured sessions";
+          }
+        }
+      }
+    }
+    container protocol-l2tpv2 {
+      tailf:cli-drop-node-name;
+      when "../encapsulation = 'l2tpv2'";
+      leaf protocol {
+        tailf:info "Signaling protocol to use";
+        description
+          "Signaling protocol to use";
+        type enumeration {
+          enum "l2tpv2" {
+            tailf:info "Use L2TPv2 signaling";
+          }
+          enum "none" {
+            tailf:info "No signaling, use manually configured sessions";
+          }
+        }
+      }
+    }
+    container protocol-l2tpv3 {
+      tailf:cli-drop-node-name;
+      when "../encapsulation = 'l2tpv3'";
+      leaf protocol {
+        tailf:info "Signaling protocol to use";
+        description
+          "Signaling protocol to use";
+        type enumeration {
+          enum "l2tpv3" {
+            tailf:info "Use L2TPv3 signaling";
+          }
+          enum "l2tpv3ietf" {
+            tailf:info "Use L2TPv3 ietf signaling";
+          }
+          enum "none" {
+            tailf:info "No signaling, use manually configured sessions";
+          }
+        }
+      }
+    }
+    leaf sequencing {
+      tailf:info "Sequencing options for pseudowire";
+      description
+        "Sequencing options for pseudowire";
+      when "../encapsulation = 'mpls' or ../encapsulation = 'l2tpv3'";
+      type enumeration {
+        enum "both" {
+          tailf:info "Transmit and receive sequence numbers";
+        }
+        enum "receive" {
+          tailf:info "Receive sequence numbers";
+        }
+        enum "resync" {
+          tailf:info "Enable Rx sequencing out-of-order detection/recovery";
+        }
+        enum "transmit" {
+          tailf:info "Transmit sequence numbers";
+        }
+      }
+    }
+    container status {
+      tailf:info "Pseudowire status capabilities";
+      description
+        "Pseudowire status capabilities";
+      presence "true";
+      container admin-down {
+        tailf:info "Admin down of Attachment Circuit";
+        description
+          "Admin down of Attachment Circuit";
+        when "../../encapsulation = 'l2tpv2' or ../../encapsulation = 'l2tpv3'";
+        leaf disconnect {
+          tailf:info "Disconnect the session";
+          description
+            "Disconnect the session";
+          type empty;
+        }
+      }
+      container control-plane {
+        tailf:info "control plane status events";
+        description
+          "control plane status events";
+        leaf route-watch {
+          tailf:info "listen on the control plane to route-watch events";
+          description
+            "listen on the control plane to route-watch events";
+          type empty;
+        }
+      }
+      leaf decoupled {
+        tailf:info "Reflect standby status of the attachment circuit as up on the pseudowire";
+        description
+          "Reflect standby status of the attachment circuit as up on the pseudowire";
+        type empty;
+      }
+      container peer {
+        tailf:info "peer status configuration";
+        description
+          "peer status configuration";
+        container topology {
+          tailf:info "change status behaviour based on peer topology";
+          description
+            "change status behaviour based on peer topology";
+          leaf dual-homed {
+            tailf:info "Our peer(s) are participating in a redundant solution with some form of redundancyprotocol running between the peer routers, Only one of the remote peers will advertise astatus of UP at a time. The other will advertise standby. Change our configuration so wecan send a status of UP on both active and redundant pseudowires";
+            description
+              "Our peer(s) are participating in a redundant solution with some form of redundancyprotocol running between the peer routers, Only one of the remote peers will advertise astatus of UP at a time. The other will advertise standby. Change our configuration so wecan send a status of UP on both active and redundant pseudowires";
+            type empty;
+          }
+        }
+      }
+      container redundancy {
+        tailf:info "Xconnect redundancy configuration";
+        description
+          "Xconnect redundancy configuration";
+        leaf master {
+          tailf:info "Put the xconnect redundancy group on this node in master mode";
+          description
+            "Put the xconnect redundancy group on this node in master mode";
+          type empty;
+        }
+      }
+    }
+    container switching {
+      tailf:info "Switching TLV on/off for pseudowire";
+      description
+        "Switching TLV on/off for pseudowire";
+      when "../encapsulation = 'mpls'";
+      leaf tlv {
+        tailf:info "Switching TLV on/off for pseudowire";
+        description
+          "Switching TLV on/off for pseudowire";
+        type empty;
+      }
+    }
+  }
+
+  grouping track-timer-grouping {
+    leaf seconds {
+      tailf:cli-drop-node-name;
+      tailf:cli-full-command;
+      type uint32 {
+        tailf:info "<1-3000>;;Time in seconds";
+        range "1..3000";
+      }
+    }
+    leaf ms {
+      tailf:info "Specify polling interval in milliseconds";
+      description
+        "Specify polling interval in milliseconds";
+      tailf:cli-full-command;
+      type uint32 {
+        tailf:info "<500-5000>;;Time in milliseconds";
+        range "500..5000";
+      }
+    }
+  }
+
+  grouping track-grouping {
+    container delay {
+      tailf:info "Tracking delay";
+      description
+        "Tracking delay";
+      tailf:cli-compact-syntax;
+      leaf down {
+        tailf:info "Delay down change notification";
+        description
+          "Delay down change notification";
+        type uint32 {
+          tailf:info "<0-180>;;Seconds to delay";
+          range "0..180";
+        }
+      }
+      leaf up {
+        tailf:info "Delay up change notification";
+        description
+          "Delay up change notification";
+        type uint32 {
+          tailf:info "<0-180>;;Seconds to delay";
+          range "0..180";
+        }
+      }
+    }
+    leaf default-state {
+      tailf:info "default object state";
+      description
+        "default object state";
+      type enumeration {
+        enum "down" {
+          tailf:info "Track state DOWN";
+        }
+        enum "up" {
+          tailf:info "Track state UP";
+        }
+      }
+    }
+    list object {
+      tailf:info "Add a tracked object to list";
+      description
+        "Add a tracked object to list";
+      tailf:cli-suppress-mode;
+      tailf:cli-sequence-commands;
+      tailf:cli-compact-syntax;
+      key "number";
+      leaf number {
+        type uint32 {
+          tailf:info "<1-1000>;;Tracked object number";
+          range "1..1000";
+        }
+      }
+      leaf not {
+        tailf:info "Negate the state of object";
+        description
+          "Negate the state of object";
+        tailf:cli-optional-in-sequence;
+        type empty;
+      }
+    }
+  }
+
+  grouping default-track-grouping {
+    container delay {
+      tailf:info "Tracking delay";
+      description
+        "Tracking delay";
+      presence "true";
+    }
+    leaf default-state {
+      tailf:info "default object state";
+      description
+        "default object state";
+      type enumeration {
+        enum "down" {
+          tailf:info "Track state DOWN";
+        }
+        enum "up" {
+          tailf:info "Track state UP";
+        }
+      }
+    }
+  }
+
+  grouping ip-wccp-group-address-grouping {
+    leaf group-address {
+      tailf:info "Set the multicast group";
+      description
+        "Set the multicast group";
+      type inet:ipv4-address {
+        tailf:info "A.B.C.D;;IPv4 group address";
+      }
+    }
+    leaf group-list {
+      tailf:info "Set the access-list used to permit group membership";
+      description
+        "Set the access-list used to permit group membership";
+      type exp-acl-type;
+    }
+    leaf mode {
+      tailf:info "Set the service mode";
+      description
+        "Set the service mode";
+      type enumeration {
+        enum "closed" {
+          tailf:info "Closed service";
+        }
+        enum "open" {
+          tailf:info "Open service";
+        }
+      }
+    }
+    container password {
+      tailf:info "Set the authentication password";
+      description
+        "Set the authentication password";
+      tailf:cli-flatten-container;
+      leaf encryption {
+        tailf:cli-drop-node-name;
+        type enumeration {
+          enum "0" {
+            tailf:info "Specifies an UNENCRYPTED key will follow";
+          }
+          enum "7" {
+            tailf:info "Specifies HIDDEN key will follow";
+          }
+        }
+      }
+      leaf clear-key {
+        tailf:cli-drop-node-name;
+        tailf:cli-full-command;
+        type string {
+          tailf:info "WORD;;The UNENCRYPTED (cleartext) shared key";
+        }
+      }
+    }
+    leaf redirect-list {
+      tailf:info "Set the access-list used to permit redirection";
+      description
+        "Set the access-list used to permit redirection";
+      type exp-acl-type;
+    }
+    leaf snmp-disabled {
+      tailf:info "Disable SNMP for WCCP GRE Tunnel";
+      description
+        "Disable SNMP for WCCP GRE Tunnel";
+      type empty;
+    }
+  }
+
+  grouping ip-wccp-grouping {
+    list wccp-list {
+      tailf:cli-drop-node-name;
+      tailf:cli-suppress-mode;
+      tailf:cli-compact-syntax;
+      key "id";
+      leaf id {
+        type uint8 {
+          tailf:info "<0-254>;;Dynamically defined service identifier number";
+          range "0..254";
+        }
+      }
+      uses ip-wccp-group-address-grouping;
+    }
+    leaf source-interface {
+      tailf:info "Set source interface for Router ID";
+      description
+        "Set source interface for Router ID";
+      type string;
+    }
+    container web-cache {
+      tailf:info "Standard web caching service";
+      description
+        "Standard web caching service";
+      uses ip-wccp-group-address-grouping;
+    }
+  }
+
+  grouping ip-msdp-grouping {
+    leaf cache-rejected-sa {
+      tailf:info "Store rejected SAs from all peers";
+      description
+        "Store rejected SAs from all peers";
+      tailf:cli-full-command;
+      type uint32 {
+        tailf:info "<1-32766>;;Number of rejected SA entries to cache";
+        range "1..32766";
+      }
+    }
+    leaf cache-sa-state {
+      tailf:info "Configure this system to cache SA state";
+      description
+        "Configure this system to cache SA state";
+      tailf:cli-full-command;
+      type empty;
+    }
+    container default-peer {
+      tailf:info "Default MSDP peer to accept SA messages from";
+      description
+        "Default MSDP peer to accept SA messages from";
+      tailf:cli-compact-syntax;
+      tailf:cli-sequence-commands;
+      leaf name-addr {
+        tailf:cli-drop-node-name;
+        type union {
+          type string;
+          type inet:ipv4-address {
+            tailf:info "Hostname or A.B.C.D;;Default peer name or address";
+          }
+        }
+      }
+      leaf prefix-list {
+        tailf:info "Prefix list";
+        description
+          "Prefix list";
+        tailf:cli-optional-in-sequence;
+        type string {
+          tailf:info "WORD;;Prefix list name";
+        }
+      }
+    }
+    container description {
+      tailf:info "Peer specific description";
+      description
+        "Peer specific description";
+      tailf:cli-compact-syntax;
+      tailf:cli-sequence-commands;
+      leaf name-addr {
+        tailf:cli-drop-node-name;
+        type union {
+          type string;
+          type inet:ipv4-address {
+            tailf:info "Hostname or A.B.C.D;;Peer name or address";
+          }
+        }
+      }
+      leaf description {
+        tailf:cli-drop-node-name;
+        tailf:cli-multi-value;
+        type string {
+          tailf:info "LINE;;Up to 80 characters describing this peer";
+        }
+      }
+    }
+    container filter-sa-request {
+      tailf:info "Filter SA-Requests from peer";
+      description
+        "Filter SA-Requests from peer";
+      tailf:cli-compact-syntax;
+      tailf:cli-sequence-commands;
+      leaf name-addr {
+        tailf:cli-drop-node-name;
+        type union {
+          type string;
+          type inet:ipv4-address {
+            tailf:info "Hostname or A.B.C.D;;Peer name or address";
+          }
+        }
+      }
+      leaf list {
+        tailf:info "Access-list";
+        description
+          "Access-list";
+        tailf:cli-optional-in-sequence;
+        type std-acl-type;
+      }
+    }
+    container keepalive {
+      tailf:info "Configure keepalive parameters for a peer";
+      description
+        "Configure keepalive parameters for a peer";
+      tailf:cli-compact-syntax;
+      tailf:cli-sequence-commands;
+      leaf name-addr {
+        tailf:cli-drop-node-name;
+        type union {
+          type string;
+          type inet:ipv4-address {
+            tailf:info "Hostname or A.B.C.D;;Peer name or address";
+          }
+        }
+      }
+      leaf keepalive {
+        tailf:cli-drop-node-name;
+        description
+          "Send keepalive period in seconds";
+        type uint8 {
+          tailf:info "<1-60>;;Send keepalive period in seconds";
+          range "1..60";
+        }
+      }
+      leaf max-wait {
+        tailf:cli-drop-node-name;
+        description
+          "Maximum time in seconds to wait for a message";
+        type uint8 {
+          tailf:info "<1-75>;;Maximum time in seconds to wait for a message";
+          range "1..75";
+        }
+      }
+    }
+    container mesh-group {
+      tailf:info "Configure an MSDP mesh-group";
+      description
+        "Configure an MSDP mesh-group";
+      tailf:cli-compact-syntax;
+      tailf:cli-sequence-commands;
+      leaf name {
+        tailf:cli-drop-node-name;
+        type string {
+          tailf:info "WORD;;Name of mesh-group";
+        }
+      }
+      leaf addr {
+        tailf:cli-drop-node-name;
+        type union {
+          type string;
+          type inet:ipv4-address {
+            tailf:info "Hostname or A.B.C.D;;Peer name or address";
+          }
+        }
+      }
+    }
+    leaf originator-id {
+      tailf:info "Configure MSDP Originator ID";
+      description
+        "Configure MSDP Originator ID";
+      tailf:cli-full-command;
+      type string;
+    }
+    container password {
+      tailf:info "Configure an MSDP password";
+      description
+        "Configure an MSDP password";
+      container peer {
+        tailf:info "MSDP peer on which the password is to be set";
+        description
+          "MSDP peer on which the password is to be set";
+        tailf:cli-compact-syntax;
+        tailf:cli-sequence-commands;
+        leaf addr {
+          tailf:cli-drop-node-name;
+          type union {
+            type string;
+            type inet:ipv4-address {
+              tailf:info "Hostname or A.B.C.D;;Peer name or address";
+            }
+          }
+        }
+        leaf encryption {
+          tailf:cli-drop-node-name;
+          tailf:cli-break-sequence-commands;
+          type uint8 {
+            tailf:info "<0-7>;;Encryption type (0 to disable encryption, 7 for proprietary)";
+          }
+        }
+        leaf password {
+          tailf:cli-drop-node-name;
+          tailf:cli-multi-value;
+          type string {
+            tailf:info "LINE;;The password";
+          }
+        }
+      }
+    }
+    container peer {
+      tailf:info "Configure an MSDP peer";
+      description
+        "Configure an MSDP peer";
+      tailf:cli-compact-syntax;
+      tailf:cli-sequence-commands;
+      leaf addr {
+        tailf:cli-drop-node-name;
+        type union {
+          type string;
+          type inet:ipv4-address {
+            tailf:info "Hostname or A.B.C.D;;Peer name or address";
+          }
+        }
+      }
+      leaf connect-source {
+        tailf:info "Configure source address used for MSDP connection";
+        description
+          "Configure source address used for MSDP connection";
+        tailf:cli-break-sequence-commands;
+        type string;
+      }
+      leaf remote-as {
+        tailf:info "Configured AS number";
+        description
+          "Configured AS number";
+        type uint16 {
+          tailf:info "<1-65535>;;Autonomous System Number";
+        }
+      }
+    }
+    container redistribute {
+      tailf:info "Inject multicast route entries into MSDP";
+      description
+        "Inject multicast route entries into MSDP";
+      tailf:cli-compact-syntax;
+      leaf asn {
+        tailf:info "AS access-list";
+        description
+          "AS access-list";
+        type uint16 {
+          tailf:info "<0-0>;;Allow all ASes<1-500>;;AS path access list number";
+        }
+      }
+      leaf list {
+        tailf:info "Access-list";
+        description
+          "Access-list";
+        type ext-acl-type;
+      }
+      leaf route-map {
+        tailf:info "Route-map";
+        description
+          "Route-map";
+        type string {
+          tailf:info "WORD;;Route-map reference";
+        }
+      }
+    }
+    leaf rpf {
+      tailf:info "MSDP rpf";
+      description
+        "MSDP rpf";
+      type enumeration {
+        enum "rfc3618" {
+          tailf:info "Configure MSDP rfc 3618 RPF rules";
+        }
+      }
+    }
+    container sa-filter {
+      tailf:info "Filter SA messages from peer";
+      description
+        "Filter SA messages from peer";
+      container in {
+        tailf:info "Enable incoming SA filtering";
+        description
+          "Enable incoming SA filtering";
+        tailf:cli-sequence-commands;
+        tailf:cli-compact-syntax;
+        leaf addr {
+          tailf:cli-drop-node-name;
+          type union {
+            type string;
+            type inet:ipv4-address {
+              tailf:info "Hostname or A.B.C.D;;Peer name or address";
+            }
+          }
+        }
+        leaf list {
+          tailf:info "Access list";
+          description
+            "Access list";
+          tailf:cli-break-sequence-commands;
+          type ext-acl-type;
+        }
+        leaf route-map {
+          tailf:info "Route map";
+          description
+            "Route map";
+          type string {
+            tailf:info "WORD;;Route-map reference";
+          }
+        }
+        leaf rp-list {
+          tailf:info "Access-list for originating RP";
+          description
+            "Access-list for originating RP";
+          tailf:cli-full-command;
+          type union {
+            type uint16 {
+              tailf:info "<1-99>;;Access list (standard range)";
+              range "1..99";
+            }
+            type string {
+              tailf:info "WORD;;IP Named Standard Access list";
+            }
+          }
+        }
+        leaf rp-route-map {
+          tailf:info "Route map for originating RP";
+          description
+            "Route map for originating RP";
+          tailf:cli-full-command;
+          type string {
+            tailf:info "WORD;;Route-map reference";
+          }
+        }
+      }
+      container out {
+        tailf:info "Enable outgoing SA filtering";
+        description
+          "Enable outgoing SA filtering";
+        tailf:cli-sequence-commands;
+        tailf:cli-compact-syntax;
+        leaf addr {
+          tailf:cli-drop-node-name;
+          type union {
+            type string;
+            type inet:ipv4-address {
+              tailf:info "Hostname or A.B.C.D;;Peer name or address";
+            }
+          }
+        }
+        leaf list {
+          tailf:info "Access list";
+          description
+            "Access list";
+          tailf:cli-break-sequence-commands;
+          type ext-acl-type;
+        }
+        leaf route-map {
+          tailf:info "Route map";
+          description
+            "Route map";
+          type string {
+            tailf:info "WORD;;Route-map reference";
+          }
+        }
+        leaf rp-list {
+          tailf:info "Access-list for originating RP";
+          description
+            "Access-list for originating RP";
+          tailf:cli-full-command;
+          type union {
+            type uint16 {
+              tailf:info "<1-99>;;Access list (standard range)";
+              range "1..99";
+            }
+            type string {
+              tailf:info "WORD;;IP Named Standard Access list";
+            }
+          }
+        }
+        leaf rp-route-map {
+          tailf:info "Route map for originating RP";
+          description
+            "Route map for originating RP";
+          tailf:cli-full-command;
+          type string {
+            tailf:info "WORD;;Route-map reference";
+          }
+        }
+      }
+    }
+    container sa-limit {
+      tailf:info "Configure SA limit for a peer";
+      description
+        "Configure SA limit for a peer";
+      tailf:cli-compact-syntax;
+      tailf:cli-sequence-commands;
+      leaf name-addr {
+        tailf:cli-drop-node-name;
+        type union {
+          type string;
+          type inet:ipv4-address {
+            tailf:info "Hostname or A.B.C.D;;Peer name or address";
+          }
+        }
+      }
+      leaf limit {
+        tailf:cli-drop-node-name;
+        description
+          "Limit of SAs";
+        type uint32 {
+          tailf:info "<1-2147483646>;;Limit of SAs";
+          range "1..2147483646";
+        }
+      }
+    }
+    container shutdown {
+      tailf:info "Administratively shutdown MSDP peer";
+      description
+        "Administratively shutdown MSDP peer";
+      leaf name-addr {
+        tailf:cli-drop-node-name;
+        type union {
+          type string;
+          type inet:ipv4-address {
+            tailf:info "Hostname or A.B.C.D;;Peer name or address";
+          }
+        }
+      }
+    }
+    leaf timer {
+      tailf:info "MSDP timer";
+      description
+        "MSDP timer";
+      tailf:cli-full-command;
+      type uint8 {
+        tailf:info "<1-60>;;Connection retry period";
+        range "1..60";
+      }
+    }
+    container ttl-threshold {
+      tailf:info "Configure TTL Threshold for MSDP Peer";
+      description
+        "Configure TTL Threshold for MSDP Peer";
+      tailf:cli-compact-syntax;
+      tailf:cli-sequence-commands;
+      leaf name-addr {
+        tailf:cli-drop-node-name;
+        type union {
+          type string;
+          type inet:ipv4-address {
+            tailf:info "Hostname or A.B.C.D;;Peer name or address";
+          }
+        }
+      }
+      leaf threshold {
+        tailf:cli-drop-node-name;
+        description
+          "TTL Threshold Value";
+        type uint8 {
+          tailf:info "<0-255>;;TTL Threshold Value";
+        }
+      }
+    }
+  }
+
+  grouping router-lisp-ip-route-import-map-cache-grouping {
+    leaf route-map {
+      tailf:info "Route map for route selection filtering";
+      description
+        "Route map for route selection filtering";
+      type string {
+        tailf:info "WORD;;Route map name";
+      }
+    }
+  }
+
+  grouping router-lisp-ip-route-import-database-grouping {
+    leaf route-map {
+      tailf:info "Route map for route selection filtering";
+      description
+        "Route map for route selection filtering";
+      tailf:cli-incomplete-command;
+      type string {
+        tailf:info "WORD;;Route map name";
+      }
+    }
+    leaf locator-set {
+      tailf:info "Locator set to use with created database mapping entries";
+      description
+        "Locator set to use with created database mapping entries";
+      tailf:cli-full-command;
+      type string {
+        tailf:info "WORD;;Existing locator set name";
+      }
+    }
+  }
+
+  grouping router-lisp-ddt-authoritative-grouping {
+    container delegate {
+      tailf:info "DDT delegation to a child DDT node or map-server";
+      description
+        "DDT delegation to a child DDT node or map-server";
+      tailf:cli-sequence-commands;
+      tailf:cli-compact-syntax;
+      choice instance-id-eid-prefix-choice {
+        case eid-prefix-case {
+          leaf eid-prefix {
+            tailf:cli-drop-node-name;
+            type union {
+              type inet:ipv4-prefix {
+                tailf:info "A.B.C.D/nn;;IPv4 EID prefix";
+              }
+              type inet:ipv6-prefix {
+                tailf:info "X:X:X:X::X/<0-128>;;IPv6 EID prefix";
+              }
+            }
+          }
+        }
+        case instance-id-case {
+          leaf instance-id {
+            tailf:info "EID instance-ID";
+            description
+              "EID instance-ID";
+            type string {
+              tailf:info "*, instance-id, range;;Entire instance-ID range,id,range";
+            }
+          }
+        }
+      }
+      leaf to {
+        tailf:info "DDT delegation to a child DDT node or map-server";
+        description
+          "DDT delegation to a child DDT node or map-server";
+        type empty;
+      }
+      leaf ip-address {
+        tailf:cli-drop-node-name;
+        description
+          "IPv4/6 Child or map-server node locator address";
+        type union {
+          type inet:ipv4-address {
+            tailf:info "A.B.C.D;;IPv4 Child or map-server node locator address";
+          }
+          type inet:ipv6-address {
+            tailf:info "X:X:X:X::X;;IPv6 Child or map-server node locator address";
+          }
+        }
+      }
+      leaf map-server {
+        tailf:info "Delegation points to a map-server";
+        description
+          "Delegation points to a map-server";
+        tailf:cli-optional-in-sequence;
+        type empty;
+      }
+    }
+    leaf map-server-peer {
+      tailf:info "Peer map-servers that are authoritative for the same EID prefixes";
+      description
+        "Peer map-servers that are authoritative for the same EID prefixes";
+      type union {
+        type inet:ipv4-address {
+          tailf:info "A.B.C.D;;IPv4 Peer map-server locator address";
+        }
+        type inet:ipv6-address {
+          tailf:info "X:X:X:X::X;;IPv6 Peer map-server locator address";
+        }
+      }
+    }
+  }
+
+  grouping router-lisp-ip-grouping {
+    leaf alt-vrf {
+      tailf:info "Activate LISP-ALT functionality in VRF";
+      description
+        "Activate LISP-ALT functionality in VRF";
+      tailf:cli-full-command;
+      type string {
+        tailf:info "WORD;;VRF name";
+      }
+    }
+    container database-mapping {
+      tailf:info "Address family specific local EID prefixes database configuration";
+      description
+        "Address family specific local EID prefixes database configuration";
+      container limit {
+        tailf:info "Configures the maximum size of local EID prefixes database";
+        description
+          "Configures the maximum size of local EID prefixes database";
+        tailf:cli-sequence-commands;
+        tailf:cli-compact-syntax;
+        leaf dynamic {
+          tailf:info "Configures the maximum size of dynamic local EID prefixes database";
+          description
+            "Configures the maximum size of dynamic local EID prefixes database";
+          type uint32 {
+            tailf:info "<1-5000>;;Maximum number of dynamic local EID prefixes database entries";
+          }
+        }
+        leaf warning-threshold {
+          tailf:info "Send warning message to syslog when the database-mapping dynamic sizereaches this percentage of the limit";
+          description
+            "Send warning message to syslog when the database-mapping dynamic sizereaches this percentage of the limit";
+          tailf:cli-optional-in-sequence;
+          type uint8 {
+            tailf:info "<0-100>;;Percentage of database-mapping-limit dynamic";
+          }
+        }
+      }
+    }
+    container distance {
+      tailf:info "Administrative distance for RIB route installation";
+      description
+        "Administrative distance for RIB route installation";
+      leaf alt {
+        tailf:info "LISP routes installed in the ALT table";
+        description
+          "LISP routes installed in the ALT table";
+        tailf:cli-full-command;
+        type uint8 {
+          tailf:info "<1-255>;;Administrative distance for RIB route installation";
+        }
+      }
+      leaf dyn-eid {
+        tailf:info "LISP installed routes of type dynamic-EID";
+        description
+          "LISP installed routes of type dynamic-EID";
+        tailf:cli-full-command;
+        type uint8 {
+          tailf:info "<1-255>;;Administrative distance for RIB route installation";
+        }
+      }
+      leaf site-registrations {
+        tailf:info "LISP installed routes of type site-registrations";
+        description
+          "LISP installed routes of type site-registrations";
+        tailf:cli-full-command;
+        type uint8 {
+          tailf:info "<1-255>;;Administrative distance for RIB route installation";
+        }
+      }
+    }
+    container etr {
+      tailf:info "Configures a LISP Egress Tunnel Router (ETR)";
+      description
+        "Configures a LISP Egress Tunnel Router (ETR)";
+      tailf:cli-display-separated;
+      presence "true";
+      list map-server {
+        tailf:info "Configures map server for ETR registration";
+        description
+          "Configures map server for ETR registration";
+        tailf:cli-suppress-mode;
+        key "ip-addr";
+        leaf ip-addr {
+          type union {
+            type inet:ipv4-address {
+              tailf:info "A.B.C.D;;IPv4 Address of map resolver";
+            }
+            type inet:ipv6-address {
+              tailf:info "X:X:X:X::X;;IPv6 Address of map resolver";
+            }
+          }
+        }
+        container key {
+          tailf:info "Authentication key used with map server";
+          description
+            "Authentication key used with map server";
+          tailf:cli-compact-syntax;
+          leaf key-0 {
+            tailf:alt-name "0";
+            tailf:info "Specifies an UNENCRYPTED password will follow";
+            description
+              "The UNENCRYPTED (cleartext) password";
+            type string;
+          }
+          leaf key-6 {
+            tailf:alt-name "6";
+            tailf:info "Specifies an ENCRYPTED password will follow";
+            description
+              "The ENCRYPTED password";
+            type string;
+          }
+          leaf key-7 {
+            tailf:alt-name "7";
+            tailf:info "Specifies a HIDDEN  password will follow";
+            description
+              "The HIDDEN password";
+            type string;
+          }
+          leaf pwd {
+            tailf:info "The UNENCRYPTED (cleartext) password";
+            description
+              "The UNENCRYPTED (cleartext) password";
+            tailf:cli-drop-node-name;
+            type string;
+          }
+        }
+        leaf proxy-reply {
+          tailf:info "Request Map-Server to send Map-Replies on behalf of site";
+          description
+            "Request Map-Server to send Map-Replies on behalf of site";
+          tailf:cli-full-command;
+          type empty;
+        }
+      }
+    }
+    container itr {
+      tailf:info "Configures a LISP Ingress Tunnel Router (ITR)";
+      description
+        "Configures a LISP Ingress Tunnel Router (ITR)";
+      tailf:cli-display-separated;
+      presence "true";
+      list map-resolver {
+        tailf:info "Configures map-resolver address for sending Map-Requests";
+        description
+          "Configures map-resolver address for sending Map-Requests";
+        tailf:cli-suppress-mode;
+        key "ip-addr";
+        leaf ip-addr {
+          type union {
+            type inet:ipv4-address {
+              tailf:info "A.B.C.D;;IPv4 Address of map resolver";
+            }
+            type inet:ipv6-address {
+              tailf:info "X:X:X:X::X;;IPv6 Address of map resolver";
+            }
+          }
+        }
+      }
+    }
+    container locator {
+      tailf:info "Locator related configuration";
+      description
+        "Locator related configuration";
+      tailf:display-when "../../../lisp or ../../../lisp-list";
+      container reachability {
+        tailf:info "Configuration realted to locator reachability";
+        description
+          "Configuration realted to locator reachability";
+        leaf exclude-default {
+          tailf:info "If a remote RLOC is reached via the default route, treat it as unreachable";
+          description
+            "If a remote RLOC is reached via the default route, treat it as unreachable";
+          type empty;
+        }
+      }
+    }
+    container map-cache {
+      tailf:info "Address family specific map cache configuration";
+      description
+        "Address family specific map cache configuration";
+      leaf site-registration {
+        tailf:info "Install map cache to map request for site registrations";
+        description
+          "Install map cache to map request for site registrations";
+        type empty;
+      }
+    }
+    container map-cache-limit {
+      tailf:info "Configures maximum size of map-cache";
+      description
+        "Configures maximum size of map-cache";
+      tailf:cli-sequence-commands;
+      tailf:cli-compact-syntax;
+      leaf max-map-cache-entries {
+        tailf:cli-drop-node-name;
+        type uint32 {
+          tailf:info "<0-100000>;;Maximum number of map-cache entries";
+          range "0..100000";
+        }
+      }
+      leaf reserve-list {
+        tailf:info "EID-prefixes guaranteed to be stored in map-cache";
+        description
+          "EID-prefixes guaranteed to be stored in map-cache";
+        tailf:cli-break-sequence-commands;
+        tailf:cli-full-command;
+        type string {
+          tailf:info "WORD;;Reference to prefix-list name";
+        }
+      }
+      leaf warning-threshold {
+        tailf:info "Send warning message to syslog when the map-cache size reaches this percentage of the limit";
+        description
+          "Send warning message to syslog when the map-cache size reaches this percentage of the limit";
+        type uint8 {
+          tailf:info "<0-100>;;Percentage of map-cache-limit";
+          range "0..100";
+        }
+      }
+    }
+    container map-cache-persistent {
+      tailf:info "Dump map-cache onto flash, making it persistent across reboots";
+      description
+        "Dump map-cache onto flash, making it persistent across reboots";
+      leaf interval {
+        tailf:info "Interval in minutes of how often the map-cache is saved";
+        description
+          "Interval in minutes of how often the map-cache is saved";
+        type uint16 {
+          tailf:info "<1-1440>;;Interval in minutes, default 0";
+          range "1..1440";
+        }
+      }
+    }
+    leaf map-request-source {
+      tailf:info "Configures inner header source address in Map-Request message";
+      description
+        "Configures inner header source address in Map-Request message";
+      type inet:ipv4-address {
+        tailf:info "A.B.C.D;;IPv4 Source address of inner header in Map-Request message";
+      }
+    }
+    container map-resolver {
+      tailf:info "Configures a LISP Map Resolver (MR)";
+      description
+        "Configures a LISP Map Resolver (MR)";
+      tailf:display-when "../../../lisp or ../../../lisp-list";
+      presence "true";
+      container map-request {
+        tailf:info "Map-Request processing options";
+        description
+          "Map-Request processing options";
+        container validate {
+          tailf:info "Validation options";
+          description
+            "Validation options";
+          container source {
+            tailf:info "Influence which source RLOCs map requests are accepted from";
+            description
+              "Influence which source RLOCs map requests are accepted from";
+            tailf:cli-compact-syntax;
+            leaf list {
+              tailf:info "Define allowed prefixes using an ip[v6] prefix list";
+              description
+                "Define allowed prefixes using an ip[v6] prefix list";
+              type empty;
+            }
+            leaf registered {
+              tailf:info "...from RLOCs that register EID-prefixes in the same IID on a co-located MapServer";
+              description
+                "...from RLOCs that register EID-prefixes in the same IID on a co-located MapServer";
+              type empty;
+            }
+            leaf ipv4 {
+              tailf:info "IPv4 prefixes";
+              description
+                "IPv4 prefixes";
+              tailf:display-when "../list";
+              type string {
+                tailf:info "WORD;;IPv4 prefix-list name";
+              }
+            }
+            leaf ipv6 {
+              tailf:info "IPv6 prefixes";
+              description
+                "IPv6 prefixes";
+              tailf:display-when "../list";
+              type string {
+                tailf:info "WORD;;IPv6 prefix-list name";
+              }
+            }
+          }
+        }
+      }
+    }
+    container map-server {
+      tailf:info "Configures a LISP Map Server (MS)";
+      description
+        "Configures a LISP Map Server (MS)";
+      tailf:display-when "../../../lisp or ../../../lisp-list";
+      presence "true";
+      container map-register {
+        tailf:info "Map-Register processing options";
+        description
+          "Map-Register processing options";
+        container validate {
+          tailf:info "Validation options";
+          description
+            "Validation options";
+          container source {
+            tailf:info "RLOC Source IP address";
+            description
+              "RLOC Source IP address";
+            leaf allowed-locator {
+              tailf:info "Against sites' allowed-locators policy";
+              description
+                "Against sites' allowed-locators policy";
+              type empty;
+            }
+          }
+        }
+      }
+    }
+    container path-mtu-discovery {
+      tailf:info "Path MTU discovery";
+      description
+        "Path MTU discovery";
+      tailf:cli-compact-syntax;
+      presence "true";
+      leaf max {
+        tailf:info "Upper bound on the path MTU accepted";
+        description
+          "Upper bound on the path MTU accepted";
+        tailf:cli-full-command;
+        type uint16 {
+          tailf:info "<68-65535>;;Upper bound on the path MTU accepted";
+          range "68..65535";
+        }
+      }
+      leaf min {
+        tailf:info "Lower bound on the path MTU accepted";
+        description
+          "Lower bound on the path MTU accepted";
+        type uint16 {
+          tailf:info "<68-65535>;;Lower bound on the path MTU accepted";
+          range "68..65535";
+        }
+      }
+    }
+    leaf proxy-etr {
+      tailf:info "Configures a LISP Proxy Engress Tunnel Router (PETR)";
+      description
+        "Configures a LISP Proxy Engress Tunnel Router (PETR)";
+      tailf:cli-full-command;
+      type empty;
+    }
+    leaf-list proxy-itr {
+      tailf:info "Configures a LISP Proxy Ingress Tunnel Router (PITR)";
+      description
+        "Configures a LISP Proxy Ingress Tunnel Router (PITR)";
+      tailf:cli-list-syntax;
+      type union {
+        type inet:ipv4-address {
+          tailf:info "A.B.C.D;;IPv4 address in ITR-RLOC field of map-request";
+        }
+        type inet:ipv6-address {
+          tailf:info "X:X:X:X::X;;IPv6 address in ITR-RLOC field of map-request";
+        }
+      }
+    }
+    container route-export {
+      tailf:info "Export routes into RIB from LISP";
+      description
+        "Export routes into RIB from LISP";
+      leaf site-registration {
+        tailf:info "Export LISP site registrations to RIB";
+        description
+          "Export LISP site registrations to RIB";
+        type empty;
+      }
+    }
+    container route-import {
+      tailf:info "Import RIB routes by a routing protocol into LISP";
+      description
+        "Import RIB routes by a routing protocol into LISP";
+      tailf:display-when "../../../../eid-table";
+      container database {
+        tailf:info "Use RIB routes to define local EID database entries";
+        description
+          "Use RIB routes to define local EID database entries";
+        list bgp {
+          tailf:info "Border Gateway Protocol (BGP)";
+          description
+            "Border Gateway Protocol (BGP)";
+          tailf:cli-suppress-mode;
+          tailf:cli-compact-syntax;
+          key "id";
+          leaf id {
+            type bgp-as-number-type;
+          }
+          uses router-lisp-ip-route-import-database-grouping;
+        }
+        container connected {
+          tailf:info "Connected";
+          description
+            "Connected";
+          tailf:cli-compact-syntax;
+          uses router-lisp-ip-route-import-database-grouping;
+        }
+        list eigrp {
+          tailf:info "Enhanced Interior Gateway Routing Protocol (EIGRP)";
+          description
+            "Enhanced Interior Gateway Routing Protocol (EIGRP)";
+          tailf:cli-suppress-mode;
+          tailf:cli-compact-syntax;
+          key "id";
+          leaf id {
+            type uint16 {
+              tailf:info "<1-65535>;;Autonomous system number";
+            }
+          }
+          uses router-lisp-ip-route-import-database-grouping;
+        }
+        list isis {
+          tailf:info "ISO IS-IS";
+          description
+            "ISO IS-IS";
+          tailf:cli-suppress-mode;
+          tailf:cli-compact-syntax;
+          key "id";
+          leaf id {
+            type string {
+              tailf:info "WORD;;Process name";
+            }
+          }
+          uses router-lisp-ip-route-import-database-grouping;
+        }
+        container maximum-prefix {
+          tailf:info "Maximum number of prefixes to pick up from the RIB";
+          description
+            "Maximum number of prefixes to pick up from the RIB";
+          tailf:cli-compact-syntax;
+          tailf:cli-sequence-commands;
+          leaf number {
+            tailf:cli-drop-node-name;
+            type int32 {
+              tailf:info "<1-4294967295>;;Maximum number of prefixes";
+            }
+          }
+          choice threshold-warning {
+            case warning-only-case {
+              leaf warning-only {
+                tailf:info "Only give a warning message and do not limit entries";
+                description
+                  "Only give a warning message and do not limit entries";
+                tailf:cli-optional-in-sequence;
+                type empty;
+              }
+            }
+            case threshold-case {
+              leaf threshold {
+                tailf:cli-drop-node-name;
+                tailf:cli-optional-in-sequence;
+                type uint8 {
+                  tailf:info "<1-100>;;Threshold value (%) at which to generate a warning message";
+                  range "1..100";
+                }
+              }
+            }
+            case threshold-warning-case {
+              leaf threshold1 {
+                tailf:cli-drop-node-name;
+                tailf:cli-optional-in-sequence;
+                type uint8 {
+                  tailf:info "<1-100>;;Threshold value (%) at which to generate a warning message";
+                  range "1..100";
+                }
+              }
+              leaf warning-only1 {
+                tailf:alt-name "warning-only";
+                tailf:info "Only give a warning message and do not limit entries";
+                description
+                  "Only give a warning message and do not limit entries";
+                tailf:cli-optional-in-sequence;
+                type empty;
+              }
+            }
+          }
+        }
+        list ospf {
+          tailf:info "Open Shortest Path First (OSPF)";
+          description
+            "Open Shortest Path First (OSPF)";
+          tailf:cli-suppress-mode;
+          tailf:cli-compact-syntax;
+          key "id";
+          leaf id {
+            type uint16 {
+              tailf:info "<1-65535>;;Process ID";
+            }
+          }
+          uses router-lisp-ip-route-import-database-grouping;
+        }
+        list ospfv3 {
+          tailf:info "OSPFv3";
+          description
+            "OSPFv3";
+          tailf:cli-suppress-mode;
+          tailf:cli-compact-syntax;
+          key "id";
+          leaf id {
+            type uint16 {
+              tailf:info "<1-65535>;;Process ID";
+            }
+          }
+          uses router-lisp-ip-route-import-database-grouping;
+        }
+        container rip {
+          tailf:info "Routing Information Protocol (RIP)";
+          description
+            "Routing Information Protocol (RIP)";
+          tailf:cli-compact-syntax;
+          uses router-lisp-ip-route-import-database-grouping;
+        }
+        container static {
+          tailf:info "Static routes";
+          description
+            "Static routes";
+          tailf:cli-compact-syntax;
+          uses router-lisp-ip-route-import-database-grouping;
+        }
+      }
+      container map-cache {
+        tailf:info "Use RIB routes to define EID address space in map-cache";
+        description
+          "Use RIB routes to define EID address space in map-cache";
+        list bgp {
+          tailf:info "Border Gateway Protocol (BGP)";
+          description
+            "Border Gateway Protocol (BGP)";
+          tailf:cli-suppress-mode;
+          key "id";
+          leaf id {
+            type bgp-as-number-type;
+          }
+          uses router-lisp-ip-route-import-map-cache-grouping;
+        }
+        container connected {
+          tailf:info "Connected";
+          description
+            "Connected";
+          tailf:cli-compact-syntax;
+          uses router-lisp-ip-route-import-map-cache-grouping;
+        }
+        list eigrp {
+          tailf:info "Enhanced Interior Gateway Routing Protocol (EIGRP)";
+          description
+            "Enhanced Interior Gateway Routing Protocol (EIGRP)";
+          tailf:cli-suppress-mode;
+          key "id";
+          leaf id {
+            type uint16 {
+              tailf:info "<1-65535>;;Autonomous system number";
+            }
+          }
+          uses router-lisp-ip-route-import-map-cache-grouping;
+        }
+        list isis {
+          tailf:info "ISO IS-IS";
+          description
+            "ISO IS-IS";
+          tailf:cli-suppress-mode;
+          key "id";
+          leaf id {
+            type string {
+              tailf:info "WORD;;Process name";
+            }
+          }
+          uses router-lisp-ip-route-import-map-cache-grouping;
+        }
+        container maximum-prefix {
+          tailf:info "Maximum number of prefixes to pick up from the RIB";
+          description
+            "Maximum number of prefixes to pick up from the RIB";
+          tailf:cli-compact-syntax;
+          tailf:cli-sequence-commands;
+          leaf number {
+            tailf:cli-drop-node-name;
+            type int32 {
+              tailf:info "<1-4294967295>;;Maximum number of prefixes";
+            }
+          }
+          choice threshold-warning {
+            case warning-only-case {
+              leaf warning-only {
+                tailf:info "Only give a warning message and do not limit entries";
+                description
+                  "Only give a warning message and do not limit entries";
+                tailf:cli-optional-in-sequence;
+                type empty;
+              }
+            }
+            case threshold-case {
+              leaf threshold {
+                tailf:cli-drop-node-name;
+                tailf:cli-optional-in-sequence;
+                type uint8 {
+                  tailf:info "<1-100>;;Threshold value (%) at which to generate a warning message";
+                  range "1..100";
+                }
+              }
+            }
+            case threshold-warning-case {
+              leaf threshold1 {
+                tailf:cli-drop-node-name;
+                tailf:cli-optional-in-sequence;
+                type uint8 {
+                  tailf:info "<1-100>;;Threshold value (%) at which to generate a warning message";
+                  range "1..100";
+                }
+              }
+              leaf warning-only1 {
+                tailf:alt-name "warning-only";
+                tailf:info "Only give a warning message and do not limit entries";
+                description
+                  "Only give a warning message and do not limit entries";
+                tailf:cli-optional-in-sequence;
+                type empty;
+              }
+            }
+          }
+        }
+        list ospf {
+          tailf:info "Open Shortest Path First (OSPF)";
+          description
+            "Open Shortest Path First (OSPF)";
+          tailf:cli-suppress-mode;
+          key "id";
+          leaf id {
+            type uint16 {
+              tailf:info "<1-65535>;;Process ID";
+            }
+          }
+          uses router-lisp-ip-route-import-map-cache-grouping;
+        }
+        list ospfv3 {
+          tailf:info "OSPFv3";
+          description
+            "OSPFv3";
+          tailf:cli-suppress-mode;
+          key "id";
+          leaf id {
+            type uint16 {
+              tailf:info "<1-65535>;;Process ID";
+            }
+          }
+          uses router-lisp-ip-route-import-map-cache-grouping;
+        }
+        container rip {
+          tailf:info "Routing Information Protocol (RIP)";
+          description
+            "Routing Information Protocol (RIP)";
+          tailf:cli-compact-syntax;
+          uses router-lisp-ip-route-import-map-cache-grouping;
+        }
+        container static {
+          tailf:info "Static routes";
+          description
+            "Static routes";
+          tailf:cli-compact-syntax;
+          uses router-lisp-ip-route-import-map-cache-grouping;
+        }
+      }
+    }
+    leaf sgt {
+      tailf:info "Enable security group tag propagation in LISP encapsulated traffic";
+      description
+        "Enable security group tag propagation in LISP encapsulated traffic";
+      tailf:cli-full-command;
+      type empty;
+    }
+    container site-registration {
+      tailf:info "Site registrations configuration for a given instance-id";
+      description
+        "Site registrations configuration for a given instance-id";
+      tailf:cli-sequence-commands;
+      tailf:cli-compact-syntax;
+      leaf limit {
+        tailf:info "Maximum number of site registrations for a given instance-id";
+        description
+          "Maximum number of site registrations for a given instance-id";
+        type uint32 {
+          tailf:info "<1-4294967295>;;Maximum number of site registrations for a given instance-id";
+        }
+      }
+      leaf warning-threshold {
+        tailf:info "Warning threshold to issue system logging";
+        description
+          "Warning threshold to issue system logging";
+        tailf:cli-optional-in-sequence;
+        type uint8 {
+          tailf:info "<1-100>;;warning threshold";
+          range "1..100";
+        }
+      }
+    }
+    container solicit-map-request {
+      tailf:info "Configure Solicit-Map-Request handling";
+      description
+        "Configure Solicit-Map-Request handling";
+      leaf ignore {
+        tailf:info "Ignore SMR bit in incoming Map-Requests";
+        description
+          "Ignore SMR bit in incoming Map-Requests";
+        tailf:cli-full-command;
+        type empty;
+      }
+      leaf max-per-entry {
+        tailf:info "Maximum number of SMRs for addresses under a map-cache entry";
+        description
+          "Maximum number of SMRs for addresses under a map-cache entry";
+        tailf:cli-full-command;
+        type uint8 {
+          tailf:info "<1-100>;;Maximum number of SMRs for addresses under a map-cache entry";
+          range "1..100";
+        }
+      }
+      leaf suppression-time {
+        tailf:info "How long to suppress repeated SMRs for the same address";
+        description
+          "How long to suppress repeated SMRs for the same address";
+        tailf:cli-full-command;
+        type uint16 {
+          tailf:info "<1-600>;;Seconds to suppress repeated SMRs for the same address";
+          range "1..600";
+        }
+      }
+    }
+    list use-petr {
+      tailf:info "Encapsulate to Proxy ETR when matching forward-native entry";
+      description
+        "Encapsulate to Proxy ETR when matching forward-native entry";
+      tailf:cli-suppress-mode;
+      tailf:cli-sequence-commands;
+      tailf:cli-compact-syntax;
+      key "locator-address";
+      leaf locator-address {
+        type union {
+          type inet:ipv4-address {
+            tailf:info "A.B.C.D;;IPv4 locator address of PETR";
+          }
+          type inet:ipv6-address {
+            tailf:info "X:X:X:X::X;;IPv6 locator address of PETR";
+          }
+        }
+      }
+      leaf priority {
+        tailf:info "Configures which Locators from a set are preferred";
+        description
+          "Configures which Locators from a set are preferred";
+        tailf:cli-optional-in-sequence;
+        type uint8 {
+          tailf:info "<0-255>;;Lower priority Locator takes preference";
+        }
+      }
+      leaf weight {
+        tailf:info "Traffic load-spreading among Locators";
+        description
+          "Traffic load-spreading among Locators";
+        tailf:cli-optional-in-sequence;
+        type uint8 {
+          tailf:info "<0-100>;;Relative weight of locator";
+          range "0..100";
+        }
+      }
+    }
+  }
+
+  grouping router-lisp-common-grouping {
+    container alt {
+      tailf:info "LISP Alternative Topology, LISP-ALT";
+      description
+        "LISP Alternative Topology, LISP-ALT";
+      tailf:display-when "../../../eid-table";
+      list summary-route {
+        tailf:info "Summary route to install into the ALT table";
+        description
+          "Summary route to install into the ALT table";
+        tailf:cli-suppress-mode;
+        key "eid-prefix";
+        leaf eid-prefix {
+          type union {
+            type inet:ipv4-prefix {
+              tailf:info "A.B.C.D/nn;;IPv4 Summary EID prefix to install into the ALT table";
+            }
+            type inet:ipv6-prefix {
+              tailf:info "X:X:X:X::X/<0-128>;;IPv6 Summary EID prefix to install into the ALT table";
+            }
+          }
+        }
+        leaf route-tag {
+          tailf:info "ALT RIB route tag for EID prefix";
+          description
+            "ALT RIB route tag for EID prefix";
+          type uint32 {
+            tailf:info "<0-4294967295>;;RIB route tag";
+          }
+        }
+      }
+    }
+    container control-packet {
+      tailf:info "Configure control packet tx option";
+      description
+        "Configure control packet tx option";
+      tailf:display-when "../../lisp or ../../lisp-list";
+      leaf mtu {
+        tailf:info "Configure control packet MTU";
+        description
+          "Configure control packet MTU";
+        type uint32 {
+          tailf:info "<304-10000>;;Control packet MTU, default 1460";
+          range "304..10000";
+        }
+      }
+    }
+    container ddt {
+      tailf:info "Delegated Database Tree (DDT) mapping system";
+      description
+        "Delegated Database Tree (DDT) mapping system";
+      tailf:display-when "../../lisp or ../../lisp-list";
+      presence "true";
+      container authoritative {
+        tailf:info "DDT authoritative prefix";
+        description
+          "DDT authoritative prefix";
+        list instance-id-eid-prefix-list {
+          tailf:cli-drop-node-name;
+          tailf:cli-mode-name "config-router-lisp-ddt-auth";
+          key "instance-id eid-prefix";
+          leaf instance-id {
+            tailf:info "EID instance-ID";
+            description
+              "EID instance-ID";
+            tailf:cli-expose-key-name;
+            type uint32 {
+              tailf:info "0-16777215;;instance-ID";
+            }
+          }
+          leaf eid-prefix {
+            type union {
+              type inet:ipv4-prefix {
+                tailf:info "A.B.C.D/nn;;IPv4 EID prefix";
+              }
+              type inet:ipv6-prefix {
+                tailf:info "X:X:X:X::X/<0-128>;;IPv6 EID prefix";
+              }
+            }
+          }
+          uses router-lisp-ddt-authoritative-grouping;
+        }
+        list instance-id-list {
+          tailf:cli-drop-node-name;
+          tailf:cli-mode-name "config-router-lisp-ddt-auth";
+          key "instance-id";
+          leaf instance-id {
+            type string {
+              tailf:info "*, 0-16777215 * - *;;Entire instance-ID rangeinstance-ID or *-* range";
+            }
+          }
+          uses router-lisp-ddt-authoritative-grouping;
+        }
+      }
+      leaf cache-limit {
+        tailf:info "DDT resolver cache entry limit";
+        description
+          "DDT resolver cache entry limit";
+        type uint32 {
+          tailf:info "<1-100000>;;Number of DDT prefixes to allow in cache, default 1000";
+          range "1..100000";
+        }
+      }
+      leaf root {
+        tailf:info "DDT root node";
+        description
+          "DDT root node";
+        type union {
+          type inet:ipv4-address {
+            tailf:info "A.B.C.D;;IPv4 DDT root node locator";
+          }
+          type inet:ipv6-address {
+            tailf:info "X:X:X:X::X;;IPv6 DDT root node locator";
+          }
+        }
+      }
+    }
+    container decapsulation {
+      tailf:info "Decapsulation behavior (e.g. filters)";
+      description
+        "Decapsulation behavior (e.g. filters)";
+      container filter {
+        tailf:info "Filters traffic";
+        description
+          "Filters traffic";
+        container rloc {
+          tailf:info "Filter based on Routing Locator (RLOC) in packet header";
+          description
+            "Filter based on Routing Locator (RLOC) in packet header";
+          container source {
+            tailf:info "Filters traffic based on RLOC source address";
+            description
+              "Filters traffic based on RLOC source address";
+            tailf:cli-compact-syntax;
+            leaf locator-set {
+              tailf:info "Specify (additional) members using a locator set";
+              description
+                "Locator-set Name";
+              type string;
+            }
+            leaf member {
+              tailf:info "Members learned from map-server";
+              description
+                "Members learned from map-server";
+              type empty;
+            }
+          }
+        }
+      }
+    }
+    leaf disable-ttl-propagate {
+      tailf:info "Disable ttl propagation";
+      description
+        "Disable ttl propagation";
+      tailf:cli-full-command;
+      type empty;
+    }
+    leaf dynamic-eid {
+      tailf:info "Configure a dynamic EID";
+      description
+        "Configure a dynamic EID";
+      tailf:display-when "../../../eid-table";
+      tailf:cli-full-command;
+      type string {
+        tailf:info "WORD;;The name of the dynamic EID";
+      }
+    }
+    container ipv4 {
+      tailf:info "IPv4 address family";
+      description
+        "IPv4 address family";
+      uses router-lisp-ip-grouping;
+    }
+    container ipv6 {
+      tailf:info "IPv6 address family";
+      description
+        "IPv6 address family";
+      uses router-lisp-ip-grouping;
+    }
+    container loc-reach-algorithm {
+      tailf:info "Configure locator reachability algorithm";
+      description
+        "Configure locator reachability algorithm";
+      container lsb-reports {
+        tailf:info "Configure data packet LSB report handling";
+        description
+          "Configure data packet LSB report handling";
+        leaf do-not-transmit {
+          tailf:info "Force the setting of the encapsulation header L bit to zero";
+          description
+            "Force the setting of the encapsulation header L bit to zero";
+          type empty;
+        }
+        leaf ignore {
+          tailf:info "Ignore data packet LSB reports";
+          description
+            "Ignore data packet LSB reports";
+          type empty;
+        }
+      }
+      leaf rloc-probing {
+        tailf:info "Probe high priority RLOCs with Map-Requests as last resort";
+        description
+          "Probe high priority RLOCs with Map-Requests as last resort";
+        type empty;
+      }
+    }
+    container locator-down {
+      tailf:info "Manually set locator status to down";
+      description
+        "Manually set locator status to down";
+      tailf:display-when "../../lisp or ../../lisp-list";
+      leaf address {
+        description
+          "IPv4/6 Locator address to be set down";
+        tailf:cli-drop-node-name;
+        tailf:cli-full-command;
+        type union {
+          type inet:ipv4-address {
+            tailf:info "A.B.C.D;;IPv4 Locator address to be set down";
+          }
+          type inet:ipv6-address {
+            tailf:info "X:X:X:X::X;;IPv6 Locator address to be set down";
+          }
+        }
+      }
+      leaf IPv4-interface {
+        tailf:info "Use IPv4 address of interface as locator";
+        description
+          "Use IPv4 address of interface as locator";
+        tailf:cli-full-command;
+        type string;
+      }
+      leaf IPv6-interface {
+        tailf:info "Use IPv6 address of interface as locator";
+        description
+          "Use IPv6 address of interface as locator";
+        tailf:cli-full-command;
+        type string;
+      }
+    }
+    container locator-table {
+      tailf:info "Specify the RLOC table";
+      description
+        "Specify the RLOC table";
+      tailf:display-when "../../lisp or ../../lisp-list";
+      leaf vrf-name {
+        tailf:cli-drop-node-name;
+        tailf:cli-full-command;
+        type string {
+          tailf:info "WORD;;VRF name, default is Default VRF";
+        }
+      }
+      leaf vrf {
+        tailf:info "VRF name";
+        description
+          "VRF name";
+        type string {
+          tailf:info "WORD;;VRF name";
+        }
+      }
+    }
+    container map-request {
+      tailf:info "Configure map-request handling";
+      description
+        "Configure map-request handling";
+      tailf:display-when "../../lisp or ../../lisp-list";
+      leaf itr-rlocs {
+        tailf:info "Configure to use the specified RLOC set as ITR RLOC in map-request";
+        description
+          "Configure to use the specified RLOC set as ITR RLOC in map-request";
+        type string {
+          tailf:info "WORD;;Existing locator set name";
+        }
+      }
+    }
+    container map-server {
+      tailf:info "Map-Server commands";
+      description
+        "Map-Server commands";
+      container rloc {
+        tailf:info "EID instance RLOC membership";
+        description
+          "EID instance RLOC membership";
+        container members {
+          tailf:info "EID instance RLOC membership";
+          description
+            "EID instance RLOC membership";
+          leaf distribute {
+            tailf:info "EID instance RLOC membership distribution";
+            description
+              "EID instance RLOC membership distribution";
+            type empty;
+          }
+          container modify-discovered {
+            tailf:info "Modify the EID instance membership that is automaticallydiscovered from ETR registrations";
+            description
+              "Modify the EID instance membership that is automaticallydiscovered from ETR registrations";
+            tailf:cli-compact-syntax;
+            tailf:cli-sequence-commands;
+            leaf operator {
+              tailf:cli-drop-node-name;
+              type enumeration {
+                enum "add" {
+                  tailf:info "Add RLOCs defined in locator-set to the discovered membership";
+                }
+                enum "override" {
+                  tailf:info "Override discovered members with RLOCs defined in locator-set";
+                }
+              }
+            }
+            leaf locator-set {
+              tailf:info "Locator set from which to get member RLOC addresses";
+              description
+                "Locator set from which to get member RLOC addresses";
+              type string {
+                tailf:info "WORD;;Existing locator set name";
+              }
+            }
+          }
+        }
+      }
+      container site-registration {
+        tailf:info "Map-server site registration options";
+        description
+          "Map-server site registration options";
+        tailf:display-when "../../../lisp or ../../../lisp-list";
+        tailf:cli-sequence-commands;
+        tailf:cli-compact-syntax;
+        leaf limit {
+          tailf:info "Maximum number of site registrations as a result of accept-more-specifics";
+          description
+            "Maximum number of site registrations as a result of accept-more-specifics";
+          type uint32 {
+            tailf:info "<1-4294967295>;;Maximum number of site registrations";
+          }
+        }
+        leaf warning-threshold {
+          tailf:info "Warning threshold to issue system logging";
+          description
+            "Warning threshold to issue system logging";
+          tailf:cli-optional-in-sequence;
+          type uint8 {
+            tailf:info "<1-100>;;warning threshold";
+            range "1..100";
+          }
+        }
+      }
+    }
+    container other-xtr-probe {
+      tailf:info "Configure parameters for probing of other xTRs in our site";
+      description
+        "Configure parameters for probing of other xTRs in our site";
+      leaf period {
+        tailf:info "Set period between probes to other xTRs in our site";
+        description
+          "Period between probes in seconds";
+        type uint16 {
+          range "5..900";
+        }
+      }
+    }
+    container remote-rloc-probe {
+      tailf:info "Configure parameters for probing of remote RLOCs";
+      description
+        "Configure parameters for probing of remote RLOCs";
+      leaf on-membership-change {
+        tailf:info "Trigger probing upon membership changes for remote RLOC";
+        description
+          "Trigger probing upon membership changes for remote RLOC";
+        tailf:cli-full-command;
+        type empty;
+      }
+      leaf on-route-change {
+        tailf:info "Trigger probing upon routing changes for remote RLOC";
+        description
+          "Trigger probing upon routing changes for remote RLOC";
+        tailf:cli-full-command;
+        type empty;
+      }
+    }
+  }
+
+  grouping router-lisp-grouping {
+    list locator-set {
+      tailf:info "Configure a named locator set";
+      description
+        "Configure a named locator set";
+      tailf:cli-mode-name "config-router-lisp-locator-set";
+      key "name";
+      leaf name {
+        type string {
+          tailf:info "WORD;;The name of the locator set";
+        }
+      }
+      list IPv4-interface {
+        tailf:info "Use IPv4 address of interface as locator";
+        description
+          "Use IPv4 address of interface as locator";
+        tailf:cli-suppress-mode;
+        tailf:cli-sequence-commands;
+        tailf:cli-compact-syntax;
+        key "name";
+        leaf name {
+          type string;
+        }
+        leaf priority {
+          tailf:info "Configures which Locators from a set are preferred";
+          description
+            "Configures which Locators from a set are preferred";
+          tailf:cli-optional-in-sequence;
+          type uint8 {
+            tailf:info "<0-255>;;Lower priority Locator takes preference";
+          }
+        }
+        leaf weight {
+          tailf:info "Traffic load-spreading among Locators";
+          description
+            "Traffic load-spreading among Locators";
+          tailf:cli-optional-in-sequence;
+          type uint8 {
+            tailf:info "<0-100>;;Relative weight of locator";
+            range "0..100";
+          }
+        }
+      }
+    }
+    list locator-scope {
+      tailf:info "Configure a locator scope";
+      description
+        "Configure a locator scope";
+      tailf:cli-mode-name "config-router-lisp-locator-scope";
+      key "name";
+      leaf name {
+        type string {
+          tailf:info "WORD;;The name of the locator scope";
+        }
+      }
+      leaf-list rloc-prefix {
+        tailf:info "RLOC prefix to check against ITR RLOC and ETR RLOC";
+        description
+          "RLOC prefix to check against ITR RLOC and ETR RLOC";
+        tailf:cli-list-syntax;
+        type union {
+          type inet:ipv4-prefix {
+            tailf:info "A.B.C.D/nn;;IPv4 RLOC prefix belonging to the scope";
+          }
+          type inet:ipv6-prefix {
+            tailf:info "X:X:X:X::X/<0-128>;;IPv6 RLOC prefix belonging to the scope";
+          }
+        }
+      }
+      leaf-list rtr-locator-set {
+        tailf:info "Locator-set of RTR to use in proxy reply for disjoint/cross AF RLOC";
+        description
+          "Locator-set of RTR to use in proxy reply for disjoint/cross AF RLOC";
+        tailf:cli-list-syntax;
+        type string;
+      }
+    }
+    uses router-lisp-common-grouping;
+    container eid-table {
+      tailf:info "Configure an EID instance for a VRF";
+      description
+        "Configure an EID instance for a VRF";
+      list instance-list {
+        tailf:cli-drop-node-name;
+        tailf:cli-mode-name "config-router-lisp-eid-table";
+        key "instance-id";
+        leaf instance-id {
+          tailf:cli-expose-key-name;
+          tailf:info "EID instance-ID";
+          description
+            "EID instance-ID";
+          type uint32 {
+            tailf:info "<0-16777214>;;Instance-ID";
+            range "0..16777214";
+          }
+        }
+        leaf vrf-name {
+          tailf:cli-drop-node-name;
+          tailf:cli-prefix-key;
+          type string {
+            tailf:info "WORD;;VRF name";
+          }
+        }
+        leaf default {
+          tailf:info "Default VRF";
+          description
+            "Default VRF";
+          tailf:cli-prefix-key;
+          type empty;
+        }
+        leaf vrf {
+          tailf:cli-prefix-key;
+          type string {
+            tailf:info "WORD;;VRF name";
+          }
+        }
+        list database-mapping {
+          tailf:info "Configures Locator addresses for an ETR";
+          description
+            "Configures Locator addresses for an ETR";
+          tailf:cli-suppress-mode;
+          key "eid-prefix";
+          leaf eid-prefix {
+            type union {
+              type inet:ipv4-prefix {
+                tailf:info "A.B.C.D/nn;;EID-prefix to advertise locators for (max 5000 static prefixes)";
+              }
+              type inet:ipv6-prefix {
+                tailf:info "X:X:X:X::X/<0-128>;;EID-prefix to advertise locators for (max 5000 static prefixes)";
+              }
+            }
+          }
+          leaf locator-set {
+            tailf:info "Use locators defined by locator-set";
+            description
+              "Use locators defined by locator-set";
+            tailf:cli-full-command;
+            type string {
+              tailf:info "WORD;;The name of the locator set";
+            }
+          }
+        }
+        uses router-lisp-common-grouping;
+        list map-cache {
+          tailf:info "Configures static EID-to-RLOC mappings for an ITR";
+          description
+            "Configures static EID-to-RLOC mappings for an ITR";
+          tailf:cli-suppress-mode;
+          key "eid-prefix";
+          leaf eid-prefix {
+            type union {
+              type inet:ipv4-prefix {
+                tailf:info "A.B.C.D/nn;;IPv4 EID-prefix for RLOC static mapping";
+              }
+              type inet:ipv6-prefix {
+                tailf:info "X:X:X:X::X/<0-128>;;IPv6 EID-prefix for RLOC static mapping";
+              }
+            }
+          }
+          container etr-interface-ip {
+            tailf:cli-drop-node-name;
+            tailf:cli-sequence-commands;
+            tailf:cli-compact-syntax;
+            leaf etr-interface-ip-address {
+              tailf:cli-drop-node-name;
+              type union {
+                type inet:ipv4-address {
+                  tailf:info "A.B.C.D;;IPv4 Address of loopback or other ETR interface";
+                }
+                type inet:ipv6-address {
+                  tailf:info "X:X:X:X::X;;IPv6 Address of loopback or other ETR interface";
+                }
+              }
+            }
+            leaf priority {
+              tailf:info "Configures which Locators from a set are preferred";
+              description
+                "Configures which Locators from a set are preferred";
+              type uint8 {
+                tailf:info "<0-255>;;Lower priority Locator takes preference";
+              }
+            }
+            leaf weight {
+              tailf:info "Traffic load-spreading among Locators";
+              description
+                "Traffic load-spreading among Locators";
+              type uint8 {
+                tailf:info "<0-100>;;Relative weight of locator";
+                range "0..100";
+              }
+            }
+          }
+          leaf drop {
+            tailf:info "Drop packets that match this map-cache entry";
+            description
+              "Drop packets that match this map-cache entry";
+            tailf:cli-full-command;
+            type empty;
+          }
+          leaf map-request {
+            tailf:info "Send Map-Request for LISP destination EID";
+            description
+              "Send Map-Request for LISP destination EID";
+            tailf:cli-full-command;
+            type empty;
+          }
+          leaf native-forward {
+            tailf:info "Natively forward packets that match this map-cache entry";
+            description
+              "Natively forward packets that match this map-cache entry";
+            tailf:cli-full-command;
+            type empty;
+          }
+        }
+      }
+    }
+    container security {
+      tailf:info "Enable default LISP security and authentication in reply is optional";
+      description
+        "Enable default LISP security and authentication in reply is optional";
+      presence "true";
+      leaf strong {
+        tailf:info "Enable default LISP security and authentication in reply is required";
+        description
+          "Enable default LISP security and authentication in reply is required";
+        type empty;
+      }
+    }
+    list site {
+      tailf:info "Configure a LISP site on a map server (MS)";
+      description
+        "Configure a LISP site on a map server (MS)";
+      tailf:cli-mode-name "config-router-lisp-site";
+      key "sname";
+      leaf sname {
+        tailf:info "The site name";
+        description
+          "The site name";
+        type string;
+      }
+      container authentication-key {
+        tailf:info "Authentication key used by LISP site";
+        description
+          "Authentication key used by LISP site";
+        leaf ak-0 {
+          tailf:alt-name "0";
+          tailf:info "Specifies an UNENCRYPTED password will follow";
+          description
+            "The UNENCRYPTED (cleartext) password";
+          type string;
+        }
+        leaf ak-6 {
+          tailf:alt-name "6";
+          tailf:info "Specifies an ENCRYPTED password will follow";
+          description
+            "The ENCRYPTED password";
+          type string;
+        }
+        leaf unc-pwd {
+          tailf:info "The UNENCRYPTED (cleartext) password";
+          description
+            "The UNENCRYPTED (cleartext) password";
+          tailf:cli-drop-node-name;
+          type string;
+        }
+      }
+      leaf description {
+        tailf:info "Provide a description string for the LISP site";
+        description
+          "Site description";
+        tailf:cli-multi-value;
+        type string;
+      }
+      container allowed-locator {
+        tailf:info "Locator from LISP site";
+        description
+          "Locator from LISP site";
+        leaf ls-ipv4 {
+          tailf:info "IPv4 locator allowed in registered locator-set";
+          description
+            "IPv4 locator allowed in registered locator-set";
+          tailf:cli-drop-node-name;
+          type inet:ipv4-address;
+        }
+        leaf ls-ipv6 {
+          tailf:info "IPv6 locator allowed in registered locator-set";
+          description
+            "IPv6 locator allowed in registered locator-set";
+          tailf:cli-drop-node-name;
+          type inet:ipv6-address;
+        }
+        container list {
+          tailf:info "Prefixes allowed in registerd locator-set";
+          description
+            "Prefixes allowed in registerd locator-set";
+          leaf ipv4 {
+            tailf:info "IPv4 prefixes allowed in registered locator-set";
+            description
+              "IPv4 prefix-list name";
+            type string;
+          }
+          leaf ipv6 {
+            tailf:info "IPv6 prefixes allowed in registered locator-set";
+            description
+              "IPv6 prefix-list name";
+            type string;
+          }
+        }
+      }
+      list eid-prefix {
+        tailf:info "Site EID address prefix";
+        description
+          "Site EID address prefix";
+        tailf:cli-suppress-mode;
+        tailf:cli-compact-syntax;
+        key "prefix";
+        leaf prefix {
+          type union {
+            type inet:ipv4-prefix {
+              tailf:info "A.B.C.D/nn;;IPv4 EID prefix belonging to the SITE";
+            }
+            type inet:ipv6-prefix {
+              tailf:info "X:X:X:X::X/<0-128>;;IPv6 EID prefix belonging to the SITE";
+            }
+          }
+        }
+        leaf instance-id {
+          tailf:info "EID instance-ID";
+          description
+            "EID instance-ID";
+          tailf:cli-prefix-key;
+          type uint32 {
+            tailf:info "<1-16777214>;;Instance-ID";
+            range "1..16777214";
+          }
+        }
+        leaf accept-more-specifics {
+          tailf:info "Accept registrations for more specific EID prefixes";
+          description
+            "Accept registrations for more specific EID prefixes";
+          tailf:cli-full-command;
+          type empty;
+        }
+        leaf route-tag {
+          tailf:info "RIB route tag for EID prefix";
+          description
+            "RIB route tag";
+          type uint32 {
+            tailf:info "<0-4294967295>;;RIB route tag";
+            range "0..4294967295";
+          }
+        }
+      }
+    }
+    leaf site-id {
+      tailf:info "Configure a site-id for this site";
+      description
+        "Configure a site-id for this site";
+      type uint32 {
+        tailf:info "<1-4294967295>;;site-ID";
+      }
+    }
+    container syslog {
+      tailf:info "Configure syslog option";
+      description
+        "Configure syslog option";
+      container session {
+        tailf:info "Enable session syslog";
+        description
+          "Enable session syslog";
+        leaf changes {
+          tailf:info "Enable session change syslog";
+          description
+            "Enable session change syslog";
+          type empty;
+        }
+      }
+      leaf verbose {
+        tailf:info "Enable verbose syslog";
+        description
+          "Enable verbose syslog";
+        type empty;
+      }
+    }
+  }
+
+  grouping object-group-service-grouping {
+    leaf protocal-number {
+      tailf:cli-drop-node-name;
+      tailf:cli-full-command;
+      type uint8 {
+        tailf:info "<0-255>;;An IP protocol number";
+      }
+    }
+    leaf ahp {
+      tailf:info "Authentication Header Protocol";
+      description
+        "Authentication Header Protocol";
+      tailf:cli-full-command;
+      type empty;
+    }
+    leaf description {
+      tailf:info "Service object group description";
+      description
+        "Service object group description";
+      tailf:cli-multi-value;
+      tailf:cli-full-command;
+      type string {
+        tailf:info "LINE;;Description of this Object group";
+      }
+    }
+    leaf eigrp {
+      tailf:info "Cisco's EIGRP routing protocol";
+      description
+        "Cisco's EIGRP routing protocol";
+      tailf:cli-full-command;
+      type empty;
+    }
+    leaf esp {
+      tailf:info "Encapsulation Security Payload";
+      description
+        "Encapsulation Security Payload";
+      tailf:cli-full-command;
+      type empty;
+    }
+    leaf gre {
+      tailf:info "Cisco's GRE tunneling";
+      description
+        "Cisco's GRE tunneling";
+      tailf:cli-full-command;
+      type empty;
+    }
+    leaf group-object {
+      tailf:info "Nested object group";
+      description
+        "Nested object group";
+      type string {
+        tailf:info "WORD;;Nested object group name";
+      }
+    }
+    container icmp {
+      tailf:info "Internet Control Message Protocol";
+      description
+        "Internet Control Message Protocol";
+      presence "true";
+      leaf port-number {
+        tailf:cli-drop-node-name;
+        type uint8 {
+          tailf:info "<0-255>;;Port number";
+        }
+      }
+      leaf alternate-address {
+        tailf:info "Alternate address";
+        description
+          "Alternate address";
+        tailf:cli-full-command;
+        type empty;
+      }
+      leaf conversion-error {
+        tailf:info "Datagram conversion";
+        description
+          "Datagram conversion";
+        tailf:cli-full-command;
+        type empty;
+      }
+      leaf echo {
+        tailf:info "Echo (ping)";
+        description
+          "Echo (ping)";
+        tailf:cli-full-command;
+        type empty;
+      }
+      leaf echo-reply {
+        tailf:info "Echo reply";
+        description
+          "Echo reply";
+        tailf:cli-full-command;
+        type empty;
+      }
+      leaf information-reply {
+        tailf:info "Information replies";
+        description
+          "Information replies";
+        tailf:cli-full-command;
+        type empty;
+      }
+      leaf information-request {
+        tailf:info "Information requests";
+        description
+          "Information requests";
+        tailf:cli-full-command;
+        type empty;
+      }
+      leaf mask-reply {
+        tailf:info "Mask replies";
+        description
+          "Mask replies";
+        tailf:cli-full-command;
+        type empty;
+      }
+      leaf mask-request {
+        tailf:info "Mask requests";
+        description
+          "Mask requests";
+        tailf:cli-full-command;
+        type empty;
+      }
+      leaf mobile-redirect {
+        tailf:info "Mobile host redirect";
+        description
+          "Mobile host redirect";
+        tailf:cli-full-command;
+        type empty;
+      }
+      leaf parameter-problem {
+        tailf:info "All parameter problems";
+        description
+          "All parameter problems";
+        tailf:cli-full-command;
+        type empty;
+      }
+      leaf redirect {
+        tailf:info "All redirects";
+        description
+          "All redirects";
+        tailf:cli-full-command;
+        type empty;
+      }
+      leaf router-advertisement {
+        tailf:info "Router discovery advertisements";
+        description
+          "Router discovery advertisements";
+        tailf:cli-full-command;
+        type empty;
+      }
+      leaf router-solicitation {
+        tailf:info "Router discovery solicitations";
+        description
+          "Router discovery solicitations";
+        tailf:cli-full-command;
+        type empty;
+      }
+      leaf source-quench {
+        tailf:info "Source quenches";
+        description
+          "Source quenches";
+        tailf:cli-full-command;
+        type empty;
+      }
+      leaf time-exceeded {
+        tailf:info "All time exceededs";
+        description
+          "All time exceededs";
+        tailf:cli-full-command;
+        type empty;
+      }
+      leaf timestamp-reply {
+        tailf:info "Timestamp replies";
+        description
+          "Timestamp replies";
+        tailf:cli-full-command;
+        type empty;
+      }
+      leaf timestamp-request {
+        tailf:info "Timestamp requests";
+        description
+          "Timestamp requests";
+        tailf:cli-full-command;
+        type empty;
+      }
+      leaf traceroute {
+        tailf:info "Traceroute";
+        description
+          "Traceroute";
+        tailf:cli-full-command;
+        type empty;
+      }
+      leaf unreachable {
+        tailf:info "All unreachables";
+        description
+          "All unreachables";
+        tailf:cli-full-command;
+        type empty;
+      }
+    }
+    leaf igmp {
+      tailf:info "Internet Gateway Message Protocol";
+      description
+        "Internet Gateway Message Protocol";
+      tailf:cli-full-command;
+      type empty;
+    }
+    leaf ip {
+      tailf:info "Any Internet Protocol";
+      description
+        "Any Internet Protocol";
+      tailf:cli-full-command;
+      type empty;
+    }
+    leaf ipinip {
+      tailf:info "IP in IP tunneling";
+      description
+        "IP in IP tunneling";
+      tailf:cli-full-command;
+      type empty;
+    }
+    leaf nos {
+      tailf:info "KA9Q NOS compatible IP over IP tunneling";
+      description
+        "KA9Q NOS compatible IP over IP tunneling";
+      tailf:cli-full-command;
+      type empty;
+    }
+    leaf ospf {
+      tailf:info "OSPF routing protocol";
+      description
+        "OSPF routing protocol";
+      tailf:cli-full-command;
+      type empty;
+    }
+    leaf pcp {
+      tailf:info "Payload Compression Protocol";
+      description
+        "Payload Compression Protocol";
+      tailf:cli-full-command;
+      type empty;
+    }
+    leaf pim {
+      tailf:info "Protocol Independent Multicast";
+      description
+        "Protocol Independent Multicast";
+      tailf:cli-full-command;
+      type empty;
+    }
+    container tcp {
+      tailf:info "Transmission Control Protocol";
+      description
+        "Transmission Control Protocol";
+      presence "true";
+      list tcp-port-list {
+        tailf:cli-drop-node-name;
+        tailf:cli-suppress-mode;
+        tailf:cli-compact-syntax;
+        key "tcp-port";
+        leaf operator {
+          tailf:cli-drop-node-name;
+          tailf:cli-prefix-key;
+          type enumeration {
+            enum "eq" {
+              tailf:info "Match only packets on a given port number";
+            }
+            enum "gt" {
+              tailf:info "Match only packets with a greater port number";
+            }
+            enum "lt" {
+              tailf:info "Match only packets with a lower port number";
+            }
+            enum "range" {
+              tailf:info "Match only packets in the range of port numbers";
+            }
+          }
+        }
+        leaf tcp-port {
+          type acl-tcp-port-type;
+        }
+        leaf max-tcp-port {
+          tailf:cli-drop-node-name;
+          type acl-tcp-port-type;
+        }
+      }
+    }
+    container tcp-udp {
+      tailf:info "TCP or UDP protocol";
+      description
+        "TCP or UDP protocol";
+      presence "true";
+      list udp-port-list {
+        tailf:cli-drop-node-name;
+        tailf:cli-suppress-mode;
+        tailf:cli-compact-syntax;
+        key "udp-port";
+        leaf operator {
+          tailf:cli-prefix-key;
+          tailf:cli-drop-node-name;
+          type enumeration {
+            enum "eq" {
+              tailf:info "Match only packets on a given port number";
+            }
+            enum "gt" {
+              tailf:info "Match only packets with a greater port number";
+            }
+            enum "lt" {
+              tailf:info "Match only packets with a lower port number";
+            }
+            enum "range" {
+              tailf:info "Match only packets in the range of port numbers";
+            }
+          }
+        }
+        leaf udp-port {
+          type acl-udp-port-type;
+        }
+        leaf max-udp-port {
+          tailf:cli-drop-node-name;
+          type acl-udp-port-type;
+        }
+      }
+    }
+    container udp {
+      tailf:info "User Datagram Protocol";
+      description
+        "User Datagram Protocol";
+      presence "true";
+      list udp-port-list {
+        tailf:cli-drop-node-name;
+        tailf:cli-suppress-mode;
+        tailf:cli-compact-syntax;
+        key "udp-port";
+        leaf operator {
+          tailf:cli-prefix-key;
+          tailf:cli-drop-node-name;
+          type enumeration {
+            enum "eq" {
+              tailf:info "Match only packets on a given port number";
+            }
+            enum "gt" {
+              tailf:info "Match only packets with a greater port number";
+            }
+            enum "lt" {
+              tailf:info "Match only packets with a lower port number";
+            }
+            enum "range" {
+              tailf:info "Match only packets in the range of port numbers";
+            }
+          }
+        }
+        leaf udp-port {
+          type acl-udp-port-type;
+        }
+        leaf max-udp-port {
+          tailf:cli-drop-node-name;
+          type acl-udp-port-type;
+        }
+      }
+    }
+  }
+
+  container native {
+    tailf:cli-drop-node-name;
+    leaf version {
+      tailf:info "Version";
+      description
+        "Version";
+      type string {
+        tailf:info "WORD;;Version number";
+      }
+    }
+    leaf boot-start-marker {
+      type empty;
+    }
+    container boot {
+      tailf:info "Modify system boot parameters";
+      description
+        "Modify system boot parameters";
+      container system {
+        tailf:info "System image file";
+        description
+          "System image file";
+        tailf:cli-compact-syntax;
+        leaf way {
+          description
+            "How to get the system image";
+          tailf:cli-drop-node-name;
+          type enumeration {
+            enum "flash" {
+              tailf:info "Boot from flash memory";
+            }
+            enum "tftp" {
+              tailf:info "Boot from a tftp server";
+            }
+            enum "ftp" {
+              tailf:info "Boot from a server via ftp";
+            }
+            enum "mop" {
+              tailf:info "Boot from a Decnet MOP server";
+            }
+            enum "rcp" {
+              tailf:info "Boot from a server via rcp";
+            }
+            enum "rom" {
+              tailf:info "Boot from rom";
+            }
+          }
+        }
+        leaf file {
+          tailf:cli-drop-node-name;
+          type string {
+            tailf:info "WORD;;filename or URL";
+          }
+        }
+        leaf hostname {
+          tailf:cli-drop-node-name;
+          description
+            "Hostname or A.B.C.D  Address from which to download the file";
+          when "../way = 'tftp' or ../way = 'ftp' or ../way = 'rcp'";
+          type union {
+            type string;
+            type inet:ipv4-address {
+              tailf:info "Hostname or A.B.C.D;;Address from which to download the file";
+            }
+          }
+        }
+        leaf interface {
+          tailf:cli-drop-node-name;
+          description
+            "Interface name";
+          when "../way = 'mop'";
+          type string;
+        }
+      }
+    }
+    leaf boot-end-marker {
+      type empty;
+    }
+    container hw-module {
+      tailf:info "Control of individual components in the system";
+      description
+        "Control of individual components in the system";
+      container uplink {
+        tailf:info "Uplink control";
+        description
+          "Uplink control";
+        leaf select {
+          tailf:info "Select uplink interface";
+          description
+            "Select uplink interface";
+          type string;
+        }
+        leaf mode {
+          tailf:info "Uplink mode";
+          description
+            "Uplink mode";
+          type enumeration {
+            enum "shared-backplane" {
+              tailf:info "shared-backplane";
+            }
+          }
+        }
+      }
+      leaf sm {
+        type uint8;
+      }
+      leaf pvdm {
+        type string;
+      }
+    }
+    container module {
+      tailf:info "Module";
+      description
+        "Module";
+      container provision {
+        tailf:info "Configure module provision status";
+        description
+          "Configure module provision status";
+        list switch {
+          key "number";
+          leaf number {
+            type uint8;
+          }
+          container chassis {
+            tailf:cli-drop-node-name;
+            tailf:cli-sequence-commands;
+            tailf:cli-compact-syntax;
+            leaf chassis-type {
+              type uint32;
+            }
+            leaf base-mac {
+              type string;
+            }
+          }
+          list slot {
+            tailf:cli-suppress-mode;
+            key "number";
+            leaf number {
+              type uint8;
+            }
+            leaf slot-type {
+              type uint32;
+            }
+            leaf base-mac {
+              type string;
+            }
+          }
+        }
+      }
+    }
+    list domain {
+      tailf:info "Domain Configuration Commands";
+      description
+        "Domain Configuration Commands";
+      tailf:cli-mode-name "config-domain";
+      key "name";
+      leaf name {
+        type string {
+          tailf:info "WORD;;Domain Name";
+        }
+      }
+      list vrf {
+        tailf:info "Specify vrf for domain";
+        description
+          "Specify vrf for domain";
+        tailf:cli-mode-name "config-domain-vrf";
+        key "name";
+        leaf name {
+          type string {
+            tailf:info "WORD;;VRF Name";
+          }
+        }
+        container border {
+          tailf:info "Enter border router configuration submode";
+          description
+            "Enter border router configuration submode";
+          tailf:cli-add-mode;
+          tailf:cli-mode-name "config-domain-vrf-br";
+          container source-interface {
+            tailf:info "Source Interface for border";
+            description
+              "Source Interface for border";
+            leaf Loopback {
+              tailf:info "Loopback interface";
+              description
+                "Loopback interface";
+              tailf:cli-allow-join-with-value {
+                tailf:cli-display-joined;
+              }
+              type uint32 {
+                tailf:info "<0-2147483647>;;Loopback interface number";
+              }
+            }
+          }
+          leaf master {
+            tailf:info "Specify IP address of Domain master controller";
+            description
+              "Specify IP address of Domain master controller";
+            type union {
+              type inet:ipv4-address {
+                tailf:info "A.B.C.D;;IP address of Domain master controller";
+              }
+              type enumeration {
+                enum "local" {
+                  tailf:info "Local Domain master controller";
+                }
+              }
+            }
+          }
+          container password {
+            tailf:info "MD5 password to be used with MC";
+            description
+              "MD5 password to be used with MC";
+            tailf:cli-compact-syntax;
+            leaf encryption {
+              tailf:cli-drop-node-name;
+              type enumeration {
+                enum "0" {
+                  tailf:info "Specifies an UNENCRYPTED password will follow";
+                }
+                enum "7" {
+                  tailf:info "Specifies HIDDEN password will follow";
+                }
+              }
+            }
+            leaf clear-key {
+              tailf:cli-drop-node-name;
+              tailf:cli-full-command;
+              type string {
+                tailf:info "WORD;;The UNENCRYPTED (cleartext) line password";
+              }
+            }
+          }
+        }
+        container master {
+          tailf:info "Enter master controller configuration submode";
+          description
+            "Enter master controller configuration submode";
+          tailf:cli-add-mode;
+          tailf:cli-mode-name "config-domain-vrf-mc";
+          choice master-type {
+            case branch {
+              leaf branch {
+                tailf:info "Set master type as branch hub";
+                description
+                  "Set master type as branch hub";
+                tailf:cli-hide-in-submode;
+                type empty;
+              }
+            }
+            case hub {
+              leaf hub {
+                tailf:info "Set master type as hub";
+                description
+                  "Set master type as hub";
+                tailf:cli-hide-in-submode;
+                type empty;
+              }
+            }
+            case transit {
+              leaf transit {
+                tailf:info "Set master type as transit";
+                description
+                  "Set master type as transit";
+                tailf:cli-hide-in-submode;
+                type empty;
+              }
+            }
+          }
+          container advanced {
+            tailf:info "Advanced configuration submode";
+            description
+              "Advanced configuration submode";
+            tailf:cli-add-mode;
+            tailf:cli-mode-name "config-domain-vrf-mc-advanced";
+            leaf byte-loss-threshold {
+              tailf:info "Specify minimum byte loss calculation threshold";
+              description
+                "Specify minimum byte loss calculation threshold";
+              tailf:cli-full-command;
+              type uint16 {
+                tailf:info "<0-5600>;;Specify minimum byte loss calculation threshold";
+                range "0..5600";
+              }
+            }
+            leaf channel-unreachable-timer {
+              tailf:info "Unreach interval detection";
+              description
+                "Unreach interval detection";
+              tailf:cli-full-command;
+              type uint16 {
+                tailf:info "<1-65535>;;Specify new timer interval value in seconds";
+                range "1..65535";
+              }
+            }
+            leaf load-sharing {
+              tailf:info "Enable load-sharing";
+              description
+                "Enable load-sharing";
+              tailf:cli-full-command;
+              type empty;
+            }
+            leaf minimum-mask-length {
+              tailf:info "Specify minimum mask length";
+              description
+                "Specify minimum mask length";
+              tailf:cli-full-command;
+              type uint8 {
+                tailf:info "<1-32>;;Specify minimum mask length";
+                range "1..32";
+              }
+            }
+            leaf mitigation-mode {
+              tailf:info "Enable brownout detection in domain";
+              description
+                "Enable brownout detection in domain";
+              tailf:cli-full-command;
+              type enumeration {
+                enum "aggressive" {
+                  tailf:info "Aggressive brownout mode";
+                }
+              }
+            }
+            leaf packet-loss-threshold {
+              tailf:info "Specify minimum packet loss calculation threshold";
+              description
+                "Specify minimum packet loss calculation threshold";
+              tailf:cli-full-command;
+              type uint8 {
+                tailf:info "<0-100>;;Specify minimum packet loss calculation threshold";
+                range "1..100";
+              }
+            }
+            container smart-probes {
+              tailf:info "Smart probes configuration";
+              description
+                "Smart probes configuration";
+              leaf destination-port {
+                tailf:info "Specify smart probes destination port number";
+                description
+                  "Specify smart probes destination port number";
+                tailf:cli-full-command;
+                type uint16 {
+                  tailf:info "<1-65535>;;Specify smart probe port number";
+                  range "1..65535";
+                }
+              }
+              leaf source-port {
+                tailf:info "Specify smart probes source port number";
+                description
+                  "Specify smart probes source port number";
+                tailf:cli-full-command;
+                type uint16 {
+                  tailf:info "<1-65535>;;Specify smart probe port number";
+                  range "1..65535";
+                }
+              }
+            }
+            container syslog {
+              tailf:info "Specify syslog minimim time between tca";
+              description
+                "Specify syslog minimim time between tca";
+              leaf tca-time-min {
+                tailf:info "Specify time between syslog tcas in seconds";
+                description
+                  "Specify time between syslog tcas in seconds";
+                type uint32 {
+                  tailf:info "<30-36000>;;Specify minimum wait between tca syslogs in seconds";
+                  range "30..36000";
+                }
+              }
+            }
+            container tcp {
+              tailf:info "Specify tcp port numbers for mc-br communication";
+              description
+                "Specify tcp port numbers for mc-br communication";
+              leaf mc-port {
+                tailf:info "Specify tcp MC self port for mc-br communication";
+                description
+                  "Specify tcp MC self port for mc-br communication";
+                type uint16 {
+                  tailf:info "<1-65535>;;Specify tcp port number";
+                  range "1..65535";
+                }
+              }
+            }
+            leaf threshold-variance {
+              tailf:info "Policy decision Threshold variance";
+              description
+                "Policy decision Threshold variance";
+              tailf:cli-full-command;
+              type uint8 {
+                tailf:info "<0-100>;;Specify percentage of tolerance";
+                range "0..100";
+              }
+            }
+            container traffic-class-ageout-timer {
+              tailf:info "Traffic-class DB age timer";
+              description
+                "Traffic-class DB age timer";
+              tailf:cli-sequence-commands;
+              tailf:cli-compact-syntax;
+              leaf interval {
+                tailf:cli-drop-node-name;
+                description
+                  "Specify new timer interval value mins/hours";
+                type uint16 {
+                  tailf:info "<5-65535>;;Specify new timer interval value mins/hours";
+                  range "5..65535";
+                }
+              }
+              leaf interval-unit {
+                tailf:cli-drop-node-name;
+                type enumeration {
+                  enum "hours" {
+                    tailf:info "Specified new timer interval in hours";
+                  }
+                  enum "minutes" {
+                    tailf:info "Specified new timer interval in minutes";
+                  }
+                }
+              }
+            }
+            leaf transit-site-affinity {
+              tailf:info "Enable Transit Site Affinity";
+              description
+                "Enable Transit Site Affinity";
+              tailf:cli-full-command;
+              type empty;
+            }
+          }
+          container collector {
+            tailf:info "NMS/v9 collector configuration";
+            description
+              "NMS/v9 collector configuration";
+            tailf:cli-sequence-commands;
+            tailf:cli-compact-syntax;
+            leaf ip {
+              tailf:cli-drop-node-name;
+              type inet:ipv4-address {
+                tailf:info "A.B.C.D;;IP address of NMS/v9 collector";
+              }
+            }
+            leaf port {
+              tailf:info "Specify collector port number";
+              description
+                "Specify collector port number";
+              tailf:cli-optional-in-sequence;
+              type uint16 {
+                tailf:info "<1-65535>;;Specify collector port number";
+              }
+            }
+          }
+          container enterprise-prefix {
+            tailf:info "Enterprise prefix configuration";
+            description
+              "Enterprise prefix configuration";
+            leaf prefix-list {
+              tailf:info "Specify prefix-list with static site targets";
+              description
+                "Specify prefix-list with static site targets";
+              type string {
+                tailf:info "WORD;;prefix-list containing list of site targets";
+              }
+            }
+          }
+          container load-balance {
+            tailf:info "load balance non-policy traffic";
+            description
+              "load balance non-policy traffic";
+            presence "true";
+            leaf advanced {
+              tailf:info "Load balancing configuration mode";
+              description
+                "Load balancing configuration mode";
+              type empty;
+            }
+          }
+          container password {
+            tailf:info "MD5 password to be used with BRs";
+            description
+              "MD5 password to be used with BRs";
+            tailf:cli-compact-syntax;
+            leaf encryption {
+              tailf:cli-drop-node-name;
+              type enumeration {
+                enum "0" {
+                  tailf:info "Specifies an UNENCRYPTED password will follow";
+                }
+                enum "7" {
+                  tailf:info "Specifies HIDDEN password will follow";
+                }
+              }
+            }
+            leaf clear-key {
+              tailf:cli-drop-node-name;
+              tailf:cli-full-command;
+              type string {
+                tailf:info "WORD;;The UNENCRYPTED (cleartext) line password";
+              }
+            }
+          }
+          container site-prefixes {
+            tailf:info "site-prefixes configuration";
+            description
+              "site-prefixes configuration";
+            leaf prefix-list {
+              tailf:info "Specify prefix-list with static site targets";
+              description
+                "Specify prefix-list with static site targets";
+              type string {
+                tailf:info "WORD;;prefix-list containing list of site targets";
+              }
+            }
+          }
+          container source-interface {
+            tailf:info "Source Interface for master controller";
+            description
+              "Source Interface for master controller";
+            leaf Loopback {
+              tailf:info "Loopback interface";
+              description
+                "Loopback interface";
+              tailf:cli-allow-join-with-value {
+                tailf:cli-display-joined;
+              }
+              type uint32 {
+                tailf:info "<0-2147483647>;;Loopback interface number";
+              }
+            }
+          }
+          list class {
+            tailf:info "Create domain class and enter domain class command mode";
+            description
+              "Create domain class and enter domain class command mode";
+            tailf:cli-mode-name "config-domain-vrf-mc-class";
+            key "name sequence";
+            leaf name {
+              type string {
+                tailf:info "WORD;;domain class name";
+              }
+            }
+            leaf sequence {
+              tailf:info "Set the Sequence for the class";
+              description
+                "Set the Sequence for the class";
+              tailf:cli-expose-key-name;
+              type uint16 {
+                tailf:info "<1-65535>;;Sequence number for the class";
+              }
+            }
+            container match {
+              tailf:info "Specify the applications the policy applies to";
+              description
+                "Specify the applications the policy applies to";
+              list dscp {
+                tailf:info "specify DSCP";
+                description
+                  "specify DSCP";
+                tailf:cli-suppress-mode;
+                key "value";
+                leaf value {
+                  type dscp-type;
+                }
+                leaf policy {
+                  tailf:info "Specify the policy (user defined/predefined)";
+                  description
+                    "Specify the policy (user defined/predefined)";
+                  type enumeration {
+                    enum "best-effort" {
+                      tailf:info "domain policy type best effort";
+                    }
+                    enum "bulk-data" {
+                      tailf:info "domain policy type bulk data";
+                    }
+                    enum "custom" {
+                      tailf:info "custom user-defined policy";
+                    }
+                    enum "low-latency-data" {
+                      tailf:info "domain policy type low latency data";
+                    }
+                    enum "real-time-video" {
+                      tailf:info "domain policy type real-time-video";
+                    }
+                    enum "scavenger" {
+                      tailf:info "domain policy type scavenger";
+                    }
+                    enum "voice" {
+                      tailf:info "domain policy type voice";
+                    }
+                  }
+                }
+              }
+            }
+            container path-preference {
+              tailf:info "Specify the preferred provider";
+              description
+                "Specify the preferred provider";
+              tailf:cli-sequence-commands;
+              tailf:cli-compact-syntax;
+              leaf-list primary {
+                description
+                  "Primary service provider";
+                tailf:cli-drop-node-name;
+                tailf:cli-flat-list-syntax;
+                type string {
+                  tailf:info "WORD;;Primary service provider";
+                }
+              }
+              leaf-list fallback {
+                tailf:info "Specify the fallback provider";
+                description
+                  "Specify the fallback provider";
+                tailf:cli-flat-list-syntax;
+                type string {
+                  tailf:info "WORD;;Fallback service provider";
+                }
+              }
+            }
+          }
+          leaf hub-ip {
+            tailf:alt-name "hub";
+            type inet:ipv4-address;
+          }
+        }
+      }
+    }
+    container parser {
+      tailf:info "Configure parser";
+      description
+        "Configure parser";
+      container config {
+        tailf:info "Configure config generation";
+        description
+          "Configure config generation";
+        leaf cache {
+          tailf:info "Cache the configuration";
+          description
+            "Cache the configuration";
+          type enumeration {
+            enum "interface" {
+              tailf:info "Enable caching interface configs";
+            }
+          }
+        }
+        leaf partition {
+          tailf:info "Enable configuration Partitioning";
+          description
+            "Enable configuration Partitioning";
+          tailf:cli-full-command;
+          type empty;
+        }
+      }
+    }
+    container service {
+      tailf:info "Modify use of network based services";
+      description
+        "Modify use of network based services";
+      leaf internal {
+        type empty;
+      }
+      container pad {
+        tailf:info "Enable PAD commands";
+        description
+          "Enable PAD commands";
+        tailf:cli-show-no;
+        presence "true";
+        leaf cmns {
+          tailf:info "Enable PAD over CMNS connections";
+          description
+            "Enable PAD over CMNS connections";
+          type empty;
+        }
+        leaf from-xot {
+          tailf:info "Accept XOT to PAD connections";
+          description
+            "Accept XOT to PAD connections";
+          type empty;
+        }
+        leaf to-xot {
+          tailf:info "Allow outgoing PAD over XOT connections";
+          description
+            "Allow outgoing PAD over XOT connections";
+          type empty;
+        }
+      }
+      leaf password-encryption {
+        tailf:info "Encrypt system passwords";
+        description
+          "Encrypt system passwords";
+        tailf:cli-full-command;
+        type empty;
+      }
+      container timestamps {
+        tailf:info "Timestamp debug/log messages";
+        description
+          "Timestamp debug/log messages";
+        tailf:cli-compact-syntax;
+        tailf:cli-delete-when-empty;
+        presence "true";
+        container debug {
+          tailf:info "Timestamp debug messages";
+          description
+            "Timestamp debug messages";
+          container datetime {
+            tailf:info "Timestamp with date and time";
+            description
+              "Timestamp with date and time";
+            tailf:cli-compact-syntax;
+            tailf:cli-delete-when-empty;
+            presence "true";
+            leaf msec {
+              tailf:info "Include milliseconds in timestamp";
+              description
+                "Include milliseconds in timestamp";
+              type empty;
+            }
+            leaf localtime {
+              tailf:info "Use local time zone for timestamps";
+              description
+                "Use local time zone for timestamps";
+              type empty;
+            }
+            leaf show-timezone {
+              tailf:info "Add time zone information to timestamp";
+              description
+                "Add time zone information to timestamp";
+              type empty;
+            }
+            leaf year {
+              tailf:info "Include year in timestamp";
+              description
+                "Include year in timestamp";
+              type empty;
+            }
+          }
+          leaf uptime {
+            tailf:info "Timestamp with system uptime";
+            description
+              "Timestamp with system uptime";
+            type empty;
+          }
+        }
+        container log {
+          tailf:info "Timestamp log messages";
+          description
+            "Timestamp log messages";
+          container datetime {
+            tailf:info "Timestamp with date and time";
+            description
+              "Timestamp with date and time";
+            tailf:cli-compact-syntax;
+            tailf:cli-delete-when-empty;
+            presence "true";
+            leaf msec {
+              tailf:info "Include milliseconds in timestamp";
+              description
+                "Include milliseconds in timestamp";
+              type empty;
+            }
+            leaf localtime {
+              tailf:info "Use local time zone for timestamps";
+              description
+                "Use local time zone for timestamps";
+              type empty;
+            }
+            leaf show-timezone {
+              tailf:info "Add time zone information to timestamp";
+              description
+                "Add time zone information to timestamp";
+              type empty;
+            }
+            leaf year {
+              tailf:info "Include year in timestamp";
+              description
+                "Include year in timestamp";
+              type empty;
+            }
+          }
+          leaf uptime {
+            tailf:info "Timestamp with system uptime";
+            description
+              "Timestamp with system uptime";
+            type empty;
+          }
+        }
+      }
+      container alignment {
+        tailf:info "Control alignment correction and logging";
+        description
+          "Control alignment correction and logging";
+        leaf detection {
+          tailf:info "Enable detection of alignment issues";
+          description
+            "Enable detection of alignment issues";
+          type empty;
+        }
+        leaf logging {
+          tailf:info "Enable logging of alignment issues";
+          description
+            "Enable logging of alignment issues";
+          type empty;
+        }
+      }
+      leaf call-home {
+        tailf:info "Enable call-home service";
+        description
+          "Enable call-home service";
+        tailf:cli-full-command;
+        type empty;
+      }
+      leaf compress-config {
+        tailf:info "Compress the configuration file";
+        description
+          "Compress the configuration file";
+        tailf:cli-full-command;
+        type empty;
+      }
+      leaf config {
+        tailf:info "TFTP load config files";
+        description
+          "TFTP load config files";
+        tailf:cli-full-command;
+        type empty;
+      }
+      container counters {
+        tailf:info "Control aging of interface counters";
+        description
+          "Control aging of interface counters";
+        container max {
+          tailf:info "Maximum counter aging threshold";
+          description
+            "Maximum counter aging threshold";
+          leaf age {
+            tailf:info "Aging threshold";
+            description
+              "Aging threshold";
+            type uint8 {
+              tailf:info "<0-60>;;Aging threshold value in seconds";
+              range "0..60";
+            }
+          }
+        }
+      }
+      leaf dhcp {
+        tailf:info "Enable DHCP server and relay agent";
+        description
+          "Enable DHCP server and relay agent";
+        tailf:cli-full-command;
+        type empty;
+      }
+      leaf disable-ip-fast-frag {
+        tailf:info "Disable IP particle-based fast fragmentation";
+        description
+          "Disable IP particle-based fast fragmentation";
+        tailf:cli-full-command;
+        type empty;
+      }
+      leaf exec-callback {
+        tailf:info "Enable exec callback";
+        description
+          "Enable exec callback";
+        tailf:cli-full-command;
+        type empty;
+      }
+      leaf exec-wait {
+        tailf:info "Delay EXEC startup on noisy lines";
+        description
+          "Delay EXEC startup on noisy lines";
+        tailf:cli-full-command;
+        type empty;
+      }
+      leaf finger {
+        tailf:info "Allow responses to finger requests";
+        description
+          "Allow responses to finger requests";
+        tailf:cli-full-command;
+        type empty;
+      }
+      container heartbeat {
+        tailf:info "Enable heartbeat processing";
+        description
+          "Enable heartbeat processing";
+        leaf fatal-count {
+          tailf:info "Set heartbeat fatal count";
+          description
+            "Set heartbeat fatal count";
+          type uint8 {
+            tailf:info "<1-60>;;Number of timeouts until fatal error occurs";
+            range "1..60";
+          }
+        }
+        leaf interrupt-interval {
+          tailf:info "Set heartbeat interrupt test interval";
+          description
+            "Set heartbeat interrupt test interval";
+          type uint8 {
+            tailf:info "<0-60>;;Interval between interrupt level tests";
+            range "0..60";
+          }
+        }
+        leaf interrupt-max {
+          tailf:info "Set maximum message count from interrupt test";
+          description
+            "Set maximum message count from interrupt test";
+          type uint8 {
+            tailf:info "<0-60>;;Maximum number of messages from interrupt test";
+            range "0..60";
+          }
+        }
+        leaf transmit-interval {
+          tailf:info "Set heartbeat transmit interval";
+          description
+            "Set heartbeat transmit interval";
+          type uint8 {
+            tailf:info "<1-30>;;Interval between heartbeat transmissions";
+            range "1..30";
+          }
+        }
+        leaf warning-timeout {
+          tailf:info "Set heartbeat warning timeout interval";
+          description
+            "Set heartbeat warning timeout interval";
+          type uint8 {
+            tailf:info "<5-60>;;Interval between heartbeat timeout warnings";
+            range "5..60";
+          }
+        }
+      }
+      leaf hide-telnet-addresses {
+        tailf:info "Hide destination addresses in telnet command";
+        description
+          "Hide destination addresses in telnet command";
+        tailf:cli-full-command;
+        type empty;
+      }
+      leaf linenumber {
+        tailf:info "enable line number banner for each exec";
+        description
+          "enable line number banner for each exec";
+        tailf:cli-full-command;
+        type empty;
+      }
+      leaf nagle {
+        tailf:info "Enable Nagle's congestion control algorithm";
+        description
+          "Enable Nagle's congestion control algorithm";
+        tailf:cli-full-command;
+        type empty;
+      }
+      leaf old-slip-prompts {
+        tailf:info "Allow old scripts to operate with slip/ppp";
+        description
+          "Allow old scripts to operate with slip/ppp";
+        tailf:cli-full-command;
+        type empty;
+      }
+      leaf pt-vty-logging {
+        tailf:info "Log significant VTY-Async events";
+        description
+          "Log significant VTY-Async events";
+        tailf:cli-full-command;
+        type empty;
+      }
+      leaf sequence-numbers {
+        tailf:info "Stamp logger messages with a sequence number";
+        description
+          "Stamp logger messages with a sequence number";
+        tailf:cli-full-command;
+        type empty;
+      }
+      leaf slave-log {
+        tailf:info "Enable log capability of slave IPs";
+        description
+          "Enable log capability of slave IPs";
+        tailf:cli-full-command;
+        type empty;
+      }
+      leaf tcp-keepalives-in {
+        tailf:info "Generate keepalives on idle incoming network connections";
+        description
+          "Generate keepalives on idle incoming network connections";
+        tailf:cli-full-command;
+        type empty;
+      }
+      leaf tcp-keepalives-out {
+        tailf:info "Generate keepalives on idle outgoing network connections";
+        description
+          "Generate keepalives on idle outgoing network connections";
+        tailf:cli-full-command;
+        type empty;
+      }
+      leaf tcp-small-servers {
+        tailf:info "Enable small TCP servers (e.g., ECHO)";
+        description
+          "Enable small TCP servers (e.g., ECHO)";
+        tailf:cli-show-no;
+        type empty;
+      }
+      leaf udp-small-servers {
+        tailf:info "Enable small UDP servers (e.g., ECHO)";
+        description
+          "Enable small UDP servers (e.g., ECHO)";
+        tailf:cli-show-no;
+        type empty;
+      }
+      leaf unsupported-transceiver {
+        tailf:info "";
+        description
+          "";
+        tailf:cli-full-command;
+        type empty;
+      }
+    }
+    container platform {
+      tailf:info "platform specific configuration";
+      description
+        "platform specific configuration";
+      leaf atm-cdvt {
+        tailf:info "Configure platform atm cdvt";
+        description
+          "Configure platform atm cdvt";
+        tailf:cli-boolean-no;
+        type boolean;
+      }
+      container bfd {
+        tailf:info "Platform specific BFD commands";
+        description
+          "Platform specific BFD commands";
+        leaf disable-offload {
+          tailf:info "Disable bfd hw offload";
+          description
+            "Disable bfd hw offload";
+          type empty;
+        }
+        leaf allow-svi {
+          tailf:cli-full-command;
+          type empty;
+        }
+        leaf enable-offload {
+          tailf:cli-full-command;
+          type empty;
+        }
+      }
+      leaf bfd-debug-trace {
+        type uint8;
+      }
+      container console {
+        tailf:info "Direct IOS output to console";
+        description
+          "Direct IOS output to console";
+        presence "true";
+        leaf output {
+          tailf:cli-drop-node-name;
+          type enumeration {
+            enum "auto" {
+              tailf:info "Autodetect console (Serial,VGA) for IOS output";
+            }
+            enum "serial" {
+              tailf:info "Direct IOS output to serial port";
+            }
+            enum "virtual" {
+              tailf:info "Direct IOS output to virtual console";
+            }
+          }
+        }
+      }
+      container enable {
+        list controller {
+          tailf:cli-suppress-mode;
+          key "SONET";
+          leaf SONET {
+            tailf:info "SONET";
+            description
+              "SONET";
+            tailf:cli-expose-key-name;
+            type string;
+            tailf:non-strict-leafref {
+              path "/ios:native/controller/SONET/name";
+            }
+          }
+        }
+      }
+      container external-alarm {
+        tailf:cli-sequence-commands;
+        tailf:cli-compact-syntax;
+        leaf line {
+          type uint32;
+        }
+        leaf alarm {
+          type logging-level-type;
+        }
+      }
+      container hardware {
+        tailf:info "Configure platform hardware";
+        description
+          "Configure platform hardware";
+        container lite {
+          leaf license {
+            type enumeration {
+              enum "enable";
+            }
+          }
+        }
+        container throughput {
+          tailf:info "Configure throughput";
+          description
+            "Configure throughput";
+          choice throughput-choice {
+            leaf disable {
+              tailf:info "Disable throughput upgrade licenses";
+              description
+                "Disable throughput upgrade licenses";
+              type enumeration {
+                enum "internal-license" {
+                  tailf:info "Disable throughput internal license";
+                }
+              }
+            }
+            container level {
+              tailf:info "Configure the current traffic throughput level";
+              description
+                "Configure the current traffic throughput level";
+              tailf:cli-compact-syntax;
+              tailf:cli-sequence-commands;
+              leaf kbps {
+                tailf:cli-drop-node-name;
+                type enumeration {
+                  enum "10000" {
+                    tailf:info "throughput in kbps";
+                  }
+                  enum "25000" {
+                    tailf:info "throughput in kbps";
+                  }
+                  enum "50000" {
+                    tailf:info "throughput in kbps";
+                  }
+                }
+              }
+              leaf eval-only {
+                tailf:info "Use only evaluation license";
+                description
+                  "Use only evaluation license";
+                type empty;
+              }
+            }
+          }
+        }
+      }
+      container ipsec {
+        tailf:info "Platform specific ipsec command";
+        description
+          "Platform specific ipsec command";
+        leaf fips-mode {
+          tailf:info "enable FIPS mode";
+          description
+            "enable FIPS mode";
+          type empty;
+        }
+        leaf gdoi {
+          tailf:info "gdoi";
+          description
+            "gdoi";
+          type enumeration {
+            enum "accept-both" {
+              tailf:info "7200 like behaviour";
+            }
+          }
+        }
+        container llq {
+          tailf:info "config LLQ";
+          description
+            "config LLQ";
+          leaf qos-group {
+            tailf:info "config LLQ QoS Group";
+            description
+              "config LLQ QoS Group";
+            type uint8 {
+              tailf:info "<1-99>;;QoS group";
+              range "1..99";
+            }
+          }
+        }
+        container reassemble {
+          tailf:info "reassemble packets";
+          description
+            "reassemble packets";
+          leaf transit {
+            tailf:info "transit IPSEC packets";
+            description
+              "transit IPSEC packets";
+            type empty;
+          }
+        }
+      }
+      container multicast {
+        tailf:info "Configure multicast";
+        description
+          "Configure multicast";
+        container mgre {
+          tailf:info "Multi-point GRE tunnel";
+          description
+            "Multi-point GRE tunnel";
+          leaf injection {
+            tailf:info "Enable packet injection";
+            description
+              "Enable packet injection";
+            type empty;
+          }
+        }
+        container oce {
+          tailf:info "multicast oce";
+          description
+            "multicast oce";
+          container flag {
+            tailf:info "multicast oce flag";
+            description
+              "multicast oce flag";
+            leaf suppress {
+              tailf:info "Enable oce flag suppress";
+              description
+                "Enable oce flag suppress";
+              type empty;
+            }
+          }
+        }
+      }
+      container punt-keepalive {
+        tailf:info "punt-keepalive messages";
+        description
+          "punt-keepalive messages";
+        leaf disable-kernel-core {
+          tailf:info "Disable IOSXE kernel core generation for keepalive fault";
+          description
+            "Disable IOSXE kernel core generation for keepalive fault";
+          type boolean;
+          tailf:cli-boolean-no;
+        }
+        container settings {
+          tailf:info "Set the keepalive parameters";
+          description
+            "Set the keepalive parameters";
+          leaf fatal-count {
+            tailf:info "Set punt-inject keepalive fatal count";
+            description
+              "Set punt-inject keepalive fatal count";
+            type uint16 {
+              tailf:info "<15-60>;;Number of timeouts until fatal error occurs";
+              range "15..60";
+            }
+          }
+          leaf transmit-interval {
+            tailf:info "Set punt-inject keepalive transmit interval";
+            description
+              "Set punt-inject keepalive transmit interval";
+            type uint16 {
+              tailf:info "<2-30>;;Interval between punt/inject keepalive transmissions";
+              range "2..30";
+            }
+          }
+          leaf warning-count {
+            tailf:info "Set punt-inject keepalive warning count";
+            description
+              "Set punt-inject keepalive warning count";
+            type uint16 {
+              tailf:info "<10-60>;;Interval between punt/inject keepalive timeout warnings";
+              range "10..60";
+            }
+          }
+        }
+      }
+      container punt-policer {
+        tailf:info "Configures punt policers";
+        description
+          "Configures punt policers";
+        tailf:cli-compact-syntax;
+        tailf:cli-sequence-commands {
+          tailf:cli-reset-siblings;
+        }
+        leaf cause {
+          tailf:cli-drop-node-name;
+          type uint8 {
+            tailf:info "<1-89>;;Punt cause to be policed";
+            range "1..89";
+          }
+        }
+        leaf max-rate {
+          tailf:cli-drop-node-name;
+          type uint16 {
+            tailf:info "<10-32000>;;max punt rate for cause MPLS ICMP Can't Frag";
+            range "10..32000";
+          }
+        }
+        leaf high {
+          tailf:info "High priority traffic only";
+          description
+            "High priority traffic only";
+          type empty;
+        }
+      }
+      container qos {
+        tailf:info "Platform specific qos configuration";
+        description
+          "Platform specific qos configuration";
+        leaf marker-statistics {
+          tailf:info "Configure marking statistics";
+          description
+            "Configure marking statistics";
+          type empty;
+        }
+        container match-statistics {
+          tailf:info "Configure match stats";
+          description
+            "Configure match stats";
+          leaf per-filter {
+            tailf:info "Configure per-filter match statistics";
+            description
+              "Configure per-filter match statistics";
+            tailf:cli-full-command;
+            type empty;
+          }
+          leaf per-ace {
+            tailf:info "Configure per-ace match statistics (per-filter must be enabled first)";
+            description
+              "Configure per-ace match statistics (per-filter must be enabled first)";
+            tailf:cli-full-command;
+            type empty;
+          }
+        }
+        leaf performance-monitor {
+          tailf:info "Configure performance-monitor statistics";
+          description
+            "Configure performance-monitor statistics";
+          type empty;
+        }
+      }
+      container reload {
+        tailf:info "Platform specific reload command";
+        description
+          "Platform specific reload command";
+        leaf immediate {
+          tailf:info "Immediately stop forwarding traffic";
+          description
+            "Immediately stop forwarding traffic";
+          type empty;
+        }
+      }
+      leaf shell {
+        tailf:info "Control platform shell access command availability";
+        description
+          "Control platform shell access command availability";
+        type boolean;
+        tailf:cli-boolean-no;
+      }
+      leaf tcam-parity-error {
+        type enumeration {
+          enum "enable";
+          enum "disable";
+        }
+      }
+      container tcam-threshold {
+        leaf alarm-frequency {
+          type uint32;
+        }
+      }
+      container trace {
+        list runtime {
+          tailf:cli-suppress-mode;
+          key "slot bay";
+          leaf slot {
+            tailf:cli-expose-key-name;
+            type uint8;
+          }
+          leaf bay {
+            tailf:cli-expose-key-name;
+            type uint8;
+          }
+          leaf process {
+            tailf:cli-hide-in-submode;
+            type enumeration {
+              enum "iomd";
+            }
+          }
+          leaf module {
+            tailf:cli-hide-in-submode;
+            type enumeration {
+              enum "all-modules";
+            }
+          }
+          leaf level {
+            tailf:cli-hide-in-submode;
+            type enumeration {
+              enum "info";
+            }
+          }
+        }
+      }
+    }
+    leaf hostname {
+      tailf:info "Set system's network name";
+      description
+        "Set system's network name";
+      tailf:cli-no-value-on-delete;
+      type string {
+        tailf:info "This system's network name";
+      }
+    }
+    container enable {
+      tailf:info "Modify enable password parameters";
+      description
+        "Modify enable password parameters";
+      container password {
+        tailf:info "Assign the privileged level password (MAX of 25 characters)";
+        description
+          "Assign the privileged level password (MAX of 25 characters)";
+        tailf:cli-compact-syntax;
+        tailf:cli-sequence-commands;
+        tailf:cli-reset-container;
+        uses password-07-grouping;
+      }
+      leaf last-resort {
+        tailf:info "Define enable action if no TACACS servers respond";
+        description
+          "Define enable action if no TACACS servers respond";
+        tailf:cli-full-command;
+        type enumeration {
+          enum "password" {
+            tailf:info "Enable by giving the local enable password";
+          }
+          enum "succeed" {
+            tailf:info "Enable without further question";
+          }
+        }
+      }
+      container secret {
+        tailf:info "Assign the privileged level secret";
+        description
+          "Assign the privileged level secret";
+        tailf:cli-compact-syntax;
+        tailf:cli-sequence-commands;
+        leaf level {
+          tailf:info "Set exec level password";
+          description
+            "Set exec level password";
+          tailf:cli-optional-in-sequence;
+          type uint8 {
+            tailf:info "<1-15>;;Level number";
+          }
+        }
+        leaf type {
+          tailf:cli-drop-node-name;
+          tailf:cli-optional-in-sequence;
+          type enumeration {
+            enum "0" {
+              tailf:info "Specifies an UNENCRYPTED password will follow";
+            }
+            enum "4";
+            enum "5" {
+              tailf:info "Specifies an ENCRYPTED secret will follow";
+            }
+          }
+        }
+        leaf secret {
+          tailf:cli-drop-node-name;
+          type string {
+            tailf:info "LINE;;The UNENCRYPTED (cleartext) 'enable' secret";
+          }
+        }
+      }
+      leaf use-tacacs {
+        tailf:info "Use TACACS to check enable passwords";
+        description
+          "Use TACACS to check enable passwords";
+        tailf:cli-full-command;
+        type empty;
+      }
+    }
+    container archive {
+      tailf:info "Archive the configuration";
+      description
+        "Archive the configuration";
+      tailf:cli-add-mode;
+      tailf:cli-mode-name "config-archive";
+      container log {
+        tailf:info "Logging commands";
+        description
+          "Logging commands";
+        container config {
+          tailf:info "Logging changes to the running configuration";
+          description
+            "Logging changes to the running configuration";
+          tailf:cli-add-mode;
+          tailf:cli-mode-name "config-archive-log-cfg";
+          leaf hidekeys {
+            tailf:info "suppress output (e.g. passwords) when displaying logged commands";
+            description
+              "suppress output (e.g. passwords) when displaying logged commands";
+            type empty;
+          }
+          container logging {
+            tailf:info "Modify config logging parameters";
+            description
+              "Modify config logging parameters";
+            leaf enable {
+              tailf:info "Enable the config logger";
+              description
+                "Enable the config logger";
+              type empty;
+            }
+            leaf size {
+              tailf:info "Maximum number of logged commands that will be kept by the config log";
+              description
+                "Maximum number of logged commands that will be kept by the config log";
+              type uint16 {
+                tailf:info "<1-1000>;;Queue length (default 100)";
+                range "1..1000";
+              }
+            }
+            container persistent {
+              tailf:info "Log configuration persistent";
+              description
+                "Log configuration persistent";
+              presence "true";
+              leaf auto {
+                tailf:info "Log configuration commands automatically";
+                description
+                  "Log configuration commands automatically";
+                type empty;
+              }
+              leaf reload {
+                tailf:info "Apply persisted commands on reload";
+                description
+                  "Apply persisted commands on reload";
+                type empty;
+              }
+            }
+          }
+          container notify {
+            tailf:info "Send logged commands to target applications";
+            description
+              "Send logged commands to target applications";
+            container syslog {
+              tailf:info "Send logged commands as syslog messages";
+              description
+                "Send logged commands as syslog messages";
+              presence "true";
+              leaf contenttype {
+                tailf:info "Type of the syslog message content";
+                description
+                  "Type of the syslog message content";
+                type enumeration {
+                  enum "plaintext" {
+                    tailf:info "Plain text content";
+                  }
+                  enum "xml" {
+                    tailf:info "XML content";
+                  }
+                }
+              }
+            }
+          }
+        }
+      }
+      leaf path {
+        tailf:info "path for backups";
+        description
+          "path for backups";
+        type enumeration {
+          enum "bootflash:" {
+            tailf:info "Write archive on bootflash: file system";
+          }
+          enum "flash:" {
+            tailf:info "Write archive on flash: file system";
+          }
+          enum "ftp:" {
+            tailf:info "Write archive on ftp: file system";
+          }
+          enum "harddisk:" {
+            tailf:info "Write archive on harddisk: file system";
+          }
+          enum "http:" {
+            tailf:info "Write archive on http: file system";
+          }
+          enum "https:" {
+            tailf:info "Write archive on https: file system";
+          }
+          enum "pram:" {
+            tailf:info "Write archive on pram: file system";
+          }
+          enum "rcp:" {
+            tailf:info "Write archive on rcp: file system";
+          }
+          enum "scp:" {
+            tailf:info "Write archive on scp: file system";
+          }
+          enum "tftp:" {
+            tailf:info "Write archive on tftp: file system";
+          }
+        }
+      }
+    }
+    list username {
+      tailf:info "Establish User Name Authentication";
+      description
+        "Establish User Name Authentication";
+      tailf:cli-suppress-mode;
+      tailf:cli-delete-when-empty;
+      tailf:cli-compact-syntax;
+      key "name";
+      leaf name {
+        type string {
+          tailf:info "WORD;;User name";
+        }
+      }
+      leaf privilege {
+        tailf:info "Set user privilege level";
+        description
+          "Set user privilege level";
+        type uint8 {
+          tailf:info "<0-15>;;User privilege level";
+          range "0..15";
+        }
+      }
+      container password {
+        tailf:info "Specify the password for the user";
+        description
+          "Specify the password for the user";
+        tailf:cli-compact-syntax;
+        tailf:cli-flatten-container;
+        tailf:cli-sequence-commands;
+        tailf:cli-reset-container;
+        leaf encryption {
+          tailf:cli-drop-node-name;
+          tailf:cli-incomplete-command;
+          tailf:cli-optional-in-sequence;
+          type enumeration {
+            enum "0" {
+              tailf:info "Specifies an UNENCRYPTED password will follow";
+            }
+            enum "7" {
+              tailf:info "Specifies a HIDDEN password will follow";
+            }
+          }
+        }
+        leaf password {
+          tailf:cli-drop-node-name;
+          tailf:cli-trim-default;
+          type string {
+            tailf:info "WORD;;The HIDDEN user password string";
+          }
+        }
+      }
+      container secret {
+        tailf:info "Specify the secret for the user";
+        description
+          "Specify the secret for the user";
+        tailf:cli-compact-syntax;
+        tailf:cli-flatten-container;
+        tailf:cli-sequence-commands;
+        tailf:cli-reset-container;
+        leaf encryption {
+          tailf:cli-drop-node-name;
+          tailf:cli-incomplete-command;
+          tailf:cli-optional-in-sequence;
+          type enumeration {
+            enum "0" {
+              tailf:info "Specifies an UNENCRYPTED secret will follow";
+            }
+            enum "5" {
+              tailf:info "Specifies a HIDDEN secret will follow";
+            }
+          }
+        }
+        leaf secret {
+          tailf:cli-drop-node-name;
+          tailf:cli-trim-default;
+          type string {
+            tailf:info "WORD;;The HIDDEN user secret string";
+          }
+        }
+      }
+    }
+    container controller {
+      tailf:info "Configure controller";
+      description
+        "Configure controller";
+      list controller-tx-ex-list {
+        tailf:cli-drop-node-name;
+        tailf:cli-mode-name "config-controller";
+        key "name number";
+        leaf name {
+          type enumeration {
+            tailf:info "Controller name";
+            enum "t1";
+            enum "e1";
+            enum "t3";
+            enum "T1" {
+              tailf:info "T1 controller";
+            }
+            enum "E1" {
+              tailf:info "E1 controller";
+            }
+            enum "T3" {
+              tailf:info "T3 controller";
+            }
+          }
+        }
+        leaf number {
+          type string;
+        }
+        leaf atm {
+          tailf:info "Specify atm";
+          description
+            "Specify atm";
+          tailf:cli-full-command;
+          type empty;
+        }
+        leaf framing {
+          tailf:cli-full-command;
+          type string;
+        }
+        container clock {
+          container source {
+            choice source-choice {
+              container line {
+                presence "true";
+                leaf line-mode {
+                  tailf:cli-drop-node-name;
+                  tailf:cli-full-command;
+                  type enumeration {
+                    enum "primary";
+                    enum "secondary";
+                  }
+                }
+              }
+              leaf internal {
+                tailf:cli-full-command;
+                type empty;
+              }
+              leaf loop-timed {
+                tailf:cli-full-command;
+                type empty;
+              }
+            }
+          }
+        }
+        leaf linecode {
+          tailf:cli-full-command;
+          type enumeration {
+            enum "ami";
+            enum "b8zs";
+            enum "hdb3";
+          }
+        }
+        container cablelength {
+          choice cablelength-choice {
+            leaf long {
+              tailf:cli-full-command;
+              type string;
+            }
+            leaf short {
+              tailf:cli-full-command;
+              type string;
+            }
+          }
+        }
+        list channel-group {
+          tailf:cli-suppress-mode;
+          tailf:cli-delete-when-empty;
+          key "number";
+          leaf number {
+            type uint8 {
+              range "0..30";
+            }
+          }
+          leaf-list timeslots {
+            tailf:cli-replace-all;
+            tailf:cli-range-list-syntax;
+            type union {
+              type uint16;
+              type string;
+            }
+          }
+        }
+      }
+      list Cellular {
+        key "id";
+        leaf id {
+          type string;
+        }
+        container lte {
+          container modem {
+            container link-recovery {
+              container rssi {
+                leaf onset-threshold {
+                  type int32;
+                }
+              }
+              leaf monitor-timer {
+                tailf:cli-full-command;
+                type uint32;
+              }
+              leaf wait-timer {
+                tailf:cli-full-command;
+                type uint32;
+              }
+              leaf debounce-count {
+                tailf:cli-full-command;
+                type uint32;
+              }
+            }
+          }
+        }
+      }
+      list SONET {
+        tailf:info "SONET";
+        description
+          "SONET";
+        tailf:cli-allow-join-with-key {
+          tailf:cli-display-joined;
+        }
+        tailf:cli-mode-name "config-sonet";
+        tailf:cli-suppress-key-abbreviation;
+        tailf:cli-full-command;
+        key "name";
+        leaf name {
+          type string {
+            tailf:info "<0-255>/<0-255>/<0-255>;;SONET controller number";
+          }
+        }
+        uses sonet-grouping;
+      }
+      list SONET-ACR {
+        tailf:info "SONET-ACR";
+        description
+          "SONET-ACR";
+        tailf:cli-allow-join-with-key {
+          tailf:cli-display-joined;
+        }
+        tailf:cli-mode-name "config-sonet";
+        tailf:cli-suppress-key-abbreviation;
+        tailf:cli-full-command;
+        key "name";
+        leaf name {
+          type string {
+            tailf:info "<0-255>;;SONET-ACR controller number";
+            pattern "([0-9\\.])+";
+          }
+        }
+        uses sonet-grouping;
+      }
+      list wanphy {
+        tailf:info "wanphy";
+        description
+          "wanphy";
+        tailf:cli-allow-join-with-key {
+          tailf:cli-display-joined;
+        }
+        tailf:cli-mode-name "config-sonet";
+        tailf:cli-suppress-key-abbreviation;
+        tailf:cli-full-command;
+        key "name";
+        leaf name {
+          type string {
+            tailf:info "<0-255>/<0-255>/<0-255>;;SONET controller number";
+          }
+        }
+      }
+    }
+    container vrf {
+      tailf:info "VRF commands";
+      description
+        "VRF commands";
+      list definition {
+        tailf:info "VRF definition mode";
+        description
+          "VRF definition mode";
+        tailf:cli-full-command;
+        tailf:cli-mode-name "config-vrf";
+        key "name";
+        leaf name {
+          tailf:info "WORD;;VRF name";
+          description
+            "WORD;;VRF name";
+          type string;
+        }
+        leaf description {
+          tailf:info "VRF specific description";
+          description
+            "VRF specific description";
+          tailf:cli-multi-value;
+          type string {
+            tailf:info "LINE;;Up to 244 characters describing this VRF";
+            length "1..244";
+          }
+        }
+        leaf rd {
+          tailf:info "Specify Route Distinguisher";
+          description
+            "Specify Route Distinguisher";
+          tailf:cli-full-command;
+          type union {
+            type string {
+              tailf:info "ASN:nn or IP-address:nn;;VPN Route Distinguisher";
+              pattern "[0-9]+:[0-9]+";
+            }
+            type inet:ipv4-address;
+          }
+        }
+        container address-family {
+          tailf:info "Enter Address Family command mode";
+          description
+            "Enter Address Family command mode";
+          container ipv4 {
+            tailf:info "Address family";
+            description
+              "Address family";
+            tailf:cli-exit-command "exit-address-family";
+            tailf:cli-add-mode;
+            presence "true";
+            container export {
+              tailf:info "VRF export";
+              description
+                "VRF export";
+              tailf:cli-incomplete-command;
+              leaf map {
+                tailf:info "WORD;;Route-map reference";
+                description
+                  "WORD;;Route-map reference";
+                type string;
+              }
+            }
+            container mdt {
+              tailf:info "Backbone Multicast Distribution Tree";
+              description
+                "Backbone Multicast Distribution Tree";
+              container default {
+                tailf:info "The default group";
+                description
+                  "The default group";
+                leaf address {
+                  tailf:cli-drop-node-name;
+                  tailf:cli-full-command;
+                  tailf:cli-remove-before-change;
+                  type inet:ipv4-address {
+                    tailf:info "A.B.C.D;;IP multicast group address";
+                  }
+                }
+                container mpls {
+                  tailf:info "MPLS tunnel options";
+                  description
+                    "MPLS tunnel options";
+                  leaf mldp {
+                    tailf:info "Use a MLDP LSP to create the default MDT";
+                    description
+                      "Use a MLDP LSP to create the default MDT";
+                    type inet:ipv4-address {
+                      tailf:info "A.B.C.D;;MP2MP LSP root address";
+                    }
+                  }
+                }
+              }
+              container data {
+                tailf:info "MDT data trees";
+                description
+                  "MDT data trees";
+                list multicast {
+                  tailf:cli-drop-node-name;
+                  tailf:cli-suppress-mode;
+                  tailf:cli-delete-when-empty;
+                  key "address wildcard";
+                  leaf address {
+                    type inet:ipv4-address {
+                      tailf:info "A.B.C.D;;  IP multicast group address";
+                    }
+                  }
+                  leaf wildcard {
+                    type inet:ipv4-address {
+                      tailf:info "A.B.C.D;;Wildcard bits";
+                    }
+                  }
+                }
+                leaf list {
+                  tailf:info "Access-list";
+                  description
+                    "Access-list";
+                  type ext-acl-type;
+                }
+                leaf threshold {
+                  tailf:info "MDT switching threshold";
+                  description
+                    "MDT switching threshold";
+                  type uint32 {
+                    tailf:info "<1-4294967>;;Traffic rate in kilobits per second";
+                  }
+                }
+              }
+              leaf log-reuse {
+                tailf:info "Event logging for data MDT reuse";
+                description
+                  "Event logging for data MDT reuse";
+                type empty;
+              }
+              leaf-list preference {
+                tailf:info "MDT preference (default pim mldp)";
+                description
+                  "MDT preference (default pim mldp)";
+                tailf:cli-flat-list-syntax {
+                  tailf:cli-replace-all;
+                }
+                type enumeration {
+                  enum "mldp" {
+                    tailf:info "MDT preference mLDP";
+                  }
+                  enum "pim" {
+                    tailf:info "MDT preference PIM";
+                  }
+                }
+              }
+            }
+            container route-target {
+              tailf:info "Specify Target VPN Extended Communities";
+              description
+                "Specify Target VPN Extended Communities";
+              uses vrf-route-target-grouping;
+            }
+          }
+          container ipv6 {
+            tailf:info "Address family";
+            description
+              "Address family";
+            tailf:cli-exit-command "exit-address-family";
+            tailf:cli-add-mode;
+            presence "true";
+            container route-target {
+              tailf:info "Specify Target VPN Extended Communities";
+              description
+                "Specify Target VPN Extended Communities";
+              uses vrf-route-target-grouping;
+            }
+          }
+        }
+        container route-target {
+          tailf:info "Specify Target VPN Extended Communities";
+          description
+            "Specify Target VPN Extended Communities";
+          uses vrf-route-target-grouping;
+        }
+      }
+    }
+    container rmon {
+      tailf:info "Remote Monitoring";
+      description
+        "Remote Monitoring";
+      list alarm {
+        tailf:info "Configure an RMON alarm";
+        description
+          "Configure an RMON alarm";
+        tailf:cli-suppress-mode;
+        tailf:cli-sequence-commands;
+        tailf:cli-compact-syntax;
+        key "number";
+        leaf number {
+          type uint16 {
+            tailf:info "<1-65535>;;alarm number";
+          }
+        }
+        leaf mib-object {
+          tailf:cli-drop-node-name;
+          type string {
+            tailf:info "WORD;;MIB object to monitor";
+          }
+        }
+        leaf sample-interval {
+          tailf:cli-drop-node-name;
+          type uint32 {
+            tailf:info "<1-2147483647>;;Sample interval";
+          }
+        }
+        leaf test-mode {
+          tailf:cli-drop-node-name;
+          type enumeration {
+            enum "absolute" {
+              tailf:info "Test each sample directly";
+            }
+            enum "delta" {
+              tailf:info "Test delta between samples";
+            }
+          }
+        }
+        leaf rising-threshold {
+          tailf:info "Configure the rising threshold";
+          description
+            "Configure the rising threshold";
+          type int32 {
+            tailf:info "<-2147483648 - 2147483647>;;rising threshold value";
+          }
+        }
+        leaf rising-event {
+          tailf:cli-drop-node-name;
+          tailf:cli-optional-in-sequence;
+          type uint16 {
+            tailf:info "<1-65535>;;Event to fire on rising threshold crossing";
+          }
+        }
+        leaf falling-threshold {
+          tailf:info "Configure the falling threshold";
+          description
+            "Configure the falling threshold";
+          type int32 {
+            tailf:info "<-2147483648 - 2147483647>;;falling threshold value";
+          }
+        }
+        leaf falling-event {
+          tailf:cli-drop-node-name;
+          tailf:cli-optional-in-sequence;
+          type uint16 {
+            tailf:info "<1-65535>;;Event to fire on falling threshold crossing";
+          }
+        }
+        leaf owner {
+          tailf:info "Specify an owner for the alarm";
+          description
+            "Specify an owner for the alarm";
+          type string {
+            tailf:info "WORD;;Alarm owner";
+          }
+        }
+      }
+      list event {
+        tailf:info "Configure an RMON event";
+        description
+          "Configure an RMON event";
+        tailf:cli-suppress-mode;
+        key "number";
+        leaf number {
+          type uint16 {
+            tailf:info "<1-65535>;;event number";
+          }
+        }
+        container log {
+          tailf:info "Generate RMON log when the event fires";
+          description
+            "Generate RMON log when the event fires";
+          tailf:cli-compact-syntax;
+          presence "true";
+          leaf trap {
+            tailf:info "Generate SNMP trap when the event fires";
+            description
+              "Generate SNMP trap when the event fires";
+            type string {
+              tailf:info "WORD;;SNMP community string";
+            }
+          }
+          leaf description {
+            tailf:info "Specify a description of the event";
+            description
+              "Specify a description of the event";
+            type string {
+              tailf:info "WORD;;Event description";
+            }
+          }
+          leaf owner {
+            tailf:info "Specify an owner for the event";
+            description
+              "Specify an owner for the event";
+            type string {
+              tailf:info "WORD;;Event owner";
+            }
+          }
+        }
+      }
+    }
+    container flow {
+      tailf:info "Global Flow configuration subcommands";
+      description
+        "Global Flow configuration subcommands";
+      list record {
+        tailf:info "Define a Flow Record";
+        description
+          "Define a Flow Record";
+        tailf:cli-mode-name "config-flow-record";
+        key "name";
+        leaf name {
+          type string {
+            tailf:info "WORD;;Flow Record name";
+          }
+          tailf:cli-disallow-value "type";
+        }
+        leaf type {
+          tailf:info "Type of the Flow Record";
+          description
+            "Type of the Flow Record";
+          tailf:cli-prefix-key;
+          type enumeration {
+            enum "performance-monitor" {
+              tailf:info "Config media monitor flow record type";
+            }
+          }
+        }
+        uses flow-record-collect-grouping;
+        container default {
+          tailf:info "Set a command to its defaults";
+          description
+            "Set a command to its defaults";
+          uses flow-record-collect-grouping;
+          leaf description {
+            tailf:info "Provide a description for this Flow Record";
+            description
+              "Provide a description for this Flow Record";
+            tailf:cli-multi-value;
+            tailf:cli-full-command;
+            type string {
+              tailf:info "LINE;;Flow Record description";
+            }
+          }
+          uses flow-record-match-grouping;
+        }
+        leaf description {
+          tailf:info "Provide a description for this Flow Record";
+          description
+            "Provide a description for this Flow Record";
+          tailf:cli-multi-value;
+          tailf:cli-full-command;
+          type string {
+            tailf:info "LINE;;Flow Record description";
+          }
+        }
+        uses flow-record-match-grouping;
+      }
+      list exporter {
+        tailf:info "Define a Flow Exporter";
+        description
+          "Define a Flow Exporter";
+        tailf:cli-mode-name "config-flow-exporter";
+        key "name";
+        leaf name {
+          type string {
+            tailf:info "WORD;;Flow Exporter name";
+          }
+        }
+        uses flow-exporter-grouping;
+        container default {
+          tailf:info "Set a command to its defaults";
+          description
+            "Set a command to its defaults";
+          uses flow-default-exporter-grouping;
+        }
+      }
+      list monitor {
+        tailf:info "Define a Flow Monitor";
+        description
+          "Define a Flow Monitor";
+        tailf:cli-mode-name "config-flow-monitor";
+        key "name";
+        leaf name {
+          type string {
+            tailf:info "WORD;;Flow Monitor name";
+          }
+          tailf:cli-disallow-value "type";
+        }
+        leaf type {
+          tailf:info "Type of the Flow Record";
+          description
+            "Type of the Flow Record";
+          tailf:cli-prefix-key;
+          type enumeration {
+            enum "performance-monitor" {
+              tailf:info "Config media monitor flow monitor type";
+            }
+          }
+        }
+        uses flow-monitor-grouping;
+        container default {
+          tailf:info "Set a command to its defaults";
+          description
+            "Set a command to its defaults";
+          uses flow-default-monitor-grouping;
+        }
+      }
+    }
+    container ip {
+      tailf:info "Global IP configuration subcommands";
+      description
+        "Global IP configuration subcommands";
+      container arp {
+        tailf:info "IP ARP global configuration";
+        description
+          "IP ARP global configuration";
+        container inspection {
+          tailf:info "Arp Inspection configuration";
+          description
+            "Arp Inspection configuration";
+          leaf vlan {
+            tailf:info "Enable/Disable ARP Inspection on vlans";
+            description
+              "Enable/Disable ARP Inspection on vlans";
+            type string {
+              tailf:info "WORD;;vlan range, example: 1,3-5,7,9-11";
+            }
+          }
+        }
+      }
+      container finger {
+        tailf:info "finger server";
+        description
+          "finger server";
+        tailf:cli-show-no;
+        presence "true";
+      }
+      container icmp {
+        tailf:info "ICMP options";
+        description
+          "ICMP options";
+        container rate-limit {
+          tailf:info "rate limit ICMP messages generated";
+          description
+            "rate limit ICMP messages generated";
+          container unreachable {
+            tailf:info "ICMP type 3, Destination Unreachable";
+            description
+              "ICMP type 3, Destination Unreachable";
+            tailf:cli-compact-syntax;
+            leaf time {
+              description
+                "Once per milliseconds";
+              tailf:cli-drop-node-name;
+              type uint32 {
+                tailf:info "<1-4294967295>;;Once per milliseconds";
+              }
+            }
+            leaf DF {
+              tailf:info "code 4, fragmentation needed and DF set";
+              description
+                "code 4, fragmentation needed and DF set";
+              tailf:cli-incomplete-command;
+              type empty;
+            }
+            container log {
+              tailf:display-when "../time";
+              description
+                "log message if rate limiting is excessive";
+              tailf:info "log message if rate limiting is excessive";
+              tailf:cli-compact-syntax;
+              tailf:cli-sequence-commands;
+              presence "true";
+              leaf number-unreachables {
+                tailf:cli-drop-node-name;
+                description
+                  "number of unreachables within interval to trigger a message";
+                type uint32 {
+                  tailf:info "<1-4294967295>;;number of unreachables within interval to trigger a message";
+                }
+              }
+              leaf log-message {
+                tailf:cli-drop-node-name;
+                tailf:cli-optional-in-sequence;
+                description
+                  "log message once per milliseconds";
+                type uint32 {
+                  tailf:info "<10000-4294967295>;;log message once per milliseconds";
+                  range "10000..4294967295";
+                }
+              }
+            }
+          }
+          leaf redirect {
+            tailf:info "Redirect type";
+            description
+              "description";
+            type enumeration {
+              enum "host" {
+                tailf:info "Send ICMP host redirects; same as 'no ip icmp redirect subnet'";
+              }
+              enum "subnet" {
+                tailf:info "Send ICMP subnet redirects; same as 'no ip icmp redirect host'";
+              }
+            }
+          }
+        }
+      }
+      container rcmd {
+        tailf:info "Rcmd commands";
+        description
+          "Rcmd commands";
+        leaf rcp-enable {
+          tailf:info "Enable server side of RCP";
+          description
+            "Enable server side of RCP";
+          tailf:cli-show-no;
+          tailf:cli-full-command;
+          type empty;
+        }
+        leaf rsh-enable {
+          tailf:info "Enable server side of RSH";
+          description
+            "Enable server side of RSh";
+          tailf:cli-show-no;
+          tailf:cli-full-command;
+          type empty;
+        }
+      }
+      leaf subnet-zero {
+        tailf:info "Allow 'subnet zero' subnets";
+        description
+          "Allow 'subnet zero' subnets";
+        type empty;
+      }
+      container bgp-community {
+        tailf:info "format for BGP community";
+        description
+          "format for BGP community";
+        leaf new-format {
+          tailf:info "select aa:nn format for BGP community";
+          description
+            "select aa:nn format for BGP community";
+          type empty;
+        }
+      }
+      leaf host-routing {
+        tailf:info "Enable host-based routing (proxy ARP and redirect)";
+        description
+          "Enable host-based routing (proxy ARP and redirect)";
+        tailf:cli-full-command;
+        type empty;
+      }
+      container msdp {
+        tailf:info "MSDP global commands";
+        description
+          "MSDP global commands";
+        uses ip-msdp-grouping;
+        list vrf {
+          tailf:info "Select VPN Routing/Forwarding instance";
+          description
+            "Select VPN Routing/Forwarding instance";
+          tailf:cli-suppress-mode;
+          key "name";
+          leaf name {
+            type string {
+              tailf:info "WORD;;VPN Routing/Forwarding instance name";
+            }
+          }
+          uses ip-msdp-grouping;
+        }
+      }
+      list vrf {
+        tailf:info "Configure an IP VPN Routing/Forwarding instance";
+        description
+          "Configure an IP VPN Routing/Forwarding instance";
+        tailf:cli-mode-name "config-vrf";
+        key "name";
+        leaf name {
+          tailf:info "WORD;;VPN Routing/Forwarding instance name";
+          description
+            "WORD;;VPN Routing/Forwarding instance name";
+          type string;
+        }
+        container bgp {
+          tailf:info "Commands pertaining to BGP";
+          description
+            "Commands pertaining to BGP";
+          container next-hop {
+            tailf:info "Next-hop for the routes of a VRF in the backbone";
+            description
+              "Next-hop for the routes of a VRF in the backbone";
+            leaf Loopback {
+              tailf:info "Loopback interface number";
+              description
+                "Loopback interface number";
+              type uint32 {
+                tailf:info "<0-2147483647>;;Loopback interface number";
+                range "0..2147483647";
+              }
+            }
+          }
+        }
+        leaf context {
+          tailf:info "Associate SNMP context with this vrf";
+          description
+            "Associate SNMP context with this vrf";
+          type string {
+            tailf:info "WORD;;SNMP Context Name";
+          }
+        }
+        leaf description {
+          tailf:info "VRF specific description";
+          description
+            "VRF specific description";
+          tailf:cli-multi-value;
+          type string {
+            length "1..244";
+            tailf:info "LINE;;Up to 244 characters describing this VRF";
+          }
+        }
+        container export {
+          tailf:info "VRF export";
+          description
+            "VRF export";
+          leaf map {
+            tailf:info "Route-map based VRF export";
+            description
+              "Route-map based VRF export";
+            type string {
+              tailf:info "WORD;;VRF export route-map name";
+            }
+          }
+        }
+        container import {
+          tailf:info "VRF import";
+          description
+            "VRF import";
+          choice import-choice {
+            leaf map {
+              tailf:info "Route-map based VRF import";
+              description
+                "Route-map based VRF import";
+              type string {
+                tailf:info "WORD;;VRF import route-map name";
+              }
+            }
+            container ipv4 {
+              tailf:cli-compact-syntax;
+              tailf:cli-sequence-commands;
+              tailf:info "Address family based VRF import";
+              description
+                "Address family based VRF import";
+              leaf ipv4-type {
+                tailf:cli-drop-node-name;
+                type enumeration {
+                  enum "unicast" {
+                    tailf:code-name "ipv41_unicast";
+                    tailf:info "Import prefixes from IPv4 Unicast table";
+                  }
+                  enum "multicast" {
+                    tailf:code-name "ipv41_multicast";
+                    tailf:info "Import prefixes from IPv4 Multicast tabl";
+                  }
+                }
+              }
+              leaf upper-limit {
+                tailf:cli-break-sequence-commands;
+                tailf:cli-drop-node-name;
+                type uint32 {
+                  range "1..2147483647";
+                  tailf:info "<1-2147483647>;;Upper limit on import prefixes without hogging memory";
+                }
+              }
+              leaf map {
+                tailf:info "Route-map based VRF import";
+                description
+                  "Route-map based VRF import";
+                type string {
+                  tailf:info "WORD;;VRF import route-map name";
+                }
+              }
+            }
+          }
+        }
+        container maximum {
+          tailf:info "Maximum number of routes allowed in this routing table";
+          description
+            "Maximum number of routes allowed in this routing table";
+          tailf:cli-incomplete-command;
+          tailf:cli-compact-syntax;
+          tailf:cli-sequence-commands;
+          presence "Maximum number of routes allowed in this routing table";
+          leaf routes {
+            tailf:info "Maximum number of routes allowed in this routing table";
+            description
+              "Maximum number of routes allowed in this routing table";
+            tailf:cli-incomplete-command;
+            type uint32 {
+              range "1..4294967295";
+              tailf:info "<1-4294967295>;;Maximum number of routes allowed";
+            }
+          }
+          choice maximum-choice {
+            mandatory true;
+            case threshold-case {
+              leaf threshold {
+                tailf:cli-drop-node-name;
+                tailf:info "";
+                description
+                  "";
+                type uint16 {
+                  range "1..100";
+                  tailf:info "<1-100>;;Threshold value (%) at which to generate a warning msg";
+                }
+              }
+              leaf reinstall {
+                tailf:info "Reinstall previous rejected route due to over maximum route limit";
+                description
+                  "Reinstall previous rejected route due to over maximum route limit";
+                type uint16 {
+                  range "1..100";
+                  tailf:info "<1-100>;;Threshold value (%) at which to reinstall routes back to VRF";
+                }
+              }
+            }
+            case warning-case {
+              leaf warning-only {
+                tailf:info "Only give a warning message if is limit exceeded";
+                description
+                  "Only give a warning message if is limit exceeded";
+                type empty;
+              }
+            }
+          }
+        }
+        container mdt {
+          tailf:info "Backbone Multicast Distribution Tree";
+          description
+            "Backbone Multicast Distribution Tree";
+          tailf:cli-incomplete-command;
+          presence "Backbone Multicast Distribution Tree";
+          leaf default {
+            tailf:info "The default group";
+            description
+              "The default group";
+            type inet:ipv4-address {
+              tailf:info "A.B.C.D;;IP multicast group address";
+            }
+          }
+          leaf log-reuse {
+            tailf:info "Event logging for data MDT reuse";
+            description
+              "Event logging for data MDT reuse";
+            type empty;
+          }
+          container data {
+            tailf:info "MDT data group range";
+            description
+              "MDT data group range";
+            tailf:cli-compact-syntax;
+            leaf mulicast-address {
+              tailf:cli-drop-node-name;
+              tailf:cli-incomplete-command;
+              type inet:ipv4-address {
+                tailf:info "A.B.C.D;;IP multicast group address";
+              }
+            }
+            leaf wildcard-bits {
+              tailf:cli-drop-node-name;
+              type inet:ipv4-address {
+                tailf:info "A.B.C.D;;Wildcard bits";
+              }
+            }
+            choice mdt-data-choice {
+              case mdt-data-threshold {
+                leaf threshold {
+                  tailf:info "MDT switching threshold";
+                  description
+                    "MDT switching threshold";
+                  type uint32 {
+                    tailf:info "<1-4294967>;;Traffic rate in kilobits per second";
+                    range "1..4294967";
+                  }
+                }
+                leaf threshold-list {
+                  tailf:alt-name "list";
+                  tailf:info "Access-list";
+                  description
+                    "Access-list";
+                  type mdt-data-list-type;
+                }
+              }
+              case mdt-data-list {
+                leaf list {
+                  tailf:info "Access-list";
+                  description
+                    "Access-list";
+                  type mdt-data-list-type;
+                }
+              }
+            }
+          }
+        }
+        leaf rd {
+          tailf:info "Specify Route Distinguisher";
+          description
+            "Specify Route Distinguisher";
+          type rd-type;
+        }
+        list route-target {
+          tailf:info "Specify Target VPN Extended Communities";
+          description
+            "Specify Target VPN Extended Communities";
+          tailf:cli-suppress-mode;
+          tailf:cli-delete-when-empty;
+          key "direction target";
+          leaf direction {
+            type enumeration {
+              enum "both" {
+                tailf:info "Both import and export Target-VPN community";
+              }
+              enum "export" {
+                tailf:code-name "direction_export";
+                tailf:info "Export Target-VPN community";
+              }
+              enum "import" {
+                tailf:code-name "direction_import";
+                tailf:info "Import Target-VPN community";
+              }
+            }
+          }
+          leaf target {
+            type rd-type {
+              tailf:info "ASN:nn or IP-address:nn;;Target VPN Extended Community";
+            }
+          }
+        }
+        container vpn {
+          tailf:info "Configure VPN ID as specified in rfc2685";
+          description
+            "Configure VPN ID as specified in rfc2685";
+          leaf id {
+            tailf:info "Configure VPN ID in rfc2685 format";
+            description
+              "Configure VPN ID in rfc2685 format";
+            type vpn-id-type;
+          }
+        }
+      }
+      container mcr-conf {
+        tailf:cli-no-keyword;
+        tailf:cli-drop-node-name;
+        leaf multicast-routing {
+          tailf:info "Enable IP multicast forwarding";
+          description
+            "Enable IP multicast forwarding";
+          type empty;
+        }
+      }
+      container multicast-routing {
+        tailf:info "Enable IP multicast forwarding";
+        description
+          "Enable IP multicast forwarding";
+        tailf:cli-incomplete-no;
+        tailf:cli-incomplete-command;
+        tailf:cli-diff-dependency "/ios:native/ip/vrf";
+        tailf:cli-diff-dependency "/ios:native/vrf/definition";
+        tailf:cli-diff-dependency "../mcr-conf/multicast-routing";
+        list vrf {
+          tailf:info "Select VPN Routing/Forwarding instance";
+          description
+            "Select VPN Routing/Forwarding instance";
+          tailf:cli-suppress-list-no;
+          tailf:cli-suppress-mode;
+          tailf:cli-delete-when-empty;
+          tailf:cli-compact-syntax;
+          tailf:cli-reset-container;
+          tailf:cli-diff-dependency "../../mcr-conf/multicast-routing";
+          key "name";
+          leaf name {
+            type string {
+              tailf:info "WORD;;VPN Routing/Forwarding instance name";
+            }
+          }
+          leaf distributed {
+            tailf:info "Distributed multicast switching";
+            description
+              "Distributed multicast switching";
+            type empty;
+          }
+        }
+        leaf distributed {
+          tailf:info "Distributed multicast switching";
+          description
+            "Distributed multicast switching";
+          tailf:cli-full-command;
+          type empty;
+        }
+      }
+      container as-path {
+        tailf:info "BGP autonomous system path filter";
+        description
+          "BGP autonomous system path filter";
+        list access-list {
+          tailf:info "Specify an access list number";
+          description
+            "Specify an access list number";
+          tailf:cli-suppress-mode;
+          tailf:cli-delete-when-empty;
+          tailf:cli-incomplete-command;
+          tailf:cli-compact-syntax;
+          key "name";
+          leaf name {
+            tailf:cli-incomplete-command;
+            type uint16 {
+              range "1..500";
+              tailf:info "<1-500>;;AS path access list number";
+            }
+          }
+          list as-path-rule {
+            tailf:cli-suppress-mode;
+            tailf:cli-delete-when-empty;
+            tailf:cli-drop-node-name;
+            tailf:cli-compact-syntax;
+            tailf:cli-show-long-obu-diffs;
+            ordered-by user;
+            key "operation rule";
+            leaf operation {
+              tailf:cli-drop-node-name;
+              tailf:cli-incomplete-command;
+              type enumeration {
+                enum "deny" {
+                  tailf:code-name "operation_deny";
+                  tailf:info "Specify packets to reject";
+                }
+                enum "permit" {
+                  tailf:code-name "operation_permit";
+                  tailf:info "Specify packets to forward";
+                }
+              }
+            }
+            leaf rule {
+              tailf:cli-drop-node-name;
+              tailf:cli-multi-value;
+              tailf:cli-full-command;
+              type string {
+                tailf:info "LINE;;A regular-expression to match BGP AS paths.";
+              }
+            }
+          }
+        }
+      }
+      container local {
+        tailf:info "Specify local options";
+        description
+          "Specify local options";
+        list pool {
+          tailf:info "IP Local address pool lists";
+          description
+            "IP Local address pool lists";
+          tailf:cli-suppress-mode;
+          tailf:cli-delete-when-empty;
+          tailf:cli-compact-syntax;
+          tailf:cli-sequence-commands {
+            tailf:cli-reset-siblings;
+          }
+          key "id";
+          leaf id {
+            type union {
+              type string {
+                tailf:info "WORD;;Create named local address pool";
+              }
+              type enumeration {
+                enum "default" {
+                  tailf:info "Create default local address pool";
+                }
+              }
+            }
+          }
+          leaf start {
+            tailf:cli-drop-node-name;
+            type inet:ipv4-address {
+              tailf:info "A.B.C.D;;First IP address of range";
+            }
+          }
+          leaf last {
+            tailf:cli-drop-node-name;
+            tailf:cli-optional-in-sequence;
+            type inet:ipv4-address {
+              tailf:info "A.B.C.D;;Last IP address of range";
+            }
+          }
+          leaf group {
+            tailf:info "Create ip local pool group";
+            description
+              "Create ip local pool group";
+            type string {
+              tailf:info "WORD;;Group name for this named local address pool";
+            }
+          }
+        }
+      }
+      container cef {
+        tailf:info "Cisco Express Forwarding";
+        description
+          "Cisco Express Forwarding";
+        presence "true";
+        leaf distributed {
+          tailf:info "Distributed Cisco Express Forwarding";
+          description
+            "Distributed Cisco Express Forwarding";
+          tailf:cli-full-command;
+          type empty;
+        }
+      }
+      leaf classless {
+        tailf:info "Follow classless routing forwarding rules";
+        description
+          "Follow classless routing forwarding rules";
+        type empty;
+      }
+      container community-list {
+        tailf:info "Add a community list entry";
+        description
+          "Add a community list entry";
+        list number-standard {
+          tailf:cli-drop-node-name;
+          tailf:cli-incomplete-command;
+          tailf:cli-suppress-mode;
+          tailf:cli-delete-when-empty;
+          key "no";
+          leaf no {
+            type uint16 {
+              range "1..99";
+              tailf:info "<1-99>;;Community list number (standard)";
+            }
+          }
+          uses ip-community-list-standard-grouping;
+        }
+        list number-expanded {
+          tailf:cli-drop-node-name;
+          tailf:cli-incomplete-command;
+          tailf:cli-suppress-mode;
+          tailf:cli-delete-when-empty;
+          key "no";
+          leaf no {
+            type uint16 {
+              range "100..500";
+              tailf:info "<100-500>;;Community list number (expanded)";
+            }
+          }
+          uses ip-community-list-expanded-grouping;
+        }
+        list expanded {
+          tailf:info "Add an expanded community-list entry";
+          description
+            "Add an expanded community-list entry";
+          tailf:cli-incomplete-command;
+          tailf:cli-suppress-mode;
+          tailf:cli-delete-when-empty;
+          key "name";
+          leaf name {
+            type string {
+              tailf:info "WORD;;Community list name";
+            }
+          }
+          uses ip-community-list-expanded-grouping;
+        }
+        list standard {
+          tailf:info "Add a standard community-list entry";
+          description
+            "Add a standard community-list entry";
+          tailf:cli-incomplete-command;
+          tailf:cli-suppress-mode;
+          tailf:cli-delete-when-empty;
+          key "name";
+          leaf name {
+            type string {
+              tailf:info "WORD;;Community list name";
+            }
+          }
+          uses ip-community-list-standard-grouping;
+        }
+      }
+      container domain {
+        tailf:info "IP DNS Resolver";
+        description
+          "IP DNS Resolver";
+        leaf list {
+          tailf:info "Domain name to complete unqualified host names";
+          description
+            "Domain name to complete unqualified host names";
+          type string {
+            tailf:info "WORD;;A domain name";
+          }
+        }
+        leaf lookup {
+          tailf:info "Enable IP Domain Name System hostname translation";
+          description
+            "Enable IP Domain Name System hostname translation";
+          tailf:cli-boolean-no;
+          tailf:cli-trim-default;
+          type boolean;
+          default "true";
+        }
+        container lookup-settings {
+          tailf:cli-drop-node-name;
+          container lookup {
+            tailf:info "Enable IP Domain Name System hostname translation";
+            description
+              "Enable IP Domain Name System hostname translation";
+            leaf nsap {
+              tailf:info "Enable IP DNS queries for CLNS NSAP addresses";
+              description
+                "Enable IP DNS queries for CLNS NSAP addresses";
+              tailf:cli-full-command;
+              type empty;
+            }
+            container source-interface {
+              tailf:info "Specify source interface for DNS resolver";
+              description
+                "Specify source interface for DNS resolver";
+              tailf:cli-diff-dependency "/ios:native/interface";
+              uses interface-grouping;
+            }
+          }
+          leaf name {
+            tailf:info "Define the default domain name";
+            description
+              "Define the default domain name";
+            type string {
+              tailf:info "WORD;;Default domain name";
+            }
+          }
+        }
+        leaf name {
+          tailf:info "Define the default domain name";
+          description
+            "Define the default domain name";
+          type string {
+            tailf:info "WORD;;Default domain name";
+          }
+        }
+      }
+      container domain-lookup {
+        tailf:info "Enable IP Domain Name System hostname translation";
+        description
+          "Enable IP Domain Name System hostname translation";
+        tailf:cli-show-no;
+        presence "true";
+        leaf nsap {
+          tailf:info "Enable IP DNS queries for CLNS NSAP addresses";
+          description
+            "Enable IP DNS queries for CLNS NSAP addresses";
+          type empty;
+        }
+        container source-interface {
+          tailf:info "Specify source interface for DNS resolver";
+          description
+            "Specify source interface for DNS resolver";
+          tailf:cli-diff-dependency "/ios:native/interface";
+          uses interface-grouping;
+        }
+      }
+      leaf domain-name {
+        tailf:info "Define the default domain name";
+        description
+          "Define the default domain name";
+        type string {
+          tailf:info "WORD;;Default domain name";
+        }
+      }
+      container dns {
+        tailf:info "Configure DNS server for a zone";
+        description
+          "Configure DNS server for a zone";
+        container server {
+          tailf:info "Enable DNS server";
+          description
+            "Enable DNS server";
+          presence "true";
+        }
+      }
+      leaf default-gateway {
+        tailf:info "Specify default gateway (if not routing IP)";
+        description
+          "Specify default gateway (if not routing IP)";
+        type inet:ipv4-address {
+          tailf:info "A.B.C.D;;IP address of default gateway";
+        }
+      }
+      container dhcp {
+        tailf:info "Configure DHCP server and relay parameters";
+        description
+          "Configure DHCP server and relay parameters";
+        list class {
+          tailf:info "Configure DHCP classes";
+          description
+            "Configure DHCP classes";
+          key "id";
+          leaf id {
+            type string {
+              tailf:info "WORD;;Class name";
+            }
+          }
+          container relay {
+            tailf:info "Enter relay agent information option configuration submode";
+            description
+              "Enter relay agent information option configuration submode";
+            container agent {
+              tailf:info "Enter relay agent information option configuration submode";
+              description
+                "Enter relay agent information option configuration submode";
+              leaf information {
+                tailf:info "Enter relay agent information option configuration submode";
+                description
+                  "Enter relay agent information option configuration submode";
+                type empty;
+              }
+            }
+          }
+          leaf remark {
+            tailf:info "Specify a remark for this class";
+            description
+              "Specify a remark for this class";
+            tailf:cli-multi-value;
+            type string {
+              tailf:info "LINE;;Up to 240 characters describing this class";
+              length "1..240";
+            }
+          }
+        }
+        container conflict {
+          tailf:info "DHCP address conflict parameters";
+          description
+            "DHCP address conflict parameters";
+          leaf logging {
+            tailf:info "Record address conflicts in a log file";
+            description
+              "Record address conflicts in a log file";
+            tailf:cli-boolean-no;
+            tailf:cli-trim-default;
+            type boolean;
+            default "true";
+          }
+          container resolution {
+            tailf:info "DHCP address conflict resolution";
+            description
+              "DHCP address conflict resolution";
+            presence "true";
+            leaf interval {
+              tailf:info "Time in Minutes";
+              description
+                "Time in Minutes";
+              type uint32 {
+                tailf:info "<5-1440>;;Minutes";
+                range "5..1440";
+              }
+            }
+          }
+        }
+        list excluded-address {
+          tailf:info "Prevent DHCP from assigning certain addresses";
+          description
+            "Prevent DHCP from assigning certain addresses";
+          tailf:cli-suppress-mode;
+          tailf:cli-compact-syntax;
+          tailf:cli-sequence-commands;
+          key "low-address";
+          leaf low-address {
+            type inet:ipv4-address {
+              tailf:info "A.B.C.D;;Low IP address";
+            }
+          }
+          leaf vrf {
+            tailf:info "VRF name for excluded address range";
+            description
+              "VRF name for excluded address range";
+            tailf:cli-prefix-key;
+            tailf:cli-optional-in-sequence;
+            type string {
+              tailf:info "WORD;;VPN Routing/Forwarding instance name";
+            }
+          }
+          leaf high-address {
+            tailf:cli-drop-node-name;
+            type inet:ipv4-address {
+              tailf:info "A.B.C.D;;High IP address";
+            }
+          }
+        }
+        list pool {
+          tailf:info "Configure DHCP address pools";
+          description
+            "Configure DHCP address pools";
+          tailf:cli-mode-name "dhcp-config";
+          key "id";
+          leaf id {
+            type string {
+              tailf:info "WORD;;Pool name";
+            }
+          }
+          leaf-list default-router {
+            tailf:info "Default routers";
+            description
+              "Default routers";
+            tailf:cli-flat-list-syntax;
+            type union {
+              type string;
+              type inet:ipv4-address {
+                tailf:info "Hostname or A.B.C.D;;Router's name or IP address";
+              }
+            }
+          }
+          leaf-list dns-server {
+            tailf:info "DNS servers";
+            description
+              "DNS servers";
+            tailf:cli-flat-list-syntax;
+            type union {
+              type string;
+              type inet:ipv4-address {
+                tailf:info "Hostname or A.B.C.D;;Router's name or IP address";
+              }
+            }
+          }
+          leaf domain-name {
+            tailf:info "Domain name";
+            description
+              "Domain name";
+            tailf:cli-full-command;
+            type string {
+              tailf:info "WORD;;Domain name";
+            }
+          }
+          container network {
+            tailf:info "Network number and mask";
+            description
+              "Network number and mask";
+            tailf:cli-compact-syntax;
+            tailf:cli-sequence-commands;
+            leaf number {
+              tailf:cli-drop-node-name;
+              type inet:ipv4-address {
+                tailf:info "A.B.C.D;;Network number in dotted-decimal notation";
+              }
+            }
+            leaf mask {
+              tailf:cli-drop-node-name;
+              tailf:cli-optional-in-sequence;
+              type union {
+                type string;
+                type inet:ipv4-address {
+                  tailf:info "/nn or A.B.C.D;;Network mask or prefix length";
+                }
+              }
+            }
+            leaf secondary {
+              tailf:info "Configure as secondary subnet";
+              description
+                "Configure as secondary subnet";
+              type empty;
+            }
+          }
+        }
+        leaf smart-relay {
+          tailf:info "Enable Smart Relay feature";
+          description
+            "Enable Smart Relay feature";
+          type empty;
+        }
+        container snooping {
+          tailf:info "DHCP Snooping";
+          description
+            "DHCP Snooping";
+          presence "true";
+          tailf:cli-display-separated;
+          container information {
+            tailf:info "DHCP Snooping information";
+            description
+              "DHCP Snooping information";
+            container option {
+              tailf:info "DHCP Snooping information option";
+              description
+                "DHCP Snooping information option";
+              presence "true";
+              leaf allow-untrusted {
+                tailf:info "DHCP Snooping information option allow-untrusted";
+                description
+                  "DHCP Snooping information option allow-untrusted";
+                type empty;
+              }
+              container format {
+                tailf:info "Option 82 information format";
+                description
+                  "Option 82 information format";
+                container remote-id {
+                  tailf:info "Remote id option 82 format";
+                  description
+                    "Remote id option 82 format";
+                  choice remote-id-choice {
+                    leaf hostname {
+                      tailf:info "Use configured hostname for remote id";
+                      description
+                        "Use configured hostname for remote id";
+                      type empty;
+                    }
+                    leaf string {
+                      tailf:info "User defined string for remote id";
+                      description
+                        "User defined string for remote id";
+                      type string {
+                        tailf:info "WORD;;Use string for remote id (max length 63)";
+                      }
+                    }
+                  }
+                }
+              }
+            }
+          }
+          container track {
+            tailf:info "DHCP snooping track";
+            description
+              "DHCP snooping track";
+            leaf host {
+              tailf:info "DHCP snooping track host";
+              description
+                "DHCP snooping track host";
+              type empty;
+            }
+          }
+          container verify {
+            tailf:info "DHCP snooping verify";
+            description
+              "DHCP snooping verify";
+            leaf mac-address {
+              tailf:info "DHCP snooping verify mac-address";
+              description
+                "DHCP snooping verify mac-address";
+              type empty;
+            }
+            leaf no-relay-agent-address {
+              tailf:info "DHCP snooping verify giaddr";
+              description
+                "DHCP snooping verify giaddr";
+              type empty;
+            }
+          }
+          leaf-list vlan {
+            tailf:info "DHCP Snooping vlan";
+            description
+              "DHCP Snooping vlan";
+            type string {
+              tailf:info "WORD;;DHCP Snooping vlan fist number or vlan range, example: 1,3-5,7,9-11";
+            }
+          }
+        }
+      }
+      container flow-cache {
+        tailf:info "Configure netflow cache parameters";
+        description
+          "Configure netflow cache parameters";
+        container timeout {
+          tailf:info "Specify flow cache timeout parameters";
+          description
+            "Specify flow cache timeout parameters";
+          leaf active {
+            tailf:info "Specify the active flow timeout";
+            description
+              "Specify the active flow timeout";
+            type uint16 {
+              tailf:info "<1-60>;;Timeout in minutes";
+              range "1..60";
+            }
+          }
+        }
+      }
+      container flow-export {
+        tailf:info "Specify host/port to send flow statistics";
+        description
+          "Specify host/port to send flow statistics";
+        container destination {
+          tailf:info "Specify the Destination IP address";
+          description
+            "Specify the Destination IP address";
+          tailf:cli-sequence-commands {
+            tailf:cli-reset-all-siblings;
+          }
+          tailf:cli-compact-syntax;
+          leaf ip {
+            tailf:cli-drop-node-name;
+            type host-type {
+              tailf:info "Hostname or A.B.C.D  Destination IP address";
+            }
+          }
+          leaf port {
+            tailf:cli-drop-node-name;
+            type uint16 {
+              tailf:info "<1-65535>;;UDP port number";
+              range "1..65535";
+            }
+          }
+        }
+        container source {
+          tailf:info "Specify the interface for source address";
+          description
+            "Specify the interface for source address";
+          tailf:cli-diff-dependency "/ios:native/interface";
+          uses interface-grouping;
+        }
+        leaf version {
+          tailf:info "Specify the version number";
+          description
+            "Specify the version number";
+          type enumeration {
+            enum "1";
+            enum "5";
+            enum "9";
+          }
+        }
+      }
+      container forward-protocol {
+        tailf:info "Controls forwarding of physical and directed IP broadcasts";
+        description
+          "Controls forwarding of physical and directed IP broadcasts";
+        choice protocol-choice {
+          leaf protocol {
+            tailf:cli-drop-node-name;
+            type enumeration {
+              enum "nd" {
+                tailf:info "Sun's Network Disk protocol";
+              }
+              enum "sdns" {
+                tailf:info "Network Security Protocol";
+              }
+              enum "turbo-flood" {
+                tailf:info "Fast flooding of UDP broadcasts";
+              }
+            }
+          }
+          container spanning-tree {
+            tailf:info "Use transparent bridging to flood UDP broadcasts";
+            description
+              "Use transparent bridging to flood UDP broadcasts";
+            presence "true";
+            leaf any-local-broadcast {
+              tailf:info "Accept any local broadcast when flooding";
+              description
+                "Accept any local broadcast when flooding";
+              type empty;
+            }
+          }
+          leaf udp {
+            tailf:info "Packets to a specific UDP port";
+            description
+              "Packets to a specific UDP port";
+            type string;
+          }
+        }
+      }
+      container ftp {
+        tailf:info "FTP configuration commands";
+        description
+          "FTP configuration commands";
+        container source-interface {
+          tailf:info "Specify interface for source address in FTP connections";
+          description
+            "Specify interface for source address in FTP connections";
+          tailf:cli-diff-dependency "/ios:native/interface";
+          uses interface-grouping;
+        }
+        leaf passive {
+          tailf:info "Connect using passive mode";
+          description
+            "Connect using passive mode";
+          type empty;
+        }
+        container password {
+          tailf:info "Specify password for FTP connections;";
+          description
+            "Specify password for FTP connections;";
+          uses password-grouping;
+        }
+        leaf username {
+          tailf:info "Specify username for FTP connections";
+          description
+            "Specify username for FTP connections";
+          type string;
+        }
+      }
+      container telnet {
+        tailf:info "Specify telnet options";
+        description
+          "Specify telnet options";
+        leaf source-interface {
+          tailf:info "Specify source interface";
+          description
+            "Specify source interface";
+          type string;
+        }
+      }
+      list host {
+        tailf:info "Add an entry to the ip hostname table";
+        description
+          "Add an entry to the ip hostname table";
+        tailf:cli-suppress-mode;
+        key "name";
+        leaf name {
+          type string {
+            tailf:info "WORD;;Name of host";
+          }
+        }
+        leaf ip {
+          tailf:cli-drop-node-name;
+          type inet:ip-address {
+            tailf:info "A.B.C.D;;Host IP addressX:X:X:X::X;;Host IPv6 Address";
+          }
+        }
+      }
+      container http {
+        tailf:info "HTTP server configuration";
+        description
+          "HTTP server configuration";
+        leaf access-class {
+          tailf:info "Restrict http server access by access-class";
+          description
+            "Restrict http server access by access-class";
+          tailf:cli-full-command;
+          type uint8 {
+            tailf:info "<1-99>;;Access list number";
+            range "1..99";
+          }
+        }
+        container authentication {
+          tailf:info "Set http server authentication method";
+          description
+            "Set http server authentication method";
+          choice authentication-choice {
+            leaf aaa {
+              tailf:info "Use AAA access control methods";
+              description
+                "Use AAA access control methods";
+              tailf:cli-full-command;
+              type empty;
+            }
+            leaf local {
+              tailf:info "Use local username and passwords";
+              description
+                "Use local username and passwords";
+              tailf:cli-full-command;
+              type empty;
+            }
+          }
+        }
+        leaf server {
+          tailf:info "Enable http server";
+          description
+            "Enable http server";
+          tailf:cli-boolean-no;
+          tailf:cli-show-with-default;
+          tailf:cli-full-command;
+          type boolean;
+        }
+        leaf secure-server {
+          tailf:info "Enable HTTP secure server";
+          description
+            "Enable HTTP secure server";
+          tailf:cli-boolean-no;
+          tailf:cli-show-with-default;
+          tailf:cli-full-command;
+          type boolean;
+          default "false";
+        }
+        leaf secure-trustpoint {
+          tailf:info "Set http secure server certificate trustpoint";
+          description
+            "Set http secure server certificate trustpoint";
+          type string {
+            tailf:info "WORD;;Trustpoint name";
+          }
+        }
+        container timeout-policy {
+          tailf:info "Set http server time-out policy parameters";
+          description
+            "Set http server time-out policy parameters";
+          tailf:cli-compact-syntax;
+          tailf:cli-reset-container;
+          tailf:cli-sequence-commands;
+          leaf idle {
+            tailf:info "Idle time-out of a http server connection in seconds";
+            description
+              "Idle time-out of a http server connection in seconds";
+            tailf:cli-incomplete-command;
+            type uint16 {
+              tailf:info "<1-600>;;Connection idle time-out value in seconds";
+              range "1..600";
+            }
+          }
+          leaf life {
+            tailf:info "Life time of a http server connection in seconds";
+            description
+              "Life time of a http server connection in seconds";
+            tailf:cli-incomplete-command;
+            type uint32 {
+              tailf:info "<1-86400>;;Connection life time value in seconds";
+              range "1..86400";
+            }
+          }
+          leaf requests {
+            tailf:info "Maximum number of requests allowed on a http server connection";
+            description
+              "Maximum number of requests allowed on a http server connection";
+            type uint32 {
+              tailf:info "<1-86400>;;Maximum number of requests allowed on a http server connection";
+              range "1..86400";
+            }
+          }
+        }
+        container client {
+          tailf:info "Set http client parameters";
+          description
+            "Set http client parameters";
+          tailf:cli-incomplete-command;
+          leaf secure-trustpoint {
+            tailf:info "Set http client certificate secure trustpoint";
+            description
+              "Set http client certificate secure trustpoint";
+            type string {
+              tailf:info "WORD;;Trustpoint name";
+            }
+          }
+          leaf source-interface {
+            tailf:cli-full-command;
+            tailf:cli-multi-value;
+            tailf:info "Specify interface for source address in all HTTP(S) client connections";
+            description
+              "Specify interface for source address in all HTTP(S) client connections";
+            type string {
+              tailf:info "WORD;;Interface name";
+            }
+          }
+        }
+      }
+      container igmp {
+        tailf:info "IGMP global configuration";
+        description
+          "IGMP global configuration";
+        container snooping {
+          tailf:info "Global IGMP Snooping enable for Catalyst Vlans";
+          description
+            "Global IGMP Snooping enable for Catalyst Vlans";
+          presence "true";
+          leaf l2-entry-limit {
+            tailf:info "limit on the l2 entry that can be installed by IGMP snooping";
+            description
+              "limit on the l2 entry that can be installed by IGMP snooping";
+            type uint32 {
+              tailf:info "<1-100000>;;maximum number of l2 entries";
+              range "1..100000";
+            }
+          }
+        }
+        container ssm-map {
+          tailf:info "SSM mapping commands";
+          description
+            "SSM mapping commands";
+          leaf enable {
+            tailf:info "Enable SSM group to source mapping";
+            description
+              "Enable SSM group to source mapping";
+            tailf:cli-full-command;
+            type empty;
+          }
+          container query {
+            tailf:info "Which database should we query for the source";
+            description
+              "Which database should we query for the source";
+            leaf dns {
+              tailf:info "Use DNS for source lookup";
+              description
+                "Use DNS for source lookup";
+              tailf:cli-full-command;
+              tailf:cli-show-no;
+              type empty;
+            }
+          }
+          container static {
+            tailf:info "SSM static group to source mapping";
+            description
+              "SSM static group to source mapping";
+            tailf:cli-sequence-commands;
+            tailf:cli-compact-syntax;
+            leaf acl {
+              tailf:cli-drop-node-name;
+              type union {
+                type uint16 {
+                  tailf:info "<1-99>;;SSM group access list number";
+                  range "1..99";
+                }
+                type string {
+                  tailf:info "WORD;;SSM group named access list";
+                }
+              }
+            }
+            leaf source-ip {
+              tailf:cli-drop-node-name;
+              type inet:ipv4-address {
+                tailf:info "A.B.C.D;;SSM source address";
+              }
+            }
+          }
+        }
+      }
+      container multicast {
+        tailf:info "Global IP Multicast Commands";
+        description
+          "Global IP Multicast Commands";
+        leaf multipath {
+          tailf:info "RPF across equal-cost paths";
+          description
+            "RPF across equal-cost paths";
+          type empty;
+        }
+      }
+      container nat {
+        tailf:info "NAT configuration commands";
+        description
+          "NAT configuration commands";
+        tailf:cli-diff-dependency "/ios:native/ip/vrf";
+        tailf:cli-diff-dependency "/ios:native/vrf/definition";
+        tailf:cli-diff-dependency "/ios:native/vrf/definition/address-family";
+        list pool {
+          tailf:info "Define pool of addresses";
+          description
+            "Define pool of addresses";
+          tailf:cli-suppress-mode;
+          tailf:cli-delete-when-empty;
+          tailf:cli-compact-syntax;
+          tailf:cli-sequence-commands {
+            tailf:cli-reset-siblings;
+          }
+          key "id";
+          leaf id {
+            type string {
+              tailf:info "WORD;;Pool name";
+            }
+          }
+          leaf start-address {
+            tailf:cli-drop-node-name;
+            tailf:cli-optional-in-sequence;
+            type inet:ipv4-address {
+              tailf:info "A.B.C.D;;Start IP address";
+            }
+          }
+          leaf end-address {
+            tailf:cli-drop-node-name;
+            when "../start-address" {
+              tailf:dependency "../start-address";
+            }
+            type inet:ipv4-address {
+              tailf:info "A.B.C.D;;End IP address";
+            }
+          }
+          choice prefix-choice {
+            leaf netmask {
+              tailf:info "Specify the network mask";
+              description
+                "Specify the network mask";
+              type inet:ipv4-address {
+                tailf:info "A.B.C.D;;Network mask";
+              }
+            }
+            leaf prefix-length {
+              tailf:info "Specify the prefix length";
+              description
+                "Specify the prefix length";
+              type uint8 {
+                tailf:info "<1-32>;;Prefix length";
+                range "1..32";
+              }
+            }
+          }
+          leaf accounting {
+            tailf:cli-optional-in-sequence;
+            tailf:info "Specify the accounting";
+            description
+              "Specify the accounting";
+            type string {
+              tailf:info "WORD;;Accounting method-list name";
+            }
+          }
+          choice nat-choice {
+            leaf arp-ping {
+              tailf:info "WLAN ARP Ping";
+              description
+                "WLAN ARP Ping";
+              type empty;
+            }
+            leaf type {
+              tailf:info "Specify the pool type";
+              description
+                "Specify the pool type";
+              type enumeration {
+                enum "match-host" {
+                  tailf:info "Keep host numbers the same after translation";
+                }
+                enum "rotary" {
+                  tailf:info "Rotary address pool";
+                }
+              }
+            }
+            leaf add-route {
+              tailf:info "Add special route to Virtual Interface";
+              description
+                "Add special route to Virtual Interface";
+              type empty;
+            }
+          }
+        }
+        container inside {
+          tailf:info "Inside address translation";
+          description
+            "Inside address translation";
+          container source {
+            tailf:info "Source address translation";
+            description
+              "Source address translation";
+            list list {
+              tailf:info "Specify access list describing local addresses";
+              description
+                "Specify access list describing local addresses";
+              tailf:cli-suppress-mode;
+              tailf:cli-delete-when-empty;
+              tailf:cli-compact-syntax;
+              tailf:cli-sequence-commands {
+                tailf:cli-reset-all-siblings;
+              }
+              tailf:cli-incomplete-command;
+              key "id";
+              leaf id {
+                type union {
+                  type uint16 {
+                    tailf:info "<1-2699>;;Access list number for global addresses";
+                    range "1..2699";
+                  }
+                  type string {
+                    tailf:info "WORD;;Access list name for global addresses";
+                  }
+                }
+              }
+              choice pool-or-interface {
+                case pool-choice {
+                  leaf pool {
+                    tailf:info "Name pool of global addresses";
+                    description
+                      "Name pool of global addresses";
+                    type string;
+                    tailf:non-strict-leafref {
+                      path "/ios:native/ip/nat/pool/id";
+                    }
+                  }
+                  leaf redundancy {
+                    tailf:info "NAT redundancy operation";
+                    description
+                      "NAT redundancy operation";
+                    tailf:cli-optional-in-sequence;
+                    type uint8 {
+                      tailf:info "<1-2>;;IP redundancy ID";
+                      range "1..2";
+                    }
+                  }
+                  leaf mapping-id {
+                    tailf:info "Associate a mapping id to this mapping";
+                    description
+                      "Associate a mapping id to this mapping";
+                    tailf:cli-optional-in-sequence;
+                    type uint32 {
+                      tailf:info "<1-2147483647>;;Stateful NAT mapping id";
+                      range "1..2147483647";
+                    }
+                  }
+                }
+                case interface-choice {
+                  container interface {
+                    tailf:info "Specify interface for global address";
+                    description
+                      "Specify interface for global address";
+                    tailf:cli-compact-syntax;
+                    tailf:cli-flatten-container;
+                    uses interface-grouping;
+                  }
+                }
+              }
+              leaf no-payload {
+                tailf:info "No translation of embedded address/port in the payload";
+                description
+                  "No translation of embedded address/port in the payload";
+                tailf:cli-optional-in-sequence;
+                type empty;
+              }
+              leaf reversible {
+                tailf:cli-optional-in-sequence;
+                type empty;
+              }
+              leaf vrf {
+                tailf:info "Specify vrf";
+                description
+                  "Specify vrf";
+                tailf:cli-optional-in-sequence;
+                type string {
+                  tailf:info "WORD;;vrf name";
+                }
+              }
+              leaf match-in-vrf {
+                when "../vrf";
+                tailf:info "Match incoming vrf";
+                description
+                  "Match incoming vrf";
+                tailf:cli-optional-in-sequence;
+                type empty;
+              }
+              leaf overload {
+                tailf:info "Overload an address translation";
+                description
+                  "Overload an address translation";
+                tailf:cli-optional-in-sequence;
+                type empty;
+              }
+              leaf oer {
+                tailf:info "Use with vtemplate only. On new translation, if OER BR is UP, OER will select IP from outgoing Interface. All packets matching translation are forwarded over Interface for duration of translation.";
+                description
+                  "Use with vtemplate only. On new translation, if OER BR is UP, OER will select IP from outgoing Interface. All packets matching translation are forwarded over Interface for duration of translation.";
+                type empty;
+              }
+            }
+            container static {
+              tailf:info "Specify static local->global mapping";
+              description
+                "Specify static local->global mapping";
+              list nat-static-transport-list {
+                tailf:cli-drop-node-name;
+                tailf:cli-suppress-mode;
+                tailf:cli-delete-when-empty;
+                tailf:cli-compact-syntax;
+                key "local-ip global-ip";
+                leaf proto {
+                  tailf:cli-drop-node-name;
+                  tailf:cli-prefix-key;
+                  tailf:cli-optional-in-sequence;
+                  type enumeration {
+                    enum "tcp" {
+                      tailf:info "Transmission Control Protocol";
+                    }
+                    enum "udp" {
+                      tailf:info "User Datagram Protocol";
+                    }
+                  }
+                }
+                leaf network {
+                  tailf:info "Subnet translation";
+                  description
+                    "Subnet translation";
+                  tailf:cli-prefix-key;
+                  tailf:cli-optional-in-sequence;
+                  type empty;
+                }
+                leaf local-ip {
+                  tailf:cli-drop-node-name;
+                  type inet:ipv4-address {
+                    tailf:info "A.B.C.D;;Inside local IP address";
+                  }
+                }
+                leaf local-port {
+                  tailf:cli-drop-node-name;
+                  tailf:cli-optional-in-sequence;
+                  type uint16 {
+                    tailf:info "<1-65535>;;Local UDP/TCP port";
+                    range "1..65535";
+                  }
+                }
+                leaf global-ip {
+                  tailf:cli-drop-node-name;
+                  type inet:ipv4-address {
+                    tailf:info "A.B.C.D;;Inside global IP address";
+                  }
+                }
+                leaf mask {
+                  tailf:cli-drop-node-name;
+                  tailf:cli-optional-in-sequence;
+                  type union {
+                    type string;
+                    type inet:ipv4-address {
+                      tailf:info "/nn or A.B.C.D;;Network mask or prefix length";
+                    }
+                  }
+                }
+                leaf global-port {
+                  tailf:cli-drop-node-name;
+                  tailf:cli-optional-in-sequence;
+                  type uint16 {
+                    tailf:info "<1-65535>;;Global UDP/TCP port";
+                    range "1..65535";
+                  }
+                }
+                leaf extendable {
+                  tailf:info "Extend this translation when used";
+                  description
+                    "Extend this translation when used";
+                  tailf:cli-optional-in-sequence;
+                  type empty;
+                }
+                leaf no-alias {
+                  tailf:info "Do not create an alias for the global address";
+                  description
+                    "Do not create an alias for the global address";
+                  tailf:cli-optional-in-sequence;
+                  type empty;
+                }
+                leaf no-payload {
+                  tailf:info "No translation of embedded address/port in the payload";
+                  description
+                    "No translation of embedded address/port in the payload";
+                  tailf:cli-optional-in-sequence;
+                  type empty;
+                }
+                leaf route-map {
+                  tailf:info "Specify route-map";
+                  description
+                    "Specify route-map";
+                  tailf:cli-optional-in-sequence;
+                  type string {
+                    tailf:info "WORD;;Route-map name";
+                  }
+                }
+                leaf reversible {
+                  when "../route-map";
+                  tailf:cli-optional-in-sequence;
+                  type empty;
+                }
+                leaf redundancy {
+                  tailf:info "NAT redundancy operation";
+                  description
+                    "NAT redundancy operation";
+                  tailf:cli-optional-in-sequence;
+                  type union {
+                    type uint8 {
+                      tailf:info "<1-2>;IP redundancy ID";
+                    }
+                    type string {
+                      tailf:info "WORD;;IP redundancy name";
+                    }
+                  }
+                }
+                leaf mapping-id {
+                  when "../redundancy";
+                  tailf:info "Associate a mapping id to this mapping";
+                  description
+                    "Associate a mapping id to this mapping";
+                  tailf:cli-optional-in-sequence;
+                  type uint32 {
+                    tailf:info "<1-2147483647>;;Stateful NAT mapping id";
+                    range "1..2147483647";
+                  }
+                }
+                leaf vrf {
+                  tailf:info "Specify vrf";
+                  description
+                    "Specify vrf";
+                  tailf:cli-optional-in-sequence;
+                  type string {
+                    tailf:info "WORD;;vrf name";
+                  }
+                }
+                leaf match-in-vrf {
+                  when "../vrf";
+                  tailf:info "Match incoming vrf";
+                  description
+                    "Match incoming vrf";
+                  tailf:cli-optional-in-sequence;
+                  type empty;
+                }
+                leaf forced {
+                  tailf:info "Delete this entry and its children, even if in use";
+                  description
+                    "Delete this entry and its children, even if in use";
+                  tailf:cli-optional-in-sequence;
+                  type empty;
+                }
+                leaf overload {
+                  tailf:info "Overload an address translation";
+                  description
+                    "Overload an address translation";
+                  type empty;
+                }
+              }
+              list nat-static-transport-interface-list {
+                tailf:cli-drop-node-name;
+                tailf:cli-suppress-mode;
+                tailf:cli-delete-when-empty;
+                tailf:cli-compact-syntax;
+                tailf:cli-sequence-commands {
+                  tailf:cli-reset-siblings;
+                }
+                tailf:cli-incomplete-command;
+                key "proto local-ip local-port";
+                leaf proto {
+                  type enumeration {
+                    enum "tcp" {
+                      tailf:info "Transmission Control Protocol";
+                    }
+                    enum "udp" {
+                      tailf:info "User Datagram Protocol";
+                    }
+                  }
+                }
+                leaf local-ip {
+                  tailf:cli-drop-node-name;
+                  type inet:ipv4-address {
+                    tailf:info "A.B.C.D;;Inside local IP address";
+                  }
+                }
+                leaf local-port {
+                  tailf:cli-drop-node-name;
+                  type uint16 {
+                    tailf:info "<1-65535>;;Local UDP/TCP port";
+                    range "1..65535";
+                  }
+                }
+                container interface {
+                  tailf:info "Specify interface for global address";
+                  description
+                    "Specify interface for global address";
+                  tailf:cli-compact-syntax;
+                  tailf:cli-flatten-container;
+                  uses interface-grouping;
+                }
+                leaf global-port {
+                  tailf:cli-drop-node-name;
+                  type uint16 {
+                    tailf:info "<1-65535>;;Global UDP/TCP port";
+                    range "1..65535";
+                  }
+                }
+              }
+            }
+          }
+          container destination {
+            tailf:info "Destination address translation";
+            description
+              "Destination address translation";
+            list list {
+              tailf:info "Specify access list describing global addresses";
+              description
+                "Specify access list describing global addresses";
+              tailf:cli-suppress-mode;
+              tailf:cli-delete-when-empty;
+              tailf:cli-compact-syntax;
+              tailf:cli-sequence-commands {
+                tailf:cli-reset-siblings;
+              }
+              tailf:cli-incomplete-command;
+              key "id";
+              leaf id {
+                type union {
+                  type uint16 {
+                    tailf:info "<1-2699>;;Access list number for global addresses";
+                    range "1..2699";
+                  }
+                  type string {
+                    tailf:info "WORD;;Access list name for global addresses";
+                  }
+                }
+              }
+              leaf pool {
+                tailf:info "Name pool of local addresses";
+                description
+                  "Name pool of local addresses";
+                type string;
+                tailf:non-strict-leafref {
+                  path "/ios:native/ip/nat/pool/id";
+                }
+              }
+              leaf redundancy {
+                tailf:info "NAT redundancy operation";
+                description
+                  "NAT redundancy operation";
+                tailf:cli-optional-in-sequence;
+                type uint8 {
+                  tailf:info "<1-2>;;IP redundancy ID";
+                  range "1..2";
+                }
+              }
+              leaf mapping-id {
+                tailf:info "Associate a mapping id to this mapping";
+                description
+                  "Associate a mapping id to this mapping";
+                type uint32 {
+                  tailf:info "<1-2147483647>;;Stateful NAT mapping id";
+                  range "1..2147483647";
+                }
+              }
+            }
+          }
+        }
+        container outside {
+          tailf:info "Outside address translation";
+          description
+            "Outside address translation";
+          list list {
+            tailf:info "Specify access list describing global addresses";
+            description
+              "Specify access list describing global addresses";
+            tailf:cli-suppress-mode;
+            tailf:cli-delete-when-empty;
+            tailf:cli-compact-syntax;
+            tailf:cli-sequence-commands {
+              tailf:cli-reset-siblings;
+            }
+            key "id";
+            leaf id {
+              type union {
+                type uint16 {
+                  tailf:info "<1-2699>;;Access list number for global addresses";
+                  range "1..2699";
+                }
+                type string {
+                  tailf:info "WORD;;Access list name for global addresses";
+                }
+              }
+            }
+            leaf pool {
+              tailf:info "Name pool of local addresses";
+              description
+                "Name pool of local addresses";
+              type string;
+              tailf:non-strict-leafref {
+                path "/ios:native/ip/nat/pool/id";
+              }
+            }
+            leaf mapping-id {
+              tailf:info "Associate a mapping id to this mapping";
+              description
+                "Associate a mapping id to this mapping";
+              tailf:cli-optional-in-sequence;
+              type uint32 {
+                tailf:info "<1-2147483647>;;Stateful NAT mapping id";
+                range "1..2147483647";
+              }
+            }
+            leaf vrf {
+              tailf:info "Specify vrf";
+              description
+                "Specify vrf";
+              tailf:cli-optional-in-sequence;
+              type string {
+                tailf:info "WORD;;vrf name";
+              }
+            }
+            leaf add-route {
+              tailf:info "Add a static route for outside local address";
+              description
+                "Add a static route for outside local address";
+              type empty;
+            }
+          }
+          list route-map {
+            tailf:info "Specify route-map";
+            description
+              "Specify route-map";
+            tailf:cli-suppress-mode;
+            tailf:cli-delete-when-empty;
+            tailf:cli-compact-syntax;
+            tailf:cli-sequence-commands {
+              tailf:cli-reset-siblings;
+            }
+            key "id";
+            leaf id {
+              type string {
+                tailf:info "WORD;;Route-map name";
+              }
+            }
+            leaf pool {
+              tailf:info "Name pool of local addresses";
+              description
+                "Name pool of local addresses";
+              type string;
+              tailf:non-strict-leafref {
+                path "/ios:native/ip/nat/pool/id";
+              }
+            }
+            leaf mapping-id {
+              tailf:info "Associate a mapping id to this mapping";
+              description
+                "Associate a mapping id to this mapping";
+              tailf:cli-optional-in-sequence;
+              type uint32 {
+                tailf:info "<1-2147483647>;;Stateful NAT mapping id";
+                range "1..2147483647";
+              }
+            }
+            leaf vrf {
+              tailf:info "Specify vrf";
+              description
+                "Specify vrf";
+              tailf:cli-optional-in-sequence;
+              type string {
+                tailf:info "WORD;;vrf name";
+              }
+            }
+            leaf add-route {
+              tailf:info "Add a static route for outside local address";
+              description
+                "Add a static route for outside local address";
+              type empty;
+            }
+          }
+        }
+      }
+      leaf-list name-server {
+        tailf:info "Specify address of name server to use";
+        description
+          "Specify address of name server to use";
+        tailf:cli-flat-list-syntax;
+        type union {
+          type inet:ipv4-address {
+            tailf:info "A.B.C.D;;Domain server IP address (maximum of 6)";
+          }
+          type inet:ipv6-address {
+            tailf:info "X:X:X:X::X;;Domain server IPv6 address (maximum of 6)";
+          }
+        }
+      }
+      container pim {
+        tailf:info "PIM global commands";
+        description
+          "PIM global commands";
+        tailf:cli-diff-dependency "/ios:native/ip/vrf";
+        tailf:cli-diff-dependency "/ios:native/vrf/definition";
+        tailf:cli-diff-dependency "/ios:native/vrf/definition/address-family";
+        uses ip-pim-grouping;
+        list vrf {
+          tailf:info "Select VPN Routing/Forwarding instance";
+          description
+            "Select VPN Routing/Forwarding instance";
+          tailf:cli-suppress-mode;
+          tailf:cli-delete-when-empty;
+          key "id";
+          leaf id {
+            type string {
+              tailf:info "WORD;;VPN Routing/Forwarding instance name";
+            }
+          }
+          uses ip-pim-grouping;
+        }
+      }
+      container prefix-list {
+        tailf:info "Build a prefix list";
+        description
+          "Build a prefix list";
+        list prefixes {
+          tailf:cli-drop-node-name;
+          tailf:cli-suppress-mode;
+          tailf:cli-delete-when-empty;
+          tailf:cli-compact-syntax;
+          key "name";
+          leaf name {
+            type string {
+              tailf:info "WORD;;Name of a prefix list";
+              pattern "([^s].*)|(s[^e].*)|(se[^q].*)(seq[^u].*)|(sequ[^e].*)|(seque[^n].*)|(sequen[^c].*)|(sequenc[^e].*)|(sequence[^\\-].*)|(sequence\\-[^n].*)|(sequence\\-n[^u].*)|(sequence\\-nu[^m].*)|(sequence\\-num[^b].*)|(sequence\\-numb[^e].*)|(sequence\\-numbe[^r].*)|(sequence\\-number..*)";
+            }
+          }
+          leaf description {
+            tailf:info "Prefix-list specific description";
+            description
+              "Prefix-list specific description";
+            tailf:cli-multi-value;
+            tailf:cli-full-command;
+            type string {
+              tailf:info "LINE;;Up to 80 characters describing this prefix-list";
+              length "1..80";
+            }
+          }
+          container permit {
+            tailf:info "Specify packets to forward";
+            description
+              "Specify packets to forward";
+            tailf:cli-sequence-commands;
+            tailf:cli-compact-syntax;
+            leaf address {
+              tailf:cli-drop-node-name;
+              type ios:ipv4-prefix {
+                tailf:info "A.B.C.D/nn;;IP prefix <network>/<length>, e.g., 35.0.0.0/8";
+              }
+            }
+            leaf ge {
+              tailf:info "Minimum prefix length to be matched";
+              description
+                "Minimum prefix length to be matched";
+              tailf:cli-break-sequence-commands;
+              type uint8 {
+                tailf:info "<1-32>;;Minimum prefix length";
+                range "1..32";
+              }
+            }
+            leaf le {
+              tailf:info "Maximum prefix length to be matched";
+              description
+                "Maximum prefix length to be matched";
+              tailf:cli-full-command;
+              type uint8 {
+                tailf:info "<1-32>;;Maximum prefix length";
+                range "1..32";
+              }
+            }
+          }
+          container deny {
+            tailf:info "Specify packets to reject";
+            description
+              "Specify packets to reject";
+            tailf:cli-sequence-commands;
+            tailf:cli-compact-syntax;
+            leaf address {
+              tailf:cli-drop-node-name;
+              type ios:ipv4-prefix {
+                tailf:info "A.B.C.D/nn;;IP prefix <network>/<length>, e.g., 35.0.0.0/8";
+              }
+            }
+            leaf ge {
+              tailf:info "Minimum prefix length to be matched";
+              description
+                "Minimum prefix length to be matched";
+              tailf:cli-break-sequence-commands;
+              type uint8 {
+                tailf:info "<1-32>;;Minimum prefix length";
+                range "1..32";
+              }
+            }
+            leaf le {
+              tailf:info "Maximum prefix length to be matched";
+              description
+                "Maximum prefix length to be matched";
+              tailf:cli-full-command;
+              type uint8 {
+                tailf:info "<1-32>;;Maximum prefix length";
+                range "1..32";
+              }
+            }
+          }
+          list seq {
+            tailf:info "sequence number of an entry";
+            description
+              "sequence number of an entry";
+            tailf:cli-suppress-mode;
+            tailf:cli-delete-when-empty;
+            tailf:cli-compact-syntax;
+            key "no";
+            leaf no {
+              type uint32 {
+                range "1..4294967294";
+                tailf:info "<1-4294967294>;;Sequence number";
+              }
+              tailf:key-default "10";
+            }
+            container deny {
+              tailf:info "Specify packets to reject";
+              description
+                "Specify packets to reject";
+              tailf:cli-sequence-commands {
+                tailf:cli-reset-all-siblings;
+              }
+              tailf:cli-compact-syntax;
+              leaf ip {
+                tailf:cli-drop-node-name;
+                type ios:ipv4-prefix {
+                  tailf:info "A.B.C.D;;IP prefix <network>/<length>, e.g., 35.0.0.0/8";
+                }
+              }
+              leaf ge {
+                tailf:info "Minimum prefix length to be matched";
+                description
+                  "Minimum prefix length to be matched";
+                tailf:cli-break-sequence-commands;
+                type uint8 {
+                  range "1..32";
+                  tailf:info "<1-32>;;Minimum prefix length";
+                }
+              }
+              leaf le {
+                tailf:info "Maximum prefix length to be matched";
+                description
+                  "Maximum prefix length to be matched";
+                tailf:cli-full-command;
+                type uint8 {
+                  range "1..32";
+                  tailf:info "<1-32>;;Maximum prefix length";
+                }
+              }
+            }
+            container permit {
+              tailf:info "Specify packets to forward";
+              description
+                "Specify packets to forward";
+              tailf:cli-sequence-commands {
+                tailf:cli-reset-all-siblings;
+              }
+              tailf:cli-compact-syntax;
+              leaf ip {
+                tailf:cli-drop-node-name;
+                type ios:ipv4-prefix {
+                  tailf:info "A.B.C.D;;IP prefix <network>/<length>, e.g., 35.0.0.0/8";
+                }
+              }
+              leaf ge {
+                tailf:info "Minimum prefix length to be matched";
+                description
+                  "Minimum prefix length to be matched";
+                tailf:cli-break-sequence-commands;
+                type uint8 {
+                  range "1..32";
+                  tailf:info "<1-32>;;Minimum prefix length";
+                }
+              }
+              leaf le {
+                tailf:info "Maximum prefix length to be matched";
+                description
+                  "Maximum prefix length to be matched";
+                tailf:cli-full-command;
+                type uint8 {
+                  range "1..32";
+                  tailf:info "<1-32>;;Maximum prefix length";
+                }
+              }
+            }
+          }
+        }
+        leaf sequence-number {
+          tailf:info "Include/exclude sequence numbers in NVGEN";
+          description
+            "Include/exclude sequence numbers in NVGEN";
+          tailf:cli-full-command;
+          type empty;
+        }
+      }
+      container route {
+        tailf:info "Establish static routes";
+        description
+          "Establish static routes";
+        uses ip-route-grouping;
+        leaf profile {
+          tailf:info "Enable IP routing table profile";
+          description
+            "Enable IP routing table profile";
+          tailf:cli-full-command;
+          type empty;
+        }
+        container static {
+          tailf:info "Allow static routes";
+          description
+            "Allow static routes";
+          leaf adjust-time {
+            tailf:info "Time period for adjusting static routes";
+            description
+              "Time period for adjusting static routes";
+            tailf:cli-full-command;
+            type uint8 {
+              tailf:info "<1-60>;;Adjustment time in seconds";
+              range "1..60";
+            }
+          }
+          container bfd {
+            tailf:info "BFD tracked";
+            description
+              "BFD tracked";
+            tailf:cli-compact-syntax;
+            tailf:cli-sequence-commands;
+            leaf interface {
+              tailf:cli-drop-node-name;
+              type string;
+            }
+            leaf gateway-ip {
+              tailf:cli-drop-node-name;
+              type inet:ipv4-address {
+                tailf:info "A.B.C.D;;Gateway IP address";
+              }
+            }
+          }
+          leaf inter-vrf {
+            tailf:info "Across VRF interfaces";
+            description
+              "Across VRF interfaces";
+            tailf:cli-full-command;
+            type empty;
+          }
+        }
+        list vrf {
+          tailf:info "Configure static route for a VPN Routing/Forwarding instance";
+          description
+            "Configure static route for a VPN Routing/Forwarding instance";
+          tailf:cli-suppress-mode;
+          tailf:cli-delete-when-empty;
+          tailf:cli-compact-syntax;
+          tailf:cli-reset-container;
+          tailf:cli-incomplete-command;
+          tailf:cli-diff-dependency "/ios:native/ip/vrf";
+          tailf:cli-diff-dependency "/ios:native/vrf/definition";
+          tailf:cli-diff-dependency "/ios:native/vrf/definition/address-family";
+          key "name";
+          leaf name {
+            type string {
+              tailf:info "WORD;;VPN Routing/Forwarding instance name";
+            }
+          }
+          uses ip-route-grouping;
+        }
+      }
+      leaf routing {
+        tailf:info "Enable IP routing";
+        description
+          "Enable IP routing";
+        tailf:cli-full-command;
+        type empty;
+      }
+      list explicit-path {
+        tailf:info "Configure explicit-path";
+        description
+          "Configure explicit-path";
+        tailf:cli-mode-name "cfg-ip-expl-path";
+        key "name";
+        leaf name {
+          tailf:info "Specify explicit path by name";
+          description
+            "Specify explicit path by name";
+          tailf:cli-expose-key-name;
+          type string {
+            tailf:info "WORD;;Enter name";
+          }
+        }
+        leaf mode {
+          tailf:cli-drop-node-name;
+          tailf:cli-hide-in-submode;
+          type enumeration {
+            enum "enable" {
+              tailf:info "enable the explicit path";
+            }
+            enum "disable" {
+              tailf:info "disable the explicit path";
+            }
+          }
+        }
+        list next-address {
+          tailf:info "Specify the next address in the path";
+          description
+            "Specify the next address in the path";
+          tailf:cli-suppress-mode;
+          tailf:cli-delete-when-empty;
+          tailf:cli-compact-syntax;
+          key "address";
+          leaf address {
+            type inet:ipv4-address {
+              tailf:info "WORD;;Enter IP address (A.B.C.D)";
+            }
+          }
+        }
+        list exclude-address {
+          tailf:info "Exclude an address from subsequent partial path segments";
+          description
+            "Exclude an address from subsequent partial path segments";
+          tailf:cli-suppress-mode;
+          tailf:cli-delete-when-empty;
+          tailf:cli-compact-syntax;
+          key "address";
+          leaf address {
+            type inet:ipv4-address {
+              tailf:info "WORD;;Enter IP address (A.B.C.D)";
+            }
+          }
+        }
+      }
+      container rsvp {
+        tailf:info "IP RSVP";
+        description
+          "IP RSVP";
+        leaf signalling {
+          tailf:info "IP RSVP signalling";
+          description
+            "IP RSVP signalling";
+          type string {
+            tailf:info "IP RSVP signalling message";
+          }
+        }
+      }
+      container scp {
+        tailf:info "Scp commands";
+        description
+          "Scp commands";
+        container server {
+          tailf:info "Configure SCP server-side functionality";
+          description
+            "Configure SCP server-side functionality";
+          leaf enable {
+            tailf:info "Enable server side of SCP";
+            description
+              "Enable server side of SCP";
+            type empty;
+          }
+        }
+      }
+      container sla {
+        tailf:info "IP Service Level Agreement";
+        description
+          "IP Service Level Agreement";
+        list entry {
+          tailf:cli-drop-node-name;
+          tailf:cli-mode-name "config-ip-sla";
+          key "number";
+          leaf number {
+            type uint32 {
+              tailf:info "<1-2147483647>;;Entry Number";
+            }
+          }
+          container icmp-echo {
+            tailf:info "ICMP Echo Operation";
+            description
+              "ICMP Echo Operation";
+            tailf:cli-add-mode;
+            tailf:cli-mode-name "config-ip-sla-echo";
+            leaf destination {
+              tailf:cli-drop-node-name;
+              tailf:cli-hide-in-submode;
+              type union {
+                type string;
+                type inet:ipv4-address {
+                  tailf:info "Hostname or A.B.C.D;;Destination IP address or hostname, broadcast disallowed";
+                }
+              }
+            }
+            leaf source-interface {
+              tailf:info "Source Interface (ingress icmp packet interface)";
+              description
+                "Source Interface (ingress icmp packet interface)";
+              tailf:cli-hide-in-submode;
+              tailf:cli-full-command;
+              type string {
+                tailf:info "WORD;;interface name";
+              }
+            }
+            leaf source-ip {
+              tailf:info "Source Address";
+              description
+                "Source Address";
+              tailf:cli-hide-in-submode;
+              tailf:cli-full-command;
+              type union {
+                type string;
+                type inet:ipv4-address {
+                  tailf:info "Hostname or A.B.C.D;;IP address or hostname, broadcast disallowed";
+                }
+              }
+            }
+            leaf data-pattern {
+              tailf:info "Data Pattern";
+              description
+                "Data Pattern";
+              tailf:cli-full-command;
+              type string {
+                tailf:info "<0-FFFFFFFF>;;Data Pattern in Hex";
+              }
+            }
+            leaf frequency {
+              tailf:info "Frequency of an operation";
+              description
+                "Frequency of an operation";
+              tailf:cli-full-command;
+              type uint32 {
+                tailf:info "<1-604800>;;Frequency in seconds";
+                range "1..604800";
+              }
+            }
+            container history {
+              tailf:info "History and Distribution Data";
+              description
+                "History and Distribution Data";
+              leaf buckets-kept {
+                tailf:info "Maximum number of history buckets to collect";
+                description
+                  "Maximum number of history buckets to collect";
+                tailf:cli-full-command;
+                type uint8 {
+                  tailf:info "<1-60>;;Bucket size value (default 15)";
+                }
+              }
+              leaf distributions-of-statistics-kept {
+                tailf:info "Maximum number of statistics distribution buckets to capture";
+                description
+                  "Maximum number of statistics distribution buckets to capture";
+                tailf:cli-full-command;
+                type uint8 {
+                  tailf:info "<1-20>;;Distribution bucket size value (default 1)";
+                }
+              }
+              container enhanced {
+                tailf:info "Enable enhanced history collection";
+                description
+                  "Enable enhanced history collection";
+                tailf:cli-compact-syntax;
+                tailf:cli-sequence-commands;
+                leaf interval {
+                  tailf:info "Aggregation interval";
+                  description
+                    "Aggregation interval";
+                  type uint32 {
+                    tailf:info "<1-3600>;;Interval in seconds";
+                    range "1..3600";
+                  }
+                }
+                leaf buckets {
+                  tailf:info "Number of buckets to collect data";
+                  description
+                    "Number of buckets to collect data";
+                  type uint8 {
+                    tailf:info "<1-100>;;Number of buckets";
+                    range "1..100";
+                  }
+                }
+              }
+              leaf filter {
+                tailf:info "Add operation to History when...";
+                description
+                  "Add operation to History when...";
+                tailf:cli-full-command;
+                type enumeration {
+                  enum "all" {
+                    tailf:info "Collect every operation in History";
+                  }
+                  enum "failures" {
+                    tailf:info "Collect operations that fail in History";
+                  }
+                  enum "none" {
+                    tailf:info "Shutoff History collection";
+                  }
+                  enum "overThreshold" {
+                    tailf:info "Collect operations that are over threshold in History";
+                  }
+                }
+              }
+              leaf hours-of-statistics-kept {
+                tailf:info "Maximum number of statistics hour groups to capture";
+                description
+                  "Maximum number of statistics hour groups to capture";
+                tailf:cli-full-command;
+                type uint8 {
+                  tailf:info "<0-25>;;Hour groups size value (default 2)";
+                  range "0..25";
+                }
+              }
+              leaf lives-kept {
+                tailf:info "Maximum number of history lives to collect";
+                description
+                  "Maximum number of history lives to collect";
+                tailf:cli-full-command;
+                type uint8 {
+                  tailf:info "<0-2>;;Life size value (default 0)";
+                  range "0..2";
+                }
+              }
+              leaf statistics-distribution-interval {
+                tailf:info "Statistics distribution interval size";
+                description
+                  "Statistics distribution interval size";
+                tailf:cli-full-command;
+                type uint8 {
+                  tailf:info "<1-100>;;Distribution interval value in msec (default 20)";
+                  range "1..100";
+                }
+              }
+            }
+            leaf owner {
+              tailf:info "Owner of Entry";
+              description
+                "Owner of Entry";
+              tailf:cli-multi-value;
+              type string {
+                tailf:info "LINE;;Owner String";
+              }
+            }
+            leaf request-data-size {
+              tailf:info "Request data size";
+              description
+                "Request data size";
+              tailf:cli-full-command;
+              type uint32 {
+                tailf:info "<0-16384>;;Number of bytes in payload";
+                range "0..16384";
+              }
+            }
+            leaf tag {
+              tailf:info "User defined tag";
+              description
+                "User defined tag";
+              tailf:cli-multi-value;
+              type string {
+                tailf:info "LINE;;Tag string";
+              }
+            }
+            leaf threshold {
+              tailf:info "Operation threshold in milliseconds";
+              description
+                "Operation threshold in milliseconds";
+              tailf:cli-full-command;
+              type uint32 {
+                tailf:info "<0-60000>;;Millisecond threshold value";
+                range "0..60000";
+              }
+            }
+            leaf timeout {
+              tailf:info "Timeout of an operation";
+              description
+                "Timeout of an operation";
+              tailf:cli-full-command;
+              type uint64 {
+                tailf:info "<0-604800000>;;Timeout in milliseconds";
+                range "0..604800000";
+              }
+            }
+            leaf tos {
+              tailf:info "Type Of Service";
+              description
+                "Type Of Service";
+              tailf:cli-full-command;
+              type uint8 {
+                tailf:info "<0-255>;;Type of Service Value";
+              }
+            }
+            leaf verify-data {
+              tailf:info "Verify data";
+              description
+                "Verify data";
+              tailf:cli-full-command;
+              type empty;
+            }
+            leaf vrf {
+              tailf:info "Configure IP SLAs for a VPN Routing/Forwarding instance";
+              description
+                "Configure IP SLAs for a VPN Routing/Forwarding instance";
+              tailf:cli-full-command;
+              type string {
+                tailf:info "WORD;;VPN Routing/Forwarding instance name";
+              }
+            }
+          }
+          container path-jitter {
+            tailf:info "Path Discovered ICMP Jitter Operation";
+            description
+              "Path Discovered ICMP Jitter Operation";
+            tailf:cli-add-mode;
+            tailf:cli-mode-name "config-ip-sla-path-jitter";
+            leaf dst-ip {
+              tailf:cli-drop-node-name;
+              tailf:cli-hide-in-submode;
+              type union {
+                type string;
+                type inet:ipv4-address;
+                type inet:ipv6-address {
+                  tailf:info "Hostname or A.B.C.D/X:X:X:X::X;;Destination IPv6/IP address or hostname";
+                }
+              }
+            }
+            leaf source-ip {
+              tailf:info "Source IP Address";
+              description
+                "Source IP Address";
+              tailf:cli-hide-in-submode;
+              type union {
+                type string;
+                type inet:ipv4-address;
+              }
+            }
+            container default {
+              tailf:info "Set a command to its defaults";
+              description
+                "Set a command to its defaults";
+              uses ip-sla-default-path-jitter-grouping;
+            }
+            uses ip-sla-path-jitter-grouping;
+          }
+        }
+        container enable {
+          leaf reaction-alerts {
+            type empty;
+          }
+        }
+        leaf responder {
+          type empty;
+        }
+        list schedule {
+          tailf:info "Entry Scheduling";
+          description
+            "Entry Scheduling";
+          tailf:cli-suppress-mode;
+          tailf:cli-compact-syntax;
+          key "entry-number";
+          leaf entry-number {
+            type uint32 {
+              tailf:info "<1-2147483647>;;Entry number";
+            }
+          }
+          leaf ageout {
+            tailf:info "How long to keep this Entry when inactive";
+            description
+              "How long to keep this Entry when inactive";
+            tailf:cli-hide-in-submode;
+            type uint32 {
+              tailf:info "<0-2073600>;;Ageout Seconds";
+              range "0..2073600";
+            }
+          }
+          leaf life {
+            tailf:info "Length of time to execute in seconds";
+            description
+              "Length of time to execute in seconds";
+            tailf:cli-hide-in-submode;
+            type union {
+              type uint32 {
+                tailf:info "<0-2147483647>;;Life seconds (default 3600)";
+              }
+              type enumeration {
+                enum "forever" {
+                  tailf:info "continue running forever";
+                }
+              }
+            }
+          }
+          leaf recurring {
+            tailf:info "Probe to be scheduled automatically every day";
+            description
+              "Probe to be scheduled automatically every day";
+            tailf:cli-hide-in-submode;
+            type empty;
+          }
+          container start-time {
+            tailf:info "When to start this entry";
+            description
+              "When to start this entry";
+            tailf:cli-hide-in-submode;
+            leaf after {
+              tailf:info "Start after a certain amount of time from now";
+              description
+                "Start after a certain amount of time from now";
+              tailf:cli-full-command;
+              type string {
+                tailf:info "hh:mm:ss;;Start after (hh:mm:ss) has elapsed";
+              }
+            }
+            leaf hour-min {
+              tailf:cli-drop-node-name;
+              tailf:cli-full-command;
+              type string {
+                tailf:info "hh:mm;;Start time (hh:mm)";
+              }
+            }
+            leaf hour-min-sec {
+              tailf:cli-drop-node-name;
+              tailf:cli-full-command;
+              type string {
+                tailf:info "hh:mm:ss;;Start time (hh:mm:ss)";
+              }
+            }
+            leaf now {
+              tailf:info "Start now";
+              description
+                "Start now";
+              tailf:cli-full-command;
+              type empty;
+            }
+            leaf pending {
+              tailf:info "Start pending";
+              description
+                "Start pending";
+              tailf:cli-full-command;
+              type empty;
+            }
+            leaf random {
+              tailf:info "Start after random time (range)";
+              description
+                "Start after random time (range)";
+              tailf:cli-full-command;
+              type uint32 {
+                tailf:info "<500-10000>;;random milliseconds";
+                range "500..10000";
+              }
+            }
+          }
+        }
+      }
+      container spd {
+        tailf:info "spd";
+        description
+          "spd";
+        leaf mode {
+          type enumeration {
+            enum "aggressive";
+          }
+        }
+      }
+      container bootp {
+        tailf:info "Config BOOTP services";
+        description
+          "Config BOOTP services";
+        leaf server {
+          tailf:info "Enable BOOTP server";
+          description
+            "Enable BOOTP server";
+          tailf:cli-boolean-no;
+          tailf:cli-trim-default;
+          type boolean;
+          default "true";
+        }
+      }
+      leaf source-route {
+        tailf:info "Process packets with source routing header options";
+        description
+          "Process packets with source routing header options";
+        tailf:cli-boolean-no;
+        tailf:cli-show-with-default;
+        tailf:cli-full-command;
+        type boolean;
+        default "true";
+      }
+      container ssh {
+        tailf:info "Configure ssh options";
+        description
+          "Configure ssh options";
+        leaf authentication-retries {
+          tailf:info "Specify number of authentication retries";
+          description
+            "Specify number of authentication retries";
+          type uint8 {
+            tailf:info "<0-5>;;Number of authentication retries";
+            range "0..5";
+          }
+        }
+        leaf dscp {
+          tailf:info "IP DSCP value for SSH traffic";
+          description
+            "IP DSCP value for SSH traffic";
+          type uint8 {
+            tailf:info "<0-63>;;ip dscp value (default value 0 )";
+            range "0..63";
+          }
+        }
+        container logging {
+          tailf:info "Configure logging for SSH";
+          description
+            "Configure logging for SSH";
+          leaf events {
+            tailf:info "Log SSH events";
+            description
+              "Log SSH events";
+            type empty;
+          }
+        }
+        container pubkey-chain {
+          tailf:info "Configure public key-chain parameters";
+          description
+            "Configure public key-chain parameters";
+          tailf:cli-add-mode;
+          tailf:cli-mode-name "conf-ssh-pubkey";
+          tailf:cli-full-command;
+          list username {
+            tailf:cli-mode-name "conf-ssh-pubkey-user";
+            tailf:cli-full-command;
+            tailf:cli-no-key-completion;
+            tailf:cli-no-match-completion;
+            max-elements "10";
+            key "name";
+            leaf name {
+              type string;
+            }
+            list key-hash {
+              max-elements "2";
+              tailf:cli-full-command;
+              key "key-type key-hash-value";
+              leaf key-type {
+                tailf:cli-drop-node-name;
+                type enumeration {
+                  enum "ssh-rsa" {
+                    tailf:info "ssh-rsa based fingerprint";
+                  }
+                }
+              }
+              leaf key-hash-value {
+                tailf:cli-multi-value;
+                type string;
+              }
+            }
+          }
+        }
+        leaf precedence {
+          tailf:info "IP Precedence value for SSH traffic";
+          description
+            "IP Precedence value for SSH traffic";
+          type uint8 {
+            tailf:info "<0-7>;;ip precedence value (default value 0 )";
+            range "0..7";
+          }
+        }
+        container rsa {
+          tailf:info "Configure RSA keypair name for SSH";
+          description
+            "Configure RSA keypair name for SSH";
+          leaf keypair-name {
+            tailf:info "keypair-name";
+            description
+              "keypair-name";
+            type string {
+              tailf:info "WORD;;keypair name";
+            }
+          }
+        }
+        leaf source-interface {
+          tailf:info "Specify interface for source address in SSH connections";
+          description
+            "Specify interface for source address in SSH connections";
+          type string;
+        }
+        leaf time-out {
+          tailf:info "Specify SSH time-out interval";
+          description
+            "Specify SSH time-out interval";
+          type uint8 {
+            tailf:info "<1-120>;;SSH time-out interval (secs)";
+            range "1..120";
+          }
+        }
+        leaf version {
+          tailf:info "Specify protocol version supported";
+          description
+            "Specify protocol version supported";
+          type uint8 {
+            tailf:info "<1-2>;;Protocol version";
+            range "1..2";
+          }
+        }
+      }
+      container tacacs {
+        tailf:info "TACACS configuration commands";
+        description
+          "TACACS configuration commands";
+        container source-interface {
+          tailf:info "Specify interface for source address in TACACS packets";
+          description
+            "Specify interface for source address in TACACS packets";
+          tailf:cli-diff-dependency "/ios:native/interface";
+          uses interface-grouping;
+        }
+      }
+      container tcp {
+        tailf:info "Global TCP parameters";
+        description
+          "Global TCP parameters";
+        container path-mtu-discovery {
+          tailf:info "Enable path-MTU discovery on new TCP connections";
+          description
+            "Enable path-MTU discovery on new TCP connections";
+          presence "true";
+          leaf age-timer {
+            tailf:info "Set PMTU aging timer";
+            description
+              "Set PMTU aging timer";
+            type union {
+              type enumeration {
+                enum "infinite" {
+                  tailf:info "Disable pathmtu aging timer";
+                }
+              }
+              type uint8 {
+                tailf:info "<10-30>;;Aging time";
+                range "10..30";
+              }
+            }
+          }
+        }
+      }
+      container tftp {
+        tailf:info "tftp configuration commands";
+        description
+          "tftp configuration commands";
+        container boot-interface {
+          tailf:info "Force interface to use for TFTP booting";
+          description
+            "Force interface to use for TFTP booting";
+          tailf:cli-diff-dependency "/ios:native/interface";
+          uses interface-grouping;
+        }
+        container source-interface {
+          tailf:info "Specify interface for source address in TFTP connections";
+          description
+            "Specify interface for source address in TFTP connections";
+          tailf:cli-diff-dependency "/ios:native/interface";
+          uses interface-grouping;
+        }
+      }
+      container access-list {
+        tailf:info "Named access list";
+        description
+          "Named access list";
+        tailf:cli-incomplete-command;
+        tailf:cli-compact-syntax;
+        list standard {
+          tailf:info "Standard Access List";
+          description
+            "Standard Access List";
+          tailf:cli-full-command;
+          tailf:cli-no-key-completion;
+          tailf:cli-mode-name "config-std-nacl";
+          key "name";
+          leaf name {
+            type std-acl-type;
+          }
+          uses ipv4-std-acl-grouping;
+          uses ipv4-std-acl-remark-grouping;
+          container default {
+            tailf:info "Set a command to its defaults";
+            description
+              "Set a command to its defaults";
+            uses ipv4-std-acl-grouping;
+            uses ipv4-std-acl-remark-grouping;
+          }
+        }
+        list role-based {
+          tailf:info "Role-based Access List";
+          description
+            "Role-based Access List";
+          tailf:cli-no-key-completion;
+          tailf:cli-mode-name "config-rb-acl";
+          key "name";
+          leaf name {
+            type string {
+              tailf:info "WORD;;Access-list name";
+            }
+          }
+          uses ipv4-ext-acl-grouping;
+          uses ipv4-ext-acl-remark-grouping;
+          container default {
+            tailf:info "Set a command to its defaults";
+            description
+              "Set a command to its defaults";
+            uses ipv4-ext-acl-grouping;
+            uses ipv4-ext-acl-remark-grouping;
+          }
+        }
+        list extended {
+          tailf:info "Extended Access List";
+          description
+            "Extended Access List";
+          tailf:cli-full-command;
+          tailf:cli-mode-name "config-ext-nacl";
+          key "name";
+          leaf name {
+            type ext-acl-type;
+          }
+          uses ipv4-ext-acl-grouping;
+          uses ipv4-ext-acl-remark-grouping;
+          container default {
+            tailf:info "Set a command to its defaults";
+            description
+              "Set a command to its defaults";
+            uses ipv4-ext-acl-grouping;
+            uses ipv4-ext-acl-remark-grouping;
+          }
+        }
+        container helper {
+          tailf:info "Access List acts on helper-address";
+          description
+            "Access List acts on helper-address";
+          tailf:cli-sequence-commands;
+          tailf:cli-compact-syntax;
+          leaf egress {
+            tailf:info "Outbound";
+            description
+              "Outbound";
+            type empty;
+          }
+          leaf check {
+            tailf:info "Enable filtering on helper-address destined";
+            description
+              "Enable filtering on helper-address destined";
+            tailf:cli-full-command;
+            type empty;
+          }
+        }
+        container log-update {
+          tailf:info "Control access list log updates";
+          description
+            "Control access list log updates";
+          leaf threshold {
+            tailf:info "Set access-list logging threshold";
+            description
+              "Set access-list logging threshold";
+            type uint64 {
+              tailf:info "<0-2147483647>;;Access list log-update threshold (number of hits)";
+              range "0..2147483647";
+            }
+          }
+        }
+        container logging {
+          tailf:info "Control access list logging";
+          description
+            "Control access list logging";
+          leaf hash-generation {
+            tailf:info "Enable syslog hash code generation";
+            description
+              "Enable syslog hash code generation";
+            tailf:cli-full-command;
+            type empty;
+          }
+          leaf interval {
+            tailf:info "Set access list logging interval";
+            description
+              "Set access list logging interval";
+            type uint64 {
+              tailf:info "<0-2147483647>;;Access list logging interval (milliseconds)";
+              range "0..2147483647";
+            }
+          }
+        }
+        leaf match-local-traffic {
+          tailf:info "Enable ACL matching for locally generated traffic";
+          description
+            "Enable ACL matching for locally generated traffic";
+          type empty;
+        }
+        leaf persistent {
+          tailf:info "enable persistency across reload";
+          description
+            "enable persistency across reload";
+          type empty;
+        }
+        container resequence {
+          tailf:info "Resequence Access List";
+          description
+            "Resequence Access List";
+          tailf:cli-sequence-commands;
+          tailf:cli-compact-syntax;
+          leaf numbers {
+            tailf:cli-drop-node-name;
+            type union {
+              type std-acl-type;
+              type ext-acl-type;
+            }
+          }
+          leaf start-seq-no {
+            tailf:cli-drop-node-name;
+            type uint64 {
+              tailf:info "<1-2147483647>;;Starting Sequence Number";
+              range "1..2147483647";
+            }
+          }
+          leaf step-seq-no {
+            tailf:cli-drop-node-name;
+            type uint64 {
+              tailf:info "<1-2147483647>;;Sep to increment the sequence number";
+              range "1..2147483647";
+            }
+          }
+        }
+      }
+      container device {
+        tailf:info "Device tracking";
+        description
+          "Device tracking";
+        container tracking {
+          tailf:info "Device tracking";
+          description
+            "Device tracking";
+          presence "true";
+          container probe {
+            tailf:info "Probe";
+            description
+              "Probe";
+            container auto-source {
+              tailf:info "Probe source selection algorithm";
+              description
+                "Probe source selection algorithm";
+              tailf:cli-compact-syntax;
+              presence "true";
+              container fallback {
+                tailf:info "Specify IP and MASK to use as last resort";
+                description
+                  "Specify IP and MASK to use as last resort";
+                tailf:cli-sequence-commands;
+                tailf:cli-compact-syntax;
+                tailf:cli-flatten-container;
+                leaf src-ip {
+                  tailf:cli-drop-node-name;
+                  description
+                    "IP and MASK of fallback source";
+                  type inet:ipv4-address {
+                    tailf:info "A.B.C.D;;{/nn || A.B.C.D}  IP and MASK of fallback source";
+                  }
+                }
+                leaf mask {
+                  tailf:cli-drop-node-name;
+                  description
+                    "IP prefix mask";
+                  type inet:ipv4-address {
+                    tailf:info "A.B.C.D;;IP prefix mask";
+                  }
+                }
+              }
+              leaf override {
+                tailf:info "Do not select source address from device track table";
+                description
+                  "Do not select source address from device track table";
+                tailf:cli-full-command;
+                type empty;
+              }
+            }
+            leaf count {
+              tailf:info "Probe count";
+              description
+                "Probe count";
+              tailf:cli-full-command;
+              type uint8 {
+                tailf:info "<1-255>;;count";
+              }
+            }
+            leaf delay {
+              tailf:info "Probe delay";
+              description
+                "Probe delay";
+              tailf:cli-full-command;
+              type uint8 {
+                tailf:info "<1-120>;;delay";
+                range "1..120";
+              }
+            }
+            leaf interval {
+              tailf:info "Probe interval";
+              description
+                "Probe interval";
+              tailf:cli-full-command;
+              type uint32 {
+                tailf:info "<30-1814400>;;interval";
+                range "30..1814400";
+              }
+            }
+          }
+          leaf trace-buffer {
+            tailf:info "Enable Tracing Support";
+            description
+              "Enable Tracing Support";
+            tailf:cli-full-command;
+            type empty;
+          }
+        }
+      }
+      container nbar {
+        tailf:info "NBAR - Network Based Application Recognition";
+        description
+          "NBAR - Network Based Application Recognition";
+        container attribute {
+          tailf:info "Attribute for which custom group value can be created";
+          description
+            "Attribute for which custom group value can be created";
+          container application-group {
+            tailf:info "Application-group attribute";
+            description
+              "Application-group attribute";
+            uses ip-nbar-attribute-custom-grouping;
+          }
+          container category {
+            tailf:info "Category attribute";
+            description
+              "Category attribute";
+            uses ip-nbar-attribute-custom-grouping;
+          }
+          container sub-category {
+            tailf:info "Sub-category attribute";
+            description
+              "Sub-category attribute";
+            uses ip-nbar-attribute-custom-grouping;
+          }
+        }
+        list attribute-map {
+          tailf:info "Attribute Map";
+          description
+            "Attribute Map";
+          tailf:cli-mode-name "config-attribute-map";
+          key "name";
+          leaf name {
+            type string {
+              tailf:info "WORD;;Attribute Profile Name";
+            }
+          }
+          container attribute {
+            tailf:info "Attribute Name";
+            description
+              "Attribute Name";
+            leaf application-group {
+              tailf:info "Application-group attribute";
+              description
+                "Application-group attribute";
+              tailf:cli-full-command;
+              type union {
+                type string {
+                  tailf:info "xxx;;User defined application group";
+                }
+                type enumeration {
+                  enum "aol-group" {
+                    tailf:info "AOL related applications";
+                  }
+                  enum "apple-group" {
+                    tailf:info "Apple services";
+                  }
+                  enum "apple-talk-group" {
+                    tailf:info "Apple-talk related applications";
+                  }
+                  enum "banyan-group" {
+                    tailf:info "Banyan related applications";
+                  }
+                  enum "bittorrent-group" {
+                    tailf:info "Bittorrent related applications";
+                  }
+                  enum "capwap-group" {
+                    tailf:info "CAPWAP related applications";
+                  }
+                  enum "cisco-jabber-group" {
+                    tailf:info "Cisco jabber related applications";
+                  }
+                  enum "cisco-phone-group" {
+                    tailf:info "Cisco phone related applications";
+                  }
+                  enum "corba-group" {
+                    tailf:info "Corba related applications";
+                  }
+                  enum "dameware-group" {
+                    tailf:info "Dameware related applications";
+                  }
+                  enum "edonkey-emule-group" {
+                    tailf:info "Edonkey-emule related applications";
+                  }
+                  enum "espn-group" {
+                    tailf:info "ESPN related applications";
+                  }
+                  enum "fasttrack-group" {
+                    tailf:info "Fasttrack related applications";
+                  }
+                  enum "flash-group" {
+                    tailf:info "Flash related applications";
+                  }
+                  enum "fring-group" {
+                    tailf:info "Fring related applications";
+                  }
+                  enum "ftp-group" {
+                    tailf:info "FTP related applications";
+                  }
+                  enum "gnutella-group" {
+                    tailf:info "Gnutella related applications";
+                  }
+                  enum "google-group" {
+                    tailf:info "Google related applications";
+                  }
+                  enum "gtalk-group" {
+                    tailf:info "Gtalk related applications";
+                  }
+                  enum "icq-group" {
+                    tailf:info "ICQ related applications";
+                  }
+                  enum "imap-group" {
+                    tailf:info "IMAP related applications";
+                  }
+                  enum "ipsec-group" {
+                    tailf:info "IPsec related applications";
+                  }
+                  enum "irc-group" {
+                    tailf:info "IRC related applications";
+                  }
+                  enum "kakao-group" {
+                    tailf:info "Kakao services";
+                  }
+                  enum "kerberos-group" {
+                    tailf:info "Kerberos related applications";
+                  }
+                  enum "ldap-group" {
+                    tailf:info "LDAP related applications";
+                  }
+                  enum "ms-cloud-group" {
+                    tailf:info "Microsoft cloud services";
+                  }
+                  enum "ms-crm-group" {
+                    tailf:info "MS-CRM related applications";
+                  }
+                  enum "ms-lync-group" {
+                    tailf:info "MS-lync related applications";
+                  }
+                  enum "msn-messenger-group" {
+                    tailf:info "MSN-Messenger related applications";
+                  }
+                  enum "netbios-group" {
+                    tailf:info "Netbios related applications";
+                  }
+                  enum "nntp-group" {
+                    tailf:info "NNTP related applications";
+                  }
+                  enum "npmp-group" {
+                    tailf:info "NPMP related applications";
+                  }
+                  enum "other" {
+                    tailf:info "Other related applications";
+                  }
+                  enum "pop3-group" {
+                    tailf:info "POP3 related applications";
+                  }
+                  enum "prm-group" {
+                    tailf:info "PRM related applications";
+                  }
+                  enum "qq-group" {
+                    tailf:info "QQ related applications";
+                  }
+                  enum "skype-group" {
+                    tailf:info "Skype related applications";
+                  }
+                  enum "smtp-group" {
+                    tailf:info "SMTP related applications";
+                  }
+                  enum "snmp-group" {
+                    tailf:info "SNMP related applications";
+                  }
+                  enum "sqlsvr-group" {
+                    tailf:info "SQLSVR related applications";
+                  }
+                  enum "stun-group" {
+                    tailf:info "STUN related applications";
+                  }
+                  enum "telepresence-group" {
+                    tailf:info "Telepresence related applications";
+                  }
+                  enum "tftp-group" {
+                    tailf:info "TFTP related applications";
+                  }
+                  enum "vmware-group" {
+                    tailf:info "Vmware related applications";
+                  }
+                  enum "vnc-group" {
+                    tailf:info "VNC related applications";
+                  }
+                  enum "wap-group" {
+                    tailf:info "WAP related applications";
+                  }
+                  enum "webex-group" {
+                    tailf:info "Webex related applications";
+                  }
+                  enum "xns-xerox-group" {
+                    tailf:info "XNS-xerox related applications";
+                  }
+                  enum "xunlei-group" {
+                    tailf:info "Xunlei related applications";
+                  }
+                  enum "yahoo-group" {
+                    tailf:info "Yahoo related applications";
+                  }
+                  enum "yahoo-messenger-group" {
+                    tailf:info "Yahoo-messenger related applications";
+                  }
+                }
+              }
+            }
+            leaf business-relevance {
+              tailf:info "Application business-relevance";
+              description
+                "Application business-relevance";
+              tailf:cli-full-command;
+              type enumeration {
+                enum "business-irrelevant" {
+                  tailf:info "Undesirable business traffic";
+                }
+                enum "business-relevant" {
+                  tailf:info "Business critical applications";
+                }
+                enum "default" {
+                  tailf:info "Related business applications";
+                }
+              }
+            }
+            leaf category {
+              tailf:info "Category attribute";
+              description
+                "Category attribute";
+              tailf:cli-full-command;
+              type union {
+                type string {
+                  tailf:info "xxx;;User defined category";
+                }
+                type enumeration {
+                  enum "anonymizers" {
+                    tailf:info "Anonymizers applications";
+                  }
+                  enum "backup-and-storage" {
+                    tailf:info "Backup and storage related applications";
+                  }
+                  enum "browsing" {
+                    tailf:info "Browsing related applications";
+                  }
+                  enum "business-and-productivity-tools" {
+                    tailf:info "Business-and-productivity-tools related applications";
+                  }
+                  enum "consumer-file-sharing" {
+                    tailf:info "consumer-file-sharing related applications";
+                  }
+                  enum "consumer-internet" {
+                    tailf:info "consumer-internet related applications";
+                  }
+                  enum "consumer-messaging" {
+                    tailf:info "consumer-messaging related applications";
+                  }
+                  enum "consumer-streaming" {
+                    tailf:info "consumer-streaming related applications";
+                  }
+                  enum "database" {
+                    tailf:info "Database related applications";
+                  }
+                  enum "email" {
+                    tailf:info "Email related applications";
+                  }
+                  enum "epayement" {
+                    tailf:info "Epayement related applications";
+                  }
+                  enum "file-sharing" {
+                    tailf:info "File-sharing related applications";
+                  }
+                  enum "gaming" {
+                    tailf:info "Gaming related applications";
+                  }
+                  enum "industrial-protocols" {
+                    tailf:info "Industrial-protocols related applications";
+                  }
+                  enum "instant-messaging" {
+                    tailf:info "Instant-messaging related applications";
+                  }
+                  enum "inter-process-rpc" {
+                    tailf:info "Inter-process-rpc related applications";
+                  }
+                  enum "internet-security" {
+                    tailf:info "Internet security related applications";
+                  }
+                  enum "layer3-over-ip" {
+                    tailf:info "Layer3-over-IP related applications";
+                  }
+                  enum "location-based-services" {
+                    tailf:info "Location-based-services related applications";
+                  }
+                  enum "net-admin" {
+                    tailf:info "Net-admin related applications";
+                  }
+                  enum "newsgroup" {
+                    tailf:info "Newsgroup related applications";
+                  }
+                  enum "other" {
+                    tailf:info "Other related applications";
+                  }
+                  enum "social-networking" {
+                    tailf:info "Social-networking related applications";
+                  }
+                  enum "software-updates" {
+                    tailf:info "Software updates and downloads related applications";
+                  }
+                  enum "trojan" {
+                    tailf:info "Trojan related applications";
+                  }
+                  enum "voice-and-video" {
+                    tailf:info "Voice-and-video related applications";
+                  }
+                }
+              }
+            }
+            leaf encrypted {
+              tailf:info "Encrypted applications";
+              description
+                "Encrypted applications";
+              tailf:cli-full-command;
+              type enumeration {
+                enum "encrypted-no" {
+                  tailf:info "Encrypted-no related applications";
+                }
+                enum "encrypted-unassigned" {
+                  tailf:info "Encrypted-unassigned related applications";
+                }
+                enum "encrypted-yes" {
+                  tailf:info "Encrypted-yes related applications";
+                }
+              }
+            }
+            leaf sub-category {
+              tailf:info "Sub-category attribute";
+              description
+                "Sub-category attribute";
+              tailf:cli-full-command;
+              type union {
+                type string {
+                  tailf:info "xxx;;User defined sub-category";
+                }
+                type enumeration {
+                  enum "authentication-services" {
+                    tailf:info "Authentication-services related applications";
+                  }
+                  enum "backup-systems" {
+                    tailf:info "Backup-systems related applications";
+                  }
+                  enum "consumer-audio-streaming" {
+                    tailf:info "Applications stream audio to consumers";
+                  }
+                  enum "consumer-cloud-storage" {
+                    tailf:info "Cloud storage services targetted to personal consumers";
+                  }
+                  enum "consumer-multimedia-messaging" {
+                    tailf:info "consumer-multimedia-messaging related applications";
+                  }
+                  enum "consumer-video-streaming" {
+                    tailf:info "Applications stream video to consumers";
+                  }
+                  enum "consumer-web-browsing" {
+                    tailf:info "Consumer websites browsing";
+                  }
+                  enum "control-and-signaling" {
+                    tailf:info "Control-and-signaling related applications";
+                  }
+                  enum "desktop-virtualization" {
+                    tailf:info "Desktop virtualization and remote desktop related applications";
+                  }
+                  enum "enterprise-cloud-data-storage" {
+                    tailf:info "Cloud storage services targetted to enterprises";
+                  }
+                  enum "enterprise-cloud-services" {
+                    tailf:info "enterprise cloud applications";
+                  }
+                  enum "enterprise-data-center-storage" {
+                    tailf:info "Enterprise data center storage related applications";
+                  }
+                  enum "enterprise-media-conferencing" {
+                    tailf:info "Enterprise multimedia conferencing related applications";
+                  }
+                  enum "enterprise-realtime-apps" {
+                    tailf:info "Realtime interactive applications";
+                  }
+                  enum "enterprise-rich-media-content" {
+                    tailf:info "enterprise-rich-media-content";
+                  }
+                  enum "enterprise-sw-deployment-tools" {
+                    tailf:info "Software deployment application targeted to enteprises";
+                  }
+                  enum "enterprise-transactional-apps" {
+                    tailf:info "Transactional enterprise applications";
+                  }
+                  enum "enterprise-video-broadcast" {
+                    tailf:info "Video-based broadcast applications for enterprise use";
+                  }
+                  enum "enterprise-voice-collaboration" {
+                    tailf:info "Voice-based collaboration applications for enterprise use";
+                  }
+                  enum "file-transfer" {
+                    tailf:info "File transfer related applications";
+                  }
+                  enum "naming-services" {
+                    tailf:info "Naming-services related applications";
+                  }
+                  enum "network-management" {
+                    tailf:info "Network-management related applications";
+                  }
+                  enum "os-updates" {
+                    tailf:info "Operating systems updates traffic";
+                  }
+                  enum "other" {
+                    tailf:info "Other related applications";
+                  }
+                  enum "p2p-file-transfer" {
+                    tailf:info "P2P-file-transfer related applications";
+                  }
+                  enum "p2p-networking" {
+                    tailf:info "P2P-networking related applications";
+                  }
+                  enum "remote-access-terminal" {
+                    tailf:info "Remote-access-terminal related applications";
+                  }
+                  enum "routing-protocol" {
+                    tailf:info "Routing-protocol related applications";
+                  }
+                  enum "tunneling-protocols" {
+                    tailf:info "Tunneling-protocols related applications";
+                  }
+                }
+              }
+            }
+            leaf traffic-class {
+              tailf:info "SRND class";
+              description
+                "SRND class";
+              tailf:cli-full-command;
+              type enumeration {
+                enum "broadcast-video" {
+                  tailf:info "Broadcast TV, live events, video surveillance";
+                }
+                enum "bulk-data" {
+                  tailf:info "Non-interactive data applications";
+                }
+                enum "multimedia-conferencing" {
+                  tailf:info "Desktop software multimedia collaboration applications";
+                }
+                enum "multimedia-streaming" {
+                  tailf:info "Video-on-Demand (VoD) streaming video";
+                }
+                enum "network-control" {
+                  tailf:info "Network control plane traffic";
+                }
+                enum "ops-admin-mgmt" {
+                  tailf:info "Network operations, administration, and management traffic";
+                }
+                enum "real-time-interactive" {
+                  tailf:info "High-definition interactive video applications";
+                }
+                enum "signaling" {
+                  tailf:info "Signaling traffic that supports IP voice and video telephony";
+                }
+                enum "transactional-data" {
+                  tailf:info "Interactive data applications";
+                }
+                enum "voip-telephony" {
+                  tailf:info "VoIP telephony (bearer-only) traffic";
+                }
+              }
+            }
+            leaf tunnel {
+              tailf:info "Tunnelled applications";
+              description
+                "Tunnelled applications";
+              tailf:cli-full-command;
+              type enumeration {
+                enum "tunnel-no" {
+                  tailf:info "Tunnel-no related applications";
+                }
+                enum "tunnel-unassigned" {
+                  tailf:info "Tunnel-unassigned related applications";
+                }
+                enum "tunnel-yes" {
+                  tailf:info "Tunnel-yes related applications";
+                }
+              }
+            }
+          }
+        }
+        list attribute-set {
+          tailf:info "Set attribute Map";
+          description
+            "Set attribute Map";
+          tailf:cli-suppress-mode;
+          key "protocol-name";
+          leaf protocol-name {
+            type string;
+          }
+          leaf profile-name {
+            tailf:cli-drop-node-name;
+            tailf:cli-hide-in-submode;
+            type string {
+              tailf:info "xxx;;Attribute Profile Name";
+            }
+          }
+        }
+        list custom {
+          tailf:info "Custom PDL (protocol description language) Module";
+          description
+            "Custom PDL (protocol description language) Module";
+          tailf:cli-suppress-mode;
+          key "name";
+          leaf name {
+            type string {
+              tailf:info "WORD;;Name of the User defined Protocol";
+            }
+          }
+          container http {
+            tailf:info "Custom protocols based on http parameters";
+            description
+              "Custom protocols based on http parameters";
+            tailf:cli-hide-in-submode;
+            leaf cookie {
+              tailf:info "HTTP Cookie";
+              description
+                "HTTP Cookie";
+              type string {
+                tailf:info "WORD;;Enter String Format - cannot exceed 30 characters";
+              }
+            }
+            leaf host {
+              tailf:info "Host name of Origin Server containing resource";
+              description
+                "Host name of Origin Server containing resource";
+              type string {
+                tailf:info "WORD;;Enter String Format - cannot exceed 30 characters";
+              }
+            }
+            leaf method {
+              tailf:info "HTTP method";
+              description
+                "HTTP method";
+              type string {
+                tailf:info "WORD;;Enter String Format - cannot exceed 30 characters";
+              }
+            }
+            leaf referer {
+              tailf:info "Address the resource request was obtained from";
+              description
+                "Address the resource request was obtained from";
+              type string {
+                tailf:info "WORD;;Enter String Format - cannot exceed 30 characters";
+              }
+            }
+            choice http-uv {
+              case url-case {
+                leaf url {
+                  tailf:info "Uniform Resource Locator path";
+                  description
+                    "Uniform Resource Locator path";
+                  type string {
+                    tailf:info "WORD;;Enter String Format - cannot exceed 30 characters";
+                  }
+                }
+              }
+              case user-agent-case {
+                leaf user-agent {
+                  tailf:info "Software used by agent sending the request";
+                  description
+                    "Software used by agent sending the request";
+                  type string {
+                    tailf:info "WORD;;Enter String Format - cannot exceed 30 characters";
+                  }
+                }
+              }
+              case version-case {
+                leaf version {
+                  tailf:info "HTTP version";
+                  description
+                    "HTTP version";
+                  type string {
+                    tailf:info "WORD;;Enter String Format - cannot exceed 30 characters";
+                  }
+                }
+              }
+              case via-case {
+                leaf via {
+                  tailf:info "HTTP via field";
+                  description
+                    "HTTP via field";
+                  type string {
+                    tailf:info "WORD;;Enter String Format - cannot exceed 30 characters";
+                  }
+                }
+              }
+            }
+            leaf id {
+              tailf:info "Selector ID";
+              description
+                "Selector ID";
+              tailf:cli-full-command;
+              type uint16 {
+                tailf:info "<1-65535>;;Enter Selector ID";
+              }
+            }
+          }
+        }
+      }
+      container wccp {
+        tailf:info "Web-Cache Coordination Protocol IPv4 Commands";
+        description
+          "Web-Cache Coordination Protocol IPv4 Commands";
+        uses ip-wccp-grouping;
+        container check {
+          tailf:info "Enable a WCCP check";
+          description
+            "Enable a WCCP check";
+          container acl {
+            tailf:info "Enable acl check";
+            description
+              "Enable acl check";
+            leaf outbound {
+              tailf:info "Enable acl check on original outbound interface";
+              description
+                "Enable acl check on original outbound interface";
+              type empty;
+            }
+          }
+          container services {
+            tailf:info "Enable services check";
+            description
+              "Enable services check";
+            leaf all {
+              tailf:info "Enable all services check for redirection";
+              description
+                "Enable all services check for redirection";
+              type empty;
+            }
+          }
+        }
+        list vrf {
+          tailf:info "Configure WCCP for a VRF";
+          description
+            "Configure WCCP for a VRF";
+          tailf:cli-suppress-mode;
+          tailf:cli-compact-syntax;
+          key "name";
+          leaf name {
+            type string {
+              tailf:info "WORD;; VRF name";
+            }
+          }
+          uses ip-wccp-grouping;
+        }
+      }
+    }
+    container macro {
+      tailf:info "Macro configuration";
+      description
+        "Macro configuration";
+      container global {
+        tailf:info "Enter global macro configuration";
+        description
+          "Enter global macro configuration";
+        leaf description {
+          tailf:info "Macro description of this device";
+          description
+            "Macro description of this device";
+          tailf:cli-multi-value;
+          type string {
+            tailf:info "LINE;;Description of the macro applied on device";
+          }
+        }
+      }
+    }
+    container vmps {
+      tailf:info "VMPS settings";
+      description
+        "VMPS settings";
+      leaf reconfirm {
+        tailf:info "Set VMPS reconfirm interval";
+        description
+          "Set VMPS reconfirm interval";
+        type uint8 {
+          tailf:info "Number of minutes between reconfirmations";
+          range "0..120";
+        }
+      }
+      leaf retry {
+        tailf:info "Set VMPS retry count";
+        description
+          "Set VMPS retry count";
+        type uint8 {
+          tailf:info "<1-10>;;Retry count per server";
+          range "1..10";
+        }
+      }
+      list server {
+        tailf:info "Configure server IP address";
+        description
+          "Configure server IP address";
+        tailf:cli-suppress-mode;
+        tailf:cli-delete-when-empty;
+        tailf:cli-compact-syntax;
+        key "name";
+        leaf name {
+          type host-type {
+            tailf:info "Hostname or A.B.C.D;;IP address";
+          }
+        }
+        leaf primary {
+          tailf:info "Specify primary server";
+          description
+            "Specify primary server";
+          type empty;
+        }
+      }
+    }
+    container ipv6 {
+      tailf:info "Global IPv6 configuration commands";
+      description
+        "Global IPv6 configuration commands";
+      container access-list {
+        tailf:info "Configure access lists";
+        description
+          "Configure access lists";
+        list named-acl {
+          tailf:cli-drop-node-name;
+          tailf:cli-no-key-completion;
+          tailf:cli-mode-name "config-ipv6-acl";
+          key "name";
+          leaf name {
+            type string {
+              tailf:info "WORD;;User selected string identifying this access list";
+            }
+          }
+          uses ipv6-acl-grouping;
+        }
+        list named-rb-acl {
+          tailf:cli-drop-node-name;
+          tailf:cli-no-key-completion;
+          tailf:cli-mode-name "config-ipv6rb-acl";
+          key "name";
+          leaf name {
+            type string {
+              tailf:info "WORD;;User selected string identifying this access list";
+            }
+          }
+          leaf role-based {
+            tailf:info "Role-based Access List";
+            description
+              "Role-based Access List";
+            tailf:cli-hide-in-submode;
+            tailf:cli-prefix-key;
+            type empty;
+          }
+          uses ipv6-acl-grouping;
+        }
+        container log-update {
+          tailf:info "Control access list log updates";
+          description
+            "Control access list log updates";
+          leaf threshold {
+            tailf:info "Set access-list logging threshold";
+            description
+              "Set access-list logging threshold";
+            type uint64 {
+              tailf:info "<0-2147483647>;;Access list log-update threshold (number of hits)";
+              range "0..2147483647";
+            }
+          }
+        }
+        leaf match-local-traffic {
+          tailf:info "Match locally-generated traffic";
+          description
+            "Match locally-generated traffic";
+          tailf:cli-full-command;
+          type empty;
+        }
+      }
+      leaf unicast-routing {
+        tailf:info "Enable unicast routing";
+        description
+          "Enable unicast routing";
+        type empty;
+      }
+      container mld {
+        tailf:info "Global mld commands";
+        description
+          "Global mld commands";
+        container ssm-map {
+          tailf:info "SSM mapping commands";
+          description
+            "SSM mapping commands";
+          leaf enable {
+            tailf:info "Enable SSM mapping";
+            description
+              "Enable SSM mapping";
+            tailf:cli-full-command;
+            type empty;
+          }
+          container query {
+            tailf:info "Which database should we query for the source";
+            description
+              "Which database should we query for the source";
+            leaf dns {
+              tailf:info "Use DNS for source lookup";
+              description
+                "Use DNS for source lookup";
+              tailf:cli-full-command;
+              tailf:cli-show-no;
+              type empty;
+            }
+          }
+          container static {
+            tailf:info "SSM static group to source mapping";
+            description
+              "SSM static group to source mapping";
+            tailf:cli-sequence-commands;
+            tailf:cli-compact-syntax;
+            leaf acl {
+              tailf:cli-drop-node-name;
+              type string {
+                tailf:info "WORD;;Named access list specifying SSM group range";
+              }
+            }
+            leaf source-ip {
+              tailf:cli-drop-node-name;
+              type inet:ipv6-address {
+                tailf:info "X:X:X:X::X;;SSM source address";
+              }
+            }
+          }
+        }
+      }
+      container multicast {
+        tailf:info "Configure multicast related commands";
+        description
+          "Configure multicast related commands";
+        tailf:cli-compact-syntax;
+        leaf vrf {
+          tailf:info "Select VPN Routing/Forwarding instance";
+          description
+            "Select VPN Routing/Forwarding instance";
+          type string {
+            tailf:info "WORD;;VPN Routing/Forwarding Instance (VRF) name";
+          }
+        }
+        container rpf {
+          tailf:info "Configure multicast RPF related commands";
+          description
+            "Configure multicast RPF related commands";
+          tailf:cli-flatten-container;
+          container backoff {
+            tailf:info "Backoff delay after unicast routing change";
+            description
+              "Backoff delay after unicast routing change";
+            tailf:cli-compact-syntax;
+            tailf:cli-sequence-commands {
+              tailf:cli-reset-siblings;
+            }
+            leaf initial-delay {
+              tailf:cli-drop-node-name;
+              type uint16 {
+                tailf:info "<200-65535>;;Initial RPF backoff delay in milliseconds";
+                range "200..65535";
+              }
+            }
+            leaf max-delay {
+              tailf:cli-drop-node-name;
+              type uint16 {
+                tailf:info "<200-65535>;;Maximum RPF backoff delay in milliseconds";
+                range "200..65535";
+              }
+            }
+          }
+          leaf use-bgp {
+            tailf:info "Use BGP routes for multicast RPF lookup";
+            description
+              "Use BGP routes for multicast RPF lookup";
+            type empty;
+          }
+        }
+      }
+      container multicast-routing {
+        tailf:info "Enable IPv6 multicast";
+        description
+          "Enable IPv6 multicast";
+        presence "true";
+        leaf vrf {
+          tailf:info "Select VPN Routing/Forwarding instance";
+          description
+            "Select VPN Routing/Forwarding instance";
+          type string {
+            tailf:info "WORD;;VPN Routing/Forwarding instance name";
+          }
+        }
+      }
+      container cef {
+        tailf:info "Cisco Express Forwarding";
+        description
+          "Cisco Express Forwarding";
+        tailf:cli-delete-when-empty;
+        presence "true";
+        container accounting {
+          tailf:info "Enable CEF accounting";
+          description
+            "Enable CEF accounting";
+          leaf per-prefix {
+            tailf:info "Enable per prefix accounting";
+            description
+              "Enable per prefix accounting";
+            type empty;
+          }
+          leaf prefix-length {
+            tailf:info "Enable prefix length accounting";
+            description
+              "Enable prefix length accounting";
+            type empty;
+          }
+        }
+        leaf distributed {
+          tailf:info "Distributed Cisco Express Forwarding";
+          description
+            "Distributed Cisco Express Forwarding";
+          tailf:cli-full-command;
+          type empty;
+        }
+      }
+      container nd {
+        tailf:info "Configure IPv6 ND";
+        description
+          "Configure IPv6 ND";
+        container cache {
+          tailf:info "Cache entry";
+          description
+            "Cache entry";
+          container expire {
+            tailf:info "Expiry time for ND entries";
+            description
+              "Expiry time for ND entries";
+            tailf:cli-compact-syntax;
+            leaf time {
+              tailf:cli-drop-node-name;
+              type uint16 {
+                tailf:info "<1-65536>;;Expiry time (seconds)";
+              }
+            }
+            leaf refresh {
+              tailf:info "Automatically refresh entry";
+              description
+                "Automatically refresh entry";
+              tailf:cli-full-command;
+              type empty;
+            }
+          }
+        }
+        container raguard {
+          tailf:info "Configure RA guard";
+          description
+            "Configure RA guard";
+          leaf policy {
+            tailf:info "Configure a policy for feature RA guard";
+            description
+              "Configure a policy for feature RA guard";
+            type string {
+              tailf:info "WORD;;Name of the raguard policy";
+            }
+          }
+          leaf attach-policy {
+            tailf:info "Configure a policy for feature RA guard";
+            description
+              "Configure a policy for feature RA guard";
+            type string {
+              tailf:info "WORD;;Name of the raguard policy";
+            }
+          }
+        }
+      }
+      container pim {
+        tailf:info "Configure Protocol Independent Multicast";
+        description
+          "Configure Protocol Independent Multicast";
+        uses ipv6-pim-grouping;
+        list vrf {
+          tailf:info "Select VPN Routing/Forwarding instance";
+          description
+            "Select VPN Routing/Forwarding instance";
+          tailf:cli-suppress-mode;
+          tailf:cli-delete-when-empty;
+          key "id";
+          leaf id {
+            type string {
+              tailf:info "WORD;;VPN Routing/Forwarding instance name";
+            }
+          }
+          uses ipv6-pim-grouping;
+        }
+      }
+      container rip {
+        tailf:info "Configure ipv6 RIP settings";
+        description
+          "Configure ipv6 RIP settings";
+        leaf vrf-mode {
+          tailf:info "Enable RIPng VRF support";
+          description
+            "Enable RIPng VRF support";
+          type enumeration {
+            enum "enable" {
+              tailf:info "Enable RIPng VRF support";
+            }
+          }
+        }
+      }
+      container route {
+        tailf:info "Configure static routes";
+        description
+          "Configure static routes";
+        uses ipv6-route-grouping;
+        list vrf {
+          tailf:info "Configure static route for a VPN Routing/Forwarding instance";
+          description
+            "Configure static route for a VPN Routing/Forwarding instance";
+          tailf:cli-suppress-mode;
+          tailf:cli-delete-when-empty;
+          tailf:cli-compact-syntax;
+          tailf:cli-reset-container;
+          tailf:cli-incomplete-command;
+          tailf:cli-diff-dependency "/ios:native/vrf/definition";
+          tailf:cli-diff-dependency "/ios:native/vrf/definition/address-family";
+          key "name";
+          leaf name {
+            type string {
+              tailf:info "WORD;VRF name";
+            }
+          }
+          uses ipv6-route-grouping;
+        }
+      }
+      container router {
+        tailf:info "Enable an IPV6 routing process";
+        description
+          "Enable an IPV6 routing process";
+        list eigrp {
+          tailf:info "Enhanced Interior Gateway Routing Protocol (EIGRP)";
+          description
+            "Enhanced Interior Gateway Routing Protocol (EIGRP)";
+          tailf:cli-mode-name "config-rtr";
+          key "id";
+          leaf id {
+            tailf:info "Autonomous System ID";
+            description
+              "Autonomous System ID";
+            type uint16 {
+              tailf:info "<1..65535>;;ID";
+              range "1..65535";
+            }
+          }
+          container default-metric {
+            tailf:info "Set metric of redistributed routes";
+            description
+              "Set metric of redistributed routes";
+            tailf:cli-sequence-commands;
+            tailf:cli-compact-syntax;
+            leaf dm-rdr {
+              tailf:cli-drop-node-name;
+              description
+                "Bandwidth in Kbits per second";
+              type uint32 {
+                tailf:info "<1-4294967295>;;Bandwidth in Kbits per second";
+                range "1..4294967295";
+              }
+            }
+            leaf dm-rdr0 {
+              tailf:cli-drop-node-name;
+              description
+                "delay metric in 10 microsecond units";
+              type uint32 {
+                tailf:info "<0-4294967295>;;delay metric in 10 microsecond units";
+                range "0..4294967295";
+              }
+            }
+            leaf dm-rdr-pct {
+              description
+                "Reliability metric where 255 is 100% reliable";
+              tailf:cli-drop-node-name;
+              type uint8 {
+                tailf:info "<0-255>;;Reliability metric where 255 is 100% reliable";
+                range "0..255";
+              }
+            }
+            leaf effective-bandwith-metric {
+              tailf:cli-drop-node-name;
+              description
+                "Effective bandwidth metric (Loading) where 255 is 100% loaded";
+              type uint8 {
+                tailf:info "<1-255>;;Effective bandwidth metric (Loading) where 255 is 100% loaded";
+              }
+            }
+            leaf mtu {
+              tailf:cli-drop-node-name;
+              description
+                "Maximum Transmission Unit metric of the path ";
+              type uint16 {
+                tailf:info "<1-65535>;;Maximum Transmission Unit metric of the path";
+              }
+            }
+          }
+          container distance {
+            tailf:info "Define an administrative distance";
+            description
+              "Define an administrative distance";
+            container eigrp {
+              tailf:info "EIGRP-IPV6 distance";
+              description
+                "EIGRP-IPV6 distance";
+              tailf:cli-sequence-commands;
+              tailf:cli-compact-syntax;
+              leaf internal-route {
+                tailf:cli-drop-node-name;
+                description
+                  "Distance for internal routes";
+                type uint8 {
+                  tailf:info "<1-255>;;Distance for internal routes";
+                }
+              }
+              leaf external-route {
+                tailf:cli-drop-node-name;
+                description
+                  "Distance for external routes";
+                type uint8 {
+                  tailf:info "<1-255>;;Distance for external routes";
+                }
+              }
+            }
+          }
+          uses ipv6-router-distribute-list-grouping;
+          container eigrp {
+            tailf:info "EIGRP specific commands";
+            description
+              "EIGRP specific commands";
+            leaf router-id {
+              tailf:info "router id for this EIGRP process";
+              description
+                "router id for this EIGRP process";
+              type inet:ipv4-address {
+                tailf:info "A.B.C.D;;EIGRP Router-ID in IP address format";
+              }
+            }
+          }
+          list passive-interface {
+            tailf:info "Suppress routing updates on an interface";
+            description
+              "Suppress routing updates on an interface";
+            tailf:cli-suppress-mode;
+            key "name";
+            leaf name {
+              tailf:cli-show-no;
+              type union {
+                type string;
+                type enumeration {
+                  enum "default";
+                }
+              }
+            }
+          }
+        }
+        list rip {
+          tailf:info "IPv6 Routing Information Protocol (RIPv6)";
+          description
+            "IPv6 Routing Information Protocol (RIPv6)";
+          tailf:cli-mode-name "config-rtr";
+          key "id";
+          leaf id {
+            type string {
+              tailf:info "WORD;;User selected string identifying this process";
+            }
+          }
+          leaf distance {
+            tailf:info "Administrative distance";
+            description
+              "Administrative distance";
+            tailf:cli-full-command;
+            type uint8 {
+              range "1..254";
+              tailf:info "1-254;;Administrative distance";
+            }
+          }
+          uses ipv6-router-distribute-list-grouping;
+          leaf maximum-paths {
+            tailf:info "Forward packets over multiple paths";
+            description
+              "Forward packets over multiple paths";
+            tailf:cli-full-command;
+            type uint32 {
+              range "1..32";
+              tailf:info "<1-32>;;Number of paths";
+            }
+          }
+          leaf poison-reverse {
+            tailf:info "Poison reverse updates";
+            description
+              "Poison reverse updates";
+            tailf:cli-full-command;
+            type empty;
+          }
+          container redistribute {
+            tailf:info "Redistribute IPv6 prefixes from another routing protocol";
+            description
+              "Redistribute IPv6 prefixes from another routing protocol";
+            container application {
+              tailf:info "Application Protocol";
+              description
+                "Application Protocol";
+              tailf:cli-compact-syntax;
+              uses ipv6-router-rip-redistribute-grouping;
+            }
+            container lisp {
+              tailf:info "Locator ID Separation Protocol (LISP)";
+              description
+                "Locator ID Separation Protocol (LISP)";
+              tailf:cli-compact-syntax;
+              uses ipv6-router-rip-redistribute-grouping;
+            }
+            container nd {
+              tailf:info "Neighbor Discovery";
+              description
+                "Neighbor Discovery";
+              tailf:cli-compact-syntax;
+              uses ipv6-router-rip-redistribute-grouping;
+            }
+            uses default-redistribute-grouping;
+          }
+          leaf split-horizon {
+            tailf:info "Split horizon updates";
+            description
+              "Split horizon updates";
+            tailf:cli-full-command;
+            type empty;
+          }
+          container timers {
+            tailf:info "Adjust routing timers";
+            description
+              "Adjust routing timers";
+            tailf:cli-compact-syntax;
+            tailf:cli-sequence-commands;
+            leaf update {
+              description
+                "Update period";
+              tailf:cli-drop-node-name;
+              type uint16 {
+                tailf:info "<5-65535>;;Update period";
+                range "5..65535";
+              }
+            }
+            leaf timeout {
+              description
+                "Route timeout period";
+              tailf:cli-drop-node-name;
+              type uint16 {
+                tailf:info "<1-65535>;;Route timeout period";
+                range "1..65535";
+              }
+            }
+            leaf holddown {
+              description
+                "Route holddown period";
+              tailf:cli-drop-node-name;
+              type uint16 {
+                tailf:info "<0-65535>;;Route holddown period";
+                range "0..65535";
+              }
+            }
+            leaf garbage-collection {
+              description
+                "Route garbage collection period";
+              tailf:cli-drop-node-name;
+              type uint16 {
+                tailf:info "<1-65535>;;Route garbage collection period";
+                range "1..65535";
+              }
+            }
+          }
+        }
+      }
+      leaf source-route {
+        tailf:info "Process packets with source routing header options";
+        description
+          "Process packets with source routing header options";
+        tailf:cli-boolean-no;
+        tailf:cli-trim-default;
+        type boolean;
+        default "true";
+      }
+      container prefix-list {
+        tailf:info "Build a prefix list";
+        description
+          "Build a prefix list";
+        list prefixes {
+          tailf:cli-drop-node-name;
+          tailf:cli-suppress-mode;
+          tailf:cli-delete-when-empty;
+          key "name";
+          leaf name {
+            type string {
+              tailf:info "WORD;;Name of a prefix list";
+              pattern "([^s].*)|(s[^e].*)|(se[^q].*)(seq[^u].*)|(sequ[^e].*)|(seque[^n].*)|(sequen[^c].*)|(sequenc[^e].*)|(sequence[^\\-].*)|(sequence\\-[^n].*)|(sequence\\-n[^u].*)|(sequence\\-nu[^m].*)|(sequence\\-num[^b].*)|(sequence\\-numb[^e].*)|(sequence\\-numbe[^r].*)|(sequence\\-number..*)";
+            }
+          }
+          leaf description {
+            tailf:info "Prefix-list specific description";
+            description
+              "Prefix-list specific description";
+            tailf:cli-multi-value;
+            tailf:cli-full-command;
+            type string {
+              length "1..80";
+              tailf:info "LINE;;Up to 80 characters describing this prefix-list";
+            }
+          }
+          container permit {
+            tailf:info "Specify packets to forward";
+            description
+              "Specify packets to forward";
+            tailf:cli-sequence-commands;
+            tailf:cli-compact-syntax;
+            leaf address {
+              tailf:cli-drop-node-name;
+              type ios:ipv6-prefix {
+                tailf:info "X:X:X:X::X/<0-128>;;IPv6 prefix<network>/<length>";
+              }
+            }
+            leaf ge {
+              tailf:info "Minimum prefix length to be matched";
+              description
+                "Minimum prefix length to be matched";
+              tailf:cli-break-sequence-commands;
+              type uint8 {
+                tailf:info "<0-128>;;Minimum prefix length";
+                range "0..128";
+              }
+            }
+            leaf le {
+              tailf:info "Maximum prefix length to be matched";
+              description
+                "Maximum prefix length to be matched";
+              tailf:cli-full-command;
+              type uint8 {
+                tailf:info "<0-128>;;Maximum prefix length";
+                range "0..128";
+              }
+            }
+          }
+          container deny {
+            tailf:info "Specify packets to reject";
+            description
+              "Specify packets to reject";
+            tailf:cli-sequence-commands;
+            tailf:cli-compact-syntax;
+            leaf address {
+              tailf:cli-drop-node-name;
+              type ios:ipv6-prefix {
+                tailf:info "X:X:X:X::X/<0-128>;;IPv6 prefix<network>/<length>";
+              }
+            }
+            leaf ge {
+              tailf:info "Minimum prefix length to be matched";
+              description
+                "Minimum prefix length to be matched";
+              tailf:cli-break-sequence-commands;
+              type uint8 {
+                tailf:info "<0-128>;;Minimum prefix length";
+                range "0..128";
+              }
+            }
+            leaf le {
+              tailf:info "Maximum prefix length to be matched";
+              description
+                "Maximum prefix length to be matched";
+              tailf:cli-full-command;
+              type uint8 {
+                tailf:info "<0-128>;;Maximum prefix length";
+                range "0..128";
+              }
+            }
+          }
+          list seq {
+            tailf:info "sequence number of an entry";
+            description
+              "sequence number of an entry";
+            tailf:cli-suppress-mode;
+            tailf:cli-delete-when-empty;
+            key "no";
+            leaf no {
+              type uint32 {
+                range "1..4294967294";
+                tailf:info "<1-4294967294>;;Sequence number";
+              }
+              tailf:key-default "10";
+            }
+            container deny {
+              tailf:info "Specify packets to reject";
+              description
+                "Specify packets to reject";
+              tailf:cli-sequence-commands {
+                tailf:cli-reset-all-siblings;
+              }
+              tailf:cli-compact-syntax;
+              leaf ip {
+                tailf:cli-drop-node-name;
+                type ios:ipv6-prefix {
+                  tailf:info "X:X:X:X::X/<0-128>  IPv6 prefix<network>/<length>";
+                }
+              }
+              leaf ge {
+                tailf:info "Minimum prefix length to be matched";
+                description
+                  "Minimum prefix length to be matched";
+                tailf:cli-break-sequence-commands;
+                type uint16 {
+                  range "1..128";
+                  tailf:info "<1-128>;;Minimum prefix length";
+                }
+              }
+              leaf le {
+                tailf:info "Maximum prefix length to be matched";
+                description
+                  "Maximum prefix length to be matched";
+                tailf:cli-full-command;
+                type uint16 {
+                  range "1..128";
+                  tailf:info "<1-128>;;Maximum prefix length";
+                }
+              }
+            }
+            container permit {
+              tailf:info "Specify packets to forward";
+              description
+                "Specify packets to forward";
+              tailf:cli-sequence-commands {
+                tailf:cli-reset-all-siblings;
+              }
+              tailf:cli-compact-syntax;
+              leaf ip {
+                tailf:cli-drop-node-name;
+                type ios:ipv6-prefix {
+                  tailf:info "X:X:X:X::X/<0-128>  IPv6 prefix<network>/<length>";
+                }
+              }
+              leaf ge {
+                tailf:info "Minimum prefix length to be matched";
+                description
+                  "Minimum prefix length to be matched";
+                tailf:cli-break-sequence-commands;
+                type uint16 {
+                  range "1..128";
+                  tailf:info "<1-128>;;Minimum prefix length";
+                }
+              }
+              leaf le {
+                tailf:info "Maximum prefix length to be matched";
+                description
+                  "Maximum prefix length to be matched";
+                tailf:cli-full-command;
+                type uint16 {
+                  range "1..128";
+                  tailf:info "<1-128>;;Maximum prefix length";
+                }
+              }
+            }
+          }
+        }
+        leaf sequence-number {
+          tailf:info "Include/exclude sequence numbers in NVGEN";
+          description
+            "Include/exclude sequence numbers in NVGEN";
+          tailf:cli-full-command;
+          type empty;
+        }
+      }
+    }
+    container vlan {
+      tailf:info "VLAN commands";
+      description
+        "VLAN commands";
+      container accounting {
+        tailf:info "VLAN accounting configuration";
+      }
+      container internal {
+        tailf:info "internal VLAN";
+        description
+          "internal VLAN";
+        container allocation {
+          tailf:info "internal VLAN allocation";
+          description
+            "internal VLAN allocation";
+          leaf policy {
+            type enumeration {
+              enum "ascending" {
+                tailf:info "Allocates internal VLANs from 1006 to 4094";
+              }
+              enum "descending" {
+                tailf:info "Allocates internal VLANs from 4094 to 1006.";
+              }
+            }
+          }
+        }
+      }
+      container dot1q {
+        tailf:info "dot1q parameters";
+        description
+          "dot1q parameters";
+        container tag {
+          tailf:info "tag parameters";
+          description
+            "tag parameters";
+          leaf native {
+            tailf:info "tag native vlan";
+            description
+              "tag native vlan";
+            type empty;
+          }
+        }
+      }
+      container access-log {
+        tailf:info "Configure VACL logging";
+        description
+          "Configure VACL logging";
+        leaf maxflow {
+          tailf:info "Set vacl logging maximum flow number";
+          description
+            "Set vacl logging maximum flow number";
+          type uint16 {
+            tailf:info "<0-2048>;;Maximum flow number";
+            range "0..2048";
+          }
+        }
+        leaf ratelimit {
+          tailf:info "Set vacl logging rate limiter";
+          description
+            "Set vacl logging rate limiter";
+          type uint16 {
+            tailf:info "<10-5000>;;Maximum number of packets logged per second";
+            range "10..5000";
+          }
+        }
+        leaf threshold {
+          tailf:info "Set vacl log-update threshold";
+          description
+            "Set vacl log-update threshold";
+          type uint32 {
+            tailf:info "<0-2147483647>;;log-update threshold (number of hits)";
+            range "0..2147483647";
+          }
+        }
+      }
+      list vlan-list {
+        tailf:cli-drop-node-name;
+        tailf:cli-mode-name "config-vlan";
+        tailf:cli-range-list-syntax;
+        key "id";
+        leaf id {
+          type union {
+            type uint16 {
+              range "1..4094";
+              tailf:info "<1-3967,4048-4094>;;VLAN ID 1-4094 or range(s): 1-5, 10 or 2-5,7-19";
+            }
+            type string;
+          }
+        }
+        leaf name {
+          tailf:info "Ascii name of the VLAN";
+          description
+            "Ascii name of the VLAN";
+          tailf:cli-full-command;
+          tailf:cli-multi-value;
+          type string {
+            length "1..32";
+            tailf:info "The ascii name for the VLAN (Max Size 32)";
+          }
+        }
+        leaf uni-vlan {
+          tailf:info "Configure a UNI VLAN";
+          description
+            "Configure a UNI VLAN";
+          tailf:cli-full-command;
+          type enumeration {
+            enum "community" {
+              tailf:info "UNI/ENI community VLAN";
+            }
+            enum "isolated" {
+              tailf:info "UNI/ENI isolated VLAN";
+            }
+          }
+        }
+      }
+    }
+    container interface {
+      tailf:info "Configure interfaces";
+      description
+        "Configure interfaces";
+      tailf:cli-diff-dependency "/ios:native/vrf";
+      tailf:cli-explicit-exit;
+      list AppNav-Compress {
+        tailf:info "Service-Context Virtual Interface Compress";
+        description
+          "Service-Context Virtual Interface Compress";
+        tailf:cli-allow-join-with-key {
+          tailf:cli-display-joined;
+        }
+        tailf:cli-mode-name "config-if";
+        tailf:cli-suppress-key-abbreviation;
+        key "name";
+        leaf name {
+          type uint16 {
+            tailf:info "<1-1000>;;AppNav-Compress interface number";
+            range "1..1000";
+          }
+        }
+        uses interface-common-grouping;
+      }
+      list AppNav-UnCompress {
+        tailf:info "Service-Context Virtual Interface UnCompress";
+        description
+          "Service-Context Virtual Interface UnCompress";
+        tailf:cli-allow-join-with-key {
+          tailf:cli-display-joined;
+        }
+        tailf:cli-mode-name "config-if";
+        tailf:cli-suppress-key-abbreviation;
+        key "name";
+        leaf name {
+          type uint16 {
+            tailf:info "<1-1000>;;AppNav-UnCompress interface number";
+            range "1..1000";
+          }
+        }
+        uses interface-common-grouping;
+      }
+      list ATM {
+        tailf:info "ATM interface";
+        description
+          "ATM interface";
+        tailf:cli-allow-join-with-key {
+          tailf:cli-display-joined;
+        }
+        tailf:cli-mode-name "config-if";
+        tailf:cli-suppress-key-abbreviation;
+        key "name";
+        leaf name {
+          type string {
+            tailf:info "<slot>/<subslot>/<port>;;ATM interface number";
+            pattern "([0-9]/){2}([0-9]|(ima[0-9]))(:[0-9])?";
+          }
+        }
+        uses interface-atm-grouping;
+      }
+      container ATM-subinterface {
+        tailf:cli-drop-node-name;
+        list ATM {
+          tailf:cli-allow-join-with-key {
+            tailf:cli-display-joined;
+          }
+          tailf:cli-mode-name "config-subif";
+          tailf:cli-suppress-key-abbreviation;
+          key "name";
+          leaf name {
+            type string {
+              pattern "([0-9]/){2}[0-9]\\.([0-9]/){3}[0-9]";
+            }
+          }
+          uses interface-atm-grouping;
+        }
+      }
+      list ATM-ACR {
+        tailf:info "ATM-ACR interface";
+        description
+          "ATM-ACR interface";
+        tailf:cli-allow-join-with-key {
+          tailf:cli-display-joined;
+        }
+        tailf:cli-mode-name "config-if";
+        tailf:cli-suppress-key-abbreviation;
+        key "name";
+        leaf name {
+          type string {
+            tailf:info "<slot>/<subslot>/<port>;;ATM-ACR interface number";
+            pattern "[0-9]";
+          }
+        }
+        uses interface-atm-grouping;
+      }
+      container ATM-ACRsubinterface {
+        tailf:cli-drop-node-name;
+        list ATM-ACR {
+          tailf:cli-allow-join-with-key {
+            tailf:cli-display-joined;
+          }
+          tailf:cli-mode-name "config-subif";
+          tailf:cli-suppress-key-abbreviation;
+          key "name";
+          leaf name {
+            type string {
+              pattern "[0-9]\\.([0-9]/){3}[0-9]";
+            }
+          }
+          uses interface-atm-grouping;
+        }
+      }
+      list BDI {
+        tailf:info "Bridge-Domain interface";
+        description
+          "Bridge-Domain interface";
+        tailf:cli-allow-join-with-key {
+          tailf:cli-display-joined;
+        }
+        tailf:cli-mode-name "config-if";
+        key "name";
+        leaf name {
+          type string {
+            tailf:info "<1-16000>;;BDI interface number";
+          }
+        }
+        uses interface-common-grouping;
+      }
+      list CEM {
+        tailf:info "Circuit Emulation interface";
+        description
+          "Circuit Emulation interface";
+        tailf:cli-allow-join-with-key {
+          tailf:cli-display-joined;
+        }
+        tailf:cli-mode-name "config-if";
+        tailf:cli-suppress-key-abbreviation;
+        key "name";
+        leaf name {
+          type string {
+            tailf:info "<slot>/<port>;;CEM interface number";
+            pattern "([0-9]/){2}[0-9]";
+          }
+        }
+        uses interface-atm-grouping;
+      }
+      list CEM-ACR {
+        tailf:info "Circuit Emulation interface";
+        description
+          "Circuit Emulation interface";
+        tailf:cli-allow-join-with-key {
+          tailf:cli-display-joined;
+        }
+        tailf:cli-mode-name "config-if";
+        tailf:cli-suppress-key-abbreviation;
+        key "name";
+        leaf name {
+          type uint8 {
+            tailf:info "<0-255>;;CEM-ACR interface number";
+            range "0..255";
+          }
+        }
+        uses interface-atm-grouping;
+      }
+      list Embedded-Service-Engine {
+        tailf:info "cisco embedded service engine module";
+        description
+          "cisco embedded service engine module";
+        tailf:cli-allow-join-with-key {
+          tailf:cli-display-joined;
+        }
+        tailf:cli-mode-name "config-if";
+        key "name";
+        leaf name {
+          type string {
+            tailf:info "<0-2>/<0-0>;;Embedded-Service-Engine interface number";
+          }
+        }
+        uses interface-common-grouping;
+      }
+      list FastEthernet {
+        tailf:info "FastEthernet IEEE 802.3";
+        description
+          "FastEthernet IEEE 802.3";
+        tailf:cli-allow-join-with-key {
+          tailf:cli-display-joined;
+        }
+        tailf:cli-mode-name "config-if";
+        key "name";
+        leaf name {
+          type string {
+            tailf:info "<0-66>/<0-128>;;FastEthernet interface number";
+          }
+        }
+        uses interface-ethernet-grouping;
+        uses interface-common-grouping;
+        uses interface-zone-member-grouping;
+        uses interface-switch-grouping;
+      }
+      list GigabitEthernet {
+        tailf:info "GigabitEthernet IEEE 802.3z";
+        description
+          "GigabitEthernet IEEE 802.3z";
+        tailf:cli-allow-join-with-key {
+          tailf:cli-display-joined;
+        }
+        tailf:cli-mode-name "config-if";
+        key "name";
+        leaf name {
+          type string {
+            tailf:info "<0-66>/<0-128>;;GigabitEthernet interface number";
+          }
+        }
+        leaf media-type {
+          tailf:info "Media type";
+          description
+            "Media type";
+          type enumeration {
+            enum "auto-select" {
+              tailf:info "Use whichever connector is attached";
+            }
+            enum "rj45" {
+              tailf:info "Copper";
+            }
+            enum "sfp" {
+              tailf:info "Fiber";
+            }
+          }
+        }
+        leaf port-type {
+          type enumeration {
+            enum "nni";
+          }
+        }
+        uses interface-ethernet-grouping;
+        uses interface-common-grouping;
+        uses interface-zone-member-grouping;
+        uses interface-switch-grouping;
+      }
+      list TenGigabitEthernet {
+        tailf:info "Ten Gigabit Ethernet";
+        description
+          "Ten Gigabit Ethernet";
+        tailf:cli-allow-join-with-key {
+          tailf:cli-display-joined;
+        }
+        tailf:cli-mode-name "config-if";
+        key "name";
+        leaf name {
+          type string {
+            tailf:info "<0-66>/<0-128>;;TenGigabitEthernet interface number";
+          }
+        }
+        leaf media-type {
+          tailf:info "Media type";
+          description
+            "Media type";
+          type enumeration {
+            enum "auto-select" {
+              tailf:info "Use whichever connector is attached";
+            }
+            enum "rj45" {
+              tailf:info "Copper";
+            }
+            enum "sfp" {
+              tailf:info "Fiber";
+            }
+          }
+        }
+        leaf port-type {
+          type enumeration {
+            enum "nni";
+          }
+        }
+        uses interface-ethernet-grouping;
+        uses interface-common-grouping;
+        uses interface-zone-member-grouping;
+        uses interface-switch-grouping;
+      }
+      list Loopback {
+        tailf:info "Loopback interface";
+        description
+          "Loopback interface";
+        tailf:cli-allow-join-with-key {
+          tailf:cli-display-joined;
+        }
+        tailf:cli-mode-name "config-if";
+        key "name";
+        leaf name {
+          type string {
+            tailf:info "<0-2147483647>;;Loopback interface number";
+          }
+        }
+        uses interface-common-grouping;
+      }
+      list nve {
+        tailf:info "Network virtualization endpoint interface";
+        description
+          "Network virtualization endpoint interface";
+        tailf:cli-allow-join-with-key {
+          tailf:cli-display-joined;
+        }
+        tailf:cli-mode-name "config-if";
+        key "name";
+        leaf name {
+          type uint16 {
+            tailf:info "<1-4096>;;nve interface number";
+            range "1..4096";
+          }
+        }
+        container source-interface {
+          tailf:info "Specify source interface for NVE";
+          description
+            "Specify source interface for NVE";
+          uses interface-grouping;
+        }
+        container member {
+          tailf:cli-incomplete-command;
+          tailf:cli-sequence-commands;
+          list vni {
+            tailf:info "Configure VNI information";
+            description
+              "Configure VNI information";
+            tailf:cli-sequence-commands;
+            tailf:cli-compact-syntax;
+            key "vni-range";
+            leaf vni-range {
+              type string {
+                tailf:info "WORD;;VNI range or instance between 4096-16777215 example: 6010-6030 or 7115";
+              }
+            }
+            container mcast-group {
+              tailf:cli-incomplete-command;
+              tailf:cli-sequence-commands;
+              leaf multicast-group-min {
+                tailf:cli-drop-node-name;
+                tailf:info "Starting Multicast Group IPv4 Address";
+                description
+                  "Starting Multicast Group IPv4 Address";
+                type inet:ipv4-address {
+                  tailf:info "A.B.C.D;;IP address";
+                }
+              }
+              leaf multicast-group-max {
+                tailf:cli-drop-node-name;
+                tailf:info "Ending Multicast Group IPv4 Address";
+                description
+                  "Ending Multicast Group IPv4 Address";
+                type inet:ipv4-address {
+                  tailf:info "A.B.C.D;;IP address";
+                }
+              }
+            }
+          }
+        }
+      }
+      list overlay {
+        tailf:info "Overlay interface";
+        description
+          "Overlay interface";
+        tailf:cli-allow-join-with-key {
+          tailf:cli-display-joined;
+        }
+        tailf:cli-mode-name "config-if";
+        key "name";
+        leaf name {
+          type uint16 {
+            tailf:info "<0-512>;;Overlay interface number";
+            range "0..512";
+          }
+        }
+        uses interface-common-grouping;
+        uses interface-ethernet-grouping;
+        uses interface-overlay-grouping;
+      }
+      list Port-channel {
+        tailf:info "Ethernet Channel of interfaces";
+        description
+          "Ethernet Channel of interfaces";
+        tailf:cli-allow-join-with-key {
+          tailf:cli-display-joined;
+        }
+        tailf:cli-mode-name "config-if";
+        key "name";
+        leaf name {
+          type uint32 {
+            tailf:info "<1-512>;;Port-channel interface number";
+            range "1..512";
+          }
+        }
+        leaf pc-speed {
+          tailf:alt-name "speed";
+          tailf:info "Configure speed operation.";
+          description
+            "Configure speed operation.";
+          type enumeration {
+            enum "10" {
+              tailf:info "Force 10 Mbps operation";
+            }
+            enum "100" {
+              tailf:info "Force 100 Mbps operation";
+            }
+            enum "1000" {
+              tailf:info "Enable AUTO speed configuration";
+            }
+            enum "nonegotiate";
+            enum "auto" {
+              tailf:info "Enable AUTO speed configuration";
+            }
+          }
+        }
+        uses interface-common-grouping;
+        uses interface-switch-grouping;
+        uses interface-ethernet-grouping;
+      }
+      container Port-channel-subinterface {
+        tailf:cli-drop-node-name;
+        list Port-channel {
+          tailf:cli-allow-join-with-key {
+            tailf:cli-display-joined;
+          }
+          tailf:cli-mode-name "config-subif";
+          tailf:cli-suppress-key-abbreviation;
+          key "name";
+          leaf name {
+            type string;
+          }
+          uses interface-common-grouping;
+          uses interface-switch-grouping;
+          uses interface-ethernet-grouping;
+        }
+      }
+      list pseudowire {
+        tailf:info "Pseudowire Interface";
+        description
+          "Pseudowire Interface";
+        tailf:cli-mode-name "config-if";
+        tailf:cli-allow-join-with-key {
+          tailf:cli-display-joined;
+        }
+        key "name";
+        leaf name {
+          type uint32 {
+            tailf:info "<1-231072>;;pseudowire interface number";
+            range "1..231072";
+          }
+        }
+        uses pseudowire-grouping;
+      }
+      list SM {
+        tailf:info "SM Interface";
+        description
+          "SM Interface";
+        tailf:cli-mode-name "config-if";
+        tailf:cli-allow-join-with-key {
+          tailf:cli-display-joined;
+        }
+        key "name";
+        leaf name {
+          type string {
+            pattern "([0-9])+(/([0-9])+)?";
+          }
+        }
+        uses interface-common-grouping;
+      }
+      list Cellular {
+        tailf:info "Cellular Interface";
+        description
+          "Cellular Interface";
+        tailf:cli-mode-name "config-if";
+        tailf:cli-allow-join-with-key {
+          tailf:cli-display-joined;
+        }
+        key "name";
+        leaf name {
+          type string {
+            pattern "([0-9])+(/([0-9])+)?";
+          }
+        }
+        uses interface-common-grouping;
+        uses interface-cellular-grouping;
+      }
+      list Vlan {
+        tailf:info "Catalyst Vlans";
+        description
+          "Catalyst Vlans";
+        tailf:cli-allow-join-with-key {
+          tailf:cli-display-joined;
+        }
+        key "name";
+        leaf name {
+          type uint16 {
+            tailf:info "<1-4094>;;Vlan interface number";
+            range "1..4094";
+          }
+        }
+        uses interface-common-grouping;
+        uses interface-zone-member-grouping;
+      }
+      list Group-Async {
+        tailf:info "Async Group interface";
+        description
+          "Async Group interface";
+        tailf:cli-allow-join-with-key {
+          tailf:cli-display-joined;
+        }
+        key "name";
+        leaf name {
+          type uint16 {
+            tailf:info "<0-64>;;Group-Async interface number";
+            range "0..64";
+          }
+        }
+        leaf physical-layer {
+          tailf:info "Configure sync or async physical layer on serial interface";
+          description
+            "Configure sync or async physical layer on serial interface";
+          type enumeration {
+            enum "async" {
+              tailf:info "Configure asynchronous physical layer on serial interface";
+            }
+            enum "sync" {
+              tailf:info "Configure synchronous physical layer on serial interface";
+            }
+          }
+        }
+        uses interface-common-grouping;
+      }
+      list Multilink {
+        tailf:info "Multilink-group interface";
+        description
+          "Multilink-group interface";
+        tailf:cli-allow-join-with-key {
+          tailf:cli-display-joined;
+        }
+        tailf:cli-mode-name "config-if";
+        tailf:cli-full-command;
+        key "name";
+        leaf name {
+          type uint16 {
+            tailf:info "<1-65535>;;Multilink interface number";
+            range "1..65535";
+          }
+        }
+        uses interface-common-grouping;
+        uses interface-pointtopoint-grouping;
+      }
+      list Serial {
+        tailf:info "Serial interface";
+        description
+          "Serial interface";
+        tailf:cli-allow-join-with-key {
+          tailf:cli-display-joined;
+        }
+        tailf:cli-mode-name "config-if";
+        tailf:cli-full-command;
+        key "name";
+        leaf name {
+          type string {
+            pattern "([0-9])+/([0-9])+/([0-9])+\\.([0-9])+/([0-9])+/([0-9])+/([0-9])+:([0-9])";
+          }
+        }
+        uses interface-common-grouping;
+        uses interface-pointtopoint-grouping;
+      }
+      list Tunnel {
+        tailf:info "Tunnel interface";
+        description
+          "Tunnel interface";
+        tailf:cli-allow-join-with-key {
+          tailf:cli-display-joined;
+        }
+        tailf:cli-mode-name "config-if";
+        tailf:cli-suppress-key-abbreviation;
+        key "name";
+        leaf name {
+          type uint32 {
+            tailf:info "<0-2147483647>;;Tunnel interface number";
+          }
+        }
+        uses interface-common-grouping;
+        container qos {
+          tailf:info "Quality of Service related commands";
+          description
+            "Quality of Service related commands";
+          leaf pre-classify {
+            tailf:info "Enable QOS classification before packets are tunnel encapsulated";
+            description
+              "Enable QOS classification before packets are tunnel encapsulated";
+            type empty;
+          }
+        }
+        uses interface-tunnel-grouping;
+      }
+      list Virtual-Template {
+        tailf:info "Virtual Template interface";
+        description
+          "Virtual Template interface";
+        tailf:cli-allow-join-with-key {
+          tailf:cli-display-joined;
+        }
+        tailf:cli-mode-name "config-if";
+        tailf:cli-full-command;
+        tailf:cli-explicit-exit;
+        key "name";
+        leaf name {
+          type uint16 {
+            tailf:info "<1-4095>;;Virtual-Template interface number";
+            range "1..4095";
+          }
+        }
+        leaf type {
+          tailf:info "type of the virtual-template";
+          description
+            "type of the virtual-template";
+          tailf:cli-hide-in-submode;
+          type enumeration {
+            enum "ethernet" {
+              tailf:info "Set VT type as ethernet";
+            }
+            enum "serial" {
+              tailf:info "Set VT type as serial";
+            }
+            enum "tunnel" {
+              tailf:info "Set VT type as tunnel";
+            }
+            enum "vpn" {
+              tailf:info "Set VT type as vpn";
+            }
+          }
+        }
+        uses interface-ethernet-grouping;
+        uses interface-common-grouping;
+        uses interface-zone-member-grouping;
+        uses interface-switch-grouping;
+        uses interface-pointtopoint-grouping;
+        uses interface-tunnel-grouping;
+      }
+      list VirtualPortGroup {
+        tailf:info "Virtual Port Group";
+        description
+          "Virtual Port Group";
+        tailf:cli-allow-join-with-key {
+          tailf:cli-display-joined;
+        }
+        tailf:cli-mode-name "config-if";
+        tailf:cli-full-command;
+        tailf:cli-explicit-exit;
+        key "name";
+        leaf name {
+          type uint16 {
+            tailf:info " <0-31>;;VirtualPortGroup interface number";
+            range "0..31";
+          }
+        }
+        uses interface-switch-grouping;
+        uses interface-ethernet-grouping;
+        uses interface-common-grouping;
+      }
+      list vasileft {
+        tailf:info "vasileft";
+        description
+          "vasileft";
+        tailf:cli-allow-join-with-key {
+          tailf:cli-display-joined;
+        }
+        tailf:cli-mode-name "config-if";
+        tailf:cli-full-command;
+        tailf:cli-explicit-exit;
+        key "name";
+        leaf name {
+          type uint16 {
+            tailf:info "<1-2000>;;vasileft interface number";
+            range "1..2000";
+          }
+        }
+        uses interface-switch-grouping;
+        uses interface-ethernet-grouping;
+        uses interface-common-grouping;
+      }
+      list vasiright {
+        tailf:info "vasiright";
+        description
+          "vasiright";
+        tailf:cli-allow-join-with-key {
+          tailf:cli-display-joined;
+        }
+        tailf:cli-mode-name "config-if";
+        tailf:cli-full-command;
+        tailf:cli-explicit-exit;
+        key "name";
+        leaf name {
+          type uint16 {
+            tailf:info "<1-2000>;;vasiright interface number";
+            range "1..2000";
+          }
+        }
+        uses interface-switch-grouping;
+        uses interface-ethernet-grouping;
+        uses interface-common-grouping;
+      }
+    }
+    list route-map {
+      tailf:info "Route map tag";
+      description
+        "Route map tag";
+      tailf:cli-mode-name "config-route-map";
+      tailf:cli-compact-syntax;
+      tailf:cli-full-command;
+      key "name sequence";
+      leaf name {
+        tailf:info "WORD;;Route map tag";
+        description
+          "WORD;;Route map tag";
+        type string;
+      }
+      leaf sequence {
+        tailf:cli-drop-node-name;
+        type uint16 {
+          tailf:info "<0-65535>;;Sequence to insert to/delete from existing route-map entry";
+          range "0..65535";
+        }
+      }
+      leaf operation {
+        tailf:cli-drop-node-name;
+        tailf:cli-prefix-key {
+          tailf:cli-before-key "2";
+        }
+        type enumeration {
+          enum "deny" {
+            tailf:code-name "op_deny";
+            tailf:info "Route map denies set operations";
+          }
+          enum "permit" {
+            tailf:code-name "op_internet";
+            tailf:info "Route map permits set operations";
+          }
+        }
+        default "permit";
+      }
+      leaf description {
+        tailf:info "Route-map comment";
+        description
+          "Route-map comment";
+        tailf:cli-multi-value;
+        type string;
+      }
+      container set {
+        tailf:info "Set values in destination routing protocol";
+        description
+          "Set values in destination routing protocol";
+        container aigp-metric {
+          tailf:info "accumulated metric value";
+          description
+            "accumulated metric value";
+          leaf value {
+            tailf:info "manual value";
+            description
+              "manual value";
+            tailf:cli-drop-node-name;
+            type uint32 {
+              range "0..4294967295";
+            }
+          }
+          leaf igp-metric {
+            tailf:info "metric value from rib";
+            description
+              "metric value from rib";
+            type empty;
+          }
+        }
+        container as-path {
+          tailf:info "Prepend string for a BGP AS-path attribute";
+          description
+            "Prepend string for a BGP AS-path attribute";
+          container prepend {
+            tailf:info "Prepend to the as-path";
+            description
+              "Prepend to the as-path";
+            container as-container {
+              tailf:cli-drop-node-name;
+              leaf as-number {
+                tailf:info "<1-65535>;;AS number";
+                description
+                  "<1-65535>;;AS number";
+                tailf:cli-drop-node-name;
+                tailf:cli-multi-value;
+                type string {
+                  tailf:info "<1-65535>;;AS number";
+                }
+              }
+            }
+            container last-as-cont {
+              tailf:cli-drop-node-name;
+              leaf last-as {
+                type uint16 {
+                  tailf:info "<1..10>;;number of last-AS prepends";
+                  range "1..10";
+                }
+              }
+            }
+          }
+          container tag {
+            tailf:info "Set the tag as an AS-path attribute";
+            description
+              "Set the tag as an AS-path attribute";
+            tailf:cli-full-command;
+            presence "tag";
+          }
+        }
+        leaf automatic-tag {
+          tailf:info "Automatically compute TAG value";
+          description
+            "Automatically compute TAG value";
+          type empty;
+        }
+        container clns {
+          tailf:info "OSI summary address";
+          description
+            "OSI summary address";
+          uses next-hop-address-grouping;
+        }
+        container community {
+          tailf:info "BGP community attribute";
+          description
+            "BGP community attribute";
+          choice community-choice {
+            case community-numberi-case {
+              leaf community-number {
+                tailf:cli-drop-node-name;
+                type uint32 {
+                  tailf:info "<1-4294967295>;;community number";
+                  range "1..4294967295";
+                }
+              }
+              leaf community-number-alt-format {
+                tailf:cli-drop-node-name;
+                type string {
+                  tailf:info "aa:nn;;community number in aa:nn format";
+                  pattern "(\\d+:\\d+)";
+                }
+              }
+            }
+            case well-known-community-case {
+              leaf well-known-communities {
+                tailf:cli-drop-node-name;
+                type enumeration {
+                  enum "gshut" {
+                    tailf:info "Graceful Shutdown";
+                  }
+                  enum "internet" {
+                    tailf:info "Internet (well-known community)";
+                  }
+                  enum "local-AS" {
+                    tailf:info "Do not send outside local AS (well-known community)";
+                  }
+                  enum "no-advertise" {
+                    tailf:info "Do not advertise to any peer (well-known community)";
+                  }
+                  enum "no-export" {
+                    tailf:info "Do not export to next AS (well-known community)";
+                  }
+                  enum "none" {
+                    tailf:info "No community attribute";
+                  }
+                }
+              }
+            }
+          }
+          leaf additive {
+            tailf:info "Add to the existing community";
+            description
+              "Add to the existing community";
+            type empty;
+          }
+        }
+        container comm-list {
+          tailf:info "set BGP community list (for deletion)";
+          description
+            "set BGP community list (for deletion)";
+          tailf:cli-sequence-commands;
+          choice comm-list-choice {
+            leaf comm-list-standard {
+              tailf:cli-drop-node-name;
+              tailf:cli-incomplete-command;
+              type uint16 {
+                tailf:info "<1-99>;;Community-list number (standard)";
+                range "1..99";
+              }
+            }
+            leaf comm-list-expanded {
+              tailf:cli-drop-node-name;
+              tailf:cli-incomplete-command;
+              type uint16 {
+                tailf:info "<100-500>;;Community-list number (expanded)";
+                range "100..500";
+              }
+            }
+            leaf comm-list-name {
+              tailf:cli-drop-node-name;
+              tailf:cli-incomplete-command;
+              type string {
+                tailf:info "WORD;;Community-list name";
+              }
+            }
+          }
+          leaf delete {
+            tailf:cli-full-command;
+            tailf:info "Delete matching communities";
+            description
+              "Delete matching communities";
+            type empty;
+          }
+        }
+        container dampening {
+          tailf:info "Set BGP route flap dampening parameters";
+          description
+            "Set BGP route flap dampening parameters";
+          list dampening-list {
+            tailf:cli-drop-node-name;
+            tailf:cli-suppress-mode;
+            key "half-life-penalty restart-penalty suppress-penalty max-suppress-penalty";
+            leaf half-life-penalty {
+              tailf:info "half-life time for the penalty";
+              description
+                "half-life time for the penalty";
+              tailf:cli-drop-node-name;
+              type uint8 {
+                range "1..45";
+              }
+            }
+            leaf restart-penalty {
+              tailf:info "penalty to start reusing a route";
+              description
+                "penalty to start reusing a route";
+              tailf:cli-drop-node-name;
+              type uint16 {
+                range "1..20000";
+              }
+            }
+            leaf suppress-penalty {
+              tailf:info "penalty to start suppressing a route";
+              description
+                "penalty to start suppressing a route";
+              tailf:cli-drop-node-name;
+              type uint16 {
+                range "1..20000";
+              }
+            }
+            leaf max-suppress-penalty {
+              tailf:info "Maximum duration to suppress a stable route";
+              description
+                "Maximum duration to suppress a stable route";
+              tailf:cli-drop-node-name;
+              type uint8 {
+                range "1..255";
+              }
+            }
+          }
+        }
+        container default {
+          container interface {
+            tailf:info "SPAN source interface";
+            description
+              "SPAN source interface";
+            tailf:cli-diff-dependency "/ios:native/interface";
+            uses interface-grouping;
+          }
+        }
+        container extcomm-list {
+          tailf:info "Set BGP/VPN extended community list (for deletion)";
+          description
+            "Set BGP/VPN extended community list (for deletion)";
+          list ext-range {
+            tailf:cli-drop-node-name;
+            tailf:cli-suppress-mode;
+            key "comm-list-num";
+            leaf comm-list-num {
+              tailf:info "Extended community-list number (expanded)";
+              description
+                "Extended community-list number (expanded)";
+              type uint16 {
+                range "1..500";
+              }
+            }
+            leaf delete {
+              tailf:info "Delete matching extended communities";
+              description
+                "Delete matching extended communities";
+              type empty;
+            }
+          }
+          list excomm-list-name {
+            tailf:cli-drop-node-name;
+            tailf:cli-suppress-mode;
+            key "name";
+            leaf name {
+              tailf:info "extcommunity-list name";
+              description
+                "extcommunity-list name";
+              type string;
+            }
+            leaf delete {
+              tailf:info "Delete matching extended communities";
+              type empty;
+            }
+          }
+        }
+        container extcommunity {
+          tailf:info "BGP extended community attribute";
+          description
+            "BGP extended community attribute";
+          container cost {
+            tailf:info "Cost extended community";
+            description
+              "Cost extended community";
+            uses route-map-community-grouping;
+            container igp {
+              tailf:info "Compare following IGP cost comparison";
+              description
+                "Compare following IGP cost comparison";
+              uses route-map-community-grouping;
+            }
+            container pre-bestpath {
+              tailf:info "Compare before all other steps in bestpath calculation";
+              description
+                "Compare before all other steps in bestpath calculation";
+              uses route-map-community-grouping;
+            }
+          }
+          container rt {
+            tailf:info "Route Target extended community";
+            description
+              "Route Target extended community";
+            leaf asn-nn {
+              tailf:cli-drop-node-name;
+              type asn-ip-type {
+                tailf:info "ASN:nn or IP-address:nn;;VPN extended community";
+              }
+            }
+            container range {
+              tailf:info "Specify a range of extended community";
+              description
+                "Specify a range of extended community";
+              tailf:cli-sequence-commands;
+              leaf lower-limit {
+                tailf:info "VPN extended community lower limit";
+                description
+                  "VPN extended community lower limit";
+                type asn-ip-type {
+                  tailf:info "ASN:nn or IP-address:nn;;VPN extended community lower limit";
+                }
+              }
+              leaf high-limit {
+                tailf:info "VPN extended community high limit";
+                description
+                  "VPN extended community high limit";
+                type asn-ip-type {
+                  tailf:info "ASN:nn or IP-address:nn;;VPN extended community high limit";
+                }
+              }
+              leaf additive {
+                tailf:info "Add to the existing extcommunity";
+                description
+                  "Add to the existing extcommunity";
+                type empty;
+              }
+            }
+          }
+          container soo {
+            tailf:info "Site-of-Origin extended community";
+            description
+              "Site-of-Origin extended community";
+            leaf asn-nn {
+              tailf:cli-drop-node-name;
+              type asn-ip-type {
+                tailf:info "ASN:nn or IP-address:nn;;VPN extended community";
+              }
+            }
+          }
+          container vpn-distinguisher {
+            tailf:info "VPN Distinguisher";
+            description
+              "VPN Distinguisher";
+            leaf asn-nn {
+              tailf:cli-drop-node-name;
+              type asn-ip-type {
+                tailf:info "ASN:nn or IP-address:nn;;VPN extended community";
+              }
+            }
+            container range {
+              tailf:info "Specify a range of extended community";
+              description
+                "Specify a range of extended community";
+              tailf:cli-sequence-commands;
+              leaf lower-limit {
+                tailf:info "VPN extended community lower limit";
+                description
+                  "VPN extended community lower limit";
+                type asn-ip-type {
+                  tailf:info "ASN:nn or IP-address:nn;;VPN extended community lower limit";
+                }
+              }
+              leaf high-limit {
+                tailf:info "VPN extended community high limit";
+                description
+                  "VPN extended community high limit";
+                type asn-ip-type {
+                  tailf:info "ASN:nn or IP-address:nn;;VPN extended community high limit";
+                }
+              }
+              leaf additive {
+                tailf:info "Add to the existing extcommunity";
+                description
+                  "Add to the existing extcommunity";
+                type empty;
+              }
+            }
+          }
+        }
+        leaf global {
+          tailf:info "Set to global routing table";
+          type empty;
+        }
+        container interface {
+          tailf:info "SPAN source interface";
+          tailf:cli-diff-dependency "/ios:native/interface";
+          uses interface-grouping;
+        }
+        container ip {
+          tailf:info "IP specific information";
+          description
+            "IP specific information";
+          container address {
+            tailf:info "Specify IP address";
+            description
+              "Specify IP address";
+            leaf prefix-list {
+              tailf:info "Specify prefix-list";
+              description
+                "Specify prefix-list";
+              type string {
+                tailf:info "WORD;;Prefix-list name to set ip address";
+              }
+            }
+          }
+          container default {
+            tailf:info "Set default information";
+            description
+              "Set default information";
+            container global {
+              tailf:info "global routing table";
+              description
+                "global routing table";
+              uses next-hop-address-grouping;
+            }
+            uses next-hop-address-grouping;
+            container vrf {
+              tailf:info "VRF name";
+              description
+                "VRF name";
+              list vrfs {
+                tailf:cli-drop-node-name;
+                tailf:cli-suppress-mode;
+                key "vrf";
+                leaf vrf {
+                  tailf:info "WORD;;VRF name";
+                  description
+                    "WORD;;VRF name";
+                  type string;
+                }
+                uses next-hop-address-grouping;
+              }
+            }
+          }
+          leaf df {
+            tailf:info "Set DF bit";
+            type uint8 {
+              tailf:info "<0..1>;; DF bit";
+              range "0..1";
+            }
+          }
+          container global {
+            tailf:info "global routing table";
+            description
+              "global routing table";
+            uses next-hop-address-grouping;
+          }
+          container next-hop {
+            tailf:info "Next hop address";
+            description
+              "Next hop address";
+            choice next-hop-choice {
+              leaf address {
+                tailf:cli-drop-node-name;
+                type inet:ipv4-address {
+                  tailf:info "A.B.C.D;;IP address of next hop";
+                }
+              }
+              container dynamic {
+                tailf:info "application dynamically sets next hop";
+                description
+                  "application dynamically sets next hop";
+                leaf dhcp {
+                  tailf:info "DHCP learned next hop";
+                  description
+                    "DHCP learned next hop";
+                  type empty;
+                }
+              }
+              container encapsulate {
+                tailf:info "Encapsulation profile for VPN nexthop";
+                description
+                  "Encapsulation profile for VPN nexthop";
+                leaf l3vpn {
+                  tailf:info "L3VPN";
+                  description
+                    "L3VPN";
+                  type string {
+                    tailf:info "WORD;;Encapsulation profile name";
+                  }
+                }
+              }
+              leaf peer-address {
+                tailf:info "Use peer address (for BGP only)";
+                description
+                  "Use peer address (for BGP only)";
+                type empty;
+              }
+              container recursive {
+                tailf:info "Recursive next-hop";
+                description
+                  "Recursive next-hop";
+                leaf ipv4 {
+                  tailf:info "IP address of recursive next hop";
+                  description
+                    "IP address of recursive next hop";
+                  tailf:cli-drop-node-name;
+                  type inet:ipv4-address;
+                }
+                leaf global {
+                  tailf:info "global routing table";
+                  description
+                    "IP address of recursive next hop";
+                  type inet:ipv4-address;
+                }
+                container vrf {
+                  tailf:info "VRF name";
+                  description
+                    "VRF name";
+                  list vrfs {
+                    tailf:cli-drop-node-name;
+                    tailf:cli-suppress-mode;
+                    key "vrf";
+                    leaf vrf {
+                      tailf:info "VRF name";
+                      description
+                        "VRF name";
+                      type string;
+                    }
+                    leaf ipv4 {
+                      tailf:info "IP address of recursive next hop";
+                      description
+                        "IP address of recursive next hop";
+                      tailf:cli-drop-node-name;
+                      type inet:ipv4-address;
+                    }
+                  }
+                }
+              }
+              leaf self {
+                tailf:info "Use self address (for BGP only)";
+                description
+                  "Use self address (for BGP only)";
+                type empty;
+              }
+              container verify-availability {
+                tailf:info "Verify if nexthop is reachable";
+                description
+                  "Verify if nexthop is reachable";
+                presence "true";
+                list ipv4 {
+                  tailf:cli-drop-node-name;
+                  tailf:cli-suppress-mode;
+                  key "ipv4";
+                  leaf ipv4 {
+                    tailf:info "IP address of next hop";
+                    description
+                      "IP address of next hop";
+                    type inet:ipv4-address;
+                  }
+                  leaf range {
+                    tailf:cli-drop-node-name;
+                    type uint16 {
+                      tailf:info "<1..65535>;;Sequence to insert into next-hop list";
+                      range "1..65535";
+                    }
+                  }
+                }
+              }
+            }
+          }
+          container precedence {
+            tailf:info "Set precedence field";
+            description
+              "Set precedence field";
+            presence "true";
+            leaf precedence-value {
+              tailf:cli-drop-node-name;
+              type uint8 {
+                tailf:info "<0..7>;;Precedence value";
+                range "0..7";
+              }
+            }
+            leaf precedence-fields {
+              tailf:cli-drop-node-name;
+              type enumeration {
+                enum "critical" {
+                  tailf:info "Set critical precedence (5)";
+                }
+                enum "flash" {
+                  tailf:info "Set flash precedence (3)";
+                }
+                enum "flash-override" {
+                  tailf:info "Set flash override precedence (4)";
+                }
+                enum "immediate" {
+                  tailf:info "Set immediate precedence (2)";
+                }
+                enum "internet" {
+                  tailf:info "Set internetwork control precedence (6)";
+                }
+                enum "network" {
+                  tailf:info "Set network control precedence (7)";
+                }
+                enum "priority" {
+                  tailf:info "Set priority precedence (1)";
+                }
+                enum "routine" {
+                  tailf:info "Set routine precedence (0)";
+                }
+              }
+            }
+          }
+          container qos-group {
+            tailf:info "Set QOS Group ID";
+            description
+              "Set QOS Group ID";
+            presence "true";
+            leaf qos-id {
+              tailf:cli-drop-node-name;
+              type uint8 {
+                tailf:info "<0..99>;;QOS Group ID";
+                range "0..99";
+              }
+            }
+          }
+          container tos {
+            tailf:info "Set type of service field";
+            description
+              "Set type of service field";
+            presence "true";
+            leaf service-value {
+              tailf:cli-drop-node-name;
+              type uint8 {
+                tailf:info "<0..15>;;Type of service value";
+                range "0..15";
+              }
+            }
+            leaf tos-fields {
+              tailf:cli-drop-node-name;
+              type enumeration {
+                enum "max-reliability" {
+                  tailf:info "Set max reliable TOS (2)";
+                }
+                enum "max-throughput" {
+                  tailf:info "Set max throughput TOS (4)";
+                }
+                enum "min-delay" {
+                  tailf:info "Set min delay TOS (8)";
+                }
+                enum "min-monetary-cost" {
+                  tailf:info "Set min monetary cost TOS (1)";
+                }
+                enum "normal" {
+                  tailf:info "Set normal TOS (0)";
+                }
+              }
+            }
+          }
+          container vrf {
+            tailf:info "VRF name";
+            description
+              "VRF name";
+            list vrfs {
+              tailf:cli-drop-node-name;
+              tailf:cli-suppress-mode;
+              key "vrf";
+              leaf vrf {
+                tailf:info "WORD;;VRF name";
+                description
+                  "WORD;;VRF name";
+                type string;
+              }
+              uses next-hop-address-grouping;
+            }
+          }
+        }
+        container ipv6 {
+          tailf:info "IPv6 specific information";
+          description
+            "IPv6 specific information";
+          container address {
+            tailf:info "IPv6 address";
+            description
+              "IPv6 address";
+            leaf-list prefix-list {
+              tailf:info "IPv6 prefix-list";
+              description
+                "IPv6 prefix-list";
+              tailf:cli-flat-list-syntax;
+              type string {
+                tailf:info "WORD;;IPv6 prefix-list name";
+              }
+            }
+          }
+          container default {
+            tailf:info "Set default information";
+            description
+              "Set default information";
+            container global {
+              tailf:info "global routing table";
+              description
+                "global routing table";
+              leaf next-hop {
+                tailf:info "Next hop along path";
+                description
+                  "Next hop along path";
+                type inet:ipv6-address {
+                  tailf:info "X:X:X:X::X;;Default next hop IPv6 address";
+                }
+              }
+            }
+            container next-hop {
+              tailf:info "Next hop along path";
+              description
+                "Next hop along path";
+              list ipv6s {
+                tailf:cli-drop-node-name;
+                tailf:cli-suppress-mode;
+                key "ipv6";
+                leaf ipv6 {
+                  tailf:info "Default next hop IPv6 address";
+                  description
+                    "Default next hop IPv6 address";
+                  type inet:ipv6-address {
+                    tailf:info "X:X:X:X::X;;Default next hop IPv6 address";
+                  }
+                }
+              }
+              leaf next-hop-address {
+                tailf:cli-drop-node-name;
+                type inet:ipv6-address {
+                  tailf:info "X:X:X:X::X;;Next hop IPv6 address";
+                }
+              }
+            }
+            list dvrf {
+              tailf:cli-drop-node-name;
+              tailf:cli-suppress-mode;
+              key "dvrf";
+              leaf dvrf {
+                tailf:info "VRF name";
+                description
+                  "VRF name";
+                type string;
+              }
+              list dvrf0 {
+                tailf:cli-drop-node-name;
+                tailf:cli-suppress-mode;
+                key "dvrf0";
+                leaf dvrf0 {
+                  tailf:info "VRF name";
+                  description
+                    "VRF name";
+                  type string;
+                }
+                leaf next-hop {
+                  tailf:info "Next hop along path";
+                  description
+                    "Next hop along path";
+                  type empty;
+                }
+              }
+            }
+          }
+          container global {
+            tailf:info "global routing table";
+            description
+              "global routing table";
+            container next-hop {
+              tailf:info "IPv6 Next hop";
+              description
+                "IPv6 Next hop";
+              list nh-ipv6 {
+                tailf:cli-drop-node-name;
+                tailf:cli-suppress-mode;
+                key "nh-ipv6";
+                leaf nh-ipv6 {
+                  tailf:info "Next hop address";
+                  description
+                    "Next hop address";
+                  type inet:ipv6-address;
+                }
+                leaf nh-ipv60 {
+                  tailf:info "Next hop address";
+                  description
+                    "Next hop address";
+                  tailf:cli-drop-node-name;
+                  type inet:ipv6-address;
+                }
+              }
+              leaf verify-availability {
+                tailf:info "Verify if nexthop is reachable";
+                description
+                  "Next hop address";
+                type inet:ipv6-address;
+              }
+            }
+          }
+          container next-hop {
+            tailf:info "IPv6 Next hop";
+            description
+              "IPv6 Next hop";
+            list nha-ipv6 {
+              tailf:cli-drop-node-name;
+              tailf:cli-suppress-mode;
+              key "nha-ipv6";
+              leaf nha-ipv6 {
+                tailf:info "Next hop address";
+                description
+                  "Next hop address";
+                type inet:ipv6-address;
+              }
+              list nha-ipv60 {
+                tailf:cli-drop-node-name;
+                tailf:cli-suppress-mode;
+                key "nha-ipv60";
+                leaf nha-ipv60 {
+                  tailf:info "Next hop address";
+                  description
+                    "Next hop address";
+                  type inet:ipv6-address;
+                }
+                leaf nh-ipv6 {
+                  tailf:info "Next hop address";
+                  description
+                    "Next hop address";
+                  tailf:cli-drop-node-name;
+                  type inet:ipv6-address;
+                }
+              }
+            }
+            container encapsulate {
+              tailf:info "Encapsulation profile for VPN nexthop";
+              description
+                "Encapsulation profile for VPN nexthop";
+              leaf l3vpn {
+                tailf:info "L3VPN";
+                description
+                  "Encapsulation profile name";
+                type string;
+              }
+            }
+            leaf peer-address {
+              tailf:info "Use peer address (for BGP only)";
+              description
+                "Use peer address (for BGP only)";
+              type empty;
+            }
+            leaf recursive {
+              tailf:info "Recursive next-hop";
+              description
+                "IPv6 address of recursive next-hop";
+              type inet:ipv6-address;
+            }
+            container verify-availability {
+              tailf:info "Verify if nexthop is reachable";
+              description
+                "Verify if nexthop is reachable";
+              list va-ipv6 {
+                tailf:cli-drop-node-name;
+                tailf:cli-suppress-mode;
+                key "va-ipv6";
+                leaf va-ipv6 {
+                  tailf:info "Next hop address";
+                  description
+                    "Next hop address";
+                  type inet:ipv6-address;
+                }
+                leaf seq-nh {
+                  tailf:info "Sequence to insert into next-hop list";
+                  description
+                    "Sequence to insert into next-hop list";
+                  tailf:cli-drop-node-name;
+                  type uint16 {
+                    range "1..65535";
+                  }
+                }
+              }
+            }
+          }
+          leaf precedence {
+            tailf:info "IPv6 Precedence";
+            description
+              "Precedence value";
+            type uint8 {
+              range "0..7";
+            }
+          }
+          list bvrf {
+            tailf:cli-drop-node-name;
+            tailf:cli-suppress-mode;
+            key "bvrf";
+            leaf bvrf {
+              tailf:info "VRF name";
+              description
+                "VRF name";
+              type string;
+            }
+            list bvrf0 {
+              tailf:cli-drop-node-name;
+              tailf:cli-suppress-mode;
+              key "bvrf0";
+              leaf bvrf0 {
+                tailf:info "VRF name";
+                description
+                  "VRF name";
+                type string;
+              }
+              container next-hop {
+                tailf:info "IPv6 Next hop";
+                description
+                  "IPv6 Next hop";
+                leaf bipv6 {
+                  tailf:info "Next hop address";
+                  description
+                    "Next hop address";
+                  tailf:cli-drop-node-name;
+                  type inet:ipv6-address;
+                }
+                leaf verify-availability {
+                  tailf:info "Verify if nexthop is reachable";
+                  description
+                    "Verify if nexthop is reachable";
+                  type empty;
+                }
+              }
+            }
+          }
+        }
+        container level {
+          tailf:info "Where to import route";
+          description
+            "Where to import route";
+          leaf level-1 {
+            tailf:info "Import into a level-1 area";
+            description
+              "Import into a level-1 area";
+            type empty;
+          }
+          leaf level-1-2 {
+            tailf:info "Import into level-1 and level-2";
+            description
+              "Import into level-1 and level-2";
+            type empty;
+          }
+          leaf level-2 {
+            tailf:info "Import into level-2 sub-domain";
+            description
+              "Import into level-2 sub-domain";
+            type empty;
+          }
+          leaf nssa-only {
+            tailf:info "Import only into OSPF NSSA areas and don't propagate";
+            description
+              "Import only into OSPF NSSA areas and don't propagate";
+            type empty;
+          }
+        }
+        container lisp {
+          tailf:info "Locator ID Separation Protocol specific information";
+          description
+            "Locator ID Separation Protocol specific information";
+          leaf locator-set {
+            tailf:info "Specify a locator-set to use in LISP route-import";
+            description
+              "The name of the locator set";
+            type string;
+          }
+        }
+        leaf local-preference {
+          tailf:info "BGP local preference path attribute";
+          description
+            "Preference value";
+          type uint32 {
+            range "0..4294967295";
+          }
+        }
+        leaf metric {
+          tailf:info "Metric value for destination routing protocol";
+          description
+            "Metric value for destination routing protocol";
+          type string {
+            tailf:info
+              "+/-<metric>;;Add or subtract metric
+               <0-4294967295>;;Metric value or Bandwidth in Kbits per second";
+          }
+        }
+        leaf metric-type {
+          tailf:info "Type of metric for destination routing protocol";
+          description
+            "Type of metric for destination routing protocol";
+          type enumeration {
+            enum "external" {
+              tailf:info "IS-IS external metric";
+            }
+            enum "internal" {
+              tailf:info "IS-IS internal metric or Use IGP metric as the MED for BGP";
+            }
+            enum "type-1" {
+              tailf:info "OSPF external type 1 metric";
+            }
+            enum "type-2" {
+              tailf:info "OSPF external type 2 metric";
+            }
+          }
+        }
+        leaf mpls-label {
+          tailf:info "Set MPLS label for prefix";
+          description
+            "Set MPLS label for prefix";
+          type empty;
+        }
+        leaf weight {
+          tailf:info "BGP weight for routing table";
+          description
+            "BGP weight for routing table";
+          type uint32 {
+            tailf:info "<0-65535>;;Weight value";
+            range "0..65535";
+          }
+        }
+        container origin {
+          tailf:info "BGP origin code";
+          description
+            "BGP origin code";
+          choice origin-choice {
+            leaf origin-value {
+              tailf:cli-drop-node-name;
+              type enumeration {
+                enum "igp" {
+                  tailf:info "local IGP";
+                }
+                enum "incomplete" {
+                  tailf:info "unknown heritage";
+                }
+              }
+            }
+            leaf egp {
+              tailf:info "remote EGP";
+              description
+                "remote EGP";
+              type uint32 {
+                tailf:info "<0-65535>;;remote AS";
+                range "0..65535";
+              }
+            }
+          }
+        }
+        container tag {
+          tailf:info "Tag value for destination routing protocol";
+          description
+            "Tag value for destination routing protocol";
+          leaf tag-val {
+            tailf:info "Tag value";
+            description
+              "Tag value";
+            tailf:cli-drop-node-name;
+            type uint32 {
+              range "0..4294967295";
+            }
+          }
+          leaf tag-ipv4 {
+            tailf:info "Tag value(dotted decimal format)";
+            description
+              "Tag value(dotted decimal format)";
+            tailf:cli-drop-node-name;
+            type inet:ipv4-address;
+          }
+        }
+        leaf traffic-index {
+          tailf:info "BGP traffic classification number for accounting";
+          description
+            "Bucket number";
+          type uint8 {
+            range "1..64";
+          }
+        }
+        leaf vrf {
+          tailf:info "Define VRF name";
+          description
+            "VPN Routing/Forwarding instance name";
+          type string;
+        }
+      }
+      container match {
+        tailf:info "Match values from routing table";
+        description
+          "Match values from routing table";
+        container additional-paths {
+          tailf:info "BGP Add-Path match policies";
+          description
+            "BGP Add-Path match policies";
+          container advertise-set {
+            tailf:info "BGP Add-Path advertise-set policy";
+            description
+              "BGP Add-Path advertise-set policy";
+            container all {
+              tailf:info "BGP Add-Path advertise all paths";
+              description
+                "BGP Add-Path advertise all paths";
+              presence "true";
+              leaf best {
+                tailf:info "BGP Add-Path advertise best n paths";
+                description
+                  "BGP Add-Path best n paths to advertise";
+                type uint8 {
+                  range "1..3";
+                }
+              }
+              leaf best-range {
+                tailf:info "BGP Add-Path advertise best paths (range m to n)";
+                description
+                  "BGP Add-Path best paths to advertise (lower limit)";
+                type uint8 {
+                  range "1..3";
+                }
+              }
+              container group-best {
+                tailf:info "BGP Add-Path advertise group-best path";
+                description
+                  "BGP Add-Path advertise group-best path";
+                presence "true";
+                leaf best {
+                  tailf:info "BGP Add-Path advertise best n paths";
+                  description
+                    "BGP Add-Path advertise best n paths";
+                  type empty;
+                }
+                leaf best-range {
+                  tailf:info "BGP Add-Path advertise best paths (range m to n)";
+                  description
+                    "BGP Add-Path advertise best paths (range m to n)";
+                  type empty;
+                }
+              }
+            }
+            container best {
+              tailf:info "BGP Add-Path advertise best n paths";
+              description
+                "BGP Add-Path advertise best n paths";
+              list best-range {
+                tailf:cli-drop-node-name;
+                tailf:cli-suppress-mode;
+                key "best-range";
+                leaf best-range {
+                  tailf:info "BGP Add-Path best n paths to advertise";
+                  description
+                    "BGP Add-Path best n paths to advertise";
+                  type uint8 {
+                    range "1..3";
+                  }
+                }
+                leaf all {
+                  tailf:info "BGP Add-Path advertise all paths";
+                  description
+                    "BGP Add-Path advertise all paths";
+                  type empty;
+                }
+                leaf group-best {
+                  tailf:info "BGP Add-Path advertise group-best path";
+                  description
+                    "BGP Add-Path advertise group-best path";
+                  type empty;
+                }
+              }
+            }
+            container best-range {
+              tailf:info "BGP Add-Path advertise best paths (range m to n)";
+              description
+                "BGP Add-Path advertise best paths (range m to n)";
+              list adv-path {
+                tailf:cli-drop-node-name;
+                tailf:cli-suppress-mode;
+                key "adv-path";
+                leaf adv-path {
+                  tailf:info "BGP Add-Path best paths to advertise (lower limit)";
+                  description
+                    "BGP Add-Path best paths to advertise (lower limit)";
+                  type uint8 {
+                    range "1..3";
+                  }
+                }
+                leaf adv-path0 {
+                  tailf:info "BGP Add-Path best paths to advertise (upper limit)";
+                  description
+                    "BGP Add-Path best paths to advertise (upper limit)";
+                  tailf:cli-drop-node-name;
+                  type uint8 {
+                    range "1..3";
+                  }
+                }
+              }
+            }
+            container group-best {
+              tailf:info "BGP Add-Path advertise group-best path";
+              description
+                "BGP Add-Path advertise group-best path";
+              presence "true";
+              leaf all {
+                tailf:info "BGP Add-Path advertise all paths";
+                description
+                  "BGP Add-Path advertise all paths";
+                type empty;
+              }
+              leaf best {
+                tailf:info "BGP Add-Path advertise best n paths";
+                description
+                  "BGP Add-Path best n paths to advertise";
+                type uint8 {
+                  range "1..3";
+                }
+              }
+              leaf best-range {
+                tailf:info "BGP Add-Path advertise best paths (range m to n)";
+                description
+                  "BGP Add-Path best paths to advertise (lower limit)";
+                type uint8 {
+                  range "1..3";
+                }
+              }
+            }
+          }
+        }
+        container as-path {
+          tailf:info "Match BGP AS path list";
+          description
+            "Match BGP AS path list";
+          presence "true";
+          list access-lists {
+            tailf:cli-drop-node-name;
+            tailf:cli-suppress-mode;
+            key "access-list";
+            leaf access-list {
+              tailf:info "AS path access-list";
+              description
+                "AS path access-list";
+              tailf:cli-drop-node-name;
+              type uint16 {
+                tailf:info "<1..500>;;AS path access-list";
+                range "1..500";
+              }
+            }
+          }
+        }
+        container clns {
+          tailf:info "CLNS information";
+          description
+            "CLNS information";
+          leaf-list name {
+            tailf:info "Named clna list";
+            description
+              "Named clna list";
+            tailf:cli-drop-node-name;
+            tailf:cli-flat-list-syntax;
+            type string {
+              tailf:info
+                "WORD;;(OSI filter set)Match advertising source address of route
+                 WORD;;(OSI filter set)Match next-hop address of route
+                 WORD;;(OSI filter set)Match address of route or match packet";
+            }
+          }
+        }
+        container community {
+          tailf:info "Match BGP community list";
+          description
+            "Match BGP community list";
+          leaf-list name {
+            tailf:info "Named Access List";
+            description
+              "Named Access List";
+            tailf:cli-drop-node-name;
+            tailf:cli-flat-list-syntax;
+            type string {
+              tailf:info
+                "<1-99>;;Community-list number (standard)
+                 <100-500>;;Community-list number (expanded)
+                 WORD;;Community-list name";
+            }
+          }
+        }
+        container extcommunity {
+          tailf:info "Match BGP/VPN extended community list";
+          description
+            "Match BGP/VPN extended community list";
+          leaf-list name {
+            tailf:info "Named Access List";
+            description
+              "Named Access List";
+            tailf:cli-drop-node-name;
+            tailf:cli-flat-list-syntax;
+            type string {
+              tailf:info
+                "<1-99>;;Extended Community-list number (standard)
+                 <100-500>;;Extended Community-list number (expanded)
+                 WORD;;Extended Community-list name";
+            }
+          }
+        }
+        container interface {
+          tailf:info "SPAN source interface";
+          description
+            "SPAN source interface";
+          tailf:cli-diff-dependency "/ios:native/interface";
+          leaf-list interface {
+            tailf:cli-drop-node-name;
+            tailf:cli-flat-list-syntax;
+            tailf:cli-full-command;
+            type string {
+              tailf:info "WORD;;Name of an interface";
+            }
+          }
+        }
+        container ip {
+          tailf:info "IP specific information";
+          description
+            "IP specific information";
+          container address {
+            tailf:info "Match address of route or match packet";
+            description
+              "Match address of route or match packet";
+            uses ip-access-list-grouping;
+          }
+          container flowspec {
+            tailf:info "Match address of route";
+            description
+              "Match address of route";
+            container dest-pfx {
+              tailf:info "Match dest prefix component of flowspec prefix";
+              description
+                "Match dest prefix component of flowspec prefix";
+              uses ip-access-list-grouping;
+            }
+            container src-pfx {
+              tailf:info "Match source prefix component of flowspec prefix";
+              description
+                "Match source prefix component of flowspec prefix";
+              uses ip-access-list-grouping;
+            }
+          }
+          container next-hop {
+            tailf:info "Match next-hop address of route";
+            description
+              "Match next-hop address of route";
+            uses ip-access-list-grouping;
+          }
+          container redistribution-source {
+            tailf:info "route redistribution source (EIGRP only)";
+            description
+              "route redistribution source (EIGRP only)";
+            uses ip-access-list-grouping;
+          }
+          container route-source {
+            tailf:info "Match advertising source address of route";
+            description
+              "Match advertising source address of route";
+            uses ip-access-list-grouping;
+          }
+        }
+        container ipv6 {
+          tailf:info "IPv6 specific information";
+          description
+            "IPv6 specific information";
+          container address {
+            tailf:info "Match address of route";
+            description
+              "Match address of route";
+            uses ipv6-access-list-grouping;
+          }
+          container flowspec {
+            tailf:info "Match address of route";
+            description
+              "Match address of route";
+            container dest-pfx {
+              tailf:info "Match dest prefix component of flowspec prefix";
+              description
+                "Match dest prefix component of flowspec prefix";
+              uses ipv6-access-list-grouping;
+            }
+            container src-pfx {
+              tailf:info "Match source prefix component of flowspec prefix";
+              description
+                "Match source prefix component of flowspec prefix";
+              uses ipv6-access-list-grouping;
+            }
+          }
+          container next-hop {
+            tailf:info "Match next-hop address of route";
+            description
+              "Match next-hop address of route";
+            uses ipv6-access-list-grouping;
+          }
+          container route-source {
+            tailf:info "Match advertising source address of route";
+            description
+              "Match advertising source address of route";
+            uses ipv6-access-list-grouping;
+          }
+        }
+        container length {
+          tailf:info "Packet length";
+          description
+            "Packet length";
+          list lengths {
+            tailf:cli-drop-node-name;
+            tailf:cli-suppress-mode;
+            key "min-len max-len";
+            leaf min-len {
+              tailf:info "Minimum packet length";
+              description
+                "Minimum packet length";
+              tailf:cli-drop-node-name;
+              type uint32 {
+                tailf:info "<0..2147483647>;;Minimum packet length";
+                range "0..2147483647";
+              }
+            }
+            leaf max-len {
+              tailf:info "Maximum packet length";
+              description
+                "Maximum packet length";
+              tailf:cli-drop-node-name;
+              type uint32 {
+                tailf:info "<0..2147483647>;;Minimum packet length";
+                range "0..2147483647";
+              }
+            }
+          }
+        }
+        container local-preference {
+          tailf:info "Local preference for route";
+          description
+            "Local preference for route";
+          leaf-list values {
+            tailf:cli-drop-node-name;
+            type string {
+              tailf:info "<0..4294967295>;;Local peference values";
+            }
+          }
+        }
+        container mdt-group {
+          tailf:info "Match routes corresponding to MDT group";
+          description
+            "Match routes corresponding to MDT group";
+          leaf-list name {
+            tailf:info "IP Access List";
+            description
+              "IP Access List";
+            tailf:cli-drop-node-name;
+            tailf:cli-flat-list-syntax;
+            type string {
+              tailf:info
+                "<1-99>;;IP access-list number
+                 <1300-1999>;;IP access-list number (expanded range)
+                 WORD;;IP standard access-list nam";
+            }
+          }
+        }
+        container metric {
+          tailf:info "Match metric of route";
+          description
+            "Match metric of route";
+          leaf metric-value {
+            tailf:cli-drop-node-name;
+            type string {
+              tailf:info "<0-4294967295>;;Metric value ";
+            }
+          }
+          leaf external {
+            tailf:info "match route using external protocol metric";
+            description
+              "match route using external protocol metric";
+            type string {
+              tailf:info "<0-4294967295>;;Metric value ";
+            }
+          }
+        }
+        leaf mpls-label {
+          tailf:info "Match routes which have MPLS labels";
+          description
+            "Match routes which have MPLS labels";
+          type empty;
+        }
+        container policy-list {
+          tailf:info "Match IP policy list";
+          description
+            "Match IP policy list";
+          leaf-list policy-map-names {
+            tailf:info "IP Policy map name";
+            description
+              "IP Policy map name";
+            tailf:cli-drop-node-name;
+            tailf:cli-flat-list-syntax;
+            type string {
+              tailf:info "WORD;;IP Policy map names";
+            }
+          }
+        }
+        container route-type {
+          tailf:info "Match route-type of route";
+          description
+            "Match route-type of route";
+          container external {
+            tailf:info "external route (BGP, EIGRP and OSPF type 1/2)";
+            description
+              "external route (BGP, EIGRP and OSPF type 1/2)";
+            presence "true";
+            leaf type-1 {
+              tailf:info "OSPF external type 1 route";
+              description
+                "OSPF external type 1 route";
+              type empty;
+            }
+            leaf type-2 {
+              tailf:info "OSPF external type 2 route";
+              description
+                "OSPF external type 2 route";
+              type empty;
+            }
+          }
+          leaf internal {
+            tailf:info "internal route (including OSPF intra/inter area)";
+            description
+              "internal route (including OSPF intra/inter area)";
+            type empty;
+          }
+          leaf level-1 {
+            tailf:info "IS-IS level-1 route";
+            description
+              "IS-IS level-1 route";
+            type empty;
+          }
+          leaf level-2 {
+            tailf:info "IS-IS level-2 route";
+            description
+              "IS-IS level-2 route";
+            type empty;
+          }
+          leaf local {
+            tailf:info "locally generated route";
+            description
+              "locally generated route";
+            type empty;
+          }
+          container nssa-external {
+            tailf:info "nssa-external route (OSPF type 1/2)";
+            description
+              "nssa-external route (OSPF type 1/2)";
+            presence "true";
+            leaf type-1 {
+              tailf:info "OSPF external type 1 route";
+              description
+                "OSPF external type 1 route";
+              type empty;
+            }
+            leaf type-2 {
+              tailf:info "OSPF external type 2 route";
+              description
+                "OSPF external type 2 route";
+              type empty;
+            }
+          }
+        }
+        container rpki {
+          tailf:info "Match RPKI state of route";
+          description
+            "Match RPKI state of route";
+          leaf invalid {
+            tailf:info "RPKI Invalid State";
+            description
+              "RPKI Invalid State";
+            type empty;
+          }
+          leaf not-found {
+            tailf:info "RPKI Not Found State";
+            description
+              "RPKI Not Found State";
+            type empty;
+          }
+          leaf valid {
+            tailf:info "RPKI Valid State";
+            description
+              "RPKI Valid State";
+            type empty;
+          }
+        }
+        container source-protocol {
+          tailf:info "Match source-protocol of route";
+          description
+            "Match source-protocol of route";
+          presence "true";
+          leaf-list bgp {
+            tailf:info "Border Gateway Protocol (BGP)";
+            description
+              "Border Gateway Protocol (BGP)";
+            tailf:cli-flat-list-syntax;
+            type bgp-as-number-type;
+          }
+          leaf connected {
+            tailf:info "Connected";
+            description
+              "Connected";
+            type empty;
+          }
+          leaf-list eigrp {
+            tailf:info "Border Gateway Protocol (BGP)";
+            description
+              "Border Gateway Protocol (BGP)";
+            tailf:cli-flat-list-syntax;
+            type string {
+              tailf:info "<1-65535>;;Autonomous system number";
+            }
+          }
+          leaf isis {
+            tailf:info "ISO IS-IS";
+            description
+              "ISO IS-IS";
+            type empty;
+          }
+          leaf lisp {
+            tailf:info "Locator ID Separation Protocol (LISP)";
+            description
+              "Locator ID Separation Protocol (LISP)";
+            type empty;
+          }
+          leaf mobile {
+            tailf:info "Mobile routes";
+            description
+              "Mobile routes";
+            type empty;
+          }
+          leaf-list ospf {
+            tailf:info "Open Shortest Path First (OSPF)";
+            description
+              "Open Shortest Path First (OSPF)";
+            tailf:cli-flat-list-syntax;
+            type string {
+              tailf:info "<1-65535>;;Process ID";
+            }
+          }
+          leaf-list ospfv3 {
+            tailf:info "OSPFv3";
+            description
+              "OSPFv3";
+            tailf:cli-flat-list-syntax;
+            type string {
+              tailf:info "<1-65535>;;Process ID";
+            }
+          }
+          leaf rip {
+            tailf:info "Routing Information Protocol (RIP)";
+            description
+              "Routing Information Protocol (RIP)";
+            type empty;
+          }
+          leaf static {
+            tailf:info "Static routes";
+            description
+              "Static routes";
+            type empty;
+          }
+        }
+        container tag {
+          tailf:info "Match tag of route";
+          description
+            "Match tag of route";
+          leaf-list tag_value {
+            tailf:info "Tag value";
+            description
+              "Tag value";
+            tailf:cli-flat-list-syntax;
+            tailf:cli-drop-node-name;
+            type uint32 {
+              tailf:info "<0..4294967295>;;Tag value";
+              range "0..4294967295";
+            }
+          }
+          leaf-list ipv4-address {
+            tailf:info "<A.B.C.D>;;Tag value(dotted decimal format)";
+            description
+              "<A.B.C.D>;;Tag value(dotted decimal format)";
+            tailf:cli-drop-node-name;
+            tailf:cli-flat-list-syntax;
+            type inet:ipv4-address;
+          }
+          container list {
+            tailf:info "Route Tag List";
+            description
+              "Route Tag List";
+            list tag-names {
+              tailf:cli-drop-node-name;
+              tailf:cli-suppress-mode;
+              key "tag-name";
+              leaf tag-name {
+                tailf:cli-drop-node-name;
+                tailf:info "Tag list name";
+                description
+                  "Tag list name";
+                type string {
+                  tailf:info "WORD;;Tag list name";
+                }
+              }
+            }
+          }
+        }
+        leaf track {
+          tailf:info "tracking object";
+          description
+            "tracking object";
+          type uint16 {
+            tailf:info "<1..1000>;;tracking object";
+            range "1..1000";
+          }
+        }
+      }
+    }
+    container authentication {
+      tailf:info "Auth Manager Global Configuration Commands";
+      description
+        "Auth Manager Global Configuration Commands";
+      container critical {
+        tailf:info "Set Critical Authentication parameters";
+        description
+          "Set Critical Authentication parameters";
+        container recovery {
+          tailf:info "Set Critical Authentication Recovery parameters";
+          description
+            "Set Critical Authentication Recovery parameters";
+          leaf delay {
+            tailf:info "Set Critical Authentication Recovery Delay period";
+            description
+              "Set Critical Authentication Recovery Delay period";
+            type uint32 {
+              tailf:info "<1-10000>;;Critical Authentication Recovery delay in milliseconds";
+              range "1..10000";
+            }
+          }
+        }
+      }
+      container mac-move {
+        tailf:info "Set required action when a MAC move is detected";
+        description
+          "Set required action when a MAC move is detected";
+        leaf permit {
+          tailf:info "PERMIT MAC moves (clears existing session)";
+          description
+            "PERMIT MAC moves (clears existing session)";
+          type empty;
+        }
+      }
+    }
+    container banner {
+      tailf:info "Define a login banner";
+      description
+        "Define a login banner";
+      container exec {
+        tailf:info "Set EXEC process creation banner";
+        description
+          "Set EXEC process creation banner";
+        tailf:cli-sequence-commands {
+          tailf:cli-reset-siblings;
+        }
+        tailf:cli-compact-syntax;
+        leaf start-marker {
+          tailf:cli-drop-node-name;
+          type string;
+        }
+        leaf message {
+          tailf:cli-drop-node-name;
+          type string;
+        }
+        leaf end-marker {
+          tailf:cli-drop-node-name;
+          type string;
+          must "../end-marker = ../start-marker" {
+            tailf:dependency "../start-marker";
+          }
+        }
+      }
+      container login {
+        tailf:info "Set login banner";
+        description
+          "Set login banner";
+        tailf:cli-sequence-commands {
+          tailf:cli-reset-siblings;
+        }
+        tailf:cli-compact-syntax;
+        leaf start-marker {
+          tailf:cli-drop-node-name;
+          type string;
+        }
+        leaf message {
+          tailf:cli-drop-node-name;
+          type string;
+        }
+        leaf end-marker {
+          tailf:cli-drop-node-name;
+          type string;
+          must "../end-marker = ../start-marker" {
+            tailf:dependency "../start-marker";
+          }
+        }
+      }
+      container prompt-timeout {
+        tailf:info "Set Message for login authentication timeout";
+        description
+          "Set Message for login authentication timeout";
+        tailf:cli-sequence-commands {
+          tailf:cli-reset-siblings;
+        }
+        tailf:cli-compact-syntax;
+        leaf start-marker {
+          tailf:cli-drop-node-name;
+          type string;
+        }
+        leaf message {
+          tailf:cli-drop-node-name;
+          type string;
+        }
+        leaf end-marker {
+          tailf:cli-drop-node-name;
+          type string;
+          must "../end-marker = ../start-marker" {
+            tailf:dependency "../start-marker";
+          }
+        }
+      }
+      container motd {
+        tailf:info "Set Message of the Day banner";
+        description
+          "Set Message of the Day banner";
+        tailf:cli-sequence-commands {
+          tailf:cli-reset-siblings;
+        }
+        tailf:cli-compact-syntax;
+        leaf start-marker {
+          tailf:cli-drop-node-name;
+          type string;
+        }
+        leaf message {
+          tailf:cli-drop-node-name;
+          type string;
+        }
+        leaf end-marker {
+          tailf:cli-drop-node-name;
+          type string;
+          must "../end-marker = ../start-marker" {
+            tailf:dependency "../start-marker";
+          }
+        }
+      }
+    }
+    list table-map {
+      tailf:info "Configure Table Map";
+      description
+        "Configure Table Map";
+      tailf:cli-mode-name "config-tablemap";
+      key "name";
+      leaf name {
+        type string {
+          tailf:info "WORD;;table-map name";
+        }
+      }
+      leaf default {
+        tailf:info "the default behavior for setting value not found in the table map";
+        description
+          "the default behavior for setting value not found in the table map";
+        type union {
+          type uint8 {
+            tailf:info "tablemap default value";
+            range "0..63";
+          }
+          type enumeration {
+            enum "copy" {
+              tailf:info "set the default behavior for value not found in the table map to copy";
+            }
+            enum "ignore" {
+              tailf:info "set the default behavior for value not found in the table map to ignore";
+            }
+          }
+        }
+      }
+      list map {
+        tailf:info "map to_value from from_value";
+        description
+          "map to_value from from_value";
+        tailf:cli-compact-syntax;
+        tailf:cli-reset-container;
+        tailf:cli-suppress-mode;
+        tailf:cli-delete-when-empty;
+        key "from to";
+        leaf from {
+          tailf:info "map from value";
+          description
+            "map from value";
+          tailf:cli-expose-key-name;
+          type uint8 {
+            tailf:info "<0-63>;;tablemap from value";
+            range "0..63";
+          }
+        }
+        leaf to {
+          tailf:info "map to value";
+          description
+            "map to value";
+          tailf:cli-expose-key-name;
+          type uint8 {
+            tailf:info "<0-63>;;tablemap to value";
+            range "0..63";
+          }
+        }
+      }
+    }
+    container sdm {
+      tailf:info "Switch database management";
+      description
+        "Switch database management";
+      container prefer {
+        tailf:info "Config TCAM and ASIC RAM size. Warning: need to reset switch for configuration to take effect";
+        description
+          "Config TCAM and ASIC RAM size. Warning: need to reset switch for configuration to take effect";
+        tailf:cli-delete-when-empty;
+        presence "true";
+        choice sdm-prefer-choice {
+          leaf default {
+            type empty;
+          }
+          leaf qos {
+            type empty;
+          }
+        }
+      }
+    }
+    container diagnostic {
+      tailf:info "Configure diagnostic information";
+      description
+        "Configure diagnostic information";
+      container bootup {
+        leaf level {
+          type enumeration {
+            enum "minimal";
+          }
+        }
+      }
+    }
+    list switch {
+      tailf:info "Config commands for the switches in the stack";
+      description
+        "Config commands for the switches in the stack";
+      tailf:cli-suppress-mode;
+      key "number";
+      leaf number {
+        type uint8 {
+          tailf:info "<1-9>;;Switch Number";
+          range "1..9";
+        }
+      }
+      leaf provision {
+        tailf:info "Configure Switch provision / offline config";
+        description
+          "Configure Switch provision / offline config";
+        type enumeration {
+          enum "ws-c2960x-24pd-l" {
+            tailf:info "provision a Catalyst 2960x switch with 24pd-l interfaces";
+          }
+          enum "ws-c3650-48ps" {
+            tailf:info "provision a Catalyst 3650 switch with 48 port interfaces";
+          }
+          enum "ws-c3650-24ps" {
+            tailf:info "provision a Catalyst 3650 switch with 24 port interfaces";
+          }
+          enum "ws-c3850-48p" {
+            tailf:info "provision a Catalyst 3850 switch with 48 GE POE interfaces";
+          }
+          enum "ws-c3850-24p" {
+            tailf:info "provision a Catalyst 3850 switch with 24 GE POE interfaces";
+          }
+          enum "ws-c3850-48t" {
+            tailf:info "provision a Catalyst 3850 switch with 48 GE interfaces";
+          }
+          enum "ws-c3850-24t" {
+            tailf:info "provision a Catalyst 3850 switch with 24 GE interfaces";
+          }
+          enum "ws-c3850-48f" {
+            tailf:info "provision a Catalyst 3850 switch with 48 GE POE+ interfaces";
+          }
+          enum "ws-c3850-48u" {
+            tailf:info "provision a Catalyst 3850 switch with 48 GE UPOE interfaces";
+          }
+          enum "ws-c3850-24u" {
+            tailf:info "provision a Catalyst 3850 switch with 24 GE UPOE interfaces";
+          }
+          enum "ws-c3850-12x48u" {
+            tailf:info "provision a Catalyst 3850 switch with 48 GE UPOE interfaces";
+          }
+          enum "ws-c3850-24xu" {
+            tailf:info "provision a Catalyst 3850 switch with 24 GE UPOE interfaces";
+          }
+          enum "ws-c3850-12s" {
+            tailf:info "provision a Catalyst 3850 switch with 12 SFP interfaces";
+          }
+          enum "ws-c3850-24s" {
+            tailf:info "provision a Catalyst 3850 switch with 24 SFP interfaces";
+          }
+          enum "ws-c3850-12xs" {
+            tailf:info "provision a Catalyst 3850 switch with 12 SFP* interfaces";
+          }
+          enum "ws-c3850-24xs" {
+            tailf:info "provision a Catalyst 3850 switch with 24 SFP+ interfaces";
+          }
+          enum "ws-c3850-48xs" {
+            tailf:info "provision a Catalyst 3850 switch with 48 SFP+ interfaces";
+          }
+        }
+      }
+    }
+    list switch-virtual {
+      tailf:alt-name "switch";
+      key "domain";
+      leaf domain {
+        type uint32;
+      }
+      leaf virtual {
+        tailf:cli-prefix-key;
+        type empty;
+      }
+      container switch {
+        leaf mode {
+          type enumeration {
+            enum "virtual";
+          }
+        }
+      }
+      container mac-address {
+        leaf use-virtual {
+          type empty;
+        }
+      }
+    }
+    container stack-mac {
+      tailf:info "Global stack mac-address feature configurations";
+      description
+        "Global stack mac-address feature configurations";
+      container persistent {
+        tailf:info "persistent stack mac-address";
+        description
+          "persistent stack mac-address";
+        leaf timer {
+          tailf:info "use stack mac-address timer after master failure";
+          description
+            "use stack mac-address timer after master failure";
+          type uint8 {
+            tailf:info "<0-0>;;Enter 0 to continue using current stack-mac after master switchover<1-60>;;Interval in minutes before using the new master's mac-address";
+          }
+        }
+      }
+    }
+    list acr {
+      tailf:info "ACR";
+      description
+        "ACR";
+      tailf:cli-suppress-mode;
+      key "number";
+      leaf number {
+        type uint8 {
+          tailf:info "ACR number";
+        }
+      }
+      leaf type {
+        tailf:cli-hide-in-submode;
+        type enumeration {
+          enum "CH-OC3";
+        }
+      }
+    }
+    container mls {
+      tailf:info "mls global commands";
+      description
+        "mls global commands";
+      tailf:cli-incomplete-no;
+      container acl {
+        tailf:info "MLS ACL operation";
+        description
+          "MLS ACL operation";
+        container tcam {
+          tailf:info "ACL TCAM";
+          description
+            "ACL TCAM";
+          leaf default-result {
+            tailf:info "Default result to be used during tcam programming";
+            description
+              "Default result to be used during tcam programming";
+            type enumeration {
+              enum "bridge" {
+                tailf:info "Bridge result";
+              }
+              enum "deny" {
+                tailf:info "Deny result";
+              }
+              enum "permit" {
+                tailf:info "Permit result";
+              }
+            }
+          }
+          container log-update {
+            tailf:info "Log TCAM updates";
+            description
+              "Log TCAM updates";
+            presence "true";
+            leaf rate-limit-msg {
+              tailf:info "Enable/Disable syslog ratelimiting";
+              description
+                "Enable/Disable syslog ratelimiting";
+              type enumeration {
+                enum "disable" {
+                  tailf:info "Disable ratelimiting syslog";
+                }
+                enum "enable" {
+                  tailf:info "Enable syslog ratelimiting at 1 per second";
+                }
+              }
+            }
+          }
+          leaf share-global {
+            tailf:info "share global deny or permit any entries";
+            description
+              "share global deny or permit any entries";
+            tailf:cli-boolean-no;
+            tailf:cli-trim-default;
+            type boolean;
+            default "true";
+          }
+        }
+      }
+      container cef {
+        tailf:info "cef keyword";
+        description
+          "cef keyword";
+        container error {
+          leaf action {
+            type enumeration {
+              enum "reset";
+            }
+          }
+        }
+      }
+      container flow {
+        tailf:info "flowmask keyword";
+        description
+          "flowmask keyword";
+        leaf ip {
+          tailf:info "flowmask ip keyword";
+          description
+            "flowmask ip keyword";
+          type enumeration {
+            enum "interface-destination" {
+              tailf:info "interface-destination flow keyword";
+            }
+            enum "interface-destination-source" {
+              tailf:info "interface-destination-source flow keyword";
+            }
+            enum "interface-full" {
+              tailf:info "interface-full flow keyword";
+            }
+            enum "interface-source" {
+              tailf:info "interface-source only flow keyword";
+            }
+          }
+        }
+      }
+      container ip {
+        tailf:info "ip keyword";
+        description
+          "ip keyword";
+        container multicast {
+          tailf:info "multicast keyword";
+          description
+            "multicast keyword";
+          tailf:cli-display-separated;
+          presence "true";
+          container consistency-check {
+            tailf:info "Set consistency checking characteristics";
+            description
+              "Set consistency checking characteristics";
+            presence "true";
+            leaf settle-time {
+              tailf:info "Settle time for entry/oif for consistancy-checker";
+              description
+                "Settle time for entry/oif for consistancy-checker";
+              type uint16 {
+                tailf:info "<2-3600>;;Settle time for entry/oif in seconds";
+                range "2..3600";
+              }
+            }
+          }
+          leaf flow-stat-timer {
+            tailf:info "timer for flow statistic used by mls-msc and mlsm";
+            description
+              "timer for flow statistic used by mls-msc and mlsm";
+            type uint8 {
+              tailf:info "<1-100>;;#seconds between one batch and another";
+              range "1..100";
+            }
+          }
+        }
+      }
+      container mls-qos-conf {
+        tailf:cli-no-keyword;
+        tailf:cli-drop-node-name;
+        leaf qos {
+          type empty;
+        }
+      }
+      container qos {
+        tailf:info "QoS parameters";
+        description
+          "QoS parameters";
+        tailf:cli-incomplete-command;
+        tailf:cli-incomplete-no;
+        list aggregate-policer {
+          tailf:info "Assign aggregate policer";
+          description
+            "Assign aggregate policer";
+          tailf:cli-suppress-mode;
+          tailf:cli-delete-when-empty;
+          tailf:cli-compact-syntax;
+          tailf:cli-sequence-commands {
+            tailf:cli-reset-all-siblings;
+          }
+          key "name";
+          leaf name {
+            type string {
+              tailf:info "WORD;;aggregate policer name";
+            }
+          }
+          leaf target-bit-rate {
+            tailf:cli-drop-node-name;
+            type uint64 {
+              tailf:info "<32000-60000000000>;;Target Bit Rate (bits per second) (postfix k, m, g optional; decimal point allowed)";
+              range "32000..60000000000";
+            }
+          }
+          leaf burst-normal {
+            tailf:cli-drop-node-name;
+            tailf:cli-optional-in-sequence;
+            type uint32 {
+              tailf:info "<1000-31250000>;;Normal burst bytes";
+              range "1000..31250000";
+            }
+          }
+          leaf burst-max {
+            tailf:cli-drop-node-name;
+            tailf:cli-optional-in-sequence;
+            when "../burst-normal" {
+              tailf:dependency "../burst-normal";
+            }
+            type uint32 {
+              tailf:info "<1000-31250000>;;Maximum burst bytes";
+              range "1000..31250000";
+            }
+          }
+          leaf pir {
+            tailf:info "PIR";
+            description
+              "PIR";
+            tailf:cli-optional-in-sequence;
+            type uint64 {
+              tailf:info "<32000-60000000000>;;Target Bit Rate (bits per second) (postfix k, m, g optional; decimal point allowed)";
+              range "32000..60000000000";
+            }
+          }
+          container conform-action {
+            tailf:info "action when rate is not exceeded";
+            description
+              "action when rate is not exceeded";
+            tailf:cli-optional-in-sequence;
+            tailf:cli-compact-syntax;
+            tailf:cli-flatten-container;
+            choice action-choice {
+              leaf drop {
+                tailf:info "drop packet";
+                description
+                  "drop packet";
+                type empty;
+              }
+              leaf set-dscp-transmit {
+                tailf:info "set dscp and send it";
+                description
+                  "set dscp and send it";
+                type dscp-type;
+              }
+              leaf set-mpls-exp-imposition-transmit {
+                tailf:info "set exp at tag imposition and send it";
+                description
+                  "set exp at tag imposition and send it";
+                type uint8 {
+                  tailf:info "<0-7>;;new exp";
+                  range "0..7";
+                }
+              }
+              leaf set-prec-transmit {
+                tailf:info "rewrite packet precedence and send it";
+                description
+                  "rewrite packet precedence and send it";
+                type uint8 {
+                  tailf:info "<0-7>;;new precedence";
+                  range "0..7";
+                }
+              }
+              leaf transmit {
+                tailf:info "transmit packet";
+                description
+                  "transmit packet";
+                type empty;
+              }
+            }
+          }
+          leaf exceed-action {
+            tailf:info "action when rate is exceeded";
+            description
+              "action when rate is exceeded";
+            tailf:cli-optional-in-sequence;
+            type enumeration {
+              enum "drop" {
+                tailf:info "drop packet";
+              }
+              enum "policed-dscp-transmit" {
+                tailf:info "change dscp per policed-dscp map and send it";
+              }
+              enum "transmit" {
+                tailf:info "transmit packet";
+              }
+            }
+          }
+          leaf violate-action {
+            tailf:info "action when rate violated";
+            description
+              "action when rate violated";
+            type enumeration {
+              enum "drop" {
+                tailf:info "drop packet";
+              }
+              enum "policed-dscp-transmit" {
+                tailf:info "change dscp per policed-dscp map and send it";
+              }
+              enum "transmit" {
+                tailf:info "transmit packet";
+              }
+            }
+          }
+        }
+        container map {
+          tailf:info "qos map keyword";
+          description
+            "qos map keyword";
+          leaf-list cos-dscp {
+            tailf:info "cos-dscp map: eight dscp values for cos 0-7";
+            description
+              "cos-dscp map: eight dscp values for cos 0-7";
+            tailf:cli-flat-list-syntax;
+            type uint8 {
+              tailf:info "<0-63>;;CoS values separated by spaces (up to 8 values total)";
+              range "0..63";
+            }
+          }
+          leaf-list policed-dscp {
+            tailf:info "policed-dscp map keyword";
+            description
+              "policed-dscp map keyword";
+            ordered-by user;
+            tailf:cli-flat-list-syntax;
+            type union {
+              type uint8 {
+                tailf:info "<0-63>;;DSCP values separated by spaces (up to 8 values total)";
+                range "0..63";
+              }
+              type enumeration {
+                enum "to" {
+                  tailf:info "to keyword";
+                }
+              }
+            }
+          }
+        }
+        container rewrite {
+          tailf:info "packet qos rewrite enable/disable";
+          description
+            "packet qos rewrite enable/disable";
+          container ip {
+            tailf:info "ip packet qos rewrite enable/disable";
+            description
+              "ip packet qos rewrite enable/disable";
+            container dscp {
+              tailf:info "packet ip dscp rewrite enable/disable";
+              description
+                "packet ip dscp rewrite enable/disable";
+              presence "true";
+              leaf slot {
+                tailf:info "slot number";
+                description
+                  "slot number";
+                type string {
+                  tailf:info "WORD;;Slots seperated by commas. Valid slots: 1,2,3,4,5,6,7,8,9";
+                }
+              }
+            }
+          }
+        }
+        container queue-set {
+          tailf:info "Choose a queue set for this queue";
+          description
+            "Choose a queue set for this queue";
+          container output {
+            tailf:info "Direction the command applies for this command";
+            description
+              "Direction the command applies for this command";
+            tailf:cli-sequence-commands;
+            tailf:cli-compact-syntax;
+            leaf queue-set-id {
+              tailf:cli-drop-node-name;
+              type uint8 {
+                tailf:info "<1-2>;;queue-set id";
+                range "1..2";
+              }
+            }
+            list threshold {
+              tailf:info "Assign threshold values to a queue";
+              description
+                "Assign threshold values to a queue";
+              tailf:cli-suppress-mode;
+              tailf:cli-break-sequence-commands;
+              tailf:cli-compact-syntax;
+              tailf:cli-sequence-commands;
+              key "queue-id";
+              leaf queue-id {
+                type uint8 {
+                  tailf:info "<1-4>;;enter queue id in this queue set";
+                  range "1..4";
+                }
+              }
+              leaf drop1 {
+                tailf:cli-drop-node-name;
+                description
+                  "drop threshold1 1-3200";
+                type uint32 {
+                  tailf:info "<1-3200>;;enter drop threshold1 1-3200";
+                  range "1..3200";
+                }
+              }
+              leaf drop2 {
+                tailf:cli-drop-node-name;
+                description
+                  "drop threshold2 1-3200";
+                type uint32 {
+                  tailf:info "<1-3200>;;enter drop threshold2 1-3200";
+                  range "1..3200";
+                }
+              }
+              leaf reserved {
+                tailf:cli-drop-node-name;
+                description
+                  "reserved threshold 1-100";
+                type uint32 {
+                  tailf:info "<1-3200>;;enter drop threshold2 1-3200";
+                  range "1..3200";
+                }
+              }
+              leaf maximum {
+                tailf:cli-drop-node-name;
+                description
+                  "maximum threshold1 1-3200";
+                type uint32 {
+                  tailf:info "<1-3200>;;enter maximum threshold1 1-3200";
+                  range "1..3200";
+                }
+              }
+            }
+            leaf-list buffers {
+              tailf:info "assign buffers to each egress queue";
+              description
+                "assign buffers to each egress queue";
+              tailf:cli-flat-list-syntax;
+              type uint16 {
+                tailf:info "<0-99>/<1-100>;;enter buffer percentage for queue x 0-99/2 1-100";
+                range "0..100";
+              }
+            }
+          }
+        }
+        container srr-queue {
+          tailf:info "Configure SRR receive queues";
+          description
+            "Configure SRR receive queues";
+          container input {
+            tailf:info "input keyword";
+            description
+              "input keyword";
+            leaf-list bandwidth {
+              tailf:info "Configure SRR bandwidth";
+              description
+                "Configure SRR bandwidth";
+              tailf:cli-flat-list-syntax;
+              type uint8 {
+                tailf:info "<1-100>;;enter bandwidth weight for queue id x";
+                range "1..100";
+              }
+            }
+            list threshold {
+              tailf:info "Configure queue tail-drop thresholds";
+              description
+                "Configure queue tail-drop thresholds";
+              tailf:cli-suppress-mode;
+              key "queue-id";
+              leaf queue-id {
+                type uint8 {
+                  tailf:info "<1-2>;;enter threshold queue id (1-2)";
+                  range "1..2";
+                }
+              }
+              leaf-list queue-size-percent {
+                tailf:cli-drop-node-name;
+                tailf:cli-flat-list-syntax;
+                type uint8 {
+                  tailf:info "<1-100>;;enter percent of queue size for threshold x";
+                  range "1..100";
+                }
+              }
+            }
+            list priority-queue {
+              tailf:info "Configure priority scheduling";
+              description
+                "Configure priority scheduling";
+              tailf:cli-suppress-mode;
+              key "queue-number";
+              leaf queue-number {
+                type uint8 {
+                  tailf:info "<1-2>;;enter priority queue number [1-2]";
+                }
+              }
+              leaf bandwidth {
+                tailf:info "ingress priority queue bandwidth % of stack ring";
+                description
+                  "ingress priority queue bandwidth % of stack ring";
+                type uint8 {
+                  tailf:info "<0-40>;;enter bandwidth number [0-40]";
+                  range "0..40";
+                }
+              }
+            }
+            list cos-map {
+              tailf:info "Configure cos-map for a queue id";
+              description
+                "Configure cos-map for a queue id";
+              tailf:cli-suppress-mode;
+              key "queue threshold";
+              leaf queue {
+                tailf:info "Assign COS values to a queue";
+                description
+                  "Assign COS values to a queue";
+                tailf:cli-expose-key-name;
+                type uint8 {
+                  tailf:info "<1-4>;;enter cos-map output queue id";
+                  range "1..4";
+                }
+              }
+              leaf threshold {
+                tailf:info "Assign COS values to a queue threshold";
+                description
+                  "Assign COS values to a queue threshold";
+                tailf:cli-expose-key-name;
+                type uint8 {
+                  tailf:info "<1-3>;;enter cos-map threshold id";
+                  range "1..3";
+                }
+              }
+              leaf-list cos {
+                tailf:cli-drop-node-name;
+                tailf:cli-flat-list-syntax;
+                max-elements "8";
+                type uint8 {
+                  tailf:info "<0-7>;;8 cos values separated by spaces";
+                  range "0..7";
+                }
+              }
+            }
+            list dscp-map {
+              tailf:info "Configure dscp-map for a queue id";
+              description
+                "Configure dscp-map for a queue id";
+              tailf:cli-suppress-mode;
+              key "queue threshold";
+              leaf queue {
+                tailf:info "Assign DSCP values to a queue";
+                description
+                  "Assign DSCP values to a queue";
+                tailf:cli-expose-key-name;
+                type uint8 {
+                  tailf:info "<1-4>;;enter dscp-map output queue id";
+                  range "1..4";
+                }
+              }
+              leaf threshold {
+                tailf:info "Assign DSCP values to a queue threshold";
+                description
+                  "Assign DSCP values to a queue threshold";
+                tailf:cli-expose-key-name;
+                type uint8 {
+                  tailf:info "<1-3>;;enter dscp-map threshold id";
+                  range "1..3";
+                }
+              }
+              leaf-list dscp {
+                tailf:cli-drop-node-name;
+                tailf:cli-flat-list-syntax;
+                max-elements "8";
+                type uint8 {
+                  tailf:info "<0-63>;;dscp values separated by spaces (up to 8 values total)";
+                  range "0..63";
+                }
+              }
+            }
+          }
+          container output {
+            tailf:info "output keyword";
+            description
+              "output keyword";
+            list cos-map {
+              tailf:info "Configure cos-map for a queue id";
+              description
+                "Configure cos-map for a queue id";
+              tailf:cli-suppress-mode;
+              key "queue threshold";
+              leaf queue {
+                tailf:info "Assign COS values to a queue";
+                description
+                  "Assign COS values to a queue";
+                tailf:cli-expose-key-name;
+                type uint8 {
+                  tailf:info "<1-4>;;enter cos-map output queue id";
+                  range "1..4";
+                }
+              }
+              leaf threshold {
+                tailf:info "Assign COS values to a queue threshold";
+                description
+                  "Assign COS values to a queue threshold";
+                tailf:cli-expose-key-name;
+                type uint8 {
+                  tailf:info "<1-3>;;enter cos-map threshold id";
+                  range "1..3";
+                }
+              }
+              leaf-list cos {
+                tailf:cli-drop-node-name;
+                tailf:cli-flat-list-syntax;
+                max-elements "8";
+                type uint8 {
+                  tailf:info "<0-7>;;8 cos values separated by spaces";
+                  range "0..7";
+                }
+              }
+            }
+            list dscp-map {
+              tailf:info "Configure dscp-map for a queue id";
+              description
+                "Configure dscp-map for a queue id";
+              tailf:cli-suppress-mode;
+              key "queue threshold";
+              leaf queue {
+                tailf:info "Assign DSCP values to a queue";
+                description
+                  "Assign DSCP values to a queue";
+                tailf:cli-expose-key-name;
+                type uint8 {
+                  tailf:info "<1-4>;;enter dscp-map output queue id";
+                  range "1..4";
+                }
+              }
+              leaf threshold {
+                tailf:info "Assign DSCP values to a queue threshold";
+                description
+                  "Assign DSCP values to a queue threshold";
+                tailf:cli-expose-key-name;
+                type uint8 {
+                  tailf:info "<1-3>;;enter dscp-map threshold id";
+                  range "1..3";
+                }
+              }
+              leaf-list dscp {
+                tailf:cli-drop-node-name;
+                tailf:cli-flat-list-syntax;
+                max-elements "8";
+                type uint8 {
+                  tailf:info "<0-63>;;dscp values separated by spaces (up to 8 values total)";
+                  range "0..63";
+                }
+              }
+            }
+          }
+        }
+      }
+      container rate-limit {
+        tailf:info "Rate limit different behaviors";
+        description
+          "Rate limit different behaviors";
+        container layer2 {
+          tailf:info "layer2 protocol cases";
+          description
+            "layer2 protocol cases";
+          container l2pt {
+            tailf:cli-compact-syntax;
+            tailf:cli-sequence-commands {
+              tailf:cli-reset-siblings;
+            }
+            tailf:info "layer2 protocol tunnelling packets";
+            leaf packets-per-second {
+              description
+                "layer2 protocol tunnelling packets";
+              tailf:cli-drop-node-name;
+              type uint32 {
+                tailf:info "<10-1000000>;;packets per second";
+                range "10..1000000";
+              }
+            }
+            leaf packets-in-burst {
+              tailf:cli-drop-node-name;
+              type uint32 {
+                tailf:info "<1-255>;;packets in burst";
+                range "1..255";
+              }
+            }
+          }
+          container pdu {
+            tailf:info "layer2 protocol data unit packets";
+            description
+              "layer2 protocol data unit packets";
+            tailf:cli-compact-syntax;
+            tailf:cli-sequence-commands {
+              tailf:cli-reset-siblings;
+            }
+            leaf packets-per-second {
+              tailf:cli-drop-node-name;
+              type uint32 {
+                tailf:info "<10-1000000>;;packets per second";
+                range "10..1000000";
+              }
+            }
+            leaf packets-in-burst {
+              tailf:cli-drop-node-name;
+              type uint32 {
+                tailf:info "<1-255>;;packets in burst";
+                range "1..255";
+              }
+            }
+          }
+        }
+      }
+      container verify {
+        tailf:info "enable hardware packet parsing error checks";
+        description
+          "enable hardware packet parsing error checks";
+        container ip {
+          tailf:info "check on IP packets";
+          description
+            "check on IP packets";
+          leaf checksum {
+            tailf:info "check for packet checksum errors";
+            description
+              "check for packet checksum errors";
+            tailf:cli-boolean-no;
+            tailf:cli-trim-default;
+            type boolean;
+            default "true";
+          }
+          container length {
+            tailf:info "check for packet length errors";
+            description
+              "check for packet length errors";
+            leaf consistent {
+              tailf:info "check length in header against physical frame length";
+              description
+                "check length in header against physical frame length";
+              tailf:cli-boolean-no;
+              tailf:cli-trim-default;
+              type boolean;
+              default "true";
+            }
+            leaf minimum {
+              tailf:info "check for minimum packet length";
+              description
+                "check for minimum packet length";
+              tailf:cli-boolean-no;
+              tailf:cli-trim-default;
+              type boolean;
+              default "true";
+            }
+          }
+          leaf same-address {
+            tailf:info "check for packet having equal source and destination IP addresses";
+            description
+              "check for packet having equal source and destination IP addresses";
+            type empty;
+          }
+          leaf syslog {
+            tailf:info "syslog packet parse errors";
+            description
+              "syslog packet parse errors";
+            type empty;
+          }
+        }
+      }
+    }
+    container object-group {
+      tailf:info "Configure Object Group";
+      description
+        "Configure Object Group";
+      list network {
+        tailf:info "network group";
+        description
+          "network group";
+        tailf:cli-mode-name "config-network-group";
+        key "name";
+        leaf name {
+          tailf:info "WORD;;object-group name";
+          description
+            "WORD;;object-group name";
+          type string;
+        }
+        container obj-Mode-config-network-group {
+          tailf:cli-drop-node-name;
+          list network_address {
+            tailf:cli-drop-node-name;
+            tailf:cli-suppress-mode;
+            key "ipv4_addr ipv4_mask";
+            leaf ipv4_addr {
+              tailf:info "A.B.C.D;;Network address of the group members";
+              description
+                "A.B.C.D;;Network address of the group members";
+              type inet:ipv4-address;
+            }
+            leaf ipv4_mask {
+              tailf:info "A.B.C.D;;Network mask";
+              description
+                "A.B.C.D;;Network mask";
+              type inet:ipv4-address;
+            }
+          }
+          leaf description {
+            tailf:info "Network object group description";
+            description
+              "Network object group description";
+            tailf:cli-multi-value;
+            type string {
+              tailf:info "LINE;;Description of this Object group (up to 200 characters)";
+              length "1..200";
+            }
+          }
+          leaf group-object {
+            tailf:info "Nested object group";
+            description
+              "Nested object group";
+            type string {
+              tailf:info "WORD;;Nested object group name";
+            }
+          }
+          leaf host {
+            tailf:info "Host address of the object-group member";
+            description
+              "Host address of the object-group member";
+            type inet:host {
+              tailf:info "Hostname or A.B.C.D";
+            }
+          }
+          container range {
+            tailf:cli-incomplete-command;
+            tailf:cli-sequence-commands;
+            leaf ip-addr-min {
+              tailf:cli-drop-node-name;
+              tailf:info "Starting IPv4 Address";
+              description
+                "Starting IPv4 Address";
+              type inet:ipv4-address {
+                tailf:info "A.B.C.D;;IP address";
+              }
+            }
+            leaf ip-addr-max {
+              tailf:cli-drop-node-name;
+              tailf:info "Ending IPv4 Address";
+              description
+                "Ending IPv4 Address";
+              type inet:ipv4-address {
+                tailf:info "A.B.C.D;;IP address";
+              }
+            }
+          }
+        }
+      }
+      list security {
+        tailf:info "security group";
+        description
+          "security group";
+        tailf:cli-mode-name "config-security-group";
+        key "name";
+        leaf name {
+          type string {
+            tailf:info "WORD;;security object group name";
+          }
+        }
+        container security-group {
+          tailf:cli-drop-node-name;
+          leaf description {
+            tailf:info "Network object group description";
+            description
+              "Network object group description";
+            tailf:cli-multi-value;
+            type string {
+              tailf:info "LINE;;Description of this Object group (up to 200 characters)";
+              length "1..200";
+            }
+          }
+          leaf group-object {
+            tailf:info "Nested object group";
+            description
+              "Nested object group";
+            type string {
+              tailf:info "WORD;;Nested object group name";
+            }
+          }
+          container security-group {
+            tailf:info "Security Group Tag";
+            description
+              "Security Group Tag";
+            leaf tag {
+              type uint16 {
+                tailf:info "<1-65535>;;Security Group Tag ID";
+                range "1..65535";
+              }
+            }
+          }
+        }
+      }
+      list service {
+        tailf:info "service group";
+        description
+          "service group";
+        tailf:cli-mode-name "config-service-group";
+        key "name";
+        leaf name {
+          type string {
+            tailf:info "WORD;;service object group name";
+          }
+        }
+        uses object-group-service-grouping;
+      }
+    }
+    container policer {
+      tailf:info "Switch policer";
+      description
+        "Switch policer";
+      list aggregate {
+        tailf:info "Named aggregate policer";
+        description
+          "Named aggregate policer";
+        tailf:cli-suppress-mode;
+        tailf:cli-delete-when-empty;
+        tailf:cli-compact-syntax;
+        tailf:cli-reset-container;
+        tailf:cli-sequence-commands {
+          tailf:cli-reset-siblings;
+        }
+        key "name";
+        leaf name {
+          type string {
+            tailf:info "WORD;;aggregate policer Name";
+          }
+        }
+        leaf cir {
+          tailf:info "Committed information rate";
+          description
+            "Committed information rate";
+          type uint32 {
+            tailf:info "<8000-1000000000>;;Bits per second";
+            range "8000..1000000000";
+          }
+        }
+        leaf bc {
+          tailf:info "Conform burst";
+          description
+            "Conform burst";
+          tailf:cli-optional-in-sequence;
+          type uint32 {
+            tailf:info "<8000-1000000000>;;Burst bytes";
+            range "8000..1000000000";
+          }
+        }
+        leaf conform-action {
+          tailf:info "action when rate is within conform and conform + exceed burst";
+          description
+            "action when rate is within conform and conform + exceed burst";
+          tailf:cli-optional-in-sequence;
+          type empty;
+        }
+        leaf set-qos-transmit {
+          tailf:info "set qos-group and send it";
+          description
+            "set qos-group and send it";
+          when "../conform-action";
+          tailf:cli-optional-in-sequence;
+          type uint8 {
+            tailf:info "<0-99>;;new qos-group";
+            range "0..99";
+          }
+        }
+        leaf set-dot1ad-dei-transmit {
+          tailf:info "set dei and send it";
+          description
+            "set dei and send it";
+          when "../conform-action";
+          tailf:cli-optional-in-sequence;
+          type uint8 {
+            tailf:info "<0-1>;;new dei value";
+            range "0..1";
+          }
+        }
+        leaf set-prec-transmit {
+          tailf:info "rewrite packet precedence and send it";
+          description
+            "rewrite packet precedence and send it";
+          when "../conform-action";
+          tailf:cli-optional-in-sequence;
+          type prec_value-type;
+        }
+        container set-prec-transmit-table {
+          when "../set-prec-transmit";
+          tailf:cli-no-keyword;
+          tailf:cli-drop-node-name;
+          tailf:cli-optional-in-sequence;
+          tailf:cli-flatten-container;
+          leaf table {
+            tailf:info "Set packet cos from cos based on table map";
+            description
+              "Set packet cos from cos based on table map";
+            tailf:cli-optional-in-sequence;
+            type string;
+            tailf:non-strict-leafref {
+              path "/ios:native/table-map/name";
+            }
+          }
+        }
+        leaf set-dscp-transmit {
+          tailf:info "set dscp and send it";
+          description
+            "set dscp and send it";
+          when "../conform-action";
+          tailf:cli-optional-in-sequence;
+          type dscp-type;
+        }
+        container set-dscp-transmit-table {
+          when "../set-dscp-transmit";
+          tailf:cli-no-keyword;
+          tailf:cli-drop-node-name;
+          tailf:cli-optional-in-sequence;
+          tailf:cli-flatten-container;
+          leaf table {
+            tailf:info "Set packet cos from cos based on table map";
+            description
+              "Set packet cos from cos based on table map";
+            tailf:cli-optional-in-sequence;
+            type string;
+            tailf:non-strict-leafref {
+              path "/ios:native/table-map/name";
+            }
+          }
+        }
+        leaf set-cos-transmit {
+          tailf:info "set cos and send it";
+          description
+            "set cos and send it";
+          when "../conform-action";
+          tailf:cli-optional-in-sequence;
+          type cos_value-type;
+        }
+        container set-cos-transmit-table {
+          when "../set-cos-transmit";
+          tailf:cli-no-keyword;
+          tailf:cli-drop-node-name;
+          tailf:cli-optional-in-sequence;
+          tailf:cli-flatten-container;
+          leaf table {
+            tailf:info "Set packet cos from cos based on table map";
+            description
+              "Set packet cos from cos based on table map";
+            tailf:cli-optional-in-sequence;
+            type string;
+            tailf:non-strict-leafref {
+              path "/ios:native/table-map/name";
+            }
+          }
+        }
+        leaf transmit {
+          tailf:info "transmit packet";
+          description
+            "transmit packet";
+          when "../conform-action";
+          tailf:cli-optional-in-sequence;
+          type empty;
+        }
+        leaf exceed-action {
+          tailf:info "action when rate is within conform and conform + exceed burst";
+          description
+            "action when rate is within conform and conform + exceed burst";
+          type empty;
+        }
+        leaf drop {
+          tailf:info "drop packet";
+          description
+            "drop packet";
+          when "../exceed-action";
+          tailf:cli-optional-in-sequence;
+          tailf:cli-full-command;
+          type empty;
+        }
+        container exceed-transmit {
+          tailf:cli-no-keyword;
+          tailf:cli-drop-node-name;
+          tailf:cli-optional-in-sequence;
+          tailf:cli-flatten-container;
+          leaf transmit {
+            tailf:info "transmit packet";
+            description
+              "transmit packet";
+            when "../../exceed-action";
+            tailf:cli-optional-in-sequence;
+            type empty;
+          }
+        }
+      }
+    }
+    list class-map {
+      tailf:info "Configure QoS Class Map";
+      description
+        "Configure QoS Class Map";
+      tailf:cli-mode-name "config-cmap";
+      tailf:cli-suppress-list-no;
+      tailf:cli-delete-when-empty;
+      tailf:cli-no-key-completion;
+      key "name";
+      leaf name {
+        type string {
+          tailf:info "WORD;;class-map name";
+        }
+        tailf:cli-disallow-value "type";
+      }
+      leaf type {
+        tailf:info "type of the class-map";
+        description
+          "type of the class-map";
+        tailf:cli-prefix-key;
+        type enumeration {
+          enum "access-control" {
+            tailf:info "access-control specific class-map";
+          }
+          enum "appnav" {
+            tailf:info "Configure a APPNAV Class Map";
+          }
+          enum "control" {
+            tailf:info "Configure a control policy class-map";
+          }
+          enum "inspect" {
+            tailf:info "Configure Firewall Class Map";
+          }
+          enum "multicast-flows" {
+            tailf:info "multicast class-maps";
+          }
+          enum "stack" {
+            tailf:info "class-map for protocol header stack specification";
+          }
+          enum "traffic" {
+            tailf:info "Configure a subscriber policy traffic classmap";
+          }
+        }
+      }
+      leaf protocol {
+        when "../type = 'inspect'";
+        tailf:cli-drop-node-name;
+        tailf:cli-prefix-key;
+        type enumeration {
+          enum "aol" {
+            tailf:info "Configure CBAC class-map for IM-AOL protocol";
+          }
+          enum "edonkey" {
+            tailf:info "eDonkey";
+          }
+          enum "fasttrack" {
+            tailf:info "FastTrack Traffic - KaZaA, Morpheus, Grokster...";
+          }
+          enum "gnutella" {
+            tailf:info "Gnutella Version2 Traffic - BearShare, Shareeza, Morpheus ...";
+          }
+          enum "http" {
+            tailf:info "Configure CBAC class-map for HTTP protocol";
+          }
+          enum "imap" {
+            tailf:info "Configure CBAC class-map for IMAP protocol";
+          }
+          enum "kazaa2" {
+            tailf:info "Kazaa Version 2";
+          }
+          enum "msnmsgr" {
+            tailf:info "Configure CBAC class-map for IM-MSN protocol";
+          }
+          enum "pop3" {
+            tailf:info "Configure CBAC class-map for POP3 protocol";
+          }
+          enum "smtp" {
+            tailf:info "Configure CBAC class-map for SMTP protocol";
+          }
+          enum "sunrpc" {
+            tailf:info "Configure CBAC class-map for RPC protocol";
+          }
+          enum "ymsgr" {
+            tailf:info "Configure CBAC class-map for IM-YAHOO protocol";
+          }
+        }
+      }
+      leaf prematch {
+        tailf:cli-no-keyword;
+        tailf:cli-prefix-key;
+        tailf:cli-drop-node-name;
+        type enumeration {
+          enum "match-all" {
+            tailf:info "Logical-AND all matching statements under this classmap";
+          }
+          enum "match-any" {
+            tailf:info "Logical-OR all matching statements under this classmap";
+          }
+        }
+        mandatory true;
+      }
+      leaf description {
+        tailf:info "Class-Map description";
+        description
+          "Class-Map description";
+        tailf:cli-multi-value;
+        type string {
+          tailf:info "LINE;;Description of this class-map (up to 200 characters)";
+        }
+      }
+      container match {
+        tailf:info "classification criteria";
+        description
+          "classification criteria";
+        uses class-map-match-grouping;
+        uses class-map-appnav-match-grouping;
+        container not {
+          tailf:info "Negate this match result";
+          description
+            "Negate this match result";
+          uses class-map-match-grouping;
+          uses class-map-appnav-not-match-grouping;
+        }
+      }
+    }
+    list policy-map {
+      tailf:info "Configure QoS Policy Map";
+      description
+        "Configure QoS Policy Map";
+      tailf:cli-mode-name "config-pmap";
+      tailf:cli-diff-dependency "/ios:native/class-map";
+      tailf:cli-diff-dependency "/ios:native/table-map";
+      tailf:cli-diff-dependency "/ios:native/mls/qos/aggregate-policer";
+      tailf:cli-diff-dependency "/ios:native/policer/aggregate";
+      key "name";
+      leaf name {
+        type string {
+          tailf:info "WORD;;policy-map name";
+        }
+        tailf:cli-disallow-value "(type)|(http)|(im)|(imap)|(p2p)|(pop3)|(smtp)|(sunrpc)";
+      }
+      leaf type {
+        tailf:info "type of the policy-map";
+        description
+          "type of the policy-map";
+        tailf:cli-prefix-key;
+        type enumeration {
+          enum "access-control" {
+            tailf:info "access-control specific policy-map";
+          }
+          enum "appnav" {
+            tailf:info "Configure a APPNAV Policy Map";
+          }
+          enum "inspect" {
+            tailf:info "Configure Firewall Policy Map";
+          }
+          enum "packet-service" {
+            tailf:info "Configure Packet Service Policy Map";
+          }
+          enum "performance-monitor" {
+            tailf:info "Performance monitoring policy-map type";
+          }
+          enum "service" {
+            tailf:info "policymap service configuration";
+          }
+          enum "service-chain" {
+            tailf:info "Configure Service Chain Policy Map";
+          }
+        }
+      }
+      leaf protocol {
+        when "../type = 'inspect'";
+        tailf:cli-drop-node-name;
+        tailf:cli-prefix-key;
+        type enumeration {
+          enum "http" {
+            tailf:info "Configure CBAC policy-map for HTTP protocol";
+          }
+          enum "im" {
+            tailf:info "Configure CBAC policy-map for IM protocol";
+          }
+          enum "imap" {
+            tailf:info "Configure CBAC policy-map for IMAP protocol";
+          }
+          enum "p2p" {
+            tailf:info "Configure CBAC policy-map for P2P protocols";
+          }
+          enum "pop3" {
+            tailf:info "Configure CBAC policy-map for POP3 protocol";
+          }
+          enum "smtp" {
+            tailf:info "Configure CBAC policy-map for SMTP protocol";
+          }
+          enum "sunrpc" {
+            tailf:info "Configure CBAC policy-map for RPC protocol";
+          }
+        }
+      }
+      list class {
+        tailf:info "policy criteria";
+        description
+          "policy criteria";
+        tailf:cli-mode-name "config-pmap-c";
+        key "name";
+        leaf name {
+          tailf:cli-disallow-value "type";
+          type class-name-type;
+        }
+        leaf type {
+          tailf:info "type of the class-map";
+          description
+            "type of the class-map";
+          tailf:cli-prefix-key;
+          type enumeration {
+            enum "inspect" {
+              tailf:info "Configure CBAC Class Map";
+            }
+          }
+        }
+        leaf insert-before {
+          tailf:info "Insert the class before a specified class";
+          description
+            "Insert the class before a specified class";
+          tailf:cli-hide-in-submode;
+          when "../../type = 'appnav'";
+          type string {
+            tailf:info "WORD;;Insert the class before a specified class";
+          }
+        }
+        container appnav-policy {
+          when "../../type = 'appnav'";
+          tailf:cli-drop-node-name;
+          list distribute {
+            tailf:info "Distribute action";
+            description
+              "Distribute action";
+            tailf:cli-suppress-mode;
+            key "service-node-group";
+            leaf service-node-group {
+              tailf:info "Distribute to service-node-group";
+              description
+                "Distribute to service-node-group";
+              tailf:cli-expose-key-name;
+              type string {
+                tailf:info "WORD;;service-node-group name";
+              }
+            }
+            leaf insert-before {
+              tailf:info "Insert before specific node";
+              description
+                "Insert before specific node";
+              tailf:cli-optional-in-sequence;
+              type string {
+                tailf:info "WORD;;service-node-group name";
+              }
+            }
+          }
+          leaf monitor-load {
+            tailf:info "Monitor AO";
+            description
+              "Monitor AO";
+            when "../distribute";
+            type enumeration {
+              enum "MS-port-mapper" {
+                tailf:info "Monitor Microsoft Endpoint Port Mapper load";
+              }
+              enum "cifs" {
+                tailf:info "Monitor CIFS Accelerator load";
+              }
+              enum "http" {
+                tailf:info "Monitor HTTP Accelerator load";
+              }
+              enum "ica" {
+                tailf:info "Monitor ICA Accelerator load";
+              }
+              enum "mapi" {
+                tailf:info "Monitor MAPI Accelerator load";
+              }
+              enum "nfs" {
+                tailf:info "Monitor NFS Accelerator load";
+              }
+              enum "ssl" {
+                tailf:info "Monitor SSL accelerator load";
+              }
+              enum "video" {
+                tailf:info "Monitor Video Accelerator load";
+              }
+            }
+          }
+          leaf pass-through {
+            tailf:info "pass-through action";
+            description
+              "pass-through action";
+            type empty;
+          }
+        }
+        container policy {
+          when "../../type = 'inspect'";
+          tailf:cli-drop-node-name;
+          tailf:cli-sequence-commands {
+            tailf:cli-reset-siblings;
+          }
+          leaf action {
+            tailf:cli-drop-node-name;
+            tailf:cli-remove-before-change;
+            type enumeration {
+              enum "cxsc" {
+                tailf:info "CXSC Inspection";
+              }
+              enum "drop" {
+                tailf:info "Drop the packet";
+              }
+              enum "inspect" {
+                tailf:info "Context-based Access Control Engine";
+              }
+              enum "pass" {
+                tailf:info "Pass the packet";
+              }
+              enum "service-policy" {
+                tailf:info "Deep Packet Inspection Engine";
+              }
+            }
+          }
+          leaf log {
+            tailf:info "Send logging message for drop or pass";
+            description
+              "Send logging message for drop or pass";
+            when "../action = 'drop'or ../action = 'pass'";
+            type empty;
+          }
+          leaf parameter-map {
+            tailf:cli-drop-node-name;
+            when "../action = 'inspect' or ../action = 'cxsc'";
+            type string;
+            tailf:non-strict-leafref {
+              path "/ios:native/parameter-map/name";
+            }
+          }
+          container dpi {
+            tailf:cli-drop-node-name;
+            when "../action = 'service-policy'";
+            tailf:cli-sequence-commands;
+            tailf:cli-compact-syntax;
+            leaf type {
+              tailf:cli-drop-node-name;
+              type enumeration {
+                enum "gtpv0" {
+                  tailf:info "GTPv0 DPI";
+                }
+                enum "gtpv1" {
+                  tailf:info "GTPv1 DPI";
+                }
+                enum "imap" {
+                  tailf:info "IMAP DPI";
+                }
+                enum "pop3" {
+                  tailf:info "POP3 DPI";
+                }
+                enum "smtp" {
+                  tailf:info "SMTP DPI";
+                }
+                enum "sunrpc" {
+                  tailf:info "RPC DPI";
+                }
+              }
+            }
+            leaf policy-map {
+              tailf:cli-drop-node-name;
+              type string {
+                tailf:info "WORD;;DPI policy-map name";
+              }
+            }
+          }
+        }
+        container pm-policy {
+          when "../../type = 'performance-monitor'";
+          tailf:cli-drop-node-name;
+          container flow {
+            tailf:info "Flow subcommands";
+            description
+              "Flow subcommands";
+            leaf monitor {
+              tailf:info "Apply a Flow Monitor";
+              description
+                "Apply a Flow Monitor";
+              type string {
+                tailf:info "WORD;;Flow monitor name";
+              }
+            }
+          }
+          container monitor {
+            tailf:info "Monitor related parameters";
+            description
+              "Monitor related parameters";
+            container metric {
+              tailf:info "Monitor metric";
+              description
+                "Monitor metric";
+              container rtp {
+                tailf:info "RTP metrics parameters";
+                description
+                  "RTP metrics parameters";
+                tailf:cli-add-mode;
+                tailf:cli-mode-name "config-pmap-c-mrtp";
+                list clock-rate {
+                  tailf:info "RTP timestamp field's sampling frequency";
+                  description
+                    "RTP timestamp field's sampling frequency";
+                  tailf:cli-suppress-mode;
+                  tailf:cli-sequence-commands;
+                  tailf:cli-compact-syntax;
+                  key "number";
+                  leaf number {
+                    type union {
+                      type uint8 {
+                        tailf:info "<0-127>;;payload type number";
+                        range "0..127";
+                      }
+                      type enumeration {
+                        enum "celb" {
+                          tailf:info "CELB(25)";
+                        }
+                        enum "cn" {
+                          tailf:info "CN(13)";
+                        }
+                        enum "default" {
+                          tailf:info "Change the default clock rate for all the dynamic payload type";
+                        }
+                        enum "dvi4" {
+                          tailf:info "DVI4 RFC-3551 8000Hz(5)";
+                        }
+                        enum "dvi4-2" {
+                          tailf:info "DVI4 RFC-3551 16000Hz(6)";
+                        }
+                        enum "dvi4-3" {
+                          tailf:info "DVI4 Dipol 11025Hz(16)";
+                        }
+                        enum "dvi4-4" {
+                          tailf:info "DVI4 Dipol 22050Hz(17)";
+                        }
+                        enum "g722" {
+                          tailf:info "G722(9)";
+                        }
+                        enum "g723" {
+                          tailf:info "G723(4)";
+                        }
+                        enum "g728" {
+                          tailf:info "G728(15)";
+                        }
+                        enum "g729" {
+                          tailf:info "G729(18)";
+                        }
+                        enum "gsm" {
+                          tailf:info "GSM(3)";
+                        }
+                        enum "h261" {
+                          tailf:info "H261(31)";
+                        }
+                        enum "h263" {
+                          tailf:info "H263(34)";
+                        }
+                        enum "jpeg" {
+                          tailf:info "JPEG(26)";
+                        }
+                        enum "l16" {
+                          tailf:info "L16 channel 1(11)";
+                        }
+                        enum "l16-2" {
+                          tailf:info "L16 channel 2(10)";
+                        }
+                        enum "lpc" {
+                          tailf:info "LPC(7)";
+                        }
+                        enum "mp2t" {
+                          tailf:info "MP2T(33)";
+                        }
+                        enum "mpa" {
+                          tailf:info "MPA(14)";
+                        }
+                        enum "mpv" {
+                          tailf:info "MPV(32)";
+                        }
+                        enum "nv" {
+                          tailf:info "NV(28)";
+                        }
+                        enum "pcma" {
+                          tailf:info "PCMA(8)";
+                        }
+                        enum "pcmu" {
+                          tailf:info "PCMU(0)";
+                        }
+                        enum "qcelp" {
+                          tailf:info "QCELP(12)";
+                        }
+                      }
+                    }
+                  }
+                  leaf frequency {
+                    tailf:cli-drop-node-name;
+                    type uint32 {
+                      tailf:info "<1000-192000>;;frequency in Hz";
+                      range "1000..192000";
+                    }
+                  }
+                }
+              }
+            }
+          }
+          list react {
+            tailf:info "Configure threshold crossing actions";
+            description
+              "Configure threshold crossing actions";
+            tailf:cli-mode-name "config-pmap-c-react";
+            key "id";
+            leaf id {
+              type uint16 {
+                tailf:info "<1-65535>  React instance id";
+              }
+            }
+            leaf mode {
+              tailf:cli-drop-node-name;
+              tailf:cli-hide-in-submode;
+              type enumeration {
+                enum "media-stop" {
+                  tailf:info "Media stream stopped";
+                }
+                enum "mrv" {
+                  tailf:info "Variation in packet rate from configured expected rate";
+                }
+                enum "rtp-jitter-average" {
+                  tailf:info "Mean jitter for the RTP stream";
+                }
+                enum "transport-packets-lost-rate" {
+                  tailf:info "Ratio of lost packets to total reaceived packets";
+                }
+              }
+            }
+            leaf description {
+              tailf:info "Description for threshold crossing action instance";
+              description
+                "Description for the instance";
+              tailf:cli-multi-value;
+              type string;
+            }
+            container action {
+              tailf:info "Config react action";
+              description
+                "Config react action";
+              leaf snmp {
+                tailf:info "SNMP is notified of the event";
+                description
+                  "SNMP is notified of the event";
+                tailf:cli-full-command;
+                type empty;
+              }
+              leaf syslog {
+                tailf:info "The threshold-crossing event is logged to syslog";
+                description
+                  "The threshold-crossing event is logged to syslog";
+                tailf:cli-full-command;
+                type empty;
+              }
+            }
+            container alarm {
+              tailf:info "Config react alarm";
+              description
+                "Config react alarm";
+              leaf severity {
+                tailf:info "Alarm severity - default level none";
+                description
+                  "Alarm severity - default level none";
+                type enumeration {
+                  enum "alert" {
+                    tailf:info "TCA severity level critical (severity = 2)";
+                  }
+                  enum "critical" {
+                    tailf:info "TCA severity level major (severity = 3)";
+                  }
+                  enum "emergency" {
+                    tailf:info "TCA severity level critical (severity = 1)";
+                  }
+                  enum "error" {
+                    tailf:info "TCA severity level minor (severity = 4)";
+                  }
+                  enum "info" {
+                    tailf:info "TCA severity level default (severity = 5)";
+                  }
+                }
+              }
+              container type {
+                tailf:info "Alarm raised type - for each flow or a group";
+                description
+                  "Alarm raised type - for each flow or a group";
+                leaf discrete {
+                  tailf:info "Alert for each flow within the class";
+                  description
+                    "Alert for each flow within the class";
+                  tailf:cli-full-command;
+                  type empty;
+                }
+                container grouped {
+                  tailf:info "Alert if more than one flow cross the threshold";
+                  description
+                    "Alert if more than one flow cross the threshold";
+                  leaf count {
+                    tailf:info "Number of flows in the group cross the threshold";
+                    description
+                      "Number of flows in the group cross the threshold";
+                    tailf:cli-full-command;
+                    type uint16 {
+                      tailf:info "<1-65535>;;Number of flows";
+                    }
+                  }
+                  leaf percent {
+                    tailf:info "Percent of flows in the group cross the threshold";
+                    description
+                      "Percent of flows in the group cross the threshold";
+                    tailf:cli-full-command;
+                    type uint8 {
+                      tailf:info "<1-100>;;Percent of flows";
+                      range "1..100";
+                    }
+                  }
+                }
+              }
+            }
+            container threshold {
+              tailf:info "Config react threshold";
+              description
+                "Config react threshold";
+              container value {
+                tailf:info "Range of percentage loss that would trigger the alarm";
+                description
+                  "Range of percentage loss that would trigger the alarm";
+                leaf ge {
+                  tailf:info "greater and equal to";
+                  description
+                    "greater and equal to";
+                  tailf:cli-full-command;
+                  type string {
+                    tailf:info "WORD;;rtp lost fraction threshold 0.05 - 100 (% in precision of 0.01)";
+                  }
+                }
+                leaf gt {
+                  tailf:info "greater than";
+                  description
+                    "greater than";
+                  tailf:cli-full-command;
+                  type string {
+                    tailf:info "WORD;;rtp lost fraction threshold 0.05 - 100 (% in precision of 0.01)";
+                  }
+                }
+                leaf le {
+                  tailf:info "less and equal to";
+                  description
+                    "less and equal to";
+                  tailf:cli-full-command;
+                  type string {
+                    tailf:info "WORD;;rtp lost fraction threshold 0.05 - 100 (% in precision of 0.01)";
+                  }
+                }
+                leaf lt {
+                  tailf:info "less than";
+                  description
+                    "less than";
+                  tailf:cli-full-command;
+                  type string {
+                    tailf:info "WORD;;rtp lost fraction threshold 0.05 - 100 (% in precision of 0.01)";
+                  }
+                }
+                container range {
+                  tailf:info "threshold within the range of";
+                  description
+                    "threshold within the range of";
+                  tailf:cli-sequence-commands;
+                  tailf:cli-compact-syntax;
+                  leaf low {
+                    tailf:cli-drop-node-name;
+                    type string {
+                      tailf:info "WORD;;rtp lost fraction threshold 0.05 - 100 (% in precision of 0.01)";
+                    }
+                  }
+                  leaf high {
+                    tailf:cli-drop-node-name;
+                    type string {
+                      tailf:info "WORD;;rtp lost fraction threshold 0.05 - 100 (% in precision of 0.01)";
+                    }
+                  }
+                }
+              }
+            }
+          }
+        }
+        container inspect-police {
+          when "../policy/action = 'inspect'";
+          tailf:cli-drop-node-name;
+          container police {
+            tailf:info "Police";
+            description
+              "Police";
+            tailf:cli-sequence-commands {
+              tailf:cli-reset-siblings;
+            }
+            tailf:cli-compact-syntax;
+            leaf rate {
+              tailf:info "Specify police rate";
+              description
+                "Specify police rate";
+              type uint32 {
+                tailf:info "<8000-2000000000>;;Rate value in bps";
+                range "8000..2000000000";
+              }
+            }
+            leaf burst {
+              tailf:info "Specify 'burst' parameter";
+              description
+                "Specify 'burst' parameter";
+              type uint32 {
+                tailf:info "<1000-512000000>;;Burst value in bytes";
+                range "1000..512000000";
+              }
+            }
+          }
+        }
+        list action-list {
+          tailf:cli-drop-node-name;
+          tailf:cli-suppress-mode;
+          key "action-type";
+          ordered-by user;
+          leaf action-type {
+            type policy-action-type;
+          }
+          choice action-param {
+            case bandwidth-case {
+              container bandwidth {
+                tailf:cli-drop-node-name;
+                when "../action-type = 'bandwidth'";
+                leaf bits {
+                  tailf:cli-drop-node-name;
+                  type uint32 {
+                    range "8..2000000";
+                    tailf:info "<8-2000000>;;Kilo Bits per second";
+                  }
+                }
+                leaf percent {
+                  tailf:info "% of total Bandwidth";
+                  description
+                    "% of total Bandwidth";
+                  type percentage-type;
+                }
+                container remaining {
+                  tailf:info "% of the remaining bandwidth";
+                  description
+                    "% of the remaining bandwidth";
+                  leaf percent {
+                    tailf:info "% of the remaining bandwidth";
+                    description
+                      "% of the remaining bandwidth";
+                    type percentage-type;
+                  }
+                  leaf ratio {
+                    tailf:info "ratio for sharing excess bandwidth";
+                    description
+                      "ratio for sharing excess bandwidth";
+                    type uint16 {
+                      tailf:info "<1-65536>;;Ratio";
+                    }
+                  }
+                }
+              }
+            }
+            case compression-case {
+              container compression {
+                tailf:cli-drop-node-name;
+                when "../action-type = 'compression'";
+                container header {
+                  tailf:info "configure header compression";
+                  description
+                    "configure header compression";
+                  presence "configure header compression";
+                  leaf ip {
+                    tailf:info "configure ip header compression";
+                    description
+                      "configure ip header compression";
+                    type enumeration {
+                      enum "rtp" {
+                        tailf:code-name "header_rtp";
+                        tailf:info "configure rtp header compression";
+                      }
+                      enum "tcp" {
+                        tailf:info "configure tcp header compression";
+                      }
+                    }
+                  }
+                }
+              }
+            }
+            case estimate-case {
+              container estimate {
+                tailf:cli-drop-node-name;
+                when "../action-type = 'estimate'";
+                container bandwidth {
+                  presence "bandwidth required to service this class";
+                  tailf:info "bandwidth required to service this class";
+                  description
+                    "bandwidth required to service this class";
+                  tailf:cli-sequence-commands;
+                  tailf:cli-compact-syntax;
+                  container delay-one-in {
+                    tailf:info "specify QoS target delay";
+                    description
+                      "specify QoS target delay";
+                    tailf:cli-compact-syntax;
+                    tailf:cli-sequence-commands;
+                    leaf doi {
+                      tailf:cli-drop-node-name;
+                      tailf:cli-incomplete-command;
+                      type uint32 {
+                        range "50..1000000";
+                        tailf:info "<50-1000000>;;delay one packet of N";
+                      }
+                    }
+                    leaf milliseconds {
+                      type uint32 {
+                        range "8..1000" {
+                          tailf:info "<8-1000>;;worst-case milliseconds of delay";
+                        }
+                      }
+                    }
+                  }
+                  leaf drop-one-in {
+                    tailf:info "specify QoS target loss rate";
+                    description
+                      "specify QoS target loss rate";
+                    type uint32 {
+                      tailf:info "<50-1000000>;;drop one packet of N";
+                    }
+                  }
+                }
+              }
+            }
+            case forward-case {
+              container forward {
+                tailf:cli-reset-container;
+                tailf:cli-drop-node-name;
+                when "../action-type = 'forward'";
+                list service-path {
+                  tailf:info "Service Path Entries";
+                  description
+                    "Service Path Entries";
+                  tailf:cli-suppress-mode;
+                  key "service-path-id";
+                  leaf service-path-id {
+                    type uint32 {
+                      range "0..16777215";
+                      tailf:info "<0-16777215>;;Service Path ID";
+                    }
+                  }
+                  leaf service-index {
+                    tailf:info "Service Index";
+                    description
+                      "Service Index";
+                    type uint8 {
+                      range "2..255";
+                      tailf:info "<2-255>;;Service Index ID";
+                    }
+                  }
+                }
+              }
+            }
+            case fair-queue-case {
+              container fair-queue {
+                tailf:cli-reset-container;
+                tailf:cli-drop-node-name;
+                when "../action-type = 'fair-queue'";
+                leaf dynamic-queues {
+                  tailf:cli-drop-node-name;
+                  tailf:cli-full-command;
+                  type uint32 {
+                    range "16|32|64|128|256|512|1024|2048|4096" {
+                      tailf:info "<16-4096>;;Number Dynamic Conversation Queues";
+                    }
+                  }
+                }
+                leaf queue-limit {
+                  tailf:info "per flow queue limit";
+                  description
+                    "per flow queue limit";
+                  tailf:cli-full-command;
+                  type uint16 {
+                    tailf:info "<1-32768>;;packets";
+                    range "1..32768";
+                  }
+                }
+              }
+            }
+            case netflow-sampler-case {
+              leaf netflow-sampler {
+                tailf:cli-drop-node-name;
+                tailf:cli-full-command;
+                when "../action-type = 'netflow-sampler'";
+                type string {
+                  tailf:info "WORD;;Name of the flow sampler";
+                }
+              }
+            }
+            case police-case {
+              choice police-choice {
+                case police-aggregate-case {
+                  container police-aggregate {
+                    tailf:cli-no-keyword;
+                    tailf:cli-drop-node-name;
+                    container police {
+                      tailf:cli-drop-node-name;
+                      when "../../action-type = 'police'" {
+                        tailf:dependency "../../action-type";
+                      }
+                      leaf aggregate {
+                        tailf:info "Choose aggregate policer for current class";
+                        description
+                          "Choose aggregate policer for current class";
+                        type string {
+                          tailf:info "WORD;;enter aggregate-policer name";
+                        }
+                      }
+                    }
+                  }
+                }
+                case police-policy-map-case {
+                  container police-policy-map {
+                    tailf:cli-no-keyword;
+                    tailf:cli-drop-node-name;
+                    container police {
+                      tailf:cli-add-mode;
+                      tailf:cli-mode-name "config-pmap-c-police";
+                      tailf:cli-flatten-container;
+                      tailf:cli-sequence-commands {
+                        tailf:cli-reset-siblings;
+                      }
+                      tailf:cli-drop-node-name;
+                      when "../../action-type = 'police'" {
+                        tailf:dependency "../../action-type";
+                      }
+                      leaf cir {
+                        tailf:info "Committed information rate";
+                        description
+                          "Committed information rate";
+                        tailf:cli-hide-in-submode;
+                        type police-bps-type;
+                      }
+                      leaf bc {
+                        tailf:info "Conform burst";
+                        description
+                          "Conform burst";
+                        tailf:cli-optional-in-sequence;
+                        tailf:cli-hide-in-submode;
+                        type police-burst-type;
+                      }
+                      leaf be {
+                        when "../bc";
+                        tailf:info "Excess burst";
+                        description
+                          "Excess burst";
+                        tailf:cli-optional-in-sequence;
+                        tailf:cli-hide-in-submode;
+                        type police-burst-type;
+                      }
+                      leaf pir {
+                        tailf:info "Peak Information Rate";
+                        description
+                          "Peak Information Rate";
+                        tailf:cli-optional-in-sequence;
+                        tailf:cli-hide-in-submode;
+                        type police-bps-type;
+                      }
+                      container pir-be {
+                        when "../pir";
+                        tailf:cli-no-keyword;
+                        tailf:cli-drop-node-name;
+                        tailf:cli-optional-in-sequence;
+                        tailf:cli-flatten-container;
+                        tailf:cli-hide-in-submode;
+                        leaf be {
+                          tailf:info "Excess burst";
+                          description
+                            "Excess burst";
+                          type police-burst-type;
+                        }
+                      }
+                      uses police-action-grouping;
+                    }
+                  }
+                }
+                case police-cir-percent-case {
+                  container police-cir-percent {
+                    tailf:cli-no-keyword;
+                    tailf:cli-drop-node-name;
+                    container police {
+                      tailf:cli-drop-node-name;
+                      when "../../action-type = 'police'" {
+                        tailf:dependency "../../action-type";
+                      }
+                      container cir {
+                        tailf:info "Committed information rate";
+                        description
+                          "Committed information rate";
+                        container percent {
+                          tailf:info "% of interface bandwidth for Committed information rate";
+                          description
+                            "% of interface bandwidth for Committed information rate";
+                          tailf:cli-add-mode;
+                          tailf:cli-mode-name "config-pmap-c-police";
+                          tailf:cli-incomplete-command;
+                          tailf:cli-flatten-container;
+                          tailf:cli-sequence-commands {
+                            tailf:cli-reset-siblings;
+                          }
+                          leaf percentage {
+                            tailf:cli-drop-node-name;
+                            tailf:cli-hide-in-submode;
+                            type percentage-type;
+                          }
+                          leaf bc {
+                            tailf:info "Conform burst";
+                            description
+                              "Conform burst";
+                            tailf:cli-optional-in-sequence;
+                            tailf:cli-hide-in-submode;
+                            type uint16 {
+                              tailf:info "<1-2000>;;Burst ms";
+                            }
+                          }
+                          container bc-ms {
+                            when "../bc";
+                            tailf:cli-no-keyword;
+                            tailf:cli-drop-node-name;
+                            tailf:cli-optional-in-sequence;
+                            tailf:cli-hide-in-submode;
+                            tailf:cli-compact-syntax;
+                            tailf:cli-flatten-container;
+                            leaf ms {
+                              tailf:info "Milli seconds";
+                              description
+                                "Milli seconds";
+                              tailf:cli-no-keyword;
+                              type empty;
+                            }
+                          }
+                          leaf be {
+                            when "../bc-ms/ms" {
+                              tailf:dependency "../bc-ms/ms";
+                            }
+                            tailf:info "Excess burst";
+                            tailf:cli-optional-in-sequence;
+                            tailf:cli-hide-in-submode;
+                            type uint16 {
+                              tailf:info "<1-2000>;;Burst ms";
+                            }
+                          }
+                          container be-ms {
+                            when "../be";
+                            tailf:cli-no-keyword;
+                            tailf:cli-drop-node-name;
+                            tailf:cli-hide-in-submode;
+                            tailf:cli-compact-syntax;
+                            tailf:cli-flatten-container;
+                            leaf ms {
+                              tailf:info "Milli seconds";
+                              description
+                                "Milli seconds";
+                              tailf:cli-no-keyword;
+                              type empty;
+                            }
+                          }
+                          container pir {
+                            tailf:info "Peak Information Rate";
+                            description
+                              "Peak Information Rate";
+                            tailf:cli-compact-syntax;
+                            tailf:cli-flatten-container;
+                            tailf:cli-hide-in-submode;
+                            tailf:cli-optional-in-sequence;
+                            leaf percent {
+                              tailf:info "% of interface bandwidth for Peak Information Rate";
+                              description
+                                "% of interface bandwidth for Peak Information Rate";
+                              type percentage-type;
+                            }
+                          }
+                          container pir-be {
+                            when "../pir";
+                            tailf:cli-no-keyword;
+                            tailf:cli-drop-node-name;
+                            tailf:cli-optional-in-sequence;
+                            tailf:cli-flatten-container;
+                            tailf:cli-hide-in-submode;
+                            leaf be {
+                              tailf:info "Excess burst";
+                              description
+                                "Excess burst";
+                              type uint16 {
+                                tailf:info "<1-2000>;;Burst ms";
+                              }
+                            }
+                          }
+                          container pir-be-ms {
+                            when "../pir-be/be" {
+                              tailf:dependency "../pir-be/be";
+                            }
+                            tailf:cli-no-keyword;
+                            tailf:cli-drop-node-name;
+                            tailf:cli-optional-in-sequence;
+                            tailf:cli-hide-in-submode;
+                            tailf:cli-flatten-container;
+                            leaf ms {
+                              tailf:info "Milli seconds";
+                              description
+                                "Milli seconds";
+                              tailf:cli-no-keyword;
+                              type empty;
+                            }
+                          }
+                          uses police-action-grouping;
+                        }
+                      }
+                    }
+                  }
+                }
+                case police-rate-unit-case {
+                  container police-rate-unit {
+                    tailf:cli-no-keyword;
+                    tailf:cli-drop-node-name;
+                    container police {
+                      tailf:cli-drop-node-name;
+                      when "../../action-type = 'police'" {
+                        tailf:dependency "../../action-type";
+                      }
+                      container rate {
+                        tailf:info "Specify police rate";
+                        description
+                          "Specify police rate";
+                        tailf:cli-add-mode;
+                        tailf:cli-mode-name "config-pmap-c-police";
+                        tailf:cli-flatten-container;
+                        tailf:cli-sequence-commands {
+                          tailf:cli-reset-siblings;
+                        }
+                        leaf units {
+                          tailf:cli-drop-node-name;
+                          tailf:cli-hide-in-submode;
+                          type uint64 {
+                            tailf:info "<1-2000000000>;;Rate value in the range 8000-2,000,000,000 bps or 1-2,000,000 pps";
+                          }
+                        }
+                        leaf xps {
+                          tailf:cli-no-keyword;
+                          tailf:cli-drop-node-name;
+                          tailf:cli-hide-in-submode;
+                          type police-pps-bps-type;
+                        }
+                        container burst {
+                          tailf:info "Specify 'burst' parameter";
+                          description
+                            "Specify 'burst' parameter";
+                          tailf:cli-optional-in-sequence;
+                          tailf:cli-compact-syntax;
+                          tailf:cli-hide-in-submode;
+                          tailf:cli-flatten-container;
+                          tailf:cli-sequence-commands;
+                          leaf burst-value {
+                            tailf:cli-no-keyword;
+                            tailf:cli-drop-node-name;
+                            tailf:cli-incomplete-command;
+                            type uint32 {
+                              tailf:info "<1-512000000>;;Burst value in packets/bytes";
+                            }
+                          }
+                          leaf burst-type {
+                            tailf:cli-no-keyword;
+                            tailf:cli-drop-node-name;
+                            tailf:cli-hide-in-submode;
+                            type police-packets-bytes-type;
+                          }
+                        }
+                        container peak-rate {
+                          tailf:info "Specify peak rate";
+                          description
+                            "Specify peak rate";
+                          tailf:cli-optional-in-sequence;
+                          tailf:cli-compact-syntax;
+                          tailf:cli-flatten-container;
+                          tailf:cli-hide-in-submode;
+                          tailf:cli-sequence-commands;
+                          leaf peak-rate-value {
+                            tailf:cli-no-keyword;
+                            tailf:cli-drop-node-name;
+                            tailf:cli-incomplete-command;
+                            type uint32 {
+                              tailf:info "<1-512000000>;;Peak-rate value in packets or bytes per second";
+                              range "1..512000000";
+                            }
+                          }
+                          leaf xps {
+                            tailf:cli-no-keyword;
+                            tailf:cli-drop-node-name;
+                            type police-pps-bps-type;
+                          }
+                        }
+                        container peak-burst {
+                          tailf:info "Specify 'peak-burst' parameter for peak-rate";
+                          description
+                            "Specify 'peak-burst' parameter for peak-rate";
+                          tailf:cli-optional-in-sequence;
+                          tailf:cli-compact-syntax;
+                          tailf:cli-flatten-container;
+                          tailf:cli-hide-in-submode;
+                          tailf:cli-sequence-commands;
+                          leaf burst-value {
+                            tailf:cli-no-keyword;
+                            tailf:cli-drop-node-name;
+                            tailf:cli-incomplete-command;
+                            type uint32 {
+                              tailf:info "<1-512000000>;;Burst value in packets/bytes";
+                            }
+                          }
+                          leaf burst-type {
+                            tailf:cli-no-keyword;
+                            tailf:cli-drop-node-name;
+                            type police-packets-bytes-type;
+                          }
+                        }
+                        uses police-action-grouping;
+                      }
+                    }
+                  }
+                }
+                case police-rate-percent-case {
+                  container police-rate-percent {
+                    tailf:cli-no-keyword;
+                    tailf:cli-drop-node-name;
+                    container police {
+                      tailf:cli-drop-node-name;
+                      when "../../action-type = 'police'" {
+                        tailf:dependency "../../action-type";
+                      }
+                      container rate {
+                        tailf:info "Specify police rate";
+                        description
+                          "Specify police rate";
+                        container percent {
+                          tailf:info "% of interface bandwidth for rate";
+                          description
+                            "% of interface bandwidth for rate";
+                          tailf:cli-add-mode;
+                          tailf:cli-mode-name "config-pmap-c-police";
+                          tailf:cli-flatten-container;
+                          tailf:cli-sequence-commands {
+                            tailf:cli-reset-siblings;
+                          }
+                          leaf percentage {
+                            tailf:cli-drop-node-name;
+                            tailf:cli-hide-in-submode;
+                            type percentage-type;
+                          }
+                          leaf burst {
+                            tailf:info "Specify 'burst' parameter";
+                            description
+                              "Specify 'burst' parameter";
+                            tailf:cli-optional-in-sequence;
+                            tailf:cli-hide-in-submode;
+                            type uint16 {
+                              tailf:info "<1-2000>;;Burst value in milliseconds";
+                            }
+                          }
+                          leaf ms {
+                            when "../burst";
+                            tailf:info "Treat 'burst' value in milliseconds";
+                            description
+                              "Treat 'burst' value in milliseconds";
+                            tailf:cli-hide-in-submode;
+                            type empty;
+                          }
+                          container peak-rate {
+                            tailf:info "Specify peak rate";
+                            description
+                              "Specify peak rate";
+                            tailf:cli-hide-in-submode;
+                            tailf:cli-optional-in-sequence;
+                            tailf:cli-flatten-container;
+                            leaf percent {
+                              tailf:info "% of interface bandwidth for peak-rate";
+                              description
+                                "% of interface bandwidth for peak-rate";
+                              type percentage-type;
+                            }
+                          }
+                          leaf peak-burst {
+                            tailf:info "Specify 'peak-burst' parameter for 'peak-rate'";
+                            description
+                              "Specify 'peak-burst' parameter for 'peak-rate'";
+                            tailf:cli-hide-in-submode;
+                            tailf:cli-optional-in-sequence;
+                            type uint16 {
+                              tailf:info "<1-2000>;;Peak burst value in milliseconds";
+                            }
+                          }
+                          container peak-burst-ms {
+                            when "../peak-burst";
+                            tailf:cli-no-keyword;
+                            tailf:cli-drop-node-name;
+                            tailf:cli-optional-in-sequence;
+                            tailf:cli-hide-in-submode;
+                            tailf:cli-flatten-container;
+                            leaf ms {
+                              tailf:info "Milli seconds";
+                              description
+                                "Milli seconds";
+                              tailf:cli-no-keyword;
+                              type empty;
+                            }
+                          }
+                          uses police-action-grouping;
+                        }
+                      }
+                    }
+                  }
+                }
+                case police-rate-pdp-case {
+                  container police-rate-pdp {
+                    tailf:cli-no-keyword;
+                    tailf:cli-drop-node-name;
+                    container police {
+                      tailf:cli-drop-node-name;
+                      when "../../action-type = 'police'" {
+                        tailf:dependency "../../action-type";
+                      }
+                      container rate {
+                        tailf:info "Specify police rate";
+                        description
+                          "Specify police rate";
+                        container pdp {
+                          tailf:info "% of interface bandwidth for rate";
+                          description
+                            "% of interface bandwidth for rate";
+                          tailf:cli-add-mode;
+                          tailf:cli-mode-name "config-pmap-c-police";
+                          tailf:cli-flatten-container;
+                          tailf:cli-sequence-commands {
+                            tailf:cli-reset-siblings;
+                          }
+                          leaf burst {
+                            tailf:info "Conform burst";
+                            description
+                              "Conform burst";
+                            tailf:cli-hide-in-submode;
+                            tailf:cli-optional-in-sequence;
+                            type police-burst-type;
+                          }
+                          leaf peak-rate {
+                            tailf:info "Specify peak rate";
+                            description
+                              "Specify peak rate";
+                            tailf:cli-hide-in-submode;
+                            tailf:cli-optional-in-sequence;
+                            type enumeration {
+                              enum "pdp";
+                            }
+                          }
+                          leaf peak-burst {
+                            when "../peak-rate";
+                            tailf:info "Specify 'peak-burst' parameter for 'peak-rate'";
+                            description
+                              "Specify 'peak-burst' parameter for 'peak-rate'";
+                            tailf:cli-hide-in-submode;
+                            tailf:cli-optional-in-sequence;
+                            type police-burst-type;
+                          }
+                          uses police-action-grouping;
+                        }
+                      }
+                    }
+                  }
+                }
+                case police-target-bitrate-case {
+                  container police-target-bitrate {
+                    tailf:cli-no-keyword;
+                    tailf:cli-drop-node-name;
+                    container police {
+                      tailf:cli-drop-node-name;
+                      when "../../action-type = 'police'" {
+                        tailf:dependency "../../action-type";
+                      }
+                      tailf:cli-add-mode;
+                      tailf:cli-mode-name "config-pmap-c-police";
+                      leaf bit-rate {
+                        tailf:info
+                          "Target bit rate (bits per second) (postfix k, m, g optional),
+                           decimal point allowed";
+                        description
+                          "Target bit rate (bits per second) (postfix k, m, g optional),
+                           decimal point allowed";
+                        tailf:cli-no-keyword;
+                        tailf:cli-drop-node-name;
+                        tailf:cli-hide-in-submode;
+                        type uint64 {
+                          tailf:info "<8000-10000000000>;;Target bit rate (bits per second)";
+                          range "8000..10000000000";
+                        }
+                      }
+                      uses police-action-grouping;
+                    }
+                  }
+                }
+                case police-flow-case {
+                  container police-flow {
+                    tailf:cli-no-keyword;
+                    tailf:cli-drop-node-name;
+                    container police {
+                      tailf:cli-drop-node-name;
+                      when "../../action-type = 'police'" {
+                        tailf:dependency "../../action-type";
+                      }
+                      container flow {
+                        tailf:info "police each flow";
+                        description
+                          "police each flow";
+                        tailf:cli-add-mode;
+                        tailf:cli-mode-name "config-pmap-c-police";
+                        tailf:cli-flatten-container;
+                        tailf:cli-sequence-commands {
+                          tailf:cli-reset-siblings;
+                        }
+                        leaf mask {
+                          tailf:info "flow mask to be used for policing";
+                          description
+                            "flow mask to be used for policing";
+                          tailf:cli-hide-in-submode;
+                          tailf:cli-optional-in-sequence;
+                          type enumeration {
+                            enum "dest-only" {
+                              tailf:info "destination-address only flow mask";
+                            }
+                            enum "full-flow" {
+                              tailf:info "full flow mask";
+                            }
+                            enum "src-only" {
+                              tailf:info "source-address only flow mask";
+                            }
+                          }
+                        }
+                        leaf bps {
+                          tailf:cli-drop-node-name;
+                          tailf:cli-hide-in-submode;
+                          type police-bps-type;
+                        }
+                        leaf burst-normal {
+                          when "../bps";
+                          tailf:cli-drop-node-name;
+                          tailf:cli-hide-in-submode;
+                          tailf:cli-optional-in-sequence;
+                          type police-burst-type;
+                        }
+                        uses police-action-grouping;
+                      }
+                    }
+                  }
+                }
+                case police-catalyst-case {
+                  container police-catalyst {
+                    tailf:cli-no-keyword;
+                    tailf:cli-drop-node-name;
+                    container police {
+                      tailf:cli-add-mode;
+                      tailf:cli-mode-name "config-pmap-c-police";
+                      tailf:cli-flatten-container;
+                      tailf:cli-drop-node-name;
+                      when "../../action-type = 'police'" {
+                        tailf:dependency "../../action-type";
+                      }
+                      tailf:cli-sequence-commands {
+                        tailf:cli-reset-siblings;
+                      }
+                      leaf bps-value {
+                        tailf:cli-no-keyword;
+                        tailf:cli-drop-node-name;
+                        tailf:cli-hide-in-submode;
+                        tailf:cli-incomplete-command;
+                        type string {
+                          tailf:info "<32000-32000000000>;;Rate in bits per second (postfix k, m, g optional; decimal point allowed)";
+                        }
+                      }
+                      leaf bps {
+                        tailf:cli-hide-in-submode;
+                        tailf:cli-incomplete-command;
+                        type empty;
+                      }
+                      leaf byte-value {
+                        tailf:cli-no-keyword;
+                        tailf:cli-drop-node-name;
+                        tailf:cli-hide-in-submode;
+                        tailf:cli-incomplete-command;
+                        type string {
+                          tailf:info "<32000-32000000000>;;(postfix k, m, g optional; decimal point allowed)";
+                        }
+                      }
+                      leaf byte {
+                        tailf:cli-hide-in-submode;
+                        type empty;
+                      }
+                      container actions {
+                        tailf:cli-no-keyword;
+                        tailf:cli-break-sequence-commands;
+                        tailf:cli-drop-node-name;
+                        tailf:cli-flatten-container;
+                        tailf:cli-hide-in-submode;
+                        uses police-conform-action-grouping;
+                        uses police-exceed-action-grouping;
+                        uses police-violate-action-grouping;
+                      }
+                    }
+                  }
+                }
+                case police-switch-case {
+                  container police-switch {
+                    tailf:cli-no-keyword;
+                    tailf:cli-drop-node-name;
+                    container police {
+                      tailf:cli-compact-syntax;
+                      tailf:cli-drop-node-name;
+                      when "../../action-type = 'police'" {
+                        tailf:dependency "../../action-type";
+                      }
+                      tailf:cli-sequence-commands {
+                        tailf:cli-reset-siblings;
+                      }
+                      leaf cir {
+                        tailf:cli-incomplete-command;
+                        tailf:cli-drop-node-name;
+                        type uint32 {
+                          tailf:info "<8000-1000000000>;;Bits per second";
+                          range "8000..1000000000";
+                        }
+                      }
+                      leaf bc {
+                        tailf:cli-drop-node-name;
+                        type uint32 {
+                          tailf:info "<8000-2000000>;;Normal burst bytes";
+                          range "8000..2000000";
+                        }
+                      }
+                      leaf exceed-action {
+                        tailf:info "action when rate is exceeded";
+                        description
+                          "action when rate is exceeded";
+                        type enumeration {
+                          enum "drop" {
+                            tailf:info "drop packet";
+                          }
+                          enum "policed-dscp-transmit" {
+                            tailf:info "change dscp per policed-dscp map and send it";
+                          }
+                        }
+                      }
+                    }
+                  }
+                }
+              }
+            }
+            case priority-case {
+              container priority {
+                tailf:cli-compact-syntax;
+                tailf:cli-sequence-commands;
+                tailf:cli-drop-node-name;
+                when "../action-type = 'priority'";
+                leaf level {
+                  tailf:info "Multi-Level Priority Queue";
+                  description
+                    "Multi-Level Priority Queue";
+                  tailf:cli-optional-in-sequence;
+                  type uint8 {
+                    tailf:info "<1-2>;;Multi-Level Priority Queue";
+                    range "1..2";
+                  }
+                }
+                choice priority-type {
+                  leaf kilo-bits {
+                    tailf:cli-drop-node-name;
+                    type uint32 {
+                      range "8..2000000";
+                      tailf:info "<8-2000000>;;Kilo Bits per second";
+                    }
+                  }
+                  leaf percent {
+                    tailf:info "% of total bandwidth";
+                    description
+                      "% of total bandwidth";
+                    type uint16 {
+                      range "1..100";
+                      tailf:info "<1-100>;;percentage";
+                    }
+                  }
+                }
+                leaf burst {
+                  tailf:cli-drop-node-name;
+                  type uint32 {
+                    tailf:info "<32-64000000>;;Burst in bytes";
+                    range "32..64000000";
+                  }
+                }
+              }
+            }
+            case queue-buffers-case {
+              container queue-buffers {
+                tailf:cli-drop-node-name;
+                when "../action-type = 'queue-buffers'";
+                leaf ratio {
+                  tailf:info "Relative buffer size for queue";
+                  description
+                    "Relative buffer size for queue";
+                  type uint8 {
+                    tailf:info "<0-100>;;Queue-buffers ratio limit";
+                    range "0..100";
+                  }
+                }
+              }
+            }
+            case queue-limit-case {
+              container queue-limit {
+                tailf:cli-compact-syntax;
+                tailf:cli-sequence-commands {
+                  tailf:cli-reset-siblings;
+                }
+                tailf:cli-drop-node-name;
+                when "../action-type = 'queue-limit'";
+                leaf queue-limit-value {
+                  tailf:cli-drop-node-name;
+                  type uint32 {
+                    tailf:info "<1-8192000>  in bytes, <1-3400> in ms, <1-32768> in packets by default";
+                    range "1..8192000";
+                  }
+                }
+                leaf queue-limit-type {
+                  tailf:cli-drop-node-name;
+                  type enumeration {
+                    enum "bytes" {
+                      tailf:info "in bytes";
+                    }
+                    enum "ms" {
+                      tailf:info "in milliseconds";
+                    }
+                    enum "packets" {
+                      tailf:info "in packets";
+                    }
+                    enum "us" {
+                      tailf:info "in microseconds";
+                    }
+                  }
+                }
+              }
+              container queue-limit-dscp {
+                tailf:cli-compact-syntax;
+                tailf:cli-drop-node-name;
+                when "../action-type = 'queue-limit'";
+                leaf dscp {
+                  tailf:info "parameters for each dscp value";
+                  description
+                    "parameters for each dscp value";
+                  type empty;
+                }
+                leaf values {
+                  tailf:info "dscp values";
+                  description
+                    "dscp values";
+                  type empty;
+                }
+                leaf-list sdcp-val {
+                  tailf:cli-drop-node-name;
+                  type dscp-type;
+                }
+                leaf percent {
+                  tailf:info "% of threshold";
+                  description
+                    "% of threshold";
+                  type uint8 {
+                    tailf:info "<0-100>;;% of threshold";
+                    range "0..100";
+                  }
+                }
+              }
+            }
+            case random-detect {
+              container random-detect {
+                tailf:cli-drop-node-name;
+                when "../action-type = 'random-detect'";
+                container aggregate {
+                  tailf:info "aggregate subclasses";
+                  description
+                    "aggregate subclasses";
+                  tailf:cli-compact-syntax;
+                  tailf:cli-sequence-commands {
+                    tailf:cli-reset-siblings;
+                  }
+                  presence "true";
+                  leaf minimum-thresh {
+                    tailf:info "minimum threshold for red aggregate";
+                    description
+                      "minimum threshold for red aggregate";
+                    type uint32 {
+                      tailf:info "<0-1000000>;;minimum threshold (number of packets)";
+                      range "0..1000000";
+                    }
+                  }
+                  leaf maximum-thresh {
+                    tailf:info "maximum threshold for red aggregate";
+                    description
+                      "maximum threshold for red aggregate";
+                    type uint32 {
+                      tailf:info "<0-1000000>;;maximum threshold (number of packets)";
+                      range "0..1000000";
+                    }
+                  }
+                  leaf mark-probability {
+                    tailf:info "mark-probability for red aggregate";
+                    description
+                      "mark-probability for red aggregate";
+                    type empty;
+                  }
+                  leaf denominator {
+                    tailf:cli-drop-node-name;
+                    type uint32 {
+                      tailf:info "<0-65535>;;mark probability denominator";
+                      range "0..65535";
+                    }
+                  }
+                }
+                container discard-class {
+                  tailf:info "parameters for each discard-class value";
+                  description
+                    "parameters for each discard-class value";
+                  tailf:cli-compact-syntax;
+                  tailf:cli-sequence-commands;
+                  leaf dclass {
+                    tailf:cli-drop-node-name;
+                    tailf:cli-incomplete-command;
+                    type uint16 {
+                      range "0..7";
+                      tailf:info "<0-7>;;discard-class value";
+                    }
+                  }
+                  uses random-detect-grouping;
+                }
+                leaf discard-class-based {
+                  tailf:info "Enable discard-class-based WRED as drop policy";
+                  description
+                    "Enable discard-class-based WRED as drop policy";
+                  tailf:cli-full-command;
+                  type empty;
+                }
+                leaf dscp-based {
+                  tailf:info "Enable dscp-based WRED as drop policy";
+                  description
+                    "Enable dscp-based WRED as drop policy";
+                  tailf:cli-full-command;
+                  type empty;
+                }
+                list dscp {
+                  tailf:info "parameters for each dscp value";
+                  description
+                    "parameters for each dscp value";
+                  tailf:cli-suppress-mode;
+                  tailf:cli-compact-syntax;
+                  tailf:cli-sequence-commands;
+                  key "dscp-val";
+                  leaf dscp-val {
+                    type dscp-type;
+                  }
+                  uses random-detect-grouping;
+                }
+                leaf ecn {
+                  tailf:info "explicit congestion notification";
+                  description
+                    "explicit congestion notification";
+                  tailf:cli-full-command;
+                  type empty;
+                }
+                leaf exponential-weighting-constant {
+                  tailf:info "weight for mean queue depth calculation";
+                  description
+                    "weight for mean queue depth calculation";
+                  tailf:cli-full-command;
+                  type uint16 {
+                    range "1..16";
+                    tailf:info "<1-16>;;integer in 1..16 used in weighted average to mean 2^number";
+                  }
+                }
+                leaf prec-based {
+                  tailf:info "Enable precedence-based WRED as drop policy";
+                  description
+                    "Enable precedence-based WRED as drop policy";
+                  tailf:cli-full-command;
+                  type empty;
+                }
+                container precedence {
+                  tailf:info "parameters for each precedence value";
+                  description
+                    "parameters for each precedence value";
+                  tailf:cli-sequence-commands;
+                  tailf:cli-compact-syntax;
+                  leaf prec {
+                    tailf:cli-drop-node-name;
+                    tailf:cli-incomplete-command;
+                    type precedence-type2;
+                  }
+                  uses random-detect-grouping;
+                }
+              }
+            }
+            case service-policy-case {
+              leaf service-policy {
+                tailf:cli-full-command;
+                tailf:cli-drop-node-name;
+                when "../action-type = 'service-policy'";
+                type string;
+                tailf:non-strict-leafref {
+                  path "/ios:native/policy-map/name";
+                }
+              }
+            }
+            case set-case {
+              container set {
+                tailf:cli-drop-node-name;
+                when "../action-type = 'set'";
+                leaf atm-clp {
+                  tailf:info "Set ATM CLP bit to 1";
+                  description
+                    "Set ATM CLP bit to 1";
+                  tailf:cli-full-command;
+                  type empty;
+                }
+                container cos {
+                  tailf:info "Set IEEE 802.1Q/ISL class of service/user priority";
+                  description
+                    "Set IEEE 802.1Q/ISL class of service/user priority";
+                  tailf:cli-compact-syntax;
+                  tailf:cli-sequence-commands;
+                  choice cos-type {
+                    case a {
+                      leaf val {
+                        tailf:cli-drop-node-name;
+                        type uint16 {
+                          range "0..7";
+                          tailf:info "<0-7>;;cos value";
+                        }
+                      }
+                    }
+                    case b {
+                      leaf pack {
+                        tailf:cli-drop-node-name;
+                        type enumeration {
+                          enum "dscp" {
+                            tailf:code-name "pack_dscp";
+                            tailf:info "Set value from packet dscp";
+                          }
+                          enum "precedence" {
+                            tailf:code-name "pack_precedence";
+                            tailf:info "Set value from packet precedence.";
+                          }
+                        }
+                      }
+                      leaf table {
+                        tailf:info "Set codepoint value based on tablemap.";
+                        description
+                          "Set codepoint value based on tablemap.";
+                        type string {
+                          tailf:info "WORD;;table-map name";
+                        }
+                        tailf:non-strict-leafref {
+                          path "/ios:native/table-map/name";
+                        }
+                      }
+                    }
+                  }
+                }
+                leaf discard-class {
+                  tailf:info "Discard behavior identifier";
+                  description
+                    "Discard behavior identifier";
+                  tailf:cli-full-command;
+                  type uint16 {
+                    range "0..7";
+                    tailf:info "<0-7>;;Discard Class value";
+                  }
+                }
+                container dscp {
+                  tailf:info "Set DSCP in IP(v4) and IPv6 packets";
+                  description
+                    "Set DSCP in IP(v4) and IPv6 packets";
+                  tailf:cli-compact-syntax;
+                  leaf tunnel {
+                    tailf:info "set tunnel packet dscp";
+                    description
+                      "set tunnel packet dscp";
+                    type empty;
+                  }
+                  leaf dscp-val {
+                    tailf:cli-drop-node-name;
+                    type dscp-type;
+                  }
+                }
+                leaf fr-de {
+                  tailf:info "Set FR DE bit to 1";
+                  description
+                    "Set FR DE bit to 1";
+                  tailf:cli-full-command;
+                  type empty;
+                }
+                container ip {
+                  tailf:info "Set IP specific values";
+                  description
+                    "Set IP specific values";
+                  choice ip-choice {
+                    container dscp {
+                      tailf:info "Set IP DSCP (DiffServ CodePointint)";
+                      description
+                        "Set IP DSCP (DiffServ CodePointint)";
+                      tailf:cli-compact-syntax;
+                      leaf tunnel {
+                        tailf:info "set tunnel packet dscp";
+                        description
+                          "set tunnel packet dscp";
+                        type empty;
+                      }
+                      leaf dscp-val {
+                        tailf:cli-drop-node-name;
+                        type dscp-type;
+                      }
+                    }
+                    container precedence {
+                      tailf:info "Set IP precedence";
+                      description
+                        "Set IP precedence";
+                      presence "Set IP precedence";
+                      leaf precedence-val {
+                        tailf:cli-drop-node-name;
+                        type precedence-type;
+                      }
+                    }
+                  }
+                }
+                container mpls {
+                  tailf:info "Set MPLS specific values";
+                  description
+                    "Set MPLS specific values";
+                  container experimental {
+                    tailf:info "Set Experimental value";
+                    description
+                      "Set Experimental value";
+                    container imposition {
+                      tailf:info "Set Experimental value at tag imposition";
+                      description
+                        "Set Experimental value at tag imposition";
+                      leaf exp-value {
+                        tailf:cli-drop-node-name;
+                        tailf:cli-full-command;
+                        type uint8 {
+                          tailf:info "<0-7>;;Experimental value";
+                          range "0..7";
+                        }
+                      }
+                    }
+                    container topmost {
+                      tailf:info "Set Experimental value  on topmost label";
+                      description
+                        "Set Experimental value  on topmost label";
+                      leaf exp-value {
+                        tailf:cli-drop-node-name;
+                        tailf:cli-full-command;
+                        type uint8 {
+                          tailf:info "<0-7>;;Experimental value";
+                          range "0..7";
+                        }
+                      }
+                    }
+                  }
+                }
+                container qos-group {
+                  tailf:info "Set QoS Group";
+                  description
+                    "Set QoS Group";
+                  leaf qos-group-value {
+                    tailf:cli-drop-node-name;
+                    tailf:cli-full-command;
+                    type uint8 {
+                      range "0..99";
+                    }
+                  }
+                }
+              }
+            }
+            case shape-case {
+              container shape {
+                tailf:cli-drop-node-name;
+                when "../action-type = 'shape'";
+                leaf adaptive {
+                  tailf:info "Enable Traffic Shaping adaptation to BECN";
+                  description
+                    "Enable Traffic Shaping adaptation to BECN";
+                  tailf:cli-full-command;
+                  type uint32 {
+                    range "8000..154400000";
+                    tailf:info "<8000-154400000>;;Lower Bound Target Bit Rate (bits per second)";
+                  }
+                }
+                container average {
+                  tailf:info "configure token bucket: CIR (bps) [Bc (bits) [Be (bits)]], send out Bc only per interval";
+                  description
+                    "configure token bucket: CIR (bps) [Bc (bits) [Be (bits)]], send out Bc only per interval";
+                  tailf:cli-sequence-commands;
+                  tailf:cli-compact-syntax;
+                  choice average-choice {
+                    case a {
+                      leaf bit-rate {
+                        tailf:cli-drop-node-name;
+                        type uint64 {
+                          tailf:info "<8000-max>;;Target Bit Rate (bits per second), the value needs to be a multiple of 8000";
+                        }
+                      }
+                      leaf bits-per-interval-sustained {
+                        tailf:cli-drop-node-name;
+                        type uint32 {
+                          range "256..154400000";
+                          tailf:info "<256-154400000>;;bits per interval, sustained. Needs to be multiple of 128. Recommend not to configure it, the algorithm will find out the best value";
+                        }
+                      }
+                      leaf bits-per-interval-excess {
+                        tailf:cli-drop-node-name;
+                        type uint32 {
+                          range "0..154400000";
+                          tailf:info "<0-154400000>;;bits per interval, excess. Needs to be multiple of 128. Bc will be used if you don't configure it.";
+                        }
+                      }
+                    }
+                    case b {
+                      leaf percent {
+                        tailf:info "% of interface bandwidth for Committed information rate";
+                        description
+                          "% of interface bandwidth for Committed information rate";
+                        type percentage-type;
+                      }
+                      leaf burst-size-sustained {
+                        tailf:cli-incomplete-command;
+                        tailf:cli-drop-node-name;
+                        type uint16 {
+                          range "10..2000";
+                          tailf:info "<10-2000>;;Sustained burst size in msec";
+                        }
+                      }
+                      leaf ms {
+                        tailf:info "milliseconds";
+                        description
+                          "milliseconds";
+                        type empty;
+                      }
+                      container bse {
+                        tailf:cli-drop-node-name;
+                        tailf:cli-flatten-container;
+                        tailf:cli-sequence-commands;
+                        tailf:cli-compact-syntax;
+                        leaf burst-size-excess {
+                          tailf:cli-incomplete-command;
+                          type uint16 {
+                            range "10..2000";
+                            tailf:info "<10-2000>;;Excess burst size in msec";
+                          }
+                        }
+                        leaf ms {
+                          tailf:info "milliseconds";
+                          description
+                            "milliseconds";
+                          type empty;
+                        }
+                      }
+                    }
+                  }
+                }
+                leaf fecn-adapt {
+                  tailf:info "Enable Traffic Shaping reflection of FECN as BECN";
+                  description
+                    "Enable Traffic Shaping reflection of FECN as BECN";
+                  tailf:cli-full-command;
+                  type empty;
+                }
+                container fr-voice-adapt {
+                  tailf:info "Enable rate adjustment depending on voice presence";
+                  description
+                    "Enable rate adjustment depending on voice presence";
+                  presence "Enable rate adjustment depending on voice presence";
+                  leaf deactivation {
+                    type uint16 {
+                      range "1..10000";
+                      tailf:info "<1-10000>;;de-activation delay in seconds";
+                    }
+                  }
+                }
+                leaf max-buffers {
+                  tailf:cli-full-command;
+                  tailf:info "Set Maximum Buffer Limit";
+                  description
+                    "Set Maximum Buffer Limit";
+                  type uint16 {
+                    range "1..4096";
+                    tailf:info "<1-4096>;;Maximum Buffer Limit";
+                  }
+                }
+              }
+            }
+            case trust-case {
+              leaf trust {
+                tailf:cli-drop-node-name;
+                when "../action-type = 'trust'";
+                type enumeration {
+                  enum "cos" {
+                    tailf:info "trust value for the class";
+                  }
+                  enum "dscp" {
+                    tailf:info "trust value for the class";
+                  }
+                  enum "ip-precedence" {
+                    tailf:info "trust value for the class";
+                  }
+                }
+              }
+            }
+          }
+        }
+      }
+      leaf description {
+        tailf:info "Policy-Map description";
+        description
+          "Policy-Map description";
+        tailf:cli-multi-value;
+        type string {
+          length "1..200";
+          tailf:info "LINE;;Description of this policy-map (up to 200 characters)";
+        }
+      }
+      leaf sequence-interval {
+        tailf:info "Enable sequence number capability";
+        description
+          "Enable sequence number capability";
+        when "../type = 'appnav'";
+        type uint16 {
+          tailf:info "<0-65535>;;Sequence Number Interval";
+        }
+      }
+    }
+    list pseudowire-class {
+      tailf:info "Pseudowire-class configuration";
+      description
+        "Pseudowire-class configuration";
+      tailf:cli-mode-name "config-pw-class";
+      tailf:cli-full-command;
+      key "name";
+      leaf name {
+        type string {
+          tailf:info "WORD;;Pseudowire-class name";
+        }
+      }
+      uses pseudowire-grouping;
+    }
+    container control-plane {
+      tailf:info "Configure control plane services";
+      description
+        "Configure control plane services";
+      tailf:cli-add-mode;
+      tailf:cli-mode-name "config-cp";
+      presence "true";
+      container service-policy {
+        leaf input {
+          tailf:info "Assign policy-map to the input of an interface";
+          description
+            "Assign policy-map to the input of an interface";
+          type string {
+            tailf:info "WORD;;Policy map name";
+          }
+          tailf:non-strict-leafref {
+            path "/ios:native/policy-map/name";
+          }
+        }
+        leaf output {
+          tailf:info "Assign policy-map to the output of an interface";
+          description
+            "Assign policy-map to the output of an interface";
+          type string {
+            tailf:info "WORD;;Policy map name";
+          }
+          tailf:non-strict-leafref {
+            path "/ios:native/policy-map/name";
+          }
+        }
+      }
+    }
+    leaf config-register {
+      tailf:info "Define the configuration register";
+      description
+        "Define the configuration register";
+      type string {
+        tailf:info "<0x0-0xFFFF>  Config register number";
+        pattern "[0-9xXa-fA-F].*";
+      }
+    }
+    container clock {
+      tailf:info "Configure time-of-day clock";
+      description
+        "Configure time-of-day clock";
+      container calendar-valid {
+        tailf:info "Calendar time is authoritative";
+        description
+          "Calendar time is authoritative";
+        presence "true";
+      }
+      container summer-time {
+        tailf:info "Configure summer (daylight savings) time";
+        description
+          "Configure summer (daylight savings) time";
+        tailf:cli-compact-syntax;
+        tailf:cli-sequence-commands {
+          tailf:cli-reset-siblings;
+        }
+        leaf zone {
+          tailf:cli-drop-node-name;
+          tailf:cli-incomplete-command;
+          tailf:cli-disallow-value "date|recurring";
+          type string {
+            tailf:info "WORD;;name of time zone in summer";
+          }
+        }
+        choice summer-choice {
+          case date-case {
+            leaf date {
+              tailf:info "Configure absolute summer time";
+              description
+                "Configure absolute summer time";
+              type empty;
+            }
+            leaf start-day {
+              tailf:cli-drop-node-name;
+              tailf:cli-incomplete-command;
+              tailf:cli-break-sequence-commands;
+              type uint8 {
+                tailf:info "<1-31>;;Date to start";
+                range "1..31";
+              }
+            }
+            leaf start-month {
+              tailf:cli-drop-node-name;
+              tailf:cli-incomplete-command;
+              tailf:cli-break-sequence-commands;
+              type month-type {
+                tailf:info "MONTH;;Month to start";
+              }
+            }
+            leaf start-year {
+              tailf:cli-drop-node-name;
+              tailf:cli-incomplete-command;
+              type uint32 {
+                tailf:info "<1993-2035>;;Year to start";
+                range "1993..2035";
+              }
+            }
+            leaf start-time {
+              tailf:cli-drop-node-name;
+              tailf:cli-incomplete-command;
+              type hhmm-type {
+                tailf:info "hh:mm;;Time to start (hh:mm)";
+              }
+            }
+            leaf date-end-day {
+              tailf:cli-drop-node-name;
+              tailf:cli-incomplete-command;
+              type uint8 {
+                tailf:info "<1-31>;;Date to start";
+                range "1..31";
+              }
+            }
+            leaf date-end-month {
+              tailf:cli-drop-node-name;
+              tailf:cli-incomplete-command;
+              type month-type {
+                tailf:info "MONTH;;Month to end";
+              }
+            }
+            leaf date-end-year {
+              tailf:cli-drop-node-name;
+              tailf:cli-incomplete-command;
+              type uint32 {
+                tailf:info "<1993-2035>;;Year to start";
+                range "1993..2035";
+              }
+            }
+            leaf date-end-time {
+              tailf:cli-drop-node-name;
+              type hhmm-type {
+                tailf:info "hh:mm;;Time to end (hh:mm)";
+              }
+            }
+            leaf offset {
+              tailf:cli-drop-node-name;
+              tailf:cli-optional-in-sequence;
+              type uint16 {
+                tailf:info "<1-1440>;;Offset to add in minutes";
+                range "1..1440";
+              }
+            }
+          }
+          case recurring-case {
+            leaf recurring {
+              tailf:info "Configure recurring summer time";
+              description
+                "Configure recurring summer time";
+              type empty;
+            }
+            leaf recurring-start {
+              tailf:cli-drop-node-name;
+              tailf:cli-incomplete-command;
+              type union {
+                type uint8 {
+                  tailf:info "<1-4>;;Week number to start";
+                  range "1..4";
+                }
+                type enumeration {
+                  enum "first" {
+                    tailf:info "First week of the month";
+                  }
+                  enum "last" {
+                    tailf:info "Last week of the month";
+                  }
+                }
+              }
+            }
+            leaf recurring-start-day {
+              tailf:cli-drop-node-name;
+              tailf:cli-incomplete-command;
+              type weekday-type {
+                tailf:info "DAY;;Weekday to start";
+              }
+            }
+            leaf recurring-start-month {
+              tailf:cli-drop-node-name;
+              tailf:cli-incomplete-command;
+              type month-type {
+                tailf:info "MONTH;;Month to start";
+              }
+            }
+            leaf recurring-start-time {
+              tailf:cli-drop-node-name;
+              tailf:cli-incomplete-command;
+              type hhmm-type {
+                tailf:info "hh:mm;;Time to start (hh:mm)";
+              }
+            }
+            leaf recurring-end {
+              tailf:cli-drop-node-name;
+              tailf:cli-incomplete-command;
+              type union {
+                type uint8 {
+                  tailf:info "<1-4>;;Week number to end";
+                  range "1..4";
+                }
+                type enumeration {
+                  enum "first" {
+                    tailf:info "First week of the month";
+                  }
+                  enum "last" {
+                    tailf:info "Last week of the month";
+                  }
+                }
+              }
+            }
+            leaf recurring-end-day {
+              tailf:cli-drop-node-name;
+              tailf:cli-incomplete-command;
+              type weekday-type {
+                tailf:info "DAY;;Weekday to end";
+              }
+            }
+            leaf recurring-end-month {
+              tailf:cli-drop-node-name;
+              tailf:cli-incomplete-command;
+              type month-type {
+                tailf:info "MONTH;;Month to end";
+              }
+            }
+            leaf recurring-end-time {
+              tailf:cli-drop-node-name;
+              type hhmm-type {
+                tailf:info "hh:mm;;Time to end (hh:mm)";
+              }
+            }
+            leaf recurring-offset {
+              tailf:cli-drop-node-name;
+              tailf:cli-optional-in-sequence;
+              type uint16 {
+                tailf:info "<1-1440>;;Offset to add in minutes";
+                range "1..1440";
+              }
+            }
+          }
+        }
+      }
+      container timezone {
+        tailf:info "Configure time zone";
+        description
+          "Configure time zone";
+        tailf:cli-compact-syntax;
+        tailf:cli-sequence-commands {
+          tailf:cli-reset-siblings;
+        }
+        leaf zone {
+          tailf:cli-drop-node-name;
+          tailf:cli-incomplete-command;
+          type string {
+            tailf:info "WORD;;name of time zone";
+          }
+        }
+        leaf offset {
+          tailf:cli-drop-node-name;
+          tailf:cli-optional-in-sequence;
+          tailf:cli-incomplete-command;
+          type enumeration {
+            enum "plus";
+            enum "minus";
+          }
+        }
+        leaf hours {
+          tailf:cli-drop-node-name;
+          type int8 {
+            tailf:info "<-23 - 23>;;Hours offset from UTC";
+            range "-23..23";
+          }
+        }
+        leaf minutes {
+          tailf:cli-drop-node-name;
+          type int8 {
+            tailf:info "<0-59>;;Minutes ofset from UTC";
+            range "0..59";
+          }
+        }
+      }
+    }
+    container gatekeeper {
+      tailf:info "Enter gatekeeper configuration mode";
+      description
+        "Enter gatekeeper configuration mode";
+      tailf:cli-add-mode;
+      tailf:cli-mode-name "config-gk";
+      leaf shutdown {
+        tailf:info "Shutdown Gatekeeper";
+        description
+          "Shutdown Gatekeeper";
+        type empty;
+      }
+    }
+    container line {
+      tailf:info "Configure a terminal line";
+      description
+        "Configure a terminal line";
+      list aux {
+        tailf:info "Auxiliary line";
+        description
+          "Auxiliary line";
+        tailf:cli-full-command;
+        tailf:cli-mode-name "config-line";
+        key "first";
+        max-elements "1";
+        leaf first {
+          type enumeration {
+            enum "0" {
+              tailf:info "<0-0>;;First Line number";
+            }
+          }
+        }
+        uses line-grouping;
+      }
+      list console {
+        tailf:info "Primary terminal line";
+        description
+          "Primary terminal line";
+        tailf:cli-full-command;
+        tailf:cli-mode-name "config-line";
+        tailf:cli-allow-key-abbreviation;
+        key "first";
+        max-elements "1";
+        leaf first {
+          type enumeration {
+            enum "0" {
+              tailf:info "<0-0>;;First Line number";
+            }
+          }
+        }
+        uses line-grouping;
+      }
+      container vty-single {
+        tailf:cli-no-keyword;
+        tailf:cli-drop-node-name;
+        list vty {
+          tailf:info "Virtual terminal";
+          description
+            "Virtual terminal";
+          tailf:cli-full-command;
+          tailf:cli-mode-name "config-line";
+          key "first";
+          leaf first {
+            type uint16 {
+              tailf:info "<0-1869>;;First Line number";
+              range "0..1869";
+            }
+          }
+          uses line-grouping;
+        }
+      }
+      list vty {
+        tailf:info "Virtual terminal";
+        description
+          "Virtual terminal";
+        tailf:cli-full-command;
+        tailf:cli-mode-name "config-line";
+        key "first last";
+        leaf first {
+          type uint16 {
+            tailf:info "<0-1869>;;First Line number";
+            range "0..1869";
+          }
+        }
+        leaf last {
+          type uint16 {
+            tailf:info "<1-1869>;;Last Line number";
+            range "1..1869";
+          }
+        }
+        uses line-grouping;
+      }
+    }
+    container logging {
+      tailf:info "Modify message logging facilities";
+      description
+        "Modify message logging facilities";
+      list discriminator {
+        tailf:info "Create or modify a message discriminator";
+        description
+          "Create or modify a message discriminator";
+        tailf:cli-suppress-mode;
+        key "name";
+        leaf name {
+          type string {
+            tailf:info "WORD;;discriminator name; string; max. 8 characters";
+          }
+        }
+        container msg-body {
+          tailf:info "Msg-body pattern for messsage filtering";
+          description
+            "Msg-body pattern for messsage filtering";
+          leaf includes {
+            tailf:info "To deliver messages including the specified regular expression string";
+            description
+              "To deliver messages including the specified regular expression string";
+            type string {
+              tailf:info "LINE;;Specify a regular expression string for message filtering";
+            }
+          }
+        }
+      }
+      container persistent {
+        tailf:info "Set persistent logging parameters";
+        description
+          "Set persistent logging parameters";
+        presence "true";
+        container file {
+          tailf:cli-reset-container;
+          tailf:cli-compact-syntax;
+          tailf:cli-drop-node-name;
+          leaf url {
+            tailf:info "URL to store logging messages";
+            description
+              "URL to store logging messages";
+            type string;
+          }
+          leaf size {
+            tailf:info "Set disk space for writing log messages";
+            description
+              "Set disk space for writing log messages";
+            type string;
+          }
+          leaf threshold {
+            tailf:info "Set threshold for logging persistent";
+            description
+              "Set threshold for logging persistent";
+            type string;
+          }
+          leaf protected {
+            tailf:info "Eliminates manipulation on logging-persistent files";
+            description
+              "Eliminates manipulation on logging-persistent files";
+            type empty;
+          }
+        }
+      }
+      container monitor {
+        tailf:info "Set terminal line (monitor) logging parameters";
+        description
+          "Set terminal line (monitor) logging parameters";
+        tailf:cli-reset-container;
+        tailf:cli-compact-syntax;
+        presence "true";
+        leaf severity {
+          tailf:cli-drop-node-name;
+          tailf:cli-disallow-value "discriminator";
+          tailf:cli-full-command;
+          type logging-level-type;
+        }
+        list discriminator {
+          tailf:info "Establish MD-Console association";
+          description
+            "Establish MD-Console association";
+          tailf:cli-suppress-mode;
+          key "name";
+          leaf name {
+            type string {
+              tailf:info "WORD;;discriminator name; string; max. 8 characters";
+            }
+          }
+          leaf severity {
+            tailf:cli-drop-node-name;
+            tailf:cli-full-command;
+            type logging-level-type;
+          }
+        }
+      }
+      leaf alarm {
+        tailf:info "Configure syslog for alarms";
+        description
+          "Configure syslog for alarms";
+        tailf:cli-full-command;
+        tailf:cli-no-value-on-delete;
+        type union {
+          type uint8 {
+            tailf:info "<1-4>;;Alarm Logging severity level";
+            range "1..4";
+          }
+          type enumeration {
+            enum "critical" {
+              tailf:info "Service affecting Condition       (severity=1)";
+            }
+            enum "informational" {
+              tailf:info "Informational messages            (severity=4)";
+            }
+            enum "major" {
+              tailf:info "Immediate action needed           (severity=2)";
+            }
+            enum "minor" {
+              tailf:info "Minor warning conditions          (severity=3)";
+            }
+          }
+        }
+      }
+      container buffered {
+        tailf:info "Set buffered logging parameters";
+        description
+          "Set buffered logging parameters";
+        presence "true";
+        list discriminator {
+          tailf:cli-suppress-mode;
+          key "name";
+          leaf name {
+            type string;
+          }
+          leaf severity {
+            tailf:cli-drop-node-name;
+            tailf:cli-full-command;
+            type logging-level-type;
+          }
+        }
+        leaf size {
+          tailf:cli-drop-node-name;
+          type uint32 {
+            tailf:info "<4096-2147483647>;;Logging buffer size";
+            range "4096..2147483647";
+          }
+        }
+        leaf severity {
+          tailf:cli-drop-node-name;
+          tailf:cli-full-command;
+          type logging-level-type;
+        }
+        leaf xxml {
+          tailf:alt-name "xml";
+          tailf:info "Enable logging in XML to XML logging buffer";
+          description
+            "Enable logging in XML to XML logging buffer";
+          tailf:cli-full-command;
+          type uint32 {
+            tailf:info "<4096-2147483647>;;XML logging buffer size";
+            range "4096..2147483647";
+          }
+        }
+      }
+      container console {
+        tailf:info "Set console logging parameters";
+        description
+          "Set console logging parameters";
+        tailf:cli-reset-container;
+        tailf:cli-compact-syntax;
+        presence "true";
+        leaf severity {
+          tailf:cli-drop-node-name;
+          tailf:cli-full-command;
+          type logging-level-type;
+        }
+        list discriminator {
+          tailf:info "Establish MD-Console association";
+          description
+            "Establish MD-Console association";
+          tailf:cli-suppress-mode;
+          key "name";
+          leaf name {
+            type string;
+          }
+          leaf severity {
+            tailf:cli-drop-node-name;
+            tailf:cli-full-command;
+            type logging-level-type;
+          }
+        }
+        leaf filtered {
+          tailf:info "Enable filtered logging";
+          description
+            "Enable filtered logging";
+          type empty;
+        }
+        leaf guaranteed {
+          tailf:info "Guarantee console messages";
+          description
+            "Guarantee console messages";
+          tailf:cli-full-command;
+          type empty;
+        }
+        leaf xxml {
+          tailf:info "Enable logging in XML";
+          description
+            "Enable logging in XML";
+          tailf:cli-full-command;
+          type logging-level-type;
+        }
+      }
+      container event {
+        tailf:info "Global interface events";
+        description
+          "Global interface events";
+        container link-status {
+          tailf:info "Globally enable/disable link UPDOWN message";
+          description
+            "Globally enable/disable link UPDOWN message";
+          leaf boot {
+            tailf:info "Supress/Allow link UPDOWN messages during boot";
+            description
+              "Supress/Allow link UPDOWN messages during boot";
+            type empty;
+          }
+          leaf global {
+            type empty;
+          }
+          leaf default {
+            tailf:info "Link UPDOWN messages for all interfaces";
+            description
+              "Link UPDOWN messages for all interfaces";
+            type empty;
+          }
+        }
+      }
+      container esm {
+        tailf:info "Set ESM filter restrictions";
+        description
+          "Set ESM filter restrictions";
+        leaf config {
+          tailf:info "Permit/Deny configuration changes from ESM filters";
+          description
+            "Permit/Deny configuration changes from ESM filters";
+          tailf:cli-full-command;
+          type empty;
+        }
+      }
+      leaf facility {
+        tailf:info "Facility parameter for syslog messages";
+        description
+          "Facility parameter for syslog messages";
+        type enumeration {
+          enum "auth" {
+            tailf:info "Authorization system";
+          }
+          enum "cron" {
+            tailf:info "Cron/at facility";
+          }
+          enum "daemon" {
+            tailf:info "System daemons";
+          }
+          enum "kern" {
+            tailf:info "Kernel";
+          }
+          enum "local0" {
+            tailf:info "Local use";
+          }
+          enum "local1" {
+            tailf:info "Local use";
+          }
+          enum "local2" {
+            tailf:info "Local use";
+          }
+          enum "local3" {
+            tailf:info "Local use";
+          }
+          enum "local4" {
+            tailf:info "Local use";
+          }
+          enum "local5" {
+            tailf:info "Local use";
+          }
+          enum "local6" {
+            tailf:info "Local use";
+          }
+          enum "local7" {
+            tailf:info "Local use";
+          }
+          enum "lpr" {
+            tailf:info "Line printer system";
+          }
+          enum "mail" {
+            tailf:info "Mail system";
+          }
+          enum "news" {
+            tailf:info "USENET news";
+          }
+          enum "sys10" {
+            tailf:info "System use";
+          }
+          enum "sys11" {
+            tailf:info "System use";
+          }
+          enum "sys12" {
+            tailf:info "System use";
+          }
+          enum "sys13" {
+            tailf:info "System use";
+          }
+          enum "sys14" {
+            tailf:info "System use";
+          }
+          enum "sys9" {
+            tailf:info "System use";
+          }
+          enum "syslog" {
+            tailf:info "Syslog itself";
+          }
+          enum "user" {
+            tailf:info "User process";
+          }
+          enum "uucp" {
+            tailf:info "Unix-to-Unix copy system";
+          }
+        }
+      }
+      container history {
+        tailf:info "Configure syslog history table";
+        description
+          "Configure syslog history table";
+        leaf size {
+          tailf:info "Set history table size";
+          description
+            "Set history table size";
+          type uint16 {
+            tailf:info "<0-500>;History size";
+          }
+        }
+        leaf severity-level {
+          tailf:cli-drop-node-name;
+          type union {
+            type uint8 {
+              tailf:info "<0-7>;;Logging severity level";
+              range "0..7";
+            }
+            type enumeration {
+              enum "alerts" {
+                tailf:info "Immediate action needed           (severity=1)";
+              }
+              enum "critical" {
+                tailf:info "Critical conditions               (severity=2)";
+              }
+              enum "debugging" {
+                tailf:info "Debugging messages                (severity=7)";
+              }
+              enum "emergencies" {
+                tailf:info "System is unusable                (severity=0)";
+              }
+              enum "errors" {
+                tailf:info "Error conditions                  (severity=3)";
+              }
+              enum "informational" {
+                tailf:info "Informational messages            (severity=6)";
+              }
+              enum "notifications" {
+                tailf:info "Normal but significant conditions (severity=5)";
+              }
+              enum "warnings" {
+                tailf:info "Warning conditions                (severity=4)";
+              }
+            }
+          }
+        }
+      }
+      list hostname {
+        tailf:info "Hostname or A.B.C.D;;IP address of the logging host";
+        description
+          "Hostname or A.B.C.D;;IP address of the logging host";
+        tailf:cli-drop-node-name;
+        tailf:cli-suppress-mode;
+        tailf:cli-delete-when-empty;
+        key "host";
+        leaf host {
+          tailf:cli-disallow-value "esm|alarm|buffered|facility|history|rate-limit|source-interface|host|console|discriminator|monitor";
+          tailf:cli-full-command;
+          type inet:host {
+            tailf:info "Hostname or A.B.C.D";
+          }
+        }
+      }
+      list host {
+        tailf:info "Set syslog server IP address and parameters";
+        description
+          "Set syslog server IP address and parameters";
+        tailf:cli-suppress-mode;
+        tailf:cli-delete-when-empty;
+        tailf:cli-compact-syntax;
+        key "host";
+        leaf host {
+          tailf:cli-disallow-value "esm|alarm|buffered|facility|history|rate-limit|source-interface|host";
+          tailf:cli-full-command;
+          type inet:host {
+            tailf:info "Hostname or A.B.C.D";
+          }
+        }
+        leaf vrf {
+          tailf:info "Set VRF option";
+          description
+            "Set VRF option";
+          type string {
+            tailf:info "WORD;;VPN Routing/Forwarding instance name";
+          }
+        }
+        leaf discriminator {
+          tailf:info "Specify a message discriminator identifier for this logging session";
+          description
+            "Specify a message discriminator identifier for this logging session";
+          type string {
+            tailf:info "WORD;;Message discriminator identifier for this logging session (8 chars. max)";
+          }
+        }
+      }
+      container rate-limit {
+        tailf:info "Set messages per second limit";
+        description
+          "Set messages per second limit";
+        tailf:cli-sequence-commands;
+        tailf:cli-compact-syntax;
+        tailf:cli-reset-container;
+        leaf console {
+          tailf:info "Rate limit only console messages";
+          description
+            "Rate limit only console messages";
+          tailf:cli-optional-in-sequence;
+          tailf:cli-incomplete-command;
+          type empty;
+        }
+        leaf all {
+          tailf:info "Rate limit all messages, including debug messages";
+          description
+            "Rate limit all messages, including debug messages";
+          tailf:cli-optional-in-sequence;
+          tailf:cli-incomplete-command;
+          type empty;
+        }
+        leaf rate {
+          tailf:cli-drop-node-name;
+          type uint16 {
+            tailf:info "<1-10000>;;Messages per second";
+          }
+        }
+      }
+      container source-interface {
+        tailf:info "Specify interface for source address in logging transactions";
+        description
+          "Specify interface for source address in logging transactions";
+        tailf:cli-diff-dependency "/ios:native/interface";
+        uses interface-grouping;
+        leaf vrf {
+          tailf:info "Specify the vrf of source interface for logging transactions";
+          description
+            "Specify the vrf of source interface for logging transactions";
+          type string {
+            tailf:info "WORD;;VPN Routing/Forwarding instance name";
+          }
+        }
+      }
+      container snmp-trap {
+        tailf:info "Set SNMP trap logging level";
+        description
+          "Set SNMP trap logging level";
+        leaf alerts {
+          tailf:info "Immediate action needed           (severity=1)";
+          description
+            "Immediate action needed           (severity=1)";
+          tailf:cli-full-command;
+          type empty;
+        }
+        leaf critical {
+          tailf:info "Critical conditions               (severity=2)";
+          description
+            "Critical conditions               (severity=2)";
+          tailf:cli-full-command;
+          type empty;
+        }
+        leaf debugging {
+          tailf:info "Debugging messages                (severity=7)";
+          description
+            "Debugging messages                (severity=7)";
+          tailf:cli-full-command;
+          type empty;
+        }
+        leaf emergencies {
+          tailf:info "System is unusable                (severity=0)";
+          description
+            "System is unusable                (severity=0)";
+          tailf:cli-full-command;
+          type empty;
+        }
+        leaf errors {
+          tailf:info "Error conditions                  (severity=3)";
+          description
+            "Error conditions                  (severity=3)";
+          tailf:cli-full-command;
+          type empty;
+        }
+        leaf informational {
+          tailf:info "Informational messages            (severity=6)";
+          description
+            "Informational messages            (severity=6)";
+          tailf:cli-full-command;
+          type empty;
+        }
+        leaf notifications {
+          tailf:info "Normal but significant conditions (severity=5)";
+          description
+            "Normal but significant conditions (severity=5)";
+          tailf:cli-full-command;
+          type empty;
+        }
+        leaf warnings {
+          tailf:info "Warning conditions                (severity=4)";
+          description
+            "Warning conditions                (severity=4)";
+          tailf:cli-full-command;
+          type empty;
+        }
+      }
+      leaf trap {
+        tailf:info "Set trap logging level";
+        description
+          "Set trap logging level";
+        tailf:cli-full-command;
+        type union {
+          type uint8 {
+            tailf:info "<0-7>;;Logging severity level";
+            range "0..7";
+          }
+          type enumeration {
+            enum "alerts" {
+              tailf:info "Immediate action needed           (severity=1)";
+            }
+            enum "critical" {
+              tailf:info "Critical conditions               (severity=2)";
+            }
+            enum "debugging" {
+              tailf:info "Debugging messages                (severity=7)";
+            }
+            enum "emergencies" {
+              tailf:info "System is unusable                (severity=0)";
+            }
+            enum "errors" {
+              tailf:info "Error conditions                  (severity=3)";
+            }
+            enum "informational" {
+              tailf:info "Informational messages            (severity=6)";
+            }
+            enum "notifications" {
+              tailf:info "Normal but significant conditions (severity=5)";
+            }
+            enum "warnings" {
+              tailf:info "Warning conditions                (severity=4)";
+            }
+          }
+        }
+      }
+      container file {
+        tailf:info "Set logging file parameters";
+        description
+          "Set logging file parameters";
+        tailf:cli-sequence-commands {
+          tailf:cli-reset-all-siblings;
+        }
+        tailf:cli-compact-syntax;
+        tailf:cli-incomplete-command;
+        leaf name {
+          tailf:cli-drop-node-name;
+          type string {
+            tailf:info "Logging file name";
+          }
+        }
+        leaf max-size {
+          tailf:cli-drop-node-name;
+          tailf:cli-optional-in-sequence;
+          type uint32 {
+            tailf:info "Logging file maximum size";
+          }
+        }
+        leaf min-size {
+          tailf:cli-drop-node-name;
+          tailf:cli-optional-in-sequence;
+          type uint32 {
+            tailf:info "Logging file minimum size";
+          }
+        }
+        leaf severity {
+          tailf:cli-drop-node-name;
+          tailf:cli-full-command;
+          type logging-level-type;
+        }
+      }
+    }
+    container mgcp {
+      tailf:info "Enable Media Gateway Control Protocol";
+      description
+        "Enable Media Gateway Control Protocol";
+      container behavior {
+        leaf rsip-range {
+          type enumeration {
+            enum "tgcp-only";
+          }
+        }
+        leaf comedia-role {
+          type enumeration {
+            enum "none";
+          }
+        }
+        leaf comedia-check-media-src {
+          type enumeration {
+            enum "disable";
+          }
+        }
+        leaf comedia-sdp-force {
+          type enumeration {
+            enum "disable";
+          }
+        }
+      }
+      container fax {
+        tailf:info "Configure MGCP Fax Parameters";
+        description
+          "Configure MGCP Fax Parameters";
+        container t38 {
+          tailf:info "Configure MGCP Fax T.38 Parameters";
+          description
+            "Configure MGCP Fax T.38 Parameters";
+          leaf ecm {
+            tailf:info "Enable Error Correction Mode (ECM)";
+            description
+              "Enable Error Correction Mode (ECM)";
+            tailf:cli-full-command;
+            type empty;
+          }
+        }
+      }
+      container profile {
+        tailf:info "MGCP profile configuration mode";
+        description
+          "MGCP profile configuration mode";
+        leaf default {
+          tailf:info "Configure MGCP default profile";
+          description
+            "Configure MGCP default profile";
+          type empty;
+        }
+      }
+    }
+    container multilink {
+      tailf:info "PPP multilink global configuration";
+      description
+        "PPP multilink global configuration";
+      leaf bundle-name {
+        tailf:info "Select method for naming multilink bundles";
+        description
+          "Select method for naming multilink bundles";
+        tailf:cli-full-command;
+        type enumeration {
+          enum "authenticated" {
+            tailf:info "Use peer's authenticated name";
+          }
+          enum "both" {
+            tailf:info "Use peer's authenticated name and endpoint discriminator";
+          }
+          enum "endpoint" {
+            tailf:info "Use peer's endpoint discriminator";
+          }
+          enum "rfc" {
+            tailf:info "Use peer and local authenticated name and endpoint discriminator";
+          }
+        }
+      }
+      leaf virtual-template {
+        tailf:info "virtual-template interface";
+        description
+          "virtual-template interface";
+        tailf:cli-full-command;
+        type uint16 {
+          tailf:info "<1-4095>;;virtual template number";
+          range "1..4095";
+        }
+      }
+    }
+    container ntp {
+      tailf:info "Configure NTP";
+      description
+        "Configure NTP";
+      tailf:cli-diff-dependency "/ios:native/interface";
+      container access-group {
+        tailf:info "Control NTP access";
+        description
+          "Control NTP access";
+        leaf peer {
+          tailf:info "Provide full access";
+          description
+            "Provide full access";
+          type union {
+            type uint16 {
+              tailf:info "<1-99>;;Standard IP access list";
+              range "1..99";
+            }
+            type uint16 {
+              tailf:info "<1300-1999>;;Standard IP access list (expanded range)";
+              range "1300..1999";
+            }
+          }
+        }
+        leaf serve {
+          tailf:info "Provide server and query access";
+          description
+            "Provide server and query access";
+          type union {
+            type uint16 {
+              tailf:info "<1-99>;;Standard IP access list";
+              range "1..99";
+            }
+            type uint16 {
+              tailf:info "<1300-1999>;;Standard IP access list (expanded range)";
+              range "1300..1999";
+            }
+          }
+        }
+      }
+      leaf authenticate {
+        tailf:info "Authenticate time sources";
+        description
+          "Authenticate time sources";
+        type empty;
+      }
+      list authentication-key {
+        tailf:info "Authentication key for trusted time sources";
+        description
+          "Authentication key for trusted time sources";
+        tailf:cli-suppress-mode;
+        tailf:cli-compact-syntax;
+        tailf:cli-sequence-commands;
+        key "number";
+        leaf number {
+          type uint32 {
+            tailf:info "<1-4294967295>;;Key number";
+          }
+        }
+        leaf md5 {
+          tailf:info "MD5 authentication";
+          description
+            "MD5 authentication";
+          type string {
+            tailf:info "WORD;;Authentication key";
+          }
+        }
+        leaf encryption-type {
+          tailf:cli-drop-node-name;
+          tailf:cli-optional-in-sequence;
+          type uint32 {
+            tailf:info "<0-4294967295>;;Authentication key encryption type";
+          }
+        }
+      }
+      leaf clock-period {
+        tailf:info "Length of hardware clock tick";
+        description
+          "Length of hardware clock tick";
+        type uint32;
+      }
+      container server {
+        tailf:info "Configure NTP server";
+        description
+          "Configure NTP server";
+        uses ntp-server-grouping;
+        list vrf {
+          tailf:info "VPN Routing/Forwarding Information";
+          description
+            "VPN Routing/Forwarding Information";
+          tailf:cli-suppress-mode;
+          tailf:cli-delete-when-empty;
+          tailf:cli-compact-syntax;
+          tailf:cli-reset-container;
+          tailf:cli-incomplete-command;
+          tailf:cli-diff-dependency "/ios:native/vrf/definition";
+          tailf:cli-diff-dependency "/ios:native/ip/vrf";
+          key "name";
+          leaf name {
+            type string {
+              tailf:info "WORD;;VPN Routing/Forwarding instance name";
+            }
+          }
+          uses ntp-server-grouping;
+        }
+      }
+      container source {
+        tailf:info "Configure interface for source address";
+        description
+          "Configure interface for source address";
+        uses interface-grouping;
+      }
+      list trusted-key {
+        tailf:info "Key numbers for trusted time sources";
+        description
+          "Key numbers for trusted time sources";
+        key "number";
+        leaf number {
+          type uint16 {
+            tailf:info "<1-65535>;;Key number";
+          }
+        }
+      }
+      leaf update-calendar {
+        tailf:info "Periodically update calendar with NTP time";
+        description
+          "Periodically update calendar with NTP time";
+        type empty;
+      }
+    }
+    container mac-address-table {
+      tailf:info "Configure the MAC address table";
+      description
+        "Configure the MAC address table";
+      container evc-xconnect {
+        tailf:info "All ethernet virtual connections xconnect";
+        description
+          "All ethernet virtual connections xconnect";
+        leaf l2pt-forward-all {
+          tailf:info "Layer 2 Protocol Forward All";
+          description
+            "Layer 2 Protocol Forward All";
+          type empty;
+        }
+      }
+      container limit {
+        tailf:info "Enter parameters for mac limit feature";
+        description
+          "Enter parameters for mac limit feature";
+        list bdomain {
+          tailf:info "bdomain number for  mac limit feature";
+          description
+            "bdomain number for  mac limit feature";
+          tailf:cli-suppress-mode;
+          tailf:cli-delete-when-empty;
+          key "number";
+          leaf number {
+            type uint16 {
+              tailf:info "<1-4095>;;Enter bdomain number";
+              range "1..4095";
+            }
+          }
+          leaf action {
+            tailf:info "Enter action";
+            description
+              "Enter action";
+            tailf:cli-full-command;
+            type enumeration {
+              enum "warning";
+              enum "limit";
+              enum "shutdown";
+            }
+          }
+          leaf maximum {
+            tailf:info "Enter max allowed entries";
+            description
+              "Enter max allowed entries";
+            type uint32 {
+              tailf:info "<0-16000>  Max allowed entries";
+              range "0..16000";
+            }
+          }
+        }
+      }
+      container learning {
+        tailf:info "Enable a MAC table learning feature";
+        description
+          "Enable a MAC table learning feature";
+        list vlan {
+          tailf:info "Layer 2 table learning per VLAN";
+          description
+            "Layer 2 table learning per VLAN";
+          tailf:cli-suppress-mode;
+          tailf:cli-delete-when-empty;
+          key "id";
+          leaf id {
+            type uint16 {
+              tailf:info "<1-4094>;;VLAN ID";
+              range "1..4094";
+            }
+          }
+          leaf module {
+            tailf:info "Layer 2 table learning per VLAN per module";
+            description
+              "Layer 2 table learning per VLAN per module";
+            type uint8 {
+              tailf:info "<1-9>;;Module";
+              range "1..9";
+            }
+          }
+        }
+      }
+    }
+    container privilege {
+      tailf:info "Command privilege parameters";
+      description
+        "Command privilege parameters";
+      container exec {
+        tailf:info "Exec mode";
+        description
+          "Exec mode";
+        list level {
+          tailf:info "Set privilege level of command";
+          description
+            "Set privilege level of command";
+          tailf:cli-suppress-mode;
+          tailf:cli-delete-when-empty;
+          tailf:cli-compact-syntax;
+          tailf:cli-incomplete-command;
+          tailf:cli-no-key-completion;
+          key "privilege";
+          leaf privilege {
+            tailf:cli-incomplete-command;
+            tailf:cli-incomplete-no;
+            tailf:cli-suppress-range;
+            type uint8 {
+              tailf:info "<0-15>;;Privilege level";
+            }
+          }
+          list command-list {
+            tailf:cli-suppress-mode;
+            tailf:cli-delete-when-empty;
+            tailf:cli-drop-node-name;
+            tailf:cli-compact-syntax;
+            tailf:cli-show-long-obu-diffs;
+            tailf:cli-no-key-completion;
+            tailf:cli-suppress-key-abbreviation;
+            tailf:cli-no-match-completion;
+            ordered-by user;
+            key "command";
+            leaf command {
+              tailf:cli-drop-node-name;
+              tailf:cli-multi-word-key;
+              type string {
+                tailf:info "LINE;;Initial keywords of the command to modify";
+                pattern "(show.*)|(write.*)";
+              }
+            }
+          }
+        }
+      }
+    }
+    container redundancy {
+      tailf:info "Enter redundancy mode";
+      description
+        "Enter redundancy mode";
+      tailf:cli-add-mode;
+      tailf:cli-mode-name "config-red";
+      leaf maintenance-mode {
+        tailf:info "Enable/Disable maintenance mode ";
+        description
+          "Enable/Disable maintenance mode ";
+        type empty;
+      }
+      container main-cpu {
+        tailf:info "Enter main-cpu mode";
+        description
+          "Enter main-cpu mode";
+        tailf:cli-add-mode;
+        container auto-sync {
+          leaf running-config {
+            type empty;
+          }
+          leaf config-register {
+            type empty;
+          }
+          leaf bootvar {
+            type empty;
+          }
+          leaf standard {
+            type empty;
+          }
+        }
+      }
+      leaf mode {
+        tailf:info "redundancy mode for this chassis";
+        description
+          "redundancy mode for this chassis";
+        type enumeration {
+          enum "rpr" {
+            tailf:info "Route Processor Redundancy";
+          }
+          enum "rpr-plus" {
+            tailf:info "Route Processor Redundancy Plus";
+          }
+          enum "sso" {
+            tailf:info "Stateful Switchover";
+          }
+          enum "none" {
+            tailf:info "None";
+          }
+        }
+      }
+      container interchassis {
+        tailf:info "Enter interchassis mode";
+        description
+          "Enter interchassis mode";
+        list group {
+          tailf:info "Enter the redundancy group number";
+          description
+            "Enter the redundancy group number";
+          tailf:cli-mode-name "config-r-ic";
+          key "group-number";
+          leaf group-number {
+            type uint64 {
+              tailf:info "<1-4294967295>  The redundancy group number";
+              range "1..4294967295";
+            }
+          }
+          container monitor {
+            tailf:info "define the peer monitoring method";
+            description
+              "define the peer monitoring method";
+            tailf:cli-compact-syntax;
+            tailf:cli-sequence-commands {
+              tailf:cli-reset-siblings;
+            }
+            leaf peer {
+              tailf:info "the peer method";
+              description
+                "the peer method";
+              type empty;
+            }
+            leaf bfd {
+              tailf:info "set peer monitoring method to bfd";
+              description
+                "set peer monitoring method to bfd";
+              type empty;
+            }
+          }
+          container member {
+            tailf:info "specify a redundancy group member";
+            description
+              "specify a redundancy group member";
+            leaf ip {
+              tailf:info "specify the redundancy group member using an ip address";
+              description
+                "specify the redundancy group member using an ip address";
+              type inet:ipv4-address {
+                tailf:info "A.B.C.D;;IP address";
+              }
+            }
+          }
+          container backbone {
+            tailf:info "specify a redundancy group member";
+            description
+              "specify a redundancy group member";
+            container interface {
+              uses interface-grouping;
+            }
+          }
+        }
+      }
+    }
+    container scheduler {
+      tailf:info "Scheduler parameters";
+      description
+        "Scheduler parameters";
+      container allocate {
+        tailf:cli-sequence-commands;
+        tailf:cli-compact-syntax;
+        tailf:info "Guarantee CPU time for processes";
+        description
+          "Guarantee CPU time for processes";
+        leaf interrupt-time {
+          tailf:cli-drop-node-name;
+          tailf:cli-incomplete-command;
+          type uint16 {
+            tailf:info "<400-60000>;;Microseconds handling network interrupts";
+            range "400..60000";
+          }
+        }
+        leaf process-time {
+          tailf:cli-drop-node-name;
+          type uint16 {
+            tailf:info "<100-4000>;;Microseconds running processes";
+            range "100..4000";
+          }
+        }
+      }
+    }
+    container spanning-tree {
+      tailf:info "Spanning Tree Subsystem";
+      description
+        "Spanning Tree Subsystem";
+      container bridge {
+        leaf priority {
+          type uint8;
+        }
+        leaf ID {
+          type string;
+        }
+      }
+      container etherchannel {
+        tailf:info "Spanning tree etherchannel specific configuration";
+        description
+          "Spanning tree etherchannel specific configuration";
+        container guard {
+          tailf:info "Configure guard features for etherchannel";
+          description
+            "Configure guard features for etherchannel";
+          leaf misconfig {
+            tailf:info "Enable guard to protect against etherchannel misconfiguration";
+            description
+              "Enable guard to protect against etherchannel misconfiguration";
+            type empty;
+          }
+        }
+      }
+      container extend {
+        tailf:info "Spanning Tree 802.1t extensions";
+        description
+          "Spanning Tree 802.1t extensions";
+        leaf system-id {
+          tailf:info "Extend system-id into priority portion of the bridge id (PVST & Rapid PVST only)";
+          description
+            "Extend system-id into priority portion of the bridge id (PVST & Rapid PVST only)";
+          type empty;
+        }
+      }
+      container loopguard {
+        tailf:info "Spanning tree loopguard options";
+        description
+          "Spanning tree loopguard options";
+        leaf default {
+          tailf:info "Enable loopguard by default on all ports";
+          description
+            "Enable loopguard by default on all ports";
+          type empty;
+        }
+      }
+      container mst {
+        tailf:info "Multiple spanning tree configuration";
+        description
+          "Multiple spanning tree configuration";
+        list instance-range {
+          tailf:cli-suppress-mode;
+          tailf:cli-delete-when-empty;
+          tailf:cli-drop-node-name;
+          tailf:cli-compact-syntax;
+          tailf:cli-range-list-syntax;
+          key "id";
+          leaf id {
+            type union {
+              type uint16;
+              type string;
+            }
+          }
+          leaf priority {
+            tailf:info "Set the bridge priority for the spanning tree";
+            description
+              "Set the bridge priority for the spanning tree";
+            type uint16 {
+              tailf:info "<0-61440>;;bridge priority in increments of 4096";
+              range "0..61440";
+            }
+          }
+        }
+        container configuration {
+          tailf:info "Enter MST configuration submode";
+          description
+            "Enter MST configuration submode";
+          tailf:cli-add-mode;
+          tailf:cli-mode-name "config-mst";
+          leaf name {
+            tailf:info "Set configuration name";
+            description
+              "Set configuration name";
+            type string {
+              tailf:info "WORD;;Configuration name";
+            }
+          }
+          list instance {
+            tailf:info "Map vlans to an MST instance";
+            description
+              "Map vlans to an MST instance";
+            tailf:cli-suppress-mode;
+            tailf:cli-delete-when-empty;
+            key "id";
+            leaf id {
+              type uint16 {
+                tailf:info "<0-4094>;;MST instance id";
+                range "0..4094";
+              }
+            }
+            leaf-list vlan {
+              tailf:info "Range of vlans to add to the instance mapping";
+              description
+                "Range of vlans to add to the instance mapping";
+              tailf:cli-range-list-syntax;
+              type union {
+                type uint16 {
+                  tailf:info "LINE;;vlan range ex: 1-65, 72, 300 -200";
+                }
+                type string;
+              }
+            }
+          }
+          leaf revision {
+            tailf:info "Set configuration revision number";
+            description
+              "Set configuration revision number";
+            type uint16 {
+              tailf:info "<0-65535>;;Configuration revision number";
+            }
+          }
+        }
+      }
+      container optimize {
+        container bpdu {
+          leaf transmission {
+            tailf:cli-boolean-no;
+            tailf:cli-show-no;
+            type boolean;
+          }
+        }
+      }
+      container portfast {
+        tailf:info "Spanning tree portfast options";
+        description
+          "Spanning tree portfast options";
+        tailf:cli-compact-syntax;
+        tailf:cli-sequence-commands {
+          tailf:cli-reset-siblings;
+        }
+        leaf bdpu {
+          tailf:cli-drop-node-name;
+          tailf:cli-optional-in-sequence;
+          type enumeration {
+            enum "bpdufilter" {
+              tailf:info "Enable portfast bdpu filter on this switch";
+            }
+            enum "bpduguard" {
+              tailf:info "Enable portfast bpdu guard on this switch";
+            }
+          }
+        }
+        leaf default {
+          tailf:info "Enable portfast by default on all access ports";
+          description
+            "Enable portfast by default on all access ports";
+          type empty;
+        }
+      }
+      container uplinkfast {
+        tailf:info "Enable UplinkFast Feature";
+        description
+          "Enable UplinkFast Feature";
+        presence "true";
+        leaf max-update-rate {
+          tailf:info "Rate at which station address updates are sent";
+          description
+            "Rate at which station address updates are sent";
+          type uint32 {
+            tailf:info "<0-32000>;;Maximum number of update packets per second";
+            range "0..32000";
+          }
+        }
+      }
+      leaf mode {
+        tailf:info "Spanning tree operating mode";
+        description
+          "Spanning tree operating mode";
+        tailf:cli-show-with-default;
+        tailf:cli-full-command;
+        type enumeration {
+          enum "mst" {
+            tailf:info "Multiple spanning tree mode";
+          }
+          enum "pvst" {
+            tailf:info "Per-Vlan spanning tree mode";
+          }
+          enum "rapid-pvst" {
+            tailf:info "Per-Vlan rapid spanning tree mode";
+          }
+        }
+      }
+      container vlans-max-age {
+        tailf:cli-drop-node-name;
+        list vlan {
+          tailf:info "VLAN Switch Spanning Tree";
+          description
+            "VLAN Switch Spanning Tree";
+          tailf:cli-range-list-syntax;
+          tailf:cli-suppress-mode;
+          tailf:cli-delete-when-empty;
+          key "id";
+          leaf id {
+            type union {
+              type uint16 {
+                tailf:info "WORD;;vlan range, example: 1,3-5,7,9-11";
+                range "1..4096";
+              }
+              type string;
+            }
+          }
+          leaf max-age {
+            tailf:info "Set the max age interval for the spanning tree";
+            description
+              "Set the max age interval for the spanning tree";
+            type uint8 {
+              tailf:info "<6-40>;;maximum number of seconds the information in a BPDU is valid";
+              range "6..40";
+            }
+          }
+        }
+      }
+      container vlans-forward-time {
+        tailf:cli-drop-node-name;
+        list vlan {
+          tailf:info "VLAN Switch Spanning Tree";
+          description
+            "VLAN Switch Spanning Tree";
+          tailf:cli-range-list-syntax;
+          tailf:cli-suppress-mode;
+          tailf:cli-delete-when-empty;
+          key "id";
+          leaf id {
+            type union {
+              type uint16 {
+                tailf:info "WORD;;vlan range, example: 1,3-5,7,9-11";
+                range "1..4096";
+              }
+              type string;
+            }
+          }
+          leaf forward-time {
+            tailf:info "Set the forward delay for the spanning tree";
+            description
+              "Set the forward delay for the spanning tree";
+            type uint8 {
+              tailf:info "<4-30>;;number of seconds for the forward delay timer";
+              range "4..30";
+            }
+          }
+        }
+      }
+      container vlans-hello-time {
+        tailf:cli-drop-node-name;
+        list vlan {
+          tailf:info "VLAN Switch Spanning Tree";
+          description
+            "VLAN Switch Spanning Tree";
+          tailf:cli-range-list-syntax;
+          tailf:cli-suppress-mode;
+          tailf:cli-delete-when-empty;
+          key "id";
+          leaf id {
+            type union {
+              type uint16 {
+                tailf:info "WORD;;vlan range, example: 1,3-5,7,9-11";
+                range "1..4096";
+              }
+              type string;
+            }
+          }
+          leaf hello-time {
+            tailf:info "Set the hello interval for the spanning tree";
+            description
+              "Set the hello interval for the spanning tree";
+            type uint8 {
+              tailf:info "<1-10>;;number of seconds between generation of config BPDUs";
+              range "1..10";
+            }
+          }
+        }
+      }
+      container vlans-priority {
+        tailf:cli-drop-node-name;
+        list vlan {
+          tailf:info "VLAN Switch Spanning Tree";
+          description
+            "VLAN Switch Spanning Tree";
+          tailf:cli-range-list-syntax;
+          tailf:cli-suppress-mode;
+          tailf:cli-delete-when-empty;
+          key "id";
+          leaf id {
+            type union {
+              type uint16 {
+                tailf:info "WORD;;vlan range, example: 1,3-5,7,9-11";
+                range "1..4096";
+              }
+              type string;
+            }
+          }
+          leaf priority {
+            tailf:info "Set the bridge priority for the spanning tree";
+            description
+              "Set the bridge priority for the spanning tree";
+            type uint16 {
+              tailf:info "<0-61440>;;bridge priority in increments of 4096";
+              range "0..61440";
+            }
+          }
+        }
+      }
+      container vlans-root {
+        tailf:cli-drop-node-name;
+        list vlan {
+          tailf:info "VLAN Switch Spanning Tree";
+          description
+            "VLAN Switch Spanning Tree";
+          tailf:cli-range-list-syntax;
+          tailf:cli-suppress-mode;
+          tailf:cli-delete-when-empty;
+          key "id";
+          leaf id {
+            type union {
+              type uint16 {
+                tailf:info "WORD;;vlan range, example: 1,3-5,7,9-11";
+                range "1..4096";
+              }
+              type string;
+            }
+          }
+          container root {
+            tailf:info "Configure switch as root";
+            description
+              "Configure switch as root";
+            container primary {
+              tailf:info "Configure this switch as primary root for this spanning tree";
+              description
+                "Configure this switch as primary root for this spanning tree";
+              tailf:cli-compact-syntax;
+              tailf:cli-sequence-commands {
+                tailf:cli-reset-siblings;
+              }
+              leaf diameter {
+                tailf:info "Network diameter of this spanning tree";
+                description
+                  "Network diameter of this spanning tree";
+                type uint8 {
+                  tailf:info "<2-7>;;Maximum number of bridges between any two end nodes";
+                  range "2..7";
+                }
+              }
+              leaf hello-time {
+                tailf:info "Hello interval for this spanning tree";
+                description
+                  "Hello interval for this spanning tree";
+                type uint8 {
+                  tailf:info "<1-10>;;Hello interval in seconds";
+                  range "1..10";
+                }
+              }
+            }
+            container secondary {
+              tailf:info "Configure switch as secondary root";
+              description
+                "Configure switch as secondary root";
+              tailf:cli-compact-syntax;
+              tailf:cli-sequence-commands {
+                tailf:cli-reset-siblings;
+              }
+              leaf diameter {
+                tailf:info "Network diameter of this spanning tree";
+                description
+                  "Network diameter of this spanning tree";
+                type uint8 {
+                  tailf:info "<2-7>;;Maximum number of bridges between any two end nodes";
+                  range "2..7";
+                }
+              }
+              leaf hello-time {
+                tailf:info "Hello interval for this spanning tree";
+                description
+                  "Hello interval for this spanning tree";
+                type uint8 {
+                  tailf:info "<1-10>;;Hello interval in seconds";
+                  range "1..10";
+                }
+              }
+            }
+          }
+        }
+      }
+    }
+    container subscriber {
+      tailf:info "Subscriber configuration";
+      description
+        "Subscriber configuration";
+      leaf templating {
+        tailf:info "Configure subscriber templating";
+        description
+          "Configure subscriber templating";
+        type empty;
+      }
+    }
+    container track {
+      tailf:info "Object tracking configuration commands";
+      description
+        "Object tracking configuration commands";
+      list tracked-object {
+        tailf:cli-drop-node-name;
+        tailf:cli-mode-name "config-track";
+        key "object-number";
+        leaf object-number {
+          type uint32 {
+            tailf:info "<1-1000>;;Tracked object";
+            range "1..1000";
+          }
+        }
+        container interface {
+          tailf:info "Select an interface to track";
+          description
+            "Select an interface to track";
+          tailf:cli-hide-in-submode;
+          tailf:cli-compact-syntax;
+          tailf:cli-sequence-commands;
+          leaf name {
+            tailf:cli-drop-node-name;
+            type string {
+              tailf:info "WORD;;interface name";
+            }
+          }
+          leaf protocol {
+            tailf:cli-drop-node-name;
+            type enumeration {
+              enum "ip" {
+                tailf:info "IP parameters";
+              }
+              enum "ipv6" {
+                tailf:info "IPv6 parameters";
+              }
+              enum "line-protocol" {
+                tailf:info "Track interface line-protocol";
+              }
+            }
+          }
+          leaf routing {
+            tailf:info "Track interface IPv6 routing capability";
+            description
+              "Track interface IPv6 routing capability";
+            when "../protocol = 'ip' or ../protocol = 'ipv6'";
+            tailf:cli-optional-in-sequence;
+            type empty;
+          }
+        }
+        container ip {
+          tailf:info "IP protocol";
+          description
+            "IP protocol";
+          tailf:cli-hide-in-submode;
+          container route {
+            tailf:info "IP route";
+            tailf:cli-compact-syntax;
+            tailf:cli-sequence-commands;
+            leaf address {
+              type inet:ipv4-address {
+                tailf:info "A.B.C.D;;{/nn || A.B.C.D}  Prefix and mask";
+              }
+            }
+            leaf mask {
+              tailf:cli-drop-node-name;
+              type inet:ipv4-address {
+                tailf:info "A.B.C.D;;IP prefix mask";
+              }
+            }
+            leaf reachability {
+              tailf:info "Route reachability state";
+              description
+                "Route reachability state";
+              tailf:cli-optional-in-sequence;
+              tailf:cli-full-command;
+              type empty;
+            }
+            leaf metric {
+              tailf:info "Route metric";
+              description
+                "Route metric";
+              tailf:cli-optional-in-sequence;
+              tailf:cli-full-command;
+              type enumeration {
+                enum "threshold" {
+                  tailf:info "Route metric threshold";
+                }
+              }
+            }
+          }
+          container sla {
+            tailf:info "IP Service Level Agreement";
+            description
+              "IP Service Level Agreement";
+            tailf:cli-compact-syntax;
+            tailf:cli-sequence-commands;
+            leaf number {
+              description
+                "Entry number";
+              tailf:cli-drop-node-name;
+              type uint32 {
+                tailf:info "<1-2147483647>;;Entry number";
+              }
+            }
+            leaf reachability {
+              tailf:info "Reachability";
+              description
+                "Reachability";
+              tailf:cli-optional-in-sequence;
+              tailf:cli-full-command;
+              type empty;
+            }
+            leaf state {
+              tailf:info "Return code state";
+              description
+                "Return code state";
+              tailf:cli-optional-in-sequence;
+              tailf:cli-full-command;
+              type empty;
+            }
+          }
+        }
+        container ipv6 {
+          tailf:info "IPv6 protocol";
+          description
+            "IPv6 protocol";
+          tailf:cli-hide-in-submode;
+          container route {
+            tailf:info "IPv6 route";
+            description
+              "IPv6 route";
+            tailf:cli-compact-syntax;
+            tailf:cli-sequence-commands;
+            leaf address {
+              tailf:cli-drop-node-name;
+              type inet:ipv6-prefix {
+                tailf:info "X:X:X:X::X/<0-128>;;IPv6 address and prefix";
+              }
+            }
+            leaf reachability {
+              tailf:info "Route reachability state";
+              description
+                "Route reachability state";
+              tailf:cli-optional-in-sequence;
+              tailf:cli-full-command;
+              type empty;
+            }
+            leaf metric {
+              tailf:info "Route metric";
+              description
+                "Route metric";
+              tailf:cli-full-command;
+              type enumeration {
+                enum "threshold" {
+                  tailf:info "Route metric threshold";
+                }
+              }
+            }
+          }
+        }
+        container list {
+          tailf:info "Group objects in a list";
+          description
+            "Group objects in a list";
+          tailf:cli-hide-in-submode;
+          leaf boolean {
+            tailf:info "List state based on a boolean calculation on objects";
+            description
+              "List state based on a boolean calculation on objects";
+            tailf:cli-full-command;
+            type enumeration {
+              enum "and" {
+                tailf:info "Boolean AND operation on list";
+              }
+              enum "or" {
+                tailf:info "Boolean OR operation on list";
+              }
+            }
+          }
+          leaf threshold {
+            tailf:info "List state based on a threshold of UP and DOWN objects";
+            description
+              "List state based on a threshold of UP and DOWN objects";
+            tailf:cli-full-command;
+            type enumeration {
+              enum "percentage" {
+                tailf:info "Thresholds described as a percentage of total";
+              }
+              enum "weight" {
+                tailf:info "Thresholds described by weight values";
+              }
+            }
+          }
+        }
+        leaf stub-object {
+          tailf:info "Stub tracking object";
+          description
+            "Stub tracking object";
+          tailf:cli-hide-in-submode;
+          tailf:cli-full-command;
+          type empty;
+        }
+        container default {
+          tailf:info "Set a command to its defaults";
+          description
+            "Set a command to its defaults";
+          uses default-track-grouping;
+        }
+        uses track-grouping;
+      }
+      container resolution {
+        tailf:info "Tracking resolution parameters";
+        description
+          "Tracking resolution parameters";
+        container ip {
+          tailf:info "IP protocol";
+          description
+            "IP protocol";
+          container route {
+            tailf:info "Route metric resolution";
+            description
+              "Route metric resolution";
+            leaf bgp {
+              tailf:info "BGP route metric resolution";
+              description
+                "BGP route metric resolution";
+              tailf:cli-full-command;
+              type uint32 {
+                tailf:info "<256-40000000>;;Resolution value";
+                range "256..40000000";
+              }
+            }
+            leaf eigrp {
+              tailf:info "EIGRP route metric resolution";
+              description
+                "EIGRP route metric resolution";
+              tailf:cli-full-command;
+              type uint32 {
+                tailf:info "<256-40000000>;;Resolution value";
+                range "256..40000000";
+              }
+            }
+            leaf isis {
+              tailf:info "ISIS route metric resolution";
+              description
+                "ISIS route metric resolution";
+              tailf:cli-full-command;
+              type uint32 {
+                tailf:info "<1-1000>;;Resolution value";
+                range "1..1000";
+              }
+            }
+            leaf ospf {
+              tailf:info "OSPF route metric resolution";
+              description
+                "OSPF route metric resolution";
+              tailf:cli-full-command;
+              type uint32 {
+                tailf:info "<1-1562>;;Resolution value";
+                range "1..1562";
+              }
+            }
+            leaf static {
+              tailf:info "Static route metric resolution";
+              description
+                "Static route metric resolution";
+              tailf:cli-full-command;
+              type uint32 {
+                tailf:info "<1-100000>;;Resolution value";
+                range "1..100000";
+              }
+            }
+          }
+        }
+      }
+      container timer {
+        tailf:info "Polling interval timers";
+        description
+          "Polling interval timers";
+        container interface {
+          tailf:info "Interface polling timer";
+          description
+            "Interface polling timer";
+          uses track-timer-grouping;
+        }
+        container ip {
+          tailf:info "IP protocol";
+          description
+            "IP protocol";
+          container route {
+            tailf:info "IP route polling timer";
+            description
+              "IP route polling timer";
+            uses track-timer-grouping;
+          }
+          container sla {
+            tailf:info "IP SLA polling timer";
+            description
+              "IP SLA polling timer";
+            uses track-timer-grouping;
+          }
+        }
+        container ipv6 {
+          tailf:info "IPv6 protocol";
+          description
+            "IPv6 protocol";
+          container route {
+            tailf:info "IPv6 route polling timer";
+            description
+              "IPv6 route polling timer";
+            uses track-timer-grouping;
+          }
+        }
+        container list {
+          tailf:info "Boolean list polling timer";
+          description
+            "Boolean list polling timer";
+          uses track-timer-grouping;
+        }
+        container stub-object {
+          tailf:info "EEM stub polling timer";
+          description
+            "EEM stub polling timer";
+          uses track-timer-grouping;
+        }
+      }
+    }
+    container dot1x {
+      tailf:info "IEEE 802.1X Global Configuration Commands";
+      description
+        "IEEE 802.1X Global Configuration Commands";
+      container critical {
+        tailf:info "Set 802.1x Critical Authentication parameters";
+        description
+          "Set 802.1x Critical Authentication parameters";
+        leaf eapol {
+          tailf:info "Send EAPOL-Success on successful Critical Authentication";
+          description
+            "Send EAPOL-Success on successful Critical Authentication";
+          type empty;
+        }
+        container recovery {
+          tailf:info "Set 802.1x Critical Authentication Recovery parameters";
+          description
+            "Set 802.1x Critical Authentication Recovery parameters";
+          leaf delay {
+            tailf:info "Set 802.1x Critical Authentication Recovery Delay period";
+            description
+              "Set 802.1x Critical Authentication Recovery Delay period";
+            type uint16 {
+              tailf:info "<1-10000>;;802.1x Critical Authentication Recovery delay in milliseconds";
+              range "1..10000";
+            }
+          }
+        }
+      }
+      leaf system-auth-control {
+        tailf:info "Enable or Disable SysAuthControl";
+        description
+          "Enable or Disable SysAuthControl";
+        type empty;
+      }
+    }
+    container power {
+      tailf:info "Power configure";
+      description
+        "Power configure";
+      tailf:cli-compact-syntax;
+      tailf:cli-sequence-commands;
+      leaf redundancy-mode {
+        tailf:info "set power supply redundancy mode";
+        description
+          "set power supply redundancy mode";
+        type enumeration {
+          enum "combined" {
+            tailf:info "combine power supply outputs (no redundancy)";
+          }
+          enum "redundant" {
+            tailf:info "either power supply can operate system (redundancy)";
+          }
+        }
+      }
+      leaf max-min {
+        tailf:cli-drop-node-name;
+        type enumeration {
+          enum "max";
+        }
+      }
+      leaf inputs {
+        type uint8;
+      }
+    }
+    list parameter-map {
+      tailf:info "parameter map";
+      description
+        "parameter map";
+      tailf:cli-mode-name "config-profile";
+      key "name";
+      leaf name {
+        type string {
+          tailf:info "WORD;;parameter-map name";
+        }
+      }
+      leaf type {
+        tailf:info "parameter map type";
+        description
+          "parameter map type";
+        tailf:cli-prefix-key;
+        type enumeration {
+          enum "cws-tunnel" {
+            tailf:info "Cloud Web Security tunnel mode";
+          }
+          enum "inspect" {
+            tailf:info "inspect parameter-map";
+          }
+          enum "inspect-global" {
+            tailf:info "inspect global parameter-map";
+          }
+          enum "inspect-vrf" {
+            tailf:info "inspect vrf parameter-map";
+          }
+          enum "inspect-zone" {
+            tailf:info "inspect zone parameter-map";
+          }
+          enum "regex" {
+            tailf:info "egex parameter-map";
+          }
+        }
+      }
+      container aggressive-aging {
+        tailf:info "Aggressive Aging parameters";
+        description
+          "Aggressive Aging parameters";
+        when "../type = 'inspect-global'";
+        container high {
+          tailf:info "Specify the high watermark for aggressive-aging";
+          description
+            "Specify the high watermark for aggressive-aging";
+          choice absolute-percent {
+            case absolute-case {
+              container absolute {
+                tailf:cli-drop-node-name;
+                tailf:cli-sequence-commands;
+                tailf:cli-compact-syntax;
+                leaf value {
+                  tailf:cli-drop-node-name;
+                  type uint64 {
+                    tailf:info "<1-4294967295>  High watermark in absolute values";
+                    range "1..4294967295";
+                  }
+                }
+                leaf low {
+                  tailf:info "Specify the low watermark for aggressive-aging";
+                  description
+                    "Specify the low watermark for aggressive-aging";
+                  type uint64 {
+                    tailf:info "<1-4294967295>  Low watermark in absolute values";
+                    range "1..4294967295";
+                  }
+                }
+              }
+            }
+            case percent-case {
+              container percent {
+                tailf:info "high watermark in percentage of max-incomplete value";
+                description
+                  "high watermark in percentage of max-incomplete value";
+                tailf:cli-sequence-commands;
+                tailf:cli-compact-syntax;
+                leaf value {
+                  tailf:cli-drop-node-name;
+                  type uint8 {
+                    tailf:info "<1-100>;;High watermark in percentage";
+                    range "1..100";
+                  }
+                }
+                leaf low_percent {
+                  tailf:alt-name "low percent";
+                  tailf:info "Specify the low watermark for aggressive-aging in percents";
+                  description
+                    "Specify the low watermark for aggressive-aging in percents";
+                  type uint8 {
+                    tailf:info "<1-100>;;Low watermark in percentage";
+                    range "1..100";
+                  }
+                }
+              }
+            }
+          }
+        }
+      }
+      leaf alert {
+        tailf:info "Turn on/off alert";
+        description
+          "Turn on/off alert";
+        type enumeration {
+          enum "off" {
+            tailf:info "Turn off alert";
+          }
+          enum "on" {
+            tailf:info "Turn on alert";
+          }
+        }
+      }
+      leaf application-inspect {
+        tailf:info "Turn on application inspection";
+        description
+          "Turn on application inspection";
+        type enumeration {
+          enum "all" {
+            tailf:info "all supported L7 protocols";
+          }
+          enum "dns" {
+            tailf:info "Domain Name Server";
+          }
+          enum "exec" {
+            tailf:info "Remote Process Execution";
+          }
+          enum "ftp" {
+            tailf:info "File Transfer Protocol";
+          }
+          enum "gtp" {
+            tailf:info "GPRS Tunneling Protocol";
+          }
+          enum "h323" {
+            tailf:info "H.323 Protocol (e.g, MS NetMeeting)";
+          }
+          enum "http" {
+            tailf:info "Hypertext Transfer Protocol";
+          }
+          enum "imap" {
+            tailf:info "Internet Message Access Protocol";
+          }
+          enum "login" {
+            tailf:info "Remote login";
+          }
+          enum "msrpc" {
+            tailf:info "Microsoft Remote Procedure Call";
+          }
+          enum "netbios" {
+            tailf:info "NETBIOS";
+          }
+          enum "pop3" {
+            tailf:info "Post Office Protocol - Version 3";
+          }
+          enum "rtsp" {
+            tailf:info "Real Time Streaming Protocol";
+          }
+          enum "shell" {
+            tailf:info "shell";
+          }
+          enum "sip" {
+            tailf:info "Session Initiation Protocol";
+          }
+          enum "skinny" {
+            tailf:info "Skinny Client Control Protocol";
+          }
+          enum "smtp" {
+            tailf:info "Simple Mail Transfer Protocol";
+          }
+          enum "sunrpc" {
+            tailf:info "SUN Remote Procedure Call";
+          }
+          enum "tftp" {
+            tailf:info "Trivial File Transfer Protocol";
+          }
+        }
+      }
+      leaf audit-trail {
+        tailf:info "Turn on/off audit trail";
+        description
+          "Turn on/off audit trail";
+        when "../type = 'inspect'";
+        type enumeration {
+          enum "off" {
+            tailf:info "Turn off audit trail";
+          }
+          enum "on" {
+            tailf:info "Turn on audit trail";
+          }
+        }
+      }
+      leaf dns-timeout {
+        tailf:info "Specify timeout for DNS";
+        description
+          "Specify timeout for DNS";
+        when "../type = 'inspect'";
+        type uint32 {
+          tailf:info "<1-2147483>;;Timeout in seconds";
+          range "1..2147483";
+        }
+      }
+      container icmp {
+        tailf:info "Config timeout values for icmp";
+        description
+          "Config timeout values for icmp";
+        when "../type = 'inspect'";
+        leaf idle-time {
+          tailf:info "Specify timeout for icmp";
+          description
+            "Specify timeout for icmp";
+          type uint32 {
+            tailf:info "<1-2147483>;;Timeout in seconds";
+            range "1..2147483";
+          }
+        }
+      }
+      container lisp {
+        tailf:info "Turn on LISP options";
+        description
+          "Turn on LISP options";
+        leaf inner-packet-inspection {
+          tailf:info "inner-packet-inspection";
+          description
+            "inner-packet-inspection";
+          type empty;
+        }
+      }
+      container log {
+        tailf:info "Configure inspect logging parameters";
+        description
+          "Configure inspect logging parameters";
+        leaf dropped-packets {
+          tailf:info "Log dropped packets";
+          description
+            "Log dropped packets";
+          type empty;
+        }
+        container flow-export {
+          tailf:info "Configure inspect external logging parameters";
+          description
+            "Configure inspect external logging parameters";
+          container template {
+            tailf:info "Configure record template parameters";
+            description
+              "Configure record template parameters";
+            leaf timeout-rate {
+              tailf:info "Rate to resend the template in seconds";
+              description
+                "Rate to resend the template in seconds";
+              type uint32 {
+                tailf:info "<0-65535>;;Rate to resend in seconds";
+                range "0..65535";
+              }
+            }
+          }
+          container v9 {
+            tailf:info "Netflow version 9";
+            description
+              "Netflow version 9";
+            container udp {
+              tailf:info "Use UDP to export records";
+              description
+                "Use UDP to export records";
+              container destination {
+                tailf:info "Specify the flow-export destination";
+                description
+                  "Specify the flow-export destination";
+                tailf:cli-sequence-commands;
+                tailf:cli-compact-syntax;
+                leaf dst-ip {
+                  tailf:cli-drop-node-name;
+                  type inet:ipv4-address {
+                    tailf:info "A.B.C.D;;Destination IP address";
+                  }
+                }
+                leaf dst-port {
+                  tailf:cli-drop-node-name;
+                  type uint16 {
+                    tailf:info "<1-65535>;;Destination port number";
+                  }
+                }
+              }
+            }
+          }
+        }
+      }
+      leaf max-destination {
+        tailf:info "config maximum destination";
+        description
+          "config maximum destination";
+        when "../type = 'inspect-zone'";
+        type uint64 {
+          tailf:info "<1-4294967295>;;maximum destination value";
+          range "1..4294967295";
+        }
+      }
+      container max-incomplete {
+        tailf:info "Specify maximum number of incomplete connections before clamping";
+        description
+          "Specify maximum number of incomplete connections before clamping";
+        leaf high {
+          tailf:info "Specify high-watermark for clamping";
+          description
+            "Specify high-watermark for clamping";
+          type uint32 {
+            tailf:info "<1-2147483647>;;Number of connections";
+            range "1..2147483647";
+          }
+        }
+        leaf low {
+          tailf:info "Specify low-watermark for clamping";
+          description
+            "Specify low-watermark for clamping";
+          type uint32 {
+            tailf:info "<1-2147483647>;;Number of connections";
+            range "1..2147483647";
+          }
+        }
+      }
+      container one-minute {
+        tailf:info "Specify one-minute-sample watermarks for clamping";
+        description
+          "Specify one-minute-sample watermarks for clamping";
+        when "../type = 'inspect'";
+        leaf high {
+          tailf:info "Specify high-watermark for clamping";
+          description
+            "Specify high-watermark for clamping";
+          type uint32 {
+            tailf:info "<1-2147483647>;;Number of connections";
+            range "1..2147483647";
+          }
+        }
+        leaf low {
+          tailf:info "Specify low-watermark for clamping";
+          description
+            "Specify low-watermark for clamping";
+          type uint32 {
+            tailf:info "<1-2147483647>;;Number of connections";
+            range "1..2147483647";
+          }
+        }
+      }
+      container sessions {
+        tailf:info "Maximum number of inspect sessions";
+        description
+          "Maximum number of inspect sessions";
+        when "../type = 'inspect'";
+        leaf maximum {
+          tailf:info "Maximum sessions";
+          description
+            "Maximum sessions";
+          type uint32 {
+            tailf:info "<1-2147483647>;;Number of sessions";
+            range "1..2147483647";
+          }
+        }
+      }
+      container tcp {
+        tailf:info "Config timeout values for tcp connections";
+        description
+          "Config timeout values for tcp connections";
+        leaf finwait-time {
+          tailf:info "Specify timeout for TCP connections after a FIN";
+          description
+            "Specify timeout for TCP connections after a FIN";
+          type uint32 {
+            tailf:info "<1-2147483>;;Timeout in seconds";
+            range "1..2147483";
+          }
+        }
+        leaf idle-time {
+          tailf:info "Specify idle timeout for tcp connections";
+          description
+            "Specify idle timeout for tcp connections";
+          type uint32 {
+            tailf:info "<1-2147483>;;Timeout in seconds";
+            range "1..2147483";
+          }
+        }
+        container max-incomplete {
+          tailf:info "Specify max half-open connection per host";
+          description
+            "Specify max half-open connection per host";
+          leaf host {
+            tailf:info "Specify max half-open connection per host";
+            description
+              "Specify max half-open connection per host";
+            type uint32 {
+              tailf:info "<1-4294967295>;;half-open sessions";
+              range "1..4294967295";
+            }
+          }
+        }
+        leaf synwait-time {
+          tailf:info "Specify timeout for TCP connections after a SYN and no";
+          description
+            "Specify timeout for TCP connections after a SYN and no";
+          type uint32 {
+            tailf:info "<1-2147483>;;Timeout in seconds";
+            range "1..2147483";
+          }
+        }
+      }
+      container threat-detection {
+        tailf:info "Configure Threat Detection";
+        description
+          "Configure Threat Detection";
+        when "../type = 'inspect-zone'";
+        leaf basic-threat {
+          tailf:info "Enable Threat Detection";
+          description
+            "Enable Threat Detection";
+          type empty;
+        }
+        container rate {
+          tailf:info "Configure Threat Detection rate";
+          description
+            "Configure Threat Detection rate";
+          container fw-drop {
+            tailf:info "Configure Threat Detection rate for firewall drop events";
+            description
+              "Configure Threat Detection rate for firewall drop events";
+            tailf:cli-sequence-commands;
+            tailf:cli-compact-syntax;
+            leaf average-time-frame {
+              tailf:info "Configure Threat Detection average time frame";
+              description
+                "Configure Threat Detection average time frame";
+              type uint32 {
+                tailf:info "<600-3600>;;average time frame in seconds";
+                range "600..3600";
+              }
+            }
+            leaf average-threshold {
+              tailf:info "Configure Threat Detection average threshold";
+              description
+                "Configure Threat Detection average threshold";
+              type uint64 {
+                tailf:info "<1-4294967295>;;average threshold in pkts/sec";
+                range "1..4294967295";
+              }
+            }
+            leaf burst-threshold {
+              tailf:info " Configure Threat Detection burst threshold";
+              description
+                " Configure Threat Detection burst threshold";
+              type uint64 {
+                tailf:info "<1-1000000000>  burst threshold in pkts/sec";
+                range "1..1000000000";
+              }
+            }
+          }
+          container inspect-drop {
+            tailf:info "Configure Threat Detection rate for firewall inspection based drop events";
+            description
+              "Configure Threat Detection rate for firewall inspection based drop events";
+            tailf:cli-sequence-commands;
+            tailf:cli-compact-syntax;
+            leaf average-time-frame {
+              tailf:info "Configure Threat Detection average time frame";
+              description
+                "Configure Threat Detection average time frame";
+              type uint32 {
+                tailf:info "<600-3600>;;average time frame in seconds";
+                range "600..3600";
+              }
+            }
+            leaf average-threshold {
+              tailf:info "Configure Threat Detection average threshold";
+              description
+                "Configure Threat Detection average threshold";
+              type uint64 {
+                tailf:info "<1-4294967295>;;average threshold in pkts/sec";
+                range "1..4294967295";
+              }
+            }
+            leaf burst-threshold {
+              tailf:info " Configure Threat Detection burst threshold";
+              description
+                " Configure Threat Detection burst threshold";
+              type uint64 {
+                tailf:info "<1-1000000000>  burst threshold in pkts/sec";
+                range "1..1000000000";
+              }
+            }
+          }
+          container syn-attack {
+            tailf:info "Configure Threat Detection rate for syn attack events";
+            description
+              "Configure Threat Detection rate for syn attack events";
+            tailf:cli-sequence-commands;
+            tailf:cli-compact-syntax;
+            leaf average-time-frame {
+              tailf:info "Configure Threat Detection average time frame";
+              description
+                "Configure Threat Detection average time frame";
+              type uint32 {
+                tailf:info "<600-3600>;;average time frame in seconds";
+                range "600..3600";
+              }
+            }
+            leaf average-threshold {
+              tailf:info "Configure Threat Detection average threshold";
+              description
+                "Configure Threat Detection average threshold";
+              type uint64 {
+                tailf:info "<1-4294967295>;;average threshold in pkts/sec";
+                range "1..4294967295";
+              }
+            }
+            leaf burst-threshold {
+              tailf:info " Configure Threat Detection burst threshold";
+              description
+                " Configure Threat Detection burst threshold";
+              type uint64 {
+                tailf:info "<1-1000000000>  burst threshold in pkts/sec";
+                range "1..1000000000";
+              }
+            }
+          }
+        }
+      }
+      container udp {
+        tailf:info "Config timeout values for udp flows";
+        description
+          "Config timeout values for udp flows";
+        when "../type = 'inspect'";
+        leaf idle-time {
+          tailf:info "Specify idle timeout for udp";
+          description
+            "Specify idle timeout for udp";
+          type uint32 {
+            tailf:info "<1-2147483>;;Timeout in seconds";
+            range "1..2147483";
+          }
+        }
+      }
+      container vrf {
+        tailf:info "vrf binding with parameter map";
+        description
+          "vrf binding with parameter map";
+        tailf:cli-sequence-commands;
+        tailf:cli-compact-syntax;
+        leaf name {
+          tailf:cli-drop-node-name;
+          type string {
+            tailf:info "WORD;;vrf name";
+          }
+        }
+        leaf inspect {
+          tailf:info "vrf binding with parameter map";
+          description
+            "vrf binding with parameter map";
+          type string {
+            tailf:info "WORD;;parameter-map name";
+          }
+        }
+      }
+      leaf zone-mismatch {
+        tailf:info "Config zone-mismatch option";
+        description
+          "Config zone-mismatch option";
+        type enumeration {
+          enum "drop" {
+            tailf:info "Drop packets mode";
+          }
+        }
+      }
+    }
+    container vpdn {
+      tailf:info "Virtual Private Dialup Network";
+      description
+        "Virtual Private Dialup Network";
+      leaf authen-before-forward {
+        tailf:info "Authenticate a user locally before tunnelling";
+        description
+          "Authenticate a user locally before tunnelling";
+        type empty;
+      }
+      leaf enable {
+        tailf:info "Enable VPDN";
+        description
+          "Enable VPDN";
+        type empty;
+      }
+      leaf-list search-order {
+        ordered-by user;
+        tailf:info "Configure the order to search different VPDN tunnel types";
+        description
+          "Configure the order to search different VPDN tunnel types";
+        tailf:cli-flat-list-syntax;
+        type enumeration {
+          enum "dnis" {
+            tailf:info "Tunnel based on DNIS";
+          }
+          enum "domain" {
+            tailf:info "Tunnel based on domain";
+          }
+          enum "multihop-hostname" {
+            tailf:info "Tunnel based on peer hostname from ingress tunnel";
+          }
+        }
+      }
+    }
+    container ppp {
+      tailf:info "PPP global configuration";
+      description
+        "PPP global configuration";
+      container packet {
+        tailf:info "Configure control packet rate throttling";
+        description
+          "Configure control packet rate throttling";
+        tailf:cli-compact-syntax;
+        tailf:cli-sequence-commands;
+        leaf throttle {
+          tailf:info "Configure control packet rate throttling";
+          description
+            "Configure control packet rate throttling";
+          type uint32 {
+            tailf:info "<1-100000>;;Number of control packets allowed per session per specific time";
+            range "1..100000";
+          }
+        }
+        leaf allow_time {
+          tailf:cli-drop-node-name;
+          type uint32 {
+            tailf:info "<1-3600>;;Time in seconds for allowing N packets per session";
+            range "1..3600";
+          }
+        }
+        leaf block_time {
+          tailf:cli-drop-node-name;
+          type uint32 {
+            tailf:info "<2-3600>;;Time in seconds for blocking packets per session";
+            range "2..3600";
+          }
+        }
+      }
+    }
+    container bba-group {
+      tailf:info "Configure BBA Group";
+      description
+        "Configure BBA Group";
+      list pppoe {
+        tailf:info "PPPoE type";
+        description
+          "PPPoE type";
+        key "id";
+        leaf id {
+          type union {
+            type string {
+              tailf:info "WORD;;BBA Group name";
+            }
+            type enumeration {
+              enum "global" {
+                tailf:info "PPPoE global group";
+              }
+            }
+          }
+        }
+        container vendor-tag {
+          tailf:info "PPPoE Vendor Specific Tag";
+          description
+            "PPPoE Vendor Specific Tag";
+          container circuit-id {
+            tailf:info "Circuit-Id";
+            description
+              "Circuit-Id";
+            leaf service {
+              tailf:info "Enable processing";
+              description
+                "Enable processing";
+              type empty;
+            }
+          }
+          container dsl-sync-rate {
+            tailf:info "DSL-Sync-Rate";
+            description
+              "DSL-Sync-Rate";
+            leaf service {
+              tailf:info "Enable processing";
+              description
+                "Enable processing";
+              type empty;
+            }
+          }
+          container remote-id {
+            tailf:info "Remote-Id";
+            description
+              "Remote-Id";
+            leaf service {
+              tailf:info "Enable processing";
+              description
+                "Enable processing";
+              type empty;
+            }
+          }
+          leaf strip {
+            tailf:info "Strip all vendor tags";
+            description
+              "Strip all vendor tags";
+            type empty;
+          }
+        }
+        leaf virtual-template {
+          tailf:info "BBA virtual template command";
+          description
+            "BBA virtual template command";
+          type uint16 {
+            tailf:info "<1-4095>;;Virtual Template interface number";
+            range "1..4095";
+          }
+        }
+      }
+    }
+    container mac {
+      tailf:info "Global MAC configuration subcommands";
+      description
+        "Global MAC configuration subcommands";
+      container access-list {
+        tailf:info "Named access-list";
+        description
+          "Named access-list";
+        list extended {
+          tailf:info "Extended Access List";
+          description
+            "Extended Access List";
+          key "id";
+          leaf id {
+            type string {
+              tailf:info "WORD;;access-list name";
+            }
+          }
+          container deny {
+            tailf:info "Specify packets to reject";
+            description
+              "Specify packets to reject";
+            tailf:cli-compact-syntax;
+            tailf:cli-sequence-commands;
+            container source {
+              tailf:cli-compact-syntax;
+              tailf:cli-flatten-container;
+              tailf:cli-drop-node-name;
+              choice target-choice {
+                leaf any {
+                  tailf:info "any source MAC address";
+                  description
+                    "any source MAC address";
+                  type empty;
+                }
+                leaf host {
+                  tailf:info "A single source host";
+                  description
+                    "A single source host";
+                  type string {
+                    tailf:info "H.H.H;;48-bit source MAC address";
+                  }
+                }
+              }
+            }
+            container dest {
+              tailf:cli-compact-syntax;
+              tailf:cli-flatten-container;
+              tailf:cli-drop-node-name;
+              choice target-choice {
+                leaf any {
+                  tailf:info "any destination MAC address";
+                  description
+                    "any destination MAC address";
+                  type empty;
+                }
+                leaf host {
+                  tailf:info "A single destination host";
+                  description
+                    "A single destination host";
+                  type string {
+                    tailf:info "H.H.H;;48-bit destination MAC address";
+                  }
+                }
+              }
+            }
+          }
+          container permit {
+            tailf:info "Specify packets to forward";
+            description
+              "Specify packets to forward";
+            tailf:cli-compact-syntax;
+            tailf:cli-sequence-commands;
+            container source {
+              tailf:cli-compact-syntax;
+              tailf:cli-flatten-container;
+              tailf:cli-drop-node-name;
+              choice target-choice {
+                leaf any {
+                  tailf:info "any source MAC address";
+                  description
+                    "any source MAC address";
+                  type empty;
+                }
+                leaf host {
+                  tailf:info "A single source host";
+                  description
+                    "A single source host";
+                  type string {
+                    tailf:info "H.H.H;;48-bit source MAC address";
+                  }
+                }
+              }
+            }
+            container dest {
+              tailf:cli-compact-syntax;
+              tailf:cli-flatten-container;
+              tailf:cli-drop-node-name;
+              choice target-choice {
+                leaf any {
+                  tailf:info "any destination MAC address";
+                  description
+                    "any destination MAC address";
+                  type empty;
+                }
+                leaf host {
+                  tailf:info "A single destination host";
+                  description
+                    "A single destination host";
+                  type string {
+                    tailf:info "H.H.H;;48-bit destination MAC address";
+                  }
+                }
+              }
+            }
+          }
+        }
+      }
+      container address-table {
+        tailf:info "Configure the MAC address table";
+        description
+          "Configure the MAC address table";
+        tailf:cli-sequence-commands;
+        tailf:cli-compact-syntax;
+        leaf aging-time {
+          tailf:info "Set MAC address table entry maximum age";
+          description
+            "Set MAC address table entry maximum age";
+          type uint32 {
+            tailf:info "<0-0>;;Enter 0 to disable aging<10-1000000>;;Aging time in seconds";
+          }
+        }
+        leaf routed-mac {
+          tailf:info "Set RM Aging interval";
+          description
+            "Set RM Aging interval";
+          tailf:cli-optional-in-sequence;
+          tailf:cli-full-command;
+          type empty;
+        }
+        leaf vlan {
+          tailf:info "VLAN Keyword";
+          description
+            "VLAN Keyword";
+          type uint16 {
+            tailf:info "<1-4094>;;VLAN id";
+            range "1..4094";
+          }
+        }
+      }
+    }
+    container tacacs {
+      tailf:info "TACACS server configuration command";
+      description
+        "TACACS server configuration command";
+      list server {
+        tailf:info "Server configuration";
+        description
+          "Server configuration";
+        tailf:cli-mode-name "config-server-tacacs";
+        key "name";
+        leaf name {
+          type string {
+            tailf:info "WORD;;Name for the tacacs server configuration";
+          }
+        }
+        container address {
+          tailf:info "Specify ip address for tacacs server";
+          description
+            "Specify ip address for tacacs server";
+          leaf ipv4 {
+            tailf:info "Configure ipv4 address for tacacs server";
+            description
+              "Configure ipv4 address for tacacs server";
+            type union {
+              type string;
+              type inet:ipv4-address {
+                tailf:info "Hostname or A.B.C.D;;IP address of tacacs server";
+              }
+            }
+          }
+        }
+        container key {
+          tailf:info "per-server encryption key (overrides default)";
+          description
+            "per-server encryption key (overrides default)";
+          tailf:cli-compact-syntax;
+          tailf:cli-sequence-commands;
+          leaf encryption {
+            tailf:cli-drop-node-name;
+            tailf:cli-incomplete-command;
+            tailf:cli-optional-in-sequence;
+            type enumeration {
+              enum "0" {
+                tailf:info "Specifies an UNENCRYPTED key will follow";
+              }
+              enum "7" {
+                tailf:info "Specifies HIDDEN key will follow";
+              }
+            }
+          }
+          leaf key {
+            tailf:cli-drop-node-name;
+            tailf:cli-full-command;
+            tailf:cli-multi-value;
+            type string {
+              tailf:info "LINE;;The UNENCRYPTED (cleartext) shared key";
+            }
+          }
+        }
+      }
+    }
+    container tacacs-server {
+      tailf:info "Modify TACACS query parameters";
+      description
+        "Modify TACACS query parameters";
+      list host {
+        tailf:info "Specify a TACACS server";
+        description
+          "Specify a TACACS server";
+        tailf:cli-suppress-mode;
+        tailf:cli-delete-when-empty;
+        tailf:cli-compact-syntax;
+        tailf:cli-reset-container;
+        key "name";
+        leaf name {
+          type host-type {
+            tailf:info "Hostname or A.B.C.D;;IP address of TACACS server";
+          }
+        }
+        leaf port {
+          tailf:info "TCP port for TACACS+ server (default is 49)";
+          description
+            "TCP port for TACACS+ server (default is 49)";
+          type uint16 {
+            tailf:info "<1-65535>;;Port number";
+            range "1..65535";
+          }
+        }
+        leaf timeout {
+          tailf:info "Time to wait for this TACACS server to reply (overrides default)";
+          description
+            "Time to wait for this TACACS server to reply (overrides default)";
+          type uint16 {
+            tailf:info "<1-1000>;;Timeout value in seconds to wait for server to reply";
+            range "1..1000";
+          }
+        }
+      }
+      leaf timeout {
+        tailf:info "Time to wait for a TACACS server to reply";
+        description
+          "Time to wait for a TACACS server to reply";
+        type uint16 {
+          tailf:info "<1-1000>;;Wait time (default 5 seconds)";
+          range "1..1000";
+        }
+        default "5";
+      }
+      container directed-request {
+        tailf:info "Allow user to specify tacacs server to use with `@server'";
+        description
+          "Allow user to specify tacacs server to use with `@server'";
+        tailf:cli-compact-syntax;
+        tailf:cli-sequence-commands;
+        presence "true";
+        leaf restricted {
+          tailf:info "restrict queries to directed request servers only";
+          description
+            "restrict queries to directed request servers only";
+          tailf:cli-optional-in-sequence;
+          type empty;
+        }
+        leaf no-truncate {
+          tailf:info "Do not truncate the @hostname from username.";
+          description
+            "Do not truncate the @hostname from username.";
+          type empty;
+        }
+      }
+      container key {
+        tailf:info "Set TACACS+ encryption key.";
+        description
+          "Set TACACS+ encryption key.";
+        tailf:cli-compact-syntax;
+        tailf:cli-sequence-commands;
+        leaf encryption {
+          tailf:cli-drop-node-name;
+          tailf:cli-incomplete-command;
+          tailf:cli-optional-in-sequence;
+          type enumeration {
+            enum "0" {
+              tailf:info "Specifies an UNENCRYPTED key will follow";
+            }
+            enum "7" {
+              tailf:info "Specifies HIDDEN key will follow";
+            }
+          }
+        }
+        leaf key {
+          tailf:cli-drop-node-name;
+          tailf:cli-full-command;
+          tailf:cli-multi-value;
+          type string {
+            tailf:info "LINE;;The UNENCRYPTED (cleartext) shared key";
+          }
+        }
+      }
+    }
+    container upgrade {
+      tailf:info "Global upgrade configuration subcommands";
+      description
+        "Global upgrade configuration subcommands";
+      container fpd {
+        tailf:info "Configure field programmable devices upgrade options";
+        description
+          "Configure field programmable devices upgrade options";
+        leaf auto {
+          tailf:info "Auto upgrade all FPD images";
+          description
+            "Auto upgrade all FPD images";
+          type empty;
+        }
+        leaf path {
+          tailf:info "Set path to locate the FPD image package file for auto upgrade";
+          description
+            "Set path to locate the FPD image package file for auto upgrade";
+          type string;
+        }
+      }
+    }
+    container vtp {
+      tailf:info "Configure global VTP state";
+      description
+        "Configure global VTP state";
+      leaf file {
+        tailf:info "Configure IFS filesystem file where VTP configuration is stored.";
+        description
+          "Configure IFS filesystem file where VTP configuration is stored.";
+        type string {
+          tailf:info "WORD;;The ascii name of the IFS filesystem file where VTP configuration is stored.";
+        }
+      }
+      leaf interface {
+        tailf:info "Configure interface as the preferred source for the VTP IP updater address.";
+        description
+          "Configure interface as the preferred source for the VTP IP updater address.";
+        type string {
+          tailf:info "WORD;;The name of the interface providing the VTP updater ID for this device.";
+        }
+      }
+      leaf password {
+        tailf:info "Set the password for the VTP administrative domain";
+        description
+          "Set the password for the VTP administrative domain";
+        type string {
+          tailf:info "WORD;;The ascii password for the VTP administrative domain.";
+        }
+      }
+      leaf pruning {
+        tailf:info "Set the adminstrative domain to permit pruning";
+        description
+          "Set the adminstrative domain to permit pruning";
+        type empty;
+      }
+      leaf version {
+        tailf:info "Set the adminstrative domain to VTP version";
+        description
+          "Set the adminstrative domain to VTP version";
+        type uint8 {
+          tailf:info "<1-3>;;Set the adminstrative domain VTP version number";
+          range "1..3";
+        }
+      }
+      leaf domain {
+        tailf:info "Set the name of the VTP administrative domain.";
+        description
+          "Set the name of the VTP administrative domain.";
+        type string;
+      }
+      leaf mode {
+        tailf:info "Configure VTP device mode";
+        description
+          "Configure VTP device mode";
+        type enumeration {
+          enum "client" {
+            tailf:info "Set the device to client mode.";
+          }
+          enum "off" {
+            tailf:info "Set the device to off mode.";
+          }
+          enum "server" {
+            tailf:info "Set the device to server mode.";
+          }
+          enum "transparent" {
+            tailf:info "Set the device to transparent mode.";
+          }
+        }
+      }
+    }
+    container ap {
+      tailf:info "Configures Cisco APs";
+      description
+        "Configures Cisco APs";
+      list group {
+        tailf:info "Manage AP Groups VLAN feature";
+        description
+          "Manage AP Groups VLAN feature";
+        tailf:cli-mode-name "config-apgroup";
+        key "name";
+        leaf name {
+          type string {
+            tailf:info "WORD;;Specify the name of the apgroup to configure";
+          }
+        }
+      }
+    }
+    container wsma {
+      tailf:info "Configure Web Services Management Agents";
+      description
+        "Configure Web Services Management Agents";
+      container agent {
+        tailf:info "Configure WSMA agents";
+        description
+          "Configure WSMA agents";
+        container exec {
+          tailf:info "Start WSMA exec agent";
+          description
+            "Start WSMA exec agent";
+          tailf:cli-add-mode;
+          tailf:cli-mode-name "wsma-exec-agent";
+          leaf profile {
+            tailf:info "Profile to use for wsma exec agent";
+            type string {
+              tailf:info "WORD;;Profile name";
+            }
+          }
+        }
+        container config {
+          tailf:info "Start WSMA config agent";
+          description
+            "Start WSMA config agent";
+          tailf:cli-add-mode;
+          tailf:cli-mode-name "wsma-config-agent";
+          leaf profile {
+            tailf:info "Profile to use for wsma config agent";
+            type string {
+              tailf:info "WORD;;Profile name";
+            }
+          }
+        }
+        container filesys {
+          tailf:info "Start WSMA file system agent";
+          description
+            "Start WSMA file system agent";
+          tailf:cli-add-mode;
+          tailf:cli-mode-name "wsma-filesys-agent";
+          leaf profile {
+            tailf:info "Profile to use for wsma file system agent";
+            type string {
+              tailf:info "WORD;;Profile name";
+            }
+          }
+        }
+        container notify {
+          tailf:info "Start WSMA notify agent";
+          description
+            "Start WSMA notify agent";
+          tailf:cli-add-mode;
+          tailf:cli-mode-name "wsma-notify-agent";
+          leaf profile {
+            tailf:info "Profile to use for wsma notify agent";
+            type string {
+              tailf:info "WORD;;Profile name";
+            }
+          }
+        }
+      }
+      container profile {
+        tailf:info "Configure WSMA profile";
+        description
+          "Configure WSMA profile";
+        list listener {
+          tailf:info "Configure a listener profile";
+          description
+            "Configure a listener profile";
+          tailf:cli-mode-name "config-wsma-listen";
+          key "name";
+          leaf name {
+            type string {
+              tailf:info "WORD;;Listener profile name";
+            }
+          }
+          leaf transport {
+            tailf:info "The transport to use";
+            description
+              "The transport to use";
+            type enumeration {
+              enum "http" {
+                tailf:info "Use http (plaintext) transport";
+              }
+              enum "https" {
+                tailf:info "Use https (encrypted) transport";
+              }
+              enum "ssh" {
+                tailf:info "Use SSH V2";
+              }
+              enum "tls" {
+                tailf:info "Use TLS transport";
+              }
+            }
+          }
+        }
+      }
+    }
+    container rep {
+      tailf:info "Resilient Ethernet Protocol characteristics";
+      description
+        "Resilient Ethernet Protocol characteristics";
+      container admin {
+        tailf:info "administrative configuration";
+        description
+          "administrative configuration";
+        list vlan {
+          tailf:info "VLAN";
+          description
+            "VLAN";
+          key "name";
+          leaf name {
+            type uint16 {
+              tailf:info "<2-4094>;;between 2 and 4094";
+              range "2..4094";
+            }
+          }
+        }
+      }
+    }
+    container xconnect {
+      container logging {
+        container pseudowire {
+          leaf status {
+            tailf:cli-full-command;
+            type empty;
+          }
+        }
+        leaf redundancy {
+          tailf:cli-full-command;
+          type empty;
+        }
+      }
+    }
+    container fabric {
+      tailf:info "Catalyst 6000 crossbar fabric configuration commands";
+      description
+        "Catalyst 6000 crossbar fabric configuration commands";
+      container switching-mode {
+        tailf:info "Switching mode settings";
+        description
+          "Switching mode settings";
+        container allow {
+          tailf:info "Allow settings";
+          description
+            "Allow settings";
+          choice allow-choice {
+            leaf bus-mode {
+              tailf:info "Allow switching in bus mode for modules";
+              description
+                "Allow switching in bus mode for modules";
+              type empty;
+            }
+            container truncated {
+              tailf:info "Truncated switching mode";
+              description
+                "Truncated switching mode";
+              presence "true";
+              leaf threshold {
+                tailf:info "Number of SFM-capable modules for truncated switching mode. Switch applies the threshold only when the mode is disallowed. Switch ignores the threshold when the truncated mode is allowed";
+                description
+                  "Number of SFM-capable modules for truncated switching mode. Switch applies the threshold only when the mode is disallowed. Switch ignores the threshold when the truncated mode is allowed";
+                type uint8 {
+                  tailf:info "<1-9>;;Threshold for truncated switching mode.";
+                  range "1..9";
+                }
+              }
+            }
+          }
+        }
+        container force {
+          tailf:info "Force modules to different switching modes";
+          description
+            "Force modules to different switching modes";
+          leaf bus-mode {
+            tailf:info "Switching mode of service modules will be forced to bus-mode by powercycling it.";
+            description
+              "Switching mode of service modules will be forced to bus-mode by powercycling it.";
+            type empty;
+          }
+        }
+      }
+    }
+    container port-channel {
+      tailf:info "EtherChannel configuration";
+      description
+        "EtherChannel configuration";
+      leaf load-balance {
+        tailf:info "Load Balancing method";
+        description
+          "Load Balancing method";
+        type enumeration {
+          enum "dst-ip" {
+            tailf:info "Dst IP Addr";
+          }
+          enum "dst-mac" {
+            tailf:info "Dst Mac Addr";
+          }
+          enum "dst-mixed-ip-port" {
+            tailf:info "Dst IP Addr and TCP/UDP Port";
+          }
+          enum "dst-port" {
+            tailf:info "Dst TCP/UDP Port";
+          }
+          enum "mpls" {
+            tailf:info "Load Balancing for MPLS packets";
+          }
+          enum "src-dst-ip" {
+            tailf:info "Src XOR Dst IP Addr";
+          }
+          enum "src-dst-mac" {
+            tailf:info "Src XOR Dst Mac Addr";
+          }
+          enum "src-dst-mixed-ip-port" {
+            tailf:info "Src XOR Dst IP Addr and TCP/UDP Port";
+          }
+          enum "src-dst-port" {
+            tailf:info "Src XOR Dst TCP/UDP Port";
+          }
+          enum "src-ip" {
+            tailf:info "Src IP Addr";
+          }
+          enum "src-mac" {
+            tailf:info "Src Mac Addr";
+          }
+          enum "src-mixed-ip-port" {
+            tailf:info "Src IP Addr and TCP/UDP Port";
+          }
+          enum "src-port" {
+            tailf:info "Src TCP/UDP Port";
+          }
+        }
+      }
+    }
+    container key {
+      tailf:info "Key management";
+      description
+        "Key management";
+      list chain {
+        tailf:info "Key-chain management";
+        description
+          "Key-chain management";
+        tailf:cli-mode-name "config-keychain";
+        key "name";
+        leaf name {
+          type string {
+            tailf:info "WORD;;Key-chain name";
+          }
+        }
+        list key {
+          tailf:info "Configure a key";
+          description
+            "Configure a key";
+          tailf:cli-mode-name "config-keychain-key";
+          key "id";
+          leaf id {
+            type uint32 {
+              tailf:info "<0-2147483647>;;Key identifier";
+              range "1..2147483647";
+            }
+          }
+          container key-string {
+            tailf:info "Set key string";
+            description
+              "Set key string";
+            leaf encryption {
+              tailf:cli-drop-node-name;
+              tailf:cli-incomplete-command;
+              type enumeration {
+                enum "0" {
+                  tailf:info "Specifies an UNENCRYPTED password will follow";
+                }
+                enum "6" {
+                  tailf:info "Specifies an ENCRYPTED password will follow";
+                }
+                enum "7" {
+                  tailf:info "Specifies a HIDDEN password will follow";
+                }
+              }
+            }
+            leaf key {
+              tailf:cli-drop-node-name;
+              tailf:cli-multi-value;
+              type string {
+                tailf:info "LINE;;The UNENCRYPTED (cleartext) user password (Maximum 80 characters)";
+                length "0..80";
+              }
+            }
+          }
+        }
+      }
+    }
+    container l2 {
+      tailf:info "Layer 2 configuration";
+      description
+        "Layer 2 configuration";
+      leaf router-id {
+        tailf:info "Configure a layer 2 identifier";
+        description
+          "Configure a layer 2 identifier";
+        type inet:ipv4-address {
+          tailf:info "A.B.C.D;;Layer 2 router-id value";
+        }
+      }
+      list vfi {
+        tailf:info "Configure a virtual forwarding instance";
+        description
+          "Configure a virtual forwarding instance";
+        tailf:cli-mode-name "config-vfi";
+        tailf:cli-compact-syntax;
+        key "name";
+        leaf name {
+          type string {
+            tailf:info "WORD;;VFI name";
+          }
+        }
+        leaf mode {
+          tailf:cli-drop-node-name;
+          tailf:cli-hide-in-submode;
+          type enumeration {
+            enum "autodiscovery" {
+              tailf:info "Multipoint autodiscovery configuration mode";
+            }
+            enum "manual" {
+              tailf:info "Multipoint manual configuration mode";
+            }
+            enum "point-to-point" {
+              tailf:info "Point-to-point configuration mode";
+            }
+          }
+        }
+        leaf evc {
+          tailf:cli-drop-node-name;
+          tailf:cli-hide-in-submode;
+          when "../mode = 'autodiscovery' or ../mode = 'manual'";
+          type string {
+            tailf:info "WORD;;EVC name";
+          }
+        }
+        container vpn {
+          tailf:info "VPN configuration";
+          description
+            "VPN configuration";
+          when "../mode = 'autodiscovery' or ../mode = 'manual'";
+          leaf id {
+            tailf:info "VPN id";
+            description
+              "VPN id";
+            type uint64 {
+              tailf:info "<1-4294967295>;;VPN id value";
+              range "1..4294967295";
+            }
+          }
+        }
+        leaf bridge-domain {
+          tailf:info "bridge-domain";
+          description
+            "bridge-domain";
+          type uint16 {
+            tailf:info "<1-16384>;;Bridge-domain number";
+            range "1..16384";
+          }
+        }
+        list neighbor {
+          tailf:info "VFI neighbor configuration";
+          description
+            "VFI neighbor configuration";
+          tailf:cli-suppress-mode;
+          tailf:cli-sequence-commands;
+          tailf:cli-compact-syntax;
+          key "router-id";
+          leaf router-id {
+            type inet:ipv4-address {
+              tailf:info "A.B.C.D;;VFI neighbor's router id";
+            }
+          }
+          leaf vc-id {
+            tailf:cli-drop-node-name;
+            tailf:cli-optional-in-sequence;
+            type uint64 {
+              tailf:info "<1-4294967295>;;Enter VC ID value";
+              range "1..4294967295";
+            }
+          }
+          leaf encapsulation {
+            tailf:info "Connection encapsulation type";
+            description
+              "Connection encapsulation type";
+            tailf:cli-break-sequence-commands;
+            tailf:cli-full-command;
+            type enumeration {
+              enum "l2tpv3" {
+                tailf:info "Encapsulation L2TPv3";
+              }
+              enum "mpls" {
+                tailf:info "Encapsulation MPLS";
+              }
+            }
+          }
+          leaf pw-class {
+            tailf:info "Pseudowire-class configuration";
+            description
+              "Pseudowire-class configuration";
+            type string {
+              tailf:info "WORD;;Pseudowire-class name";
+            }
+          }
+        }
+      }
+    }
+    container l2protocol-tunnel {
+      tailf:info "Tunnel Layer2 protocols";
+      description
+        "Tunnel Layer2 protocols";
+      leaf cos {
+        tailf:info "Class of Service";
+        description
+          "Class of Service";
+        type uint8 {
+          tailf:info "<0-7>;;priority value";
+          range "0..7";
+        }
+      }
+      container global {
+        tailf:info "Global settings";
+        description
+          "Global settings";
+        leaf drop-threshold {
+          tailf:info "L2PT packets drop threshold";
+          description
+            "L2PT packets drop threshold";
+          type uint16 {
+            tailf:info "<100-20000>;;Packets per second";
+            range "100..20000";
+          }
+        }
+      }
+    }
+    container system {
+      tailf:info "Set the system configuration";
+      description
+        "Set the system configuration";
+      container env {
+        tailf:info "Set the system environment settings";
+        description
+          "Set the system environment settings";
+        container temperature {
+          tailf:info "Set the system temperature settings";
+          description
+            "Set the system temperature settings";
+          container threshold {
+            tailf:info "Set the system temperature thresholds";
+            description
+              "Set the system temperature thresholds";
+            leaf yellow {
+              tailf:info "Set the yellow threshold";
+              description
+                "Set the yellow threshold";
+              type uint8 {
+                tailf:info "<0-25>;;Delta value from Red threshold in Degree Celsius";
+                range "0..25";
+              }
+            }
+          }
+        }
+      }
+      container mtu {
+        tailf:info "Set the system Maximum Transmission Unit (MTU)";
+        description
+          "Set the system Maximum Transmission Unit (MTU)";
+        leaf size {
+          tailf:cli-drop-node-name;
+          type uint16 {
+            tailf:info "<1500-1998>;;MTU size in bytes";
+            range "1500..1998";
+          }
+        }
+        leaf jumbo {
+          tailf:info "Set Jumbo MTU value for GigabitEthernet or TenGigabitEthernet interfaces";
+          description
+            "Set Jumbo MTU value for GigabitEthernet or TenGigabitEthernet interfaces";
+          type uint16 {
+            tailf:info "<1500-9000>;;Jumbo MTU size in bytes";
+            range "1500..9000";
+          }
+        }
+        leaf routing {
+          tailf:info "Set the Routing MTU for the system";
+          description
+            "Set the Routing MTU for the system";
+          type uint16 {
+            tailf:info "<1500-1500>;;MTU size in bytes";
+            range "1500";
+          }
+        }
+      }
+    }
+    container errdisable {
+      tailf:info "Error disable";
+      description
+        "Error disable";
+      container detect {
+        tailf:info "Error disable detection";
+        description
+          "Error disable detection";
+        container cause {
+          tailf:info "Enable error disable detection for application";
+          description
+            "Enable error disable detection for application";
+          leaf all {
+            tailf:info "Enable error detection on all cases";
+            description
+              "Enable error detection on all cases";
+            tailf:cli-full-command;
+            type empty;
+          }
+          leaf arp-inspection {
+            tailf:info "Enable error detection for arp inspection";
+            description
+              "Enable error detection for arp inspection";
+            tailf:cli-full-command;
+            type empty;
+          }
+          leaf bpduguard {
+            tailf:info "Enable error detection on bpdu-guard";
+            description
+              "Enable error detection on bpdu-guard";
+            tailf:cli-full-command;
+            type empty;
+          }
+          leaf dhcp-rate-limit {
+            tailf:info "Enable error detection on dhcp-rate-limit";
+            description
+              "Enable error detection on dhcp-rate-limit";
+            tailf:cli-full-command;
+            type empty;
+          }
+          leaf dtp-flap {
+            tailf:info "Enable error detection on dtp-flapping";
+            description
+              "Enable error detection on dtp-flapping";
+            tailf:cli-full-command;
+            type empty;
+          }
+          leaf gbic-invalid {
+            tailf:info "Enable error detection on gbic-invalid";
+            description
+              "Enable error detection on gbic-invalid";
+            tailf:cli-full-command;
+            type empty;
+          }
+          leaf inline-power {
+            tailf:info "Enable error detection for inline-power";
+            description
+              "Enable error detection for inline-power";
+            tailf:cli-full-command;
+            type empty;
+          }
+          leaf l2ptguard {
+            tailf:info "Enable timer to recover from l2protocol-tunnel error disable state";
+            description
+              "Enable timer to recover from l2protocol-tunnel error disable state";
+            tailf:cli-full-command;
+            type empty;
+          }
+          leaf link-flap {
+            tailf:info "Enable error detection on linkstate-flapping";
+            description
+              "Enable error detection on linkstate-flapping";
+            tailf:cli-full-command;
+            type empty;
+          }
+          leaf loopback {
+            tailf:info "Enable error detection on loopback";
+            description
+              "Enable error detection on loopback";
+            tailf:cli-full-command;
+            type empty;
+          }
+          leaf mlacp-minlink {
+            tailf:cli-full-command;
+            type empty;
+          }
+          leaf pagp-flap {
+            tailf:info "Enable error detection on pagp-flapping";
+            description
+              "Enable error detection on pagp-flapping";
+            tailf:cli-full-command;
+            type empty;
+          }
+          leaf pppoe-ia-rate-limit {
+            tailf:info "Enable error detection on PPPoE IA rate-limit";
+            description
+              "Enable error detection on PPPoE IA rate-limit";
+            tailf:cli-full-command;
+            type empty;
+          }
+          leaf security-violation {
+            tailf:info "Enable error detection on 802.1x-guard";
+            description
+              "Enable error detection on 802.1x-guard";
+            tailf:cli-full-command;
+            type empty;
+          }
+          leaf sfp-config-mismatch {
+            tailf:info "Enable error detection on SFP config mismatch";
+            description
+              "Enable error detection on SFP config mismatch";
+            tailf:cli-full-command;
+            type empty;
+          }
+          leaf small-frame {
+            tailf:info "Enable error detection on small_frame";
+            description
+              "Enable error detection on small_frame";
+            tailf:cli-full-command;
+            type empty;
+          }
+        }
+      }
+      container flap-setting {
+        tailf:info "Error disable flap detection setting";
+        description
+          "Error disable flap detection setting";
+        container cause {
+          tailf:info "Set error disable flap parameters for application";
+          description
+            "Set error disable flap parameters for application";
+          container dtp-flap {
+            tailf:info "Set the variables related to detection of dtp flaps";
+            description
+              "Set the variables related to detection of dtp flaps";
+            tailf:cli-compact-syntax;
+            tailf:cli-sequence-commands;
+            leaf max-flaps {
+              tailf:info "maximum flaps allowed before setting to errdisable";
+              description
+                "maximum flaps allowed before setting to errdisable";
+              type uint8 {
+                tailf:info "<1-100>;;flap count";
+                range "1..100";
+              }
+            }
+            leaf time {
+              tailf:info "time period the flaps are counted";
+              description
+                "time period the flaps are counted";
+              type uint8 {
+                tailf:info "<1-120>;;flap count time";
+                range "1..120";
+              }
+            }
+          }
+          container link-flap {
+            tailf:info "Set the variables related to detection of link flaps";
+            description
+              "Set the variables related to detection of link flaps";
+            tailf:cli-compact-syntax;
+            tailf:cli-sequence-commands;
+            leaf max-flaps {
+              tailf:info "maximum flaps allowed before setting to errdisable";
+              description
+                "maximum flaps allowed before setting to errdisable";
+              type uint8 {
+                tailf:info "<1-100>;;flap count";
+                range "1..100";
+              }
+            }
+            leaf time {
+              tailf:info "time period the flaps are counted";
+              description
+                "time period the flaps are counted";
+              type uint8 {
+                tailf:info "<1-120>;;flap count time";
+                range "1..120";
+              }
+            }
+          }
+          container pagp-flap {
+            tailf:info "Set the variables related to detection of pagp flaps";
+            description
+              "Set the variables related to detection of pagp flaps";
+            tailf:cli-compact-syntax;
+            tailf:cli-sequence-commands;
+            leaf max-flaps {
+              tailf:info "maximum flaps allowed before setting to errdisable";
+              description
+                "maximum flaps allowed before setting to errdisable";
+              type uint8 {
+                tailf:info "<1-100>;;flap count";
+                range "1..100";
+              }
+            }
+            leaf time {
+              tailf:info "time period the flaps are counted";
+              description
+                "time period the flaps are counted";
+              type uint8 {
+                tailf:info "<1-120>;;flap count time";
+                range "1..120";
+              }
+            }
+          }
+        }
+      }
+      container recovery {
+        tailf:info "Error disable recovery";
+        description
+          "Error disable recovery";
+        container cause {
+          tailf:info "Enable error disable recovery for application";
+          description
+            "Enable error disable recovery for application";
+          leaf all {
+            tailf:info "Enable timer to recover from all error causes";
+            description
+              "Enable timer to recover from all error causes";
+            type empty;
+          }
+          leaf arp-inspection {
+            tailf:info "Enable timer to recover from arp inspection error disable state";
+            description
+              "Enable timer to recover from arp inspection error disable state";
+            type empty;
+          }
+          leaf bpduguard {
+            tailf:info "Enable timer to recover from BPDU Guard error";
+            description
+              "Enable timer to recover from BPDU Guard error";
+            type empty;
+          }
+          leaf channel-misconfig {
+            tailf:info "(STP)  Enable timer to recover from channel misconfig error";
+            description
+              "(STP)  Enable timer to recover from channel misconfig error";
+            type empty;
+          }
+          leaf dhcp-rate-limit {
+            tailf:info "Enable timer to recover from dhcp-rate-limit error";
+            description
+              "Enable timer to recover from dhcp-rate-limit error";
+            type empty;
+          }
+          leaf dtp-flap {
+            tailf:info "Enable timer to recover from dtp-flap error";
+            description
+              "Enable timer to recover from dtp-flap error";
+            type empty;
+          }
+          leaf gbic-invalid {
+            tailf:info "Enable timer to recover from invalid GBIC error";
+            description
+              "Enable timer to recover from invalid GBIC error";
+            type empty;
+          }
+          leaf inline-power {
+            tailf:info "Enable timer to recover from inline-power error";
+            description
+              "Enable timer to recover from inline-power error";
+            type empty;
+          }
+          leaf l2ptguard {
+            tailf:info "Enable timer to recover from l2protocol-tunnel error disable state";
+            description
+              "Enable timer to recover from l2protocol-tunnel error disable state";
+            type empty;
+          }
+          leaf link-flap {
+            tailf:info "Enable timer to recover from link-flap error";
+            description
+              "Enable timer to recover from link-flap error";
+            type empty;
+          }
+          leaf link-monitor-failure {
+            type empty;
+          }
+          leaf loopback {
+            tailf:info "Enable timer to recover from loopback error";
+            description
+              "Enable timer to recover from loopback error";
+            type empty;
+          }
+          leaf mac-limit {
+            tailf:info "Enable timer to recover from mac limit disable state";
+            description
+              "Enable timer to recover from mac limit disable state";
+            type empty;
+          }
+          leaf mlacp-minlink {
+            tailf:cli-full-command;
+            type empty;
+          }
+          container oam-remote-failure {
+            tailf:cli-display-separated;
+            presence "true";
+            leaf critical-event {
+              tailf:cli-full-command;
+              type empty;
+            }
+            leaf dying-gasp {
+              tailf:cli-full-command;
+              type empty;
+            }
+            leaf link-fault {
+              tailf:cli-full-command;
+              type empty;
+            }
+          }
+          leaf pagp-flap {
+            tailf:info "Enable timer to recover from pagp-flap error";
+            description
+              "Enable timer to recover from pagp-flap error";
+            type empty;
+          }
+          leaf port-mode-failure {
+            tailf:info "Enable timer to recover from port mode change failure";
+            description
+              "Enable timer to recover from port mode change failure";
+            type empty;
+          }
+          leaf pppoe-ia-rate-limit {
+            tailf:info "Enable timer to recover from PPPoE IA rate-limit error";
+            description
+              "Enable timer to recover from PPPoE IA rate-limit error";
+            type empty;
+          }
+          leaf psp {
+            type empty;
+          }
+          leaf psecure-violation {
+            tailf:info "Enable timer to recover from psecure violation error";
+            description
+              "Enable timer to recover from psecure violation error";
+            type empty;
+          }
+          leaf security-violation {
+            tailf:info "Enable timer to recover from 802.1x violation error";
+            description
+              "Enable timer to recover from 802.1x violation error";
+            type empty;
+          }
+          leaf sfp-config-mismatch {
+            tailf:info "Enable timer to recover from SFP config mismatch error";
+            description
+              "Enable timer to recover from SFP config mismatch error";
+            type empty;
+          }
+          leaf small-frame {
+            tailf:info "Enable timer to recover from small frame error";
+            description
+              "Enable timer to recover from small frame error";
+            type empty;
+          }
+          leaf storm-control {
+            tailf:info "Enable timer to recover from storm-control error";
+            description
+              "Enable timer to recover from storm-control error";
+            type empty;
+          }
+          leaf udld {
+            tailf:info "Enable timer to recover from udld error";
+            description
+              "Enable timer to recover from udld error";
+            type empty;
+          }
+          leaf unicast-flood {
+            type empty;
+          }
+          leaf vmps {
+            tailf:info "Enable timer to recover from vmps shutdown error";
+            description
+              "Enable timer to recover from vmps shutdown error";
+            type empty;
+          }
+        }
+        leaf interval {
+          tailf:info "Error disable recovery timer value";
+          description
+            "Error disable recovery timer value";
+          type uint32 {
+            tailf:info "<30-86400>;;timer-interval(sec)";
+            range "30..86400";
+          }
+        }
+      }
+    }
+    container monitor {
+      tailf:info "Monitoring different system events";
+      description
+        "Monitoring different system events";
+      container event-trace {
+        tailf:info "Tracing of system events";
+        description
+          "Tracing of system events";
+      }
+      list session {
+        tailf:info "Configure a SPAN session";
+        description
+          "Configure a SPAN session";
+        tailf:cli-suppress-mode;
+        tailf:cli-delete-when-empty;
+        tailf:cli-compact-syntax;
+        tailf:cli-incomplete-command;
+        key "id";
+        leaf id {
+          type uint8 {
+            tailf:info "<1-66>;;SPAN session number";
+            range "1..66";
+          }
+        }
+        container destination {
+          tailf:info "SPAN destination interface or VLAN";
+          description
+            "SPAN destination interface or VLAN";
+          leaf interface {
+            tailf:info "SPAN destination interface";
+            description
+              "SPAN destination interface";
+            type string;
+          }
+          leaf encapsulation {
+            tailf:cli-hide-in-submode;
+            tailf:info "Set encapsulation for destination interface";
+            description
+              "Set encapsulation for destination interface";
+            type enumeration {
+              enum "dot1q" {
+                tailf:info "interface uses only dot1q encapsulation";
+              }
+              enum "isl" {
+                tailf:info "interface uses only isl encapsulation";
+              }
+              enum "replicate" {
+                tailf:info "interface replicates source encapsulation";
+              }
+            }
+          }
+          leaf ingress {
+            tailf:info "Enable ingress traffic forwarding";
+            description
+              "Enable ingress traffic forwarding";
+            tailf:cli-hide-in-submode;
+            type empty;
+          }
+          leaf ingress-encap {
+            tailf:cli-drop-node-name;
+            tailf:cli-hide-in-submode;
+            when "../ingress" {
+              tailf:dependency "../ingress";
+            }
+            type enumeration {
+              enum "dot1q" {
+                tailf:info "ingress forwarding using dot1q encapsulation";
+              }
+              enum "isl" {
+                tailf:info "ingress forwarding using isl encapsulation";
+              }
+              enum "untagged" {
+                tailf:info "ingress forwarding using untagged encapsulation";
+              }
+            }
+          }
+          leaf vlan {
+            tailf:info "Set default VLAN for untagged ingress traffic";
+            description
+              "Set default VLAN for untagged ingress traffic";
+            tailf:cli-hide-in-submode;
+            when "../ingress" {
+              tailf:dependency "../ingress";
+            }
+            type uint16 {
+              tailf:info "<1-4094>;;Default VLAN for untagged ingress traffic";
+              range "1..4094";
+            }
+          }
+        }
+        container filter {
+          tailf:info "SPAN filter VLAN";
+          description
+            "SPAN filter VLAN";
+          container packet-type {
+            tailf:cli-sequence-commands;
+            tailf:cli-compact-syntax;
+            leaf status {
+              tailf:cli-drop-node-name;
+              type enumeration {
+                enum "good";
+                enum "bad";
+              }
+            }
+            leaf direction {
+              tailf:cli-drop-node-name;
+              type enumeration {
+                enum "rx";
+                enum "tx";
+              }
+            }
+          }
+        }
+        container source {
+          tailf:info "SPAN source interface, VLAN ";
+          description
+            "SPAN source interface, VLAN ";
+          container interface {
+            tailf:info "SPAN source interface";
+            description
+              "SPAN source interface";
+            tailf:cli-diff-dependency "/ios:native/interface";
+            uses interface-grouping;
+          }
+          container vlan {
+            tailf:info "SPAN source VLAN";
+            description
+              "SPAN source VLAN";
+            tailf:cli-compact-syntax;
+            tailf:cli-flatten-container;
+            tailf:cli-sequence-commands;
+            leaf vlan {
+              tailf:cli-drop-node-name;
+              type uint16 {
+                tailf:info "<1-4094>;;SPAN source VLAN";
+                range "1..4094";
+              }
+            }
+            leaf direction {
+              tailf:cli-drop-node-name;
+              type enumeration {
+                enum "both" {
+                  tailf:info "Monitor received and transmitted traffic";
+                }
+                enum "rx" {
+                  tailf:info "Monitor received traffic only";
+                }
+                enum "tx" {
+                  tailf:info "Monitor transmitted traffic only";
+                }
+              }
+            }
+          }
+        }
+      }
+    }
+    list tftp-server {
+      tailf:info "Provide TFTP service for netload requests";
+      description
+        "Provide TFTP service for netload requests";
+      tailf:cli-suppress-mode;
+      tailf:cli-delete-when-empty;
+      tailf:cli-compact-syntax;
+      key "name";
+      leaf name {
+        type string;
+      }
+    }
+    container radius-server {
+      tailf:info "Modify RADIUS query parameters";
+      description
+        "Modify RADIUS query parameters";
+      list attribute {
+        tailf:info "Customize selected radius attributes";
+        description
+          "Customize selected radius attributes";
+        tailf:cli-suppress-mode;
+        key "number";
+        leaf number {
+          type uint32 {
+            tailf:info "Framed IP address attribute number";
+          }
+        }
+        leaf send-attribute {
+          tailf:cli-drop-node-name;
+          type enumeration {
+            enum "on-for-login-auth" {
+              tailf:info "Send attribute number in login-auth packet";
+            }
+            enum "include-in-access-req" {
+              tailf:info "Send attribute number in access-req packet";
+            }
+          }
+        }
+      }
+      container dead-criteria {
+        tailf:info "Set the criteria used to decide when a radius server ismarked dead";
+        description
+          "Set the criteria used to decide when a radius server ismarked dead";
+        tailf:cli-compact-syntax;
+        leaf time {
+          tailf:info "The time during which no properly formed response must be recievedfrom the RADIUS server";
+          description
+            "The time during which no properly formed response must be recievedfrom the RADIUS server";
+          type uint8 {
+            tailf:info "<1-120>;;Time in seconds during which no response must be recieved from theRADIUS server in order to consider it dead";
+            range "1..120";
+          }
+        }
+        leaf tries {
+          tailf:info "The number of times the router must fail to recieve a response fromthe radius server to mark it as dead";
+          description
+            "The number of times the router must fail to recieve a response fromthe radius server to mark it as dead";
+          tailf:cli-full-command;
+          type uint8 {
+            tailf:info "<1-100>;;Number of transmits to radius server without responses beforemarking server as dead";
+            range "1..100";
+          }
+        }
+      }
+      leaf deadtime {
+        tailf:info "Time to stop using a server that doesn't respond";
+        description
+          "Time to stop using a server that doesn't respond";
+        tailf:cli-full-command;
+        type uint32 {
+          tailf:info "<1-1440>;;time in minutes";
+          range "1..1440";
+        }
+      }
+      list host {
+        tailf:info "Specify a RADIUS server";
+        description
+          "Specify a RADIUS server";
+        tailf:cli-suppress-mode;
+        tailf:cli-delete-when-empty;
+        tailf:cli-compact-syntax;
+        key "id";
+        leaf id {
+          type union {
+            type string;
+            type inet:ipv4-address {
+              tailf:info "Hostname or A.B.C.D;;IP address of RADIUS server";
+            }
+          }
+        }
+        leaf acct-port {
+          tailf:info "UDP port for RADIUS accounting server (default is 1646)";
+          description
+            "UDP port for RADIUS accounting server (default is 1646)";
+          type uint16 {
+            tailf:info "<0-65535>;;Port number";
+            range "0..65535";
+          }
+        }
+        leaf auth-port {
+          tailf:info "UDP port for RADIUS authentication server (default is 1645)";
+          description
+            "UDP port for RADIUS authentication server (default is 1645)";
+          type uint16 {
+            tailf:info "<0-65535>;;Port number";
+            range "0..65535";
+          }
+        }
+        leaf key {
+          tailf:info "per-server encryption key (overrides default)";
+          description
+            "per-server encryption key (overrides default)";
+          type string {
+            tailf:info "LINE;;The UNENCRYPTED (cleartext) server key";
+          }
+        }
+        container test {
+          tailf:info "Configure server automated testing";
+          description
+            "Configure server automated testing";
+          list username {
+            tailf:info "A name (from local database) that should be used to send requests.";
+            description
+              "A name (from local database) that should be used to send requests.";
+            tailf:cli-suppress-mode;
+            key "name";
+            leaf name {
+              type string {
+                tailf:info "WORD;;User Name";
+              }
+            }
+            container key {
+              tailf:info "per-server encryption key (overrides default)";
+              description
+                "per-server encryption key (overrides default)";
+              tailf:cli-compact-syntax;
+              leaf encryption {
+                tailf:cli-drop-node-name;
+                type enumeration {
+                  enum "0" {
+                    tailf:info "Specifies an UNENCRYPTED key will follow";
+                  }
+                  enum "7" {
+                    tailf:info "Specifies HIDDEN key will follow";
+                  }
+                }
+              }
+              leaf clear-key {
+                tailf:cli-drop-node-name;
+                tailf:cli-full-command;
+                type string {
+                  tailf:info "WORD;;The UNENCRYPTED (cleartext) shared key";
+                }
+              }
+            }
+          }
+        }
+      }
+      container vsa {
+        tailf:info "Vendor specific attribute configuration";
+        description
+          "Vendor specific attribute configuration";
+        container disallow {
+          tailf:info "Forbid certain VSA behaviour";
+          description
+            "Forbid certain VSA behaviour";
+          leaf unknown {
+            tailf:info "Forbid unknown VSAs";
+            description
+              "Forbid unknown VSAs";
+            type empty;
+          }
+        }
+        container send {
+          tailf:info "Send vendor-specific attributes in requests";
+          description
+            "Send vendor-specific attributes in requests";
+          presence "true";
+          container accounting {
+            tailf:info "Send in accounting requests";
+            description
+              "Send in accounting requests";
+            presence "true";
+            leaf threegpp2 {
+              tailf:alt-name "3gpp2";
+              tailf:info "Send 3GPP2 VSAs in accounting requests";
+              description
+                "Send 3GPP2 VSAs in accounting requests";
+              type empty;
+            }
+          }
+          container authentication {
+            tailf:info "Send in access requests";
+            description
+              "Send in access requests";
+            presence "true";
+            leaf threegpp2 {
+              tailf:alt-name "3gpp2";
+              tailf:info "Send 3GPP2 VSAs in accounting requests";
+              description
+                "Send 3GPP2 VSAs in accounting requests";
+              type empty;
+            }
+          }
+          container cisco-nas-port {
+            tailf:info "Send cisco-nas-port VSA(2)";
+            description
+              "Send cisco-nas-port VSA(2)";
+            presence "true";
+            leaf threegpp2 {
+              tailf:alt-name "3gpp2";
+              tailf:info "Send 3GPP2 VSAs in accounting requests";
+              description
+                "Send 3GPP2 VSAs in accounting requests";
+              type empty;
+            }
+          }
+        }
+      }
+    }
+    container radius {
+      tailf:info "RADIUS server configuration command";
+      description
+        "RADIUS server configuration command";
+      list filter {
+        tailf:info "Packet filter configuration";
+        description
+          "Packet filter configuration";
+        key "id";
+        leaf id {
+          type string {
+            tailf:info "WORD;;Name of the filter (max 31 characters, longer will be rejected";
+          }
+        }
+        leaf match {
+          tailf:cli-drop-node-name;
+          tailf:cli-prefix-key;
+          type enumeration {
+            enum "match-all" {
+              tailf:info "Filter if all of the attributes matches";
+            }
+            enum "match-any" {
+              tailf:info "Filter if any of the attributes matches";
+            }
+          }
+        }
+      }
+      list server {
+        tailf:info "Server configuration";
+        description
+          "Server configuration";
+        key "id";
+        leaf id {
+          type string {
+            tailf:info "WORD;;Name for the radius server configuration";
+          }
+        }
+        container address {
+          tailf:info "Specify the radius server address";
+          description
+            "Specify the radius server address";
+          container ipv4 {
+            tailf:info "IPv4 Address";
+            description
+              "IPv4 Address";
+            tailf:cli-compact-syntax;
+            tailf:cli-sequence-commands {
+              tailf:cli-reset-siblings;
+            }
+            leaf host {
+              tailf:cli-drop-node-name;
+              type string {
+                tailf:info "Hostname or A.B.C.D;;IPv4 Address of radius server";
+              }
+            }
+            leaf auth-port {
+              tailf:info "UDP port for RADIUS authentication server (default is 1645)";
+              description
+                "UDP port for RADIUS authentication server (default is 1645)";
+              tailf:cli-optional-in-sequence;
+              type uint16 {
+                tailf:info "<0-65535>;;Port number";
+                range "0..65535";
+              }
+            }
+            leaf acct-port {
+              tailf:info "UDP port for RADIUS accounting server (default is 1646)";
+              description
+                "UDP port for RADIUS accounting server (default is 1646)";
+              type uint16 {
+                tailf:info "<0-65535>;;Port number";
+                range "0..65535";
+              }
+            }
+          }
+        }
+        container backoff {
+          tailf:info "Retry backoff pattern(Default is retransmits with constant delay)";
+          description
+            "Retry backoff pattern(Default is retransmits with constant delay)";
+          container exponential {
+            tailf:info "Exponential retransmit backoff";
+            description
+              "Exponential retransmit backoff";
+            tailf:cli-compact-syntax;
+            tailf:cli-sequence-commands {
+              tailf:cli-reset-siblings;
+            }
+            presence "true";
+            leaf max-delay {
+              tailf:cli-optional-in-sequence;
+              tailf:info "Max delay between retransmits(default is 3 min)";
+              description
+                "Max delay between retransmits(default is 3 min)";
+              type uint8 {
+                tailf:info "<1-120>;;Max time (in minutes) to delay between retransmits";
+                range "1..120";
+              }
+            }
+            leaf backoff-retry {
+              tailf:info "Exponential backoff retry number(default is 8)";
+              description
+                "Exponential backoff retry number(default is 8)";
+              type uint8 {
+                tailf:info "<1-50>;;Number of retransmits in the exponential backoff mode";
+                range "1..50";
+              }
+            }
+          }
+        }
+        container key {
+          tailf:info "Per-server encryption key";
+          description
+            "Per-server encryption key";
+          tailf:cli-compact-syntax;
+          tailf:cli-sequence-commands {
+            tailf:cli-reset-siblings;
+          }
+          leaf encryption {
+            tailf:cli-drop-node-name;
+            tailf:cli-incomplete-command;
+            tailf:cli-optional-in-sequence;
+            type enumeration {
+              enum "0" {
+                tailf:info "Specifies an UNENCRYPTED key will follow";
+              }
+              enum "5" {
+                tailf:info "Specifies a HIDDEN key will follow";
+              }
+            }
+          }
+          leaf key {
+            tailf:cli-drop-node-name;
+            tailf:cli-multi-value;
+            type string {
+              tailf:info "LINE;;The UNCRYPTED (cleartext) shared key";
+            }
+          }
+        }
+      }
+    }
+    container zone {
+      tailf:info "FW with zoning";
+      description
+        "FW with zoning";
+      list security {
+        tailf:info "Security zone";
+        description
+          "Security zone";
+        tailf:cli-mode-name "config-sec-zone";
+        tailf:cli-full-command;
+        key "id";
+        leaf id {
+          type string {
+            tailf:info "WORD;;Name of security zone";
+          }
+        }
+        leaf description {
+          tailf:info "Zone description";
+          description
+            "Zone description";
+          tailf:cli-multi-value;
+          type string {
+            tailf:info "LINE;;Description of zone (up to 200 characters)";
+          }
+        }
+        leaf protection {
+          tailf:info "config sync cookie protection against sync flood";
+          description
+            "config sync cookie protection against sync flood";
+          type string {
+            tailf:info "WORD;;parameter map name";
+          }
+        }
+      }
+    }
+    container zone-pair {
+      tailf:info "Zone pair command";
+      description
+        "Zone pair command";
+      list security {
+        tailf:info "Zone-pair name";
+        description
+          "Zone-pair name";
+        tailf:cli-sequence-commands {
+          tailf:cli-reset-siblings;
+        }
+        tailf:cli-mode-name "config-sec-zone-pair";
+        key "id";
+        leaf id {
+          type string {
+            tailf:info "WORD;;Name of zone-pair";
+          }
+        }
+        leaf source {
+          tailf:info "Source zone";
+          description
+            "Source zone";
+          tailf:cli-hide-in-submode;
+          tailf:non-strict-leafref {
+            path "/ios:native/zone/security/id";
+          }
+          type string {
+            tailf:info "WORD;;Name of source zone";
+          }
+        }
+        leaf destination {
+          tailf:info "Destination zone";
+          description
+            "Destination zone";
+          tailf:cli-hide-in-submode;
+          tailf:non-strict-leafref {
+            path "/ios:native/zone/security/id";
+          }
+          type string {
+            tailf:info "WORD;;Name of destination zone";
+          }
+        }
+        leaf description {
+          tailf:info "Zone description";
+          description
+            "Zone description";
+          tailf:cli-break-sequence-commands;
+          tailf:cli-multi-value;
+          type string {
+            tailf:info "LINE;;Description of zone (up to 200 characters)";
+            length "1..200";
+          }
+        }
+        container service-policy {
+          tailf:info "Configure CBAC Service Policy";
+          description
+            "Configure CBAC Service Policy";
+          container type {
+            tailf:info "Service Policy type";
+            description
+              "Service Policy type";
+            leaf inspect {
+              tailf:info "Configure CBAC Service Policy type inspect";
+              description
+                "Configure CBAC Service Policy type inspect";
+              type string;
+              tailf:non-strict-leafref {
+                path "/ios:native/policy-map/name";
+              }
+            }
+          }
+        }
+      }
+    }
+    container aaa {
+      tailf:info "Authentication, Authorization and Accounting.";
+      description
+        "Authentication, Authorization and Accounting.";
+      tailf:cli-incomplete-command;
+      leaf new-model {
+        tailf:info "Enable NEW access control commands and functions.(Disables OLD commands.)";
+        description
+          "Enable NEW access control commands and functions.(Disables OLD commands.)";
+        type empty;
+      }
+      container group {
+        tailf:info "AAA group definitions";
+        description
+          "AAA group definitions";
+        tailf:cli-diff-dependency "/ios:native/aaa/new-model";
+        container server {
+          tailf:info "AAA Server group definitions";
+          description
+            "AAA Server group definitions";
+          list tacacsplus {
+            tailf:alt-name "tacacs+";
+            tailf:info "Tacacs+ server-group definition";
+            description
+              "Tacacs+ server-group definition";
+            tailf:cli-mode-name "config-sg-tacacs+";
+            tailf:cli-full-command;
+            key "name";
+            leaf name {
+              type string {
+                tailf:info "WORD;;Server-group name";
+              }
+            }
+            container server {
+              tailf:info "Specify a TACACS server";
+              description
+                "Specify a TACACS server";
+              leaf name {
+                tailf:info "Name of tacacs server";
+                description
+                  "Name of tacacs server";
+                type string {
+                  tailf:info "WORD;;Tacacs server name";
+                }
+              }
+            }
+            list server-private {
+              tailf:info "Define a private TACACS server (per group)";
+              description
+                "Define a private TACACS server (per group)";
+              tailf:cli-suppress-mode;
+              tailf:cli-delete-when-empty;
+              tailf:cli-compact-syntax;
+              tailf:cli-sequence-commands;
+              tailf:cli-reset-container;
+              key "name";
+              leaf name {
+                type host-type {
+                  tailf:info "Hostname or A.B.C.D;;IP address of TACACS server";
+                }
+              }
+              leaf timeout {
+                tailf:info "Time to wait for this TACACS server to reply (overrides default)";
+                description
+                  "Time to wait for this TACACS server to reply (overrides default)";
+                tailf:cli-optional-in-sequence;
+                type uint16 {
+                  tailf:info "<1-1000>;;Timeout value in seconds to wait for server to reply";
+                  range "1..1000";
+                }
+              }
+              container key {
+                tailf:info "per-server encryption key (overrides default)";
+                description
+                  "per-server encryption key (overrides default)";
+                tailf:cli-compact-syntax;
+                tailf:cli-flatten-container;
+                tailf:cli-sequence-commands;
+                leaf encryption {
+                  tailf:cli-drop-node-name;
+                  tailf:cli-incomplete-command;
+                  tailf:cli-optional-in-sequence;
+                  type enumeration {
+                    enum "0" {
+                      tailf:info "Specifies an UNENCRYPTED key will follow";
+                    }
+                    enum "7" {
+                      tailf:info "Specifies HIDDEN key will follow";
+                    }
+                  }
+                }
+                leaf key {
+                  tailf:cli-drop-node-name;
+                  tailf:cli-full-command;
+                  tailf:cli-multi-value;
+                  type string {
+                    tailf:info "LINE;;The UNENCRYPTED (cleartext) shared key";
+                  }
+                }
+              }
+            }
+            container ip {
+              tailf:info "Internet Protocol config commands";
+              description
+                "Internet Protocol config commands";
+              container tacacs {
+                tailf:info "TACACS configuration commands";
+                description
+                  "TACACS configuration commands";
+                container source-interface {
+                  tailf:info "Specify interface for source address in TACACS packets";
+                  description
+                    "Specify interface for source address in TACACS packets";
+                  tailf:cli-diff-dependency "/ios:native/interface";
+                  uses interface-grouping;
+                }
+              }
+              container vrf {
+                tailf:info "Set VPN Routing Forwarding to use with the servers";
+                description
+                  "Set VPN Routing Forwarding to use with the servers";
+                leaf forwarding {
+                  tailf:info "Configure forwarding table";
+                  description
+                    "Configure forwarding table";
+                  type string {
+                    tailf:info "WORD;;Table name";
+                  }
+                }
+              }
+            }
+          }
+          list radius {
+            tailf:info "Radius server-group definition";
+            description
+              "Radius server-group definition";
+            tailf:cli-mode-name "config-sg-radius";
+            key "name";
+            leaf name {
+              type string {
+                tailf:info "WORD;;Server-group name";
+              }
+            }
+            container server {
+              tailf:info "Specify a RADIUS server";
+              description
+                "Specify a RADIUS server";
+              list name {
+                tailf:info "Name of radius server";
+                description
+                  "Name of radius server";
+                tailf:cli-suppress-mode;
+                key "name";
+                leaf name {
+                  type string;
+                  tailf:non-strict-leafref {
+                    path "/ios:native/aaa/group/server/radius/name";
+                  }
+                }
+              }
+              list direct {
+                tailf:cli-drop-node-name;
+                tailf:cli-compact-syntax;
+                tailf:cli-suppress-mode;
+                key "name";
+                leaf name {
+                  type inet:host {
+                    tailf:info "Hostname or A.B.C.D;;IP address of RADIUS server";
+                  }
+                  tailf:cli-disallow-value "name";
+                }
+                leaf auth-port {
+                  tailf:info "UDP port for RADIUS authentication server (default is 1645)";
+                  description
+                    "UDP port for RADIUS authentication server (default is 1645)";
+                  type uint16 {
+                    tailf:info "<0-65535>;;Port number";
+                    range "0..65535";
+                  }
+                }
+                leaf acct-port {
+                  tailf:info "UDP port for RADIUS accounting server (default is 1646)";
+                  description
+                    "UDP port for RADIUS accounting server (default is 1646)";
+                  type uint16 {
+                    tailf:info "<0-65535>;;Port number";
+                    range "0..65535";
+                  }
+                }
+              }
+            }
+            container ip {
+              tailf:info "Internet Protocol config commands";
+              description
+                "Internet Protocol config commands";
+              container radius {
+                tailf:info "RADIUS configuration commands";
+                description
+                  "RADIUS configuration commands";
+                leaf source-interface {
+                  tailf:info "Specify interface for source address in RADIUS packets";
+                  type string;
+                }
+              }
+              container vrf {
+                tailf:info "Set VPN Routing Forwarding to use with the servers";
+                description
+                  "Set VPN Routing Forwarding to use with the servers";
+                leaf forwarding {
+                  tailf:info "Configure forwarding table";
+                  description
+                    "Configure forwarding table";
+                  tailf:cli-diff-dependency "/ios:native/ip/vrf";
+                  tailf:cli-diff-dependency "/ios:native/vrf/definition";
+                  type string {
+                    tailf:info "WORD;;Table name";
+                  }
+                }
+              }
+            }
+            container load-balance {
+              tailf:info "Server group load-balancing options.";
+              description
+                "Server group load-balancing options.";
+              container method {
+                tailf:info "Method by which the next host will be picked.";
+                description
+                  "Method by which the next host will be picked.";
+                container least-outstanding {
+                  tailf:info "Pick the server with the least transactions outstanding.";
+                  description
+                    "Pick the server with the least transactions outstanding.";
+                  leaf batch-size {
+                    tailf:info "Size of the transaction batch that should be load-balanced.";
+                    description
+                      "Size of the transaction batch that should be load-balanced.";
+                    type uint32 {
+                      tailf:info "<1-2147483647>;;Number of transactions after which load-balancing should be performed (Default 25)";
+                      range "1..2147483647";
+                    }
+                  }
+                  leaf ignore-preferred-server {
+                    tailf:info "Should the preferred-server be ignored.";
+                    description
+                      "Should the preferred-server be ignored.";
+                    tailf:cli-full-command;
+                    type empty;
+                  }
+                }
+              }
+            }
+          }
+        }
+      }
+      container authentication {
+        tailf:info "Authentication configurations parameters.";
+        description
+          "Authentication configurations parameters.";
+        tailf:cli-diff-dependency "/ios:native/aaa/new-model";
+        container attempts {
+          tailf:info "Set the maximum number of authentication attempts";
+          description
+            "Set the maximum number of authentication attempts";
+          leaf login {
+            tailf:info "Set the max. number of attempts for login service";
+            description
+              "Set the max. number of attempts for login service";
+            type uint8 {
+              tailf:info "<1-25>;;Specify value for the number of attempts";
+              range "1..25";
+            }
+          }
+        }
+        container dot1x {
+          tailf:info "Set authentication lists for IEEE 802.1x.";
+          description
+            "Set authentication lists for IEEE 802.1x.";
+          list dot1x-list {
+            tailf:cli-suppress-mode;
+            tailf:cli-delete-when-empty;
+            tailf:cli-compact-syntax;
+            key "name";
+            leaf name {
+              type string {
+                tailf:info "WORD;;Named authentication list";
+              }
+            }
+            uses aaa-authentication-dot1x-grouping;
+          }
+          container default {
+            tailf:info "The default authentication list.";
+            description
+              "The default authentication list.";
+            uses aaa-authentication-dot1x-grouping;
+          }
+        }
+        container enable {
+          tailf:info "Set authentication list for enable.";
+          description
+            "Set authentication list for enable.";
+          container default {
+            tailf:info "The default authentication list.";
+            description
+              "The default authentication list.";
+            tailf:cli-compact-syntax;
+            leaf enable {
+              tailf:info "Use enable password for authentication.";
+              description
+                "Use enable password for authentication.";
+              type empty;
+            }
+            leaf group {
+              tailf:info "Use Server-group";
+              description
+                "Use Server-group";
+              type union {
+                type string {
+                  tailf:info "WORD;;Server-group name";
+                }
+                type enumeration {
+                  enum "radius" {
+                    tailf:info "Use list of all Radius hosts.";
+                  }
+                  enum "tacacs+" {
+                    tailf:info "+  Use list of all Tacacs+ hosts.";
+                  }
+                }
+              }
+            }
+            leaf line {
+              tailf:info "Use line password for authentication.";
+              description
+                "Use line password for authentication.";
+              type empty;
+            }
+            leaf none {
+              tailf:info "No authentication.";
+              description
+                "No authentication.";
+              tailf:cli-full-command;
+              type empty;
+            }
+          }
+        }
+        list login {
+          tailf:info "Set authentication lists for logins.";
+          description
+            "Set authentication lists for logins.";
+          tailf:cli-suppress-mode;
+          tailf:cli-delete-when-empty;
+          tailf:cli-compact-syntax;
+          key "name";
+          leaf name {
+            type string {
+              tailf:info "WORD;;Named authentication list (max 31 characters,longer will be rejected).";
+              length "1..31";
+            }
+          }
+          leaf group {
+            tailf:info "Use Server-group";
+            description
+              "Use Server-group";
+            type union {
+              type string {
+                tailf:info "WORD;;Server-group name";
+              }
+              type enumeration {
+                enum "ldap" {
+                  tailf:info "Use list of all LDAP hosts.";
+                }
+                enum "radius" {
+                  tailf:info "Use list of all Radius hosts.";
+                }
+                enum "tacacs+" {
+                  tailf:info "+  Use list of all Tacacs+ hosts.";
+                }
+              }
+            }
+          }
+          leaf local {
+            tailf:info "Use local username authentication.";
+            description
+              "Use local username authentication.";
+            type empty;
+          }
+          leaf none {
+            tailf:info "NO authentication.";
+            description
+              "NO authentication.";
+            tailf:cli-full-command;
+            type empty;
+          }
+          leaf enable {
+            tailf:info "Use enable password for authentication.";
+            description
+              "Use enable password for authentication.";
+            type empty;
+          }
+          leaf line {
+            tailf:info "Use line password for authentication.";
+            description
+              "Use line password for authentication.";
+            type empty;
+          }
+        }
+        list ppp {
+          tailf:info "Set authentication lists for ppp.";
+          description
+            "Set authentication lists for ppp.";
+          tailf:cli-suppress-mode;
+          tailf:cli-delete-when-empty;
+          tailf:cli-compact-syntax;
+          tailf:cli-sequence-commands {
+            tailf:cli-reset-all-siblings;
+          }
+          key "id";
+          leaf id {
+            type string {
+              tailf:info "WORD;;Named authentication list (max 31 characters, longer will be rejected).";
+              length "1..31";
+            }
+          }
+          container a1 {
+            tailf:cli-drop-node-name;
+            tailf:cli-flatten-container;
+            tailf:cli-compact-syntax;
+            choice auth-choice {
+              leaf if-needed {
+                tailf:info "Only authenticate if needed.";
+                description
+                  "Only authenticate if needed.";
+                tailf:cli-optional-in-sequence;
+                type empty;
+              }
+              leaf none {
+                tailf:info "NO authentication.";
+                description
+                  "NO authentication.";
+                type empty;
+              }
+              leaf krb5 {
+                tailf:info "Use Kerberos 5 authentication.";
+                description
+                  "Use Kerberos 5 authentication.";
+                type empty;
+              }
+              leaf local {
+                tailf:info "Use local username authentication.";
+                description
+                  "Use local username authentication.";
+                type empty;
+              }
+              leaf local-case {
+                tailf:info "Use case-sensitive local username authentication.";
+                description
+                  "Use case-sensitive local username authentication.";
+                type empty;
+              }
+              leaf group {
+                tailf:info "Use Server-group";
+                description
+                  "Use Server-group";
+                type union {
+                  type string {
+                    tailf:info "WORD;;Server-group name";
+                  }
+                  type enumeration {
+                    enum "radius" {
+                      tailf:info "Use list of all Radius hosts.";
+                    }
+                    enum "tacacs+" {
+                      tailf:info "Use list of all Tacacs+ hosts.";
+                    }
+                  }
+                }
+              }
+              leaf cache {
+                tailf:info "Use Cached-group";
+                description
+                  "Use Cached-group";
+                type union {
+                  type string {
+                    tailf:info "WORD;;Server-group name";
+                  }
+                  type enumeration {
+                    enum "radius" {
+                      tailf:info "Use list of all Radius hosts.";
+                    }
+                    enum "tacacs+" {
+                      tailf:info "Use list of all Tacacs+ hosts.";
+                    }
+                  }
+                }
+              }
+            }
+          }
+          container a2 {
+            when "not(../a1/none)" {
+              tailf:dependency "../a1/none";
+            }
+            tailf:cli-drop-node-name;
+            tailf:cli-flatten-container;
+            tailf:cli-compact-syntax;
+            choice auth-choice {
+              leaf group {
+                tailf:info "Use Server-group";
+                description
+                  "Use Server-group";
+                type union {
+                  type string {
+                    tailf:info "WORD;;Server-group name";
+                  }
+                  type enumeration {
+                    enum "radius" {
+                      tailf:info "Use list of all Radius hosts.";
+                    }
+                    enum "tacacs+" {
+                      tailf:info "Use list of all Tacacs+ hosts.";
+                    }
+                  }
+                }
+              }
+              leaf cache {
+                tailf:info "Use Cached-group";
+                description
+                  "Use Cached-group";
+                type union {
+                  type string {
+                    tailf:info "WORD;;Server-group name";
+                  }
+                  type enumeration {
+                    enum "radius" {
+                      tailf:info "Use list of all Radius hosts.";
+                    }
+                    enum "tacacs+" {
+                      tailf:info "Use list of all Tacacs+ hosts.";
+                    }
+                  }
+                }
+              }
+              leaf none {
+                tailf:info "NO authentication.";
+                description
+                  "NO authentication.";
+                type empty;
+              }
+              leaf krb5 {
+                when "not(../../a1/krb5)" {
+                  tailf:dependency "../../a1/krb5";
+                }
+                tailf:info "Use Kerberos 5 authentication.";
+                type empty;
+              }
+              leaf local {
+                when "not(../../a1/local) and not(../../a1/local-case)" {
+                  tailf:dependency "../../a1/local";
+                  tailf:dependency "../../a1/local-case";
+                }
+                tailf:info "Use local username authentication.";
+                type empty;
+              }
+              leaf local-case {
+                when "not(../../a1/local) and not(../../a1/local-case)" {
+                  tailf:dependency "../../a1/local";
+                  tailf:dependency "../../a1/local-case";
+                }
+                tailf:info "Use case-sensitive local username authentication.";
+                type empty;
+              }
+            }
+          }
+          container a3 {
+            when "not(../a2/none) and not (../a1/none)" {
+              tailf:dependency "../a1/none";
+              tailf:dependency "../a2/none";
+            }
+            tailf:cli-drop-node-name;
+            tailf:cli-flatten-container;
+            tailf:cli-compact-syntax;
+            choice auth-choice {
+              leaf group {
+                tailf:info "Use Server-group";
+                description
+                  "Use Server-group";
+                type union {
+                  type string {
+                    tailf:info "WORD;;Server-group name";
+                  }
+                  type enumeration {
+                    enum "radius" {
+                      tailf:info "Use list of all Radius hosts.";
+                    }
+                    enum "tacacs+" {
+                      tailf:info "Use list of all Tacacs+ hosts.";
+                    }
+                  }
+                }
+              }
+              leaf cache {
+                tailf:info "Use Cached-group";
+                description
+                  "Use Cached-group";
+                type union {
+                  type string {
+                    tailf:info "WORD;;Server-group name";
+                  }
+                  type enumeration {
+                    enum "radius" {
+                      tailf:info "Use list of all Radius hosts.";
+                    }
+                    enum "tacacs+" {
+                      tailf:info "Use list of all Tacacs+ hosts.";
+                    }
+                  }
+                }
+              }
+              leaf none {
+                tailf:info "NO authentication.";
+                description
+                  "NO authentication.";
+                type empty;
+              }
+              leaf krb5 {
+                when "not(../../a1/krb5) and not(../../a2/krb5)" {
+                  tailf:dependency "../../a1/krb5";
+                  tailf:dependency "../../a2/krb5";
+                }
+                tailf:info "Use Kerberos 5 authentication.";
+                type empty;
+              }
+              leaf local {
+                when "not(../../a1/local) and not(../../a1/local-case) and not(../../a2/local) and not(../../a2/local-case)" {
+                  tailf:dependency "../../a1/local";
+                  tailf:dependency "../../a1/local-case";
+                  tailf:dependency "../../a2/local";
+                  tailf:dependency "../../a2/local-case";
+                }
+                tailf:info "Use local username authentication.";
+                type empty;
+              }
+              leaf local-case {
+                when "not(../../a1/local) and not(../../a1/local-case) and not(../../a2/local) and not(../../a2/local-case)" {
+                  tailf:dependency "../../a1/local";
+                  tailf:dependency "../../a1/local-case";
+                  tailf:dependency "../../a2/local";
+                  tailf:dependency "../../a2/local-case";
+                }
+                tailf:info "Use case-sensitive local username authentication.";
+                type empty;
+              }
+            }
+          }
+          container a4 {
+            when "not(../a2/none) and not(../a1/none) and not(../a3/none)" {
+              tailf:dependency "../a1/none";
+              tailf:dependency "../a2/none";
+              tailf:dependency "../a3/none";
+            }
+            tailf:cli-drop-node-name;
+            tailf:cli-flatten-container;
+            tailf:cli-compact-syntax;
+            choice auth-choice {
+              leaf group {
+                tailf:info "Use Server-group";
+                description
+                  "Use Server-group";
+                type union {
+                  type string {
+                    tailf:info "WORD;;Server-group name";
+                  }
+                  type enumeration {
+                    enum "radius" {
+                      tailf:info "Use list of all Radius hosts.";
+                    }
+                    enum "tacacs+" {
+                      tailf:info "Use list of all Tacacs+ hosts.";
+                    }
+                  }
+                }
+              }
+              leaf cache {
+                tailf:info "Use Cached-group";
+                description
+                  "Use Cached-group";
+                type union {
+                  type string {
+                    tailf:info "WORD;;Server-group name";
+                  }
+                  type enumeration {
+                    enum "radius" {
+                      tailf:info "Use list of all Radius hosts.";
+                    }
+                    enum "tacacs+" {
+                      tailf:info "Use list of all Tacacs+ hosts.";
+                    }
+                  }
+                }
+              }
+              leaf none {
+                tailf:info "NO authentication.";
+                description
+                  "NO authentication.";
+                type empty;
+              }
+              leaf krb5 {
+                when "not(../../a1/krb5) and not(../../a2/krb5) and not(../../a3/krb5)" {
+                  tailf:dependency "../../a1/krb5";
+                  tailf:dependency "../../a2/krb5";
+                  tailf:dependency "../../a3/krb5";
+                }
+                tailf:info "Use Kerberos 5 authentication.";
+                type empty;
+              }
+              leaf local {
+                when "not(../../a1/local) and not(../../a1/local-case) and not(../../a2/local) and not(../../a2/local-case) and not(../../a3/local) and not(../../a3/local-case)" {
+                  tailf:dependency "../../a1/local";
+                  tailf:dependency "../../a1/local-case";
+                  tailf:dependency "../../a2/local";
+                  tailf:dependency "../../a2/local-case";
+                  tailf:dependency "../../a3/local";
+                  tailf:dependency "../../a3/local-case";
+                }
+                tailf:info "Use local username authentication.";
+                type empty;
+              }
+              leaf local-case {
+                when "not(../../a1/local) and not(../../a1/local-case) and not(../../a2/local) and not(../../a2/local-case) and not(../../a3/local) and not(../../a3/local-case)" {
+                  tailf:dependency "../../a1/local";
+                  tailf:dependency "../../a1/local-case";
+                  tailf:dependency "../../a2/local";
+                  tailf:dependency "../../a2/local-case";
+                  tailf:dependency "../../a3/local";
+                  tailf:dependency "../../a3/local-case";
+                }
+                tailf:info "Use case-sensitive local username authentication.";
+                type empty;
+              }
+            }
+          }
+        }
+      }
+      container authorization {
+        tailf:info "Authorization configurations parameters.";
+        description
+          "Authorization configurations parameters.";
+        tailf:cli-incomplete-command;
+        tailf:cli-diff-dependency "/ios:native/aaa/new-model";
+        list commands {
+          tailf:info "For exec (shell) commands.";
+          description
+            "For exec (shell) commands.";
+          tailf:cli-suppress-mode;
+          tailf:cli-delete-when-empty;
+          tailf:cli-compact-syntax;
+          tailf:cli-incomplete-command;
+          key "level list-name";
+          leaf level {
+            tailf:info "Enable level";
+            description
+              "Enable level";
+            type uint8 {
+              range "0..15";
+            }
+          }
+          leaf list-name {
+            tailf:cli-incomplete-command;
+            tailf:cli-disallow-value "group";
+            type union {
+              type enumeration {
+                enum "default" {
+                  tailf:info "The default authorization list.";
+                }
+              }
+              type string {
+                tailf:info "WORD;;Named authorization list.";
+              }
+            }
+          }
+          leaf group {
+            tailf:info "Use server-group.";
+            description
+              "Use server-group.";
+            tailf:cli-disallow-value "if-authenticated|local|none";
+            type union {
+              type enumeration {
+                enum "tacacs+" {
+                  tailf:info "Use list of all Tacacs+ hosts.";
+                }
+              }
+              type string {
+                tailf:info "WORD;;Server-group name";
+              }
+            }
+          }
+          leaf if-authenticated {
+            tailf:info "Succeed if user has authenticated.";
+            description
+              "Succeed if user has authenticated.";
+            type empty;
+          }
+          leaf local {
+            tailf:info "Use local database.";
+            description
+              "Use local database.";
+            type empty;
+          }
+          leaf none {
+            tailf:info "No authorization (always succeeds).";
+            description
+              "No authorization (always succeeds).";
+            type empty;
+          }
+        }
+        leaf console {
+          type empty;
+        }
+        leaf config-commands {
+          tailf:info "For configuration mode commands.";
+          description
+            "For configuration mode commands.";
+          type empty;
+        }
+        list exec {
+          tailf:info "For starting an exec (shell).";
+          description
+            "For starting an exec (shell).";
+          tailf:cli-suppress-mode;
+          tailf:cli-delete-when-empty;
+          tailf:cli-compact-syntax;
+          key "name";
+          leaf name {
+            type string {
+              tailf:info "WORD;;Named authorization list (max 31 characters, longer will be rejected).";
+            }
+          }
+          leaf cache {
+            tailf:info "Use Cached-group.";
+            description
+              "Use Cached-group.";
+            type union {
+              type string {
+                tailf:info "WORD;;Server-group name";
+              }
+              type enumeration {
+                enum "ldap" {
+                  tailf:info "Use list of all LDAP hosts.";
+                }
+                enum "radius" {
+                  tailf:info "Use list of all Radius hosts.";
+                }
+                enum "tacacs" {
+                  tailf:info "+  Use list of all Tacacs+ hosts.";
+                }
+              }
+            }
+          }
+          leaf group {
+            tailf:info "Use server-group.";
+            description
+              "Use server-group.";
+            type union {
+              type string {
+                tailf:info "WORD;;Server-group name";
+              }
+              type enumeration {
+                enum "ldap" {
+                  tailf:info "Use list of all LDAP hosts.";
+                }
+                enum "radius" {
+                  tailf:info "Use list of all Radius hosts.";
+                }
+                enum "tacacs" {
+                  tailf:info "+  Use list of all Tacacs+ hosts.";
+                }
+              }
+            }
+          }
+          leaf if-authenticated {
+            tailf:info "Succeed if user has authenticated.";
+            description
+              "Succeed if user has authenticated.";
+            type empty;
+          }
+          leaf krb5-instance {
+            tailf:info "Use Kerberos instance privilege maps";
+            description
+              "Use Kerberos instance privilege maps";
+            type empty;
+          }
+          leaf local {
+            tailf:info "Use local database.";
+            description
+              "Use local database.";
+            type empty;
+          }
+          leaf none {
+            tailf:info "No authorization (always succeeds).";
+            description
+              "No authorization (always succeeds).";
+            type empty;
+          }
+        }
+        list eventmanager {
+          tailf:info "For starting an exec (shell).";
+          description
+            "For starting an exec (shell).";
+          tailf:cli-suppress-mode;
+          tailf:cli-delete-when-empty;
+          tailf:cli-compact-syntax;
+          key "name";
+          leaf name {
+            type string {
+              tailf:info "WORD;;Named authorization list (max 31 characters, longer will be rejected).";
+            }
+          }
+          leaf group {
+            tailf:info "Use server-group.";
+            description
+              "Use server-group.";
+            type union {
+              type string {
+                tailf:info "WORD;;Server-group name";
+              }
+              type enumeration {
+                enum "ldap" {
+                  tailf:info "Use list of all LDAP hosts.";
+                }
+                enum "radius" {
+                  tailf:info "Use list of all Radius hosts.";
+                }
+                enum "tacacs" {
+                  tailf:info "+  Use list of all Tacacs+ hosts.";
+                }
+              }
+            }
+          }
+          leaf local {
+            tailf:info "Use local database.";
+            description
+              "Use local database.";
+            type empty;
+          }
+          leaf none {
+            tailf:info "No authorization (always succeeds).";
+            description
+              "No authorization (always succeeds).";
+            type empty;
+          }
+        }
+        list network {
+          tailf:info "For network services. (PPP, SLIP, ARAP)";
+          description
+            "For network services. (PPP, SLIP, ARAP)";
+          tailf:cli-suppress-mode;
+          key "id";
+          leaf id {
+            type union {
+              type enumeration {
+                enum "default" {
+                  tailf:info "The default authorization list.";
+                }
+              }
+              type string {
+                tailf:info "WORD;;Named authorization list.";
+                length "1..31";
+              }
+            }
+          }
+          container a1 {
+            tailf:cli-drop-node-name;
+            tailf:cli-flatten-container;
+            tailf:cli-compact-syntax;
+            choice auth-choice {
+              leaf if-authenticated {
+                tailf:info "Succeed if user has authenticated.";
+                description
+                  "Succeed if user has authenticated.";
+                type empty;
+              }
+              leaf none {
+                tailf:info "NO authentication.";
+                description
+                  "NO authentication.";
+                type empty;
+              }
+              leaf local {
+                tailf:info "Use local username authentication.";
+                description
+                  "Use local username authentication.";
+                type empty;
+              }
+              leaf group {
+                tailf:info "Use Server-group";
+                description
+                  "Use Server-group";
+                type union {
+                  type string {
+                    tailf:info "WORD;;Server-group name";
+                  }
+                  type enumeration {
+                    enum "radius" {
+                      tailf:info "Use list of all Radius hosts.";
+                    }
+                    enum "tacacs+" {
+                      tailf:info "Use list of all Tacacs+ hosts.";
+                    }
+                  }
+                }
+              }
+              leaf cache {
+                tailf:info "Use Cached-group";
+                description
+                  "Use Cached-group";
+                type union {
+                  type string {
+                    tailf:info "WORD;;Server-group name";
+                  }
+                  type enumeration {
+                    enum "radius" {
+                      tailf:info "Use list of all Radius hosts.";
+                    }
+                    enum "tacacs+" {
+                      tailf:info "Use list of all Tacacs+ hosts.";
+                    }
+                  }
+                }
+              }
+            }
+          }
+          container a2 {
+            when "not(../a1/none) and not(../a1/if-authenticated)" {
+              tailf:dependency "../a1/none";
+              tailf:dependency "../a1/if-authenticated";
+            }
+            tailf:cli-drop-node-name;
+            tailf:cli-flatten-container;
+            tailf:cli-compact-syntax;
+            choice auth-choice {
+              leaf group {
+                tailf:info "Use Server-group";
+                description
+                  "Use Server-group";
+                type union {
+                  type string {
+                    tailf:info "WORD;;Server-group name";
+                  }
+                  type enumeration {
+                    enum "radius" {
+                      tailf:info "Use list of all Radius hosts.";
+                    }
+                    enum "tacacs+" {
+                      tailf:info "Use list of all Tacacs+ hosts.";
+                    }
+                  }
+                }
+              }
+              leaf cache {
+                tailf:info "Use Cached-group";
+                description
+                  "Use Cached-group";
+                type union {
+                  type string {
+                    tailf:info "WORD;;Server-group name";
+                  }
+                  type enumeration {
+                    enum "radius" {
+                      tailf:info "Use list of all Radius hosts.";
+                    }
+                    enum "tacacs+" {
+                      tailf:info "Use list of all Tacacs+ hosts.";
+                    }
+                  }
+                }
+              }
+              leaf if-authenticated {
+                tailf:info "Succeed if user has authenticated.";
+                description
+                  "Succeed if user has authenticated.";
+                type empty;
+              }
+              leaf none {
+                tailf:info "NO authentication.";
+                description
+                  "NO authentication.";
+                type empty;
+              }
+              leaf local {
+                when "not(../../a1/local)" {
+                  tailf:dependency "../../a1/local";
+                }
+                tailf:info "Use local username authentication.";
+                type empty;
+              }
+            }
+          }
+          container a3 {
+            when "not(../a2/none) and not (../a1/none) and not(../a2/if-authenticated) and not(../a1/if-authenticated)" {
+              tailf:dependency "../a1/none";
+              tailf:dependency "../a2/none";
+              tailf:dependency "../a1/if-authenticated";
+              tailf:dependency "../a2/if-authenticated";
+            }
+            tailf:cli-drop-node-name;
+            tailf:cli-flatten-container;
+            tailf:cli-compact-syntax;
+            choice auth-choice {
+              leaf group {
+                tailf:info "Use Server-group";
+                description
+                  "Use Server-group";
+                type union {
+                  type string {
+                    tailf:info "WORD;;Server-group name";
+                  }
+                  type enumeration {
+                    enum "radius" {
+                      tailf:info "Use list of all Radius hosts.";
+                    }
+                    enum "tacacs+" {
+                      tailf:info "Use list of all Tacacs+ hosts.";
+                    }
+                  }
+                }
+              }
+              leaf cache {
+                tailf:info "Use Cached-group";
+                description
+                  "Use Cached-group";
+                type union {
+                  type string {
+                    tailf:info "WORD;;Server-group name";
+                  }
+                  type enumeration {
+                    enum "radius" {
+                      tailf:info "Use list of all Radius hosts.";
+                    }
+                    enum "tacacs+" {
+                      tailf:info "Use list of all Tacacs+ hosts.";
+                    }
+                  }
+                }
+              }
+              leaf none {
+                tailf:info "NO authentication.";
+                description
+                  "NO authentication.";
+                type empty;
+              }
+              leaf if-authenticated {
+                tailf:info "Succeed if user has authenticated.";
+                description
+                  "Succeed if user has authenticated.";
+                type empty;
+              }
+              leaf local {
+                when "not(../../a1/local) and not(../../a2/local)" {
+                  tailf:dependency "../../a1/local";
+                  tailf:dependency "../../a2/local";
+                }
+                tailf:info "Use local username authentication.";
+                type empty;
+              }
+            }
+          }
+          container a4 {
+            when "not(../a2/none) and not(../a1/none) and not(../a3/none) and not(../a2/if-authenticated) and not(../a1/if-authenticated) and not(../a3/if-authenticated)" {
+              tailf:dependency "../a1/none";
+              tailf:dependency "../a2/none";
+              tailf:dependency "../a3/none";
+              tailf:dependency "../a1/if-authenticated";
+              tailf:dependency "../a2/if-authenticated";
+              tailf:dependency "../a3/if-authenticated";
+            }
+            tailf:cli-drop-node-name;
+            tailf:cli-flatten-container;
+            tailf:cli-compact-syntax;
+            choice auth-choice {
+              leaf group {
+                tailf:info "Use Server-group";
+                description
+                  "Use Server-group";
+                type union {
+                  type string {
+                    tailf:info "WORD;;Server-group name";
+                  }
+                  type enumeration {
+                    enum "radius" {
+                      tailf:info "Use list of all Radius hosts.";
+                    }
+                    enum "tacacs+" {
+                      tailf:info "Use list of all Tacacs+ hosts.";
+                    }
+                  }
+                }
+              }
+              leaf cache {
+                tailf:info "Use Cached-group";
+                description
+                  "Use Cached-group";
+                type union {
+                  type string {
+                    tailf:info "WORD;;Server-group name";
+                  }
+                  type enumeration {
+                    enum "radius" {
+                      tailf:info "Use list of all Radius hosts.";
+                    }
+                    enum "tacacs+" {
+                      tailf:info "Use list of all Tacacs+ hosts.";
+                    }
+                  }
+                }
+              }
+              leaf none {
+                tailf:info "NO authentication.";
+                description
+                  "NO authentication.";
+                type empty;
+              }
+              leaf if-authenticated {
+                tailf:info "Succeed if user has authenticated.";
+                description
+                  "Succeed if user has authenticated.";
+                type empty;
+              }
+              leaf local {
+                when "not(../../a1/local) and not(../../a2/local) and not(../../a3/local)" {
+                  tailf:dependency "../../a1/local";
+                  tailf:dependency "../../a2/local";
+                  tailf:dependency "../../a3/local";
+                }
+                tailf:info "Use local username authentication.";
+                type empty;
+              }
+            }
+          }
+        }
+      }
+      container accounting {
+        tailf:info "Accounting configurations parameters.";
+        description
+          "Accounting configurations parameters.";
+        tailf:cli-incomplete-command;
+        tailf:cli-diff-dependency "/ios:native/aaa/new-model";
+        list commands {
+          tailf:info "For exec (shell) commands.";
+          description
+            "For exec (shell) commands.";
+          tailf:cli-compact-syntax;
+          tailf:cli-incomplete-command;
+          tailf:cli-sequence-commands;
+          tailf:cli-suppress-mode;
+          tailf:cli-delete-when-empty;
+          key "level list-name";
+          leaf level {
+            tailf:info "Enable level";
+            description
+              "Enable level";
+            type uint8 {
+              range "0..15";
+            }
+          }
+          leaf list-name {
+            type union {
+              type enumeration {
+                enum "default" {
+                  tailf:info "The default accounting list.";
+                }
+              }
+              type string {
+                tailf:info "WORD;;Named Accounting list. (max 31 characters)";
+                length "1..31";
+              }
+            }
+          }
+          leaf action-type {
+            tailf:cli-drop-node-name;
+            tailf:cli-incomplete-command;
+            type enumeration {
+              enum "none" {
+                tailf:info "No accounting.";
+              }
+              enum "start-stop" {
+                tailf:info "Record start and stop without waiting";
+              }
+              enum "stop-only" {
+                tailf:info "Record stop when service terminates.";
+              }
+            }
+          }
+          leaf broadcast {
+            tailf:info "Use Broadcast for Accounting";
+            description
+              "Use Broadcast for Accounting";
+            tailf:cli-optional-in-sequence;
+            tailf:cli-incomplete-command;
+            type empty;
+          }
+          leaf group {
+            tailf:info "Use Server-group";
+            description
+              "Use Server-group";
+            tailf:cli-full-command;
+            type union {
+              type string {
+                tailf:info "WORD;;Server-group name";
+              }
+              type enumeration {
+                enum "tacacs+" {
+                  tailf:info "Use list of all Tacacs+ hosts.";
+                }
+              }
+            }
+          }
+        }
+        list dot1x {
+          tailf:info "For dot1x sessions.";
+          description
+            "For dot1x sessions.";
+          tailf:cli-suppress-mode;
+          tailf:cli-sequence-commands;
+          tailf:cli-compact-syntax;
+          key "name";
+          leaf name {
+            type string {
+              tailf:info "WORD;;Named Accounting list (max 31 characters, longer will be rejected).";
+            }
+          }
+          container start-stop {
+            tailf:info "Record start and stop without waiting";
+            description
+              "Record start and stop without waiting";
+            tailf:cli-compact-syntax;
+            tailf:cli-sequence-commands;
+            tailf:cli-reset-container;
+            leaf broadcast {
+              tailf:info "Use Broadcast for Accounting";
+              description
+                "Use Broadcast for Accounting";
+              tailf:cli-optional-in-sequence;
+              type empty;
+            }
+            leaf group {
+              tailf:info "Use Server-group";
+              description
+                "Use Server-group";
+              type union {
+                type string {
+                  tailf:info "WORD;;Server-group name";
+                }
+                type enumeration {
+                  enum "radius" {
+                    tailf:info "Use list of all Radius hosts.";
+                  }
+                  enum "tacacs+" {
+                    tailf:info "+  Use list of all Tacacs+ hosts.";
+                  }
+                }
+              }
+            }
+          }
+        }
+        list exec {
+          tailf:info "For starting an exec (shell).";
+          description
+            "For starting an exec (shell).";
+          tailf:cli-mode-name "cfg-acct-mlist";
+          key "name";
+          leaf name {
+            type string {
+              tailf:info "WORD;;Named Accounting list (max 31 characters, longer will be rejected).";
+            }
+          }
+          choice accounting-choice {
+            leaf none {
+              tailf:info "No accounting.";
+              description
+                "No accounting.";
+              type empty;
+            }
+            container start-stop {
+              tailf:info "Record start and stop without waiting";
+              description
+                "Record start and stop without waiting";
+              tailf:cli-compact-syntax;
+              tailf:cli-sequence-commands;
+              tailf:cli-reset-container;
+              leaf broadcast {
+                tailf:info "Use Broadcast for Accounting";
+                description
+                  "Use Broadcast for Accounting";
+                tailf:cli-optional-in-sequence;
+                type empty;
+              }
+              leaf group {
+                tailf:info "Use Server-group";
+                description
+                  "Use Server-group";
+                type union {
+                  type string {
+                    tailf:info "WORD;;Server-group name";
+                  }
+                  type enumeration {
+                    enum "radius" {
+                      tailf:info "Use list of all Radius hosts.";
+                    }
+                    enum "tacacs+" {
+                      tailf:info "+  Use list of all Tacacs+ hosts.";
+                    }
+                  }
+                }
+              }
+            }
+            container stop-only {
+              tailf:info "Record stop when service terminates.";
+              description
+                "Record stop when service terminates.";
+              tailf:cli-compact-syntax;
+              tailf:cli-sequence-commands;
+              tailf:cli-reset-container;
+              leaf broadcast {
+                tailf:info "Use Broadcast for Accounting";
+                description
+                  "Use Broadcast for Accounting";
+                tailf:cli-optional-in-sequence;
+                type empty;
+              }
+              leaf group {
+                tailf:info "Use Server-group";
+                description
+                  "Use Server-group";
+                type union {
+                  type string {
+                    tailf:info "WORD;;Server-group name";
+                  }
+                  type enumeration {
+                    enum "radius" {
+                      tailf:info "Use list of all Radius hosts.";
+                    }
+                    enum "tacacs" {
+                      tailf:info "+  Use list of all Tacacs+ hosts.";
+                    }
+                  }
+                }
+              }
+            }
+          }
+        }
+        list network {
+          tailf:info "For network services. (PPP, SLIP, ARAP)";
+          description
+            "For network services. (PPP, SLIP, ARAP)";
+          tailf:cli-suppress-mode;
+          tailf:cli-compact-syntax;
+          tailf:cli-sequence-commands {
+            tailf:cli-reset-siblings;
+          }
+          key "id";
+          leaf id {
+            type union {
+              type enumeration {
+                enum "default" {
+                  tailf:info "The default accounting list.";
+                }
+              }
+              type string {
+                tailf:info "WORD;;Named Accounting list.";
+                length "1..31";
+              }
+            }
+          }
+          choice network-choice {
+            case a {
+              leaf none {
+                tailf:info "No accounting.";
+                description
+                  "No accounting.";
+                type empty;
+              }
+            }
+            case b {
+              leaf mode {
+                tailf:cli-drop-node-name;
+                type enumeration {
+                  enum "start-stop" {
+                    tailf:info "Record start and stop without waiting";
+                  }
+                  enum "stop-only" {
+                    tailf:info "Record stop when service terminates.";
+                  }
+                }
+              }
+              leaf broadcast {
+                tailf:info "Use Broadcast for Accounting";
+                description
+                  "Use Broadcast for Accounting";
+                tailf:cli-optional-in-sequence;
+                type empty;
+              }
+              container a1 {
+                tailf:cli-compact-syntax;
+                tailf:cli-drop-node-name;
+                tailf:cli-flatten-container;
+                leaf group {
+                  tailf:info "Use server-group.";
+                  description
+                    "Use server-group.";
+                  type union {
+                    type string {
+                      tailf:info "WORD;;Server-group name";
+                    }
+                    type enumeration {
+                      enum "ldap" {
+                        tailf:info "Use list of all LDAP hosts.";
+                      }
+                      enum "radius" {
+                        tailf:info "Use list of all Radius hosts.";
+                      }
+                      enum "tacacs" {
+                        tailf:info "+  Use list of all Tacacs+ hosts.";
+                      }
+                    }
+                  }
+                }
+              }
+              container a2 {
+                tailf:cli-compact-syntax;
+                tailf:cli-drop-node-name;
+                tailf:cli-flatten-container;
+                leaf group {
+                  tailf:info "Use server-group.";
+                  description
+                    "Use server-group.";
+                  type union {
+                    type string {
+                      tailf:info "WORD;;Server-group name";
+                    }
+                    type enumeration {
+                      enum "ldap" {
+                        tailf:info "Use list of all LDAP hosts.";
+                      }
+                      enum "radius" {
+                        tailf:info "Use list of all Radius hosts.";
+                      }
+                      enum "tacacs" {
+                        tailf:info "+  Use list of all Tacacs+ hosts.";
+                      }
+                    }
+                  }
+                }
+              }
+              container a3 {
+                tailf:cli-compact-syntax;
+                tailf:cli-drop-node-name;
+                tailf:cli-flatten-container;
+                leaf group {
+                  tailf:info "Use server-group.";
+                  description
+                    "Use server-group.";
+                  type union {
+                    type string {
+                      tailf:info "WORD;;Server-group name";
+                    }
+                    type enumeration {
+                      enum "ldap" {
+                        tailf:info "Use list of all LDAP hosts.";
+                      }
+                      enum "radius" {
+                        tailf:info "Use list of all Radius hosts.";
+                      }
+                      enum "tacacs" {
+                        tailf:info "+  Use list of all Tacacs+ hosts.";
+                      }
+                    }
+                  }
+                }
+              }
+              container a4 {
+                tailf:cli-compact-syntax;
+                tailf:cli-drop-node-name;
+                tailf:cli-flatten-container;
+                leaf group {
+                  tailf:info "Use server-group.";
+                  description
+                    "Use server-group.";
+                  type union {
+                    type string {
+                      tailf:info "WORD;;Server-group name";
+                    }
+                    type enumeration {
+                      enum "ldap" {
+                        tailf:info "Use list of all LDAP hosts.";
+                      }
+                      enum "radius" {
+                        tailf:info "Use list of all Radius hosts.";
+                      }
+                      enum "tacacs" {
+                        tailf:info "+  Use list of all Tacacs+ hosts.";
+                      }
+                    }
+                  }
+                }
+              }
+            }
+          }
+        }
+        container system {
+          tailf:info "For system events.";
+          description
+            "For system events.";
+          choice default-guarantee-first {
+            case default-case {
+              container default {
+                tailf:info "The default accounting list.";
+                description
+                  "The default accounting list.";
+                tailf:cli-compact-syntax;
+                presence "true";
+                leaf none {
+                  tailf:info "No accounting.";
+                  description
+                    "No accounting.";
+                  tailf:cli-full-command;
+                  type empty;
+                }
+                container start-stop {
+                  tailf:info "Record start and stop without waiting";
+                  description
+                    "Record start and stop without waiting";
+                  tailf:cli-compact-syntax;
+                  tailf:cli-sequence-commands;
+                  tailf:cli-reset-container;
+                  leaf broadcast {
+                    tailf:info "Use Broadcast for Accounting";
+                    description
+                      "Use Broadcast for Accounting";
+                    tailf:cli-optional-in-sequence;
+                    type empty;
+                  }
+                  leaf group {
+                    tailf:info "Use Server-group";
+                    description
+                      "Use Server-group";
+                    type union {
+                      type string {
+                        tailf:info "WORD;;Server-group name";
+                      }
+                      type enumeration {
+                        enum "radius" {
+                          tailf:info "Use list of all Radius hosts.";
+                        }
+                        enum "tacacs+" {
+                          tailf:info "+  Use list of all Tacacs+ hosts.";
+                        }
+                      }
+                    }
+                  }
+                }
+                leaf vrf {
+                  tailf:info "VPN Routing/Forwarding parameters";
+                  description
+                    "VPN Routing/Forwarding parameters";
+                  type string {
+                    tailf:info "WORD;;Table name";
+                  }
+                }
+              }
+            }
+            case guarantee-first-case {
+              leaf guarantee-first {
+                tailf:info "Guarantee system accounting as first record.";
+                description
+                  "Guarantee system accounting as first record.";
+                tailf:cli-boolean-no;
+                tailf:cli-trim-default;
+                type boolean;
+              }
+            }
+          }
+        }
+      }
+      leaf session-id {
+        tailf:info "AAA Session ID";
+        description
+          "AAA Session ID";
+        tailf:cli-diff-dependency "/ios:native/aaa/new-model";
+        type enumeration {
+          enum "common" {
+            tailf:info "Common Session ID";
+          }
+          enum "unique" {
+            tailf:info "Unique Session ID for different accounting types";
+          }
+        }
+      }
+    }
+    container ethernet {
+      tailf:info "Ethernet configuration";
+      description
+        "Ethernet configuration";
+      list evc {
+        tailf:info "define an Ethernet virtual connection (EVC)";
+        description
+          "define an Ethernet virtual connection (EVC)";
+        tailf:cli-compact-syntax;
+        tailf:cli-full-command;
+        key "name";
+        leaf name {
+          type string {
+            tailf:info "WORD;;EVC id";
+            length "1..100";
+          }
+        }
+      }
+      container lmi {
+        tailf:info "Local Management Interface";
+        description
+          "Local Management Interface";
+        leaf ce {
+          tailf:info "Ethernet LMI Customer Edge";
+          description
+            "Ethernet LMI Customer Edge";
+          tailf:cli-full-command;
+          type empty;
+        }
+        leaf global {
+          tailf:info "Ethernet LMI is enabled on all supported Interfaces";
+          description
+            "Ethernet LMI is enabled on all supported Interfaces";
+          tailf:cli-full-command;
+          type empty;
+        }
+      }
+      container cfm {
+        tailf:info "Connectivity Fault Management";
+        description
+          "Connectivity Fault Management";
+        container ais {
+          tailf:info "AIS Maintenance Condition";
+          description
+            "AIS Maintenance Condition";
+          container link-status {
+            tailf:info "8023ah SMEP or link state up/down";
+            description
+              "8023ah SMEP or link state up/down";
+            container global {
+              tailf:info "8023ah SMEP or link state state up/down AIS global configuration";
+              description
+                "8023ah SMEP or link state state up/down AIS global configuration";
+              tailf:cli-add-mode;
+              tailf:cli-mode-name "config-ais-link-cfm";
+              presence "true";
+              container ais-Mode-config-ais-link-cfm {
+                tailf:cli-drop-node-name;
+                leaf disable {
+                  tailf:info "Disable AIS transmission";
+                  description
+                    "Disable AIS transmission";
+                  type empty;
+                }
+                leaf level {
+                  tailf:info "Maintenance Level to send AIS";
+                  description
+                    "Maintenance Level";
+                  type uint8 {
+                    range "0..7";
+                  }
+                }
+                container period {
+                  tailf:info "AIS Transmission period";
+                  description
+                    "AIS Transmission period";
+                  leaf s-1 {
+                    tailf:alt-name "1";
+                    tailf:info "Seconds";
+                    type empty;
+                  }
+                  leaf s-60 {
+                    tailf:alt-name "60";
+                    tailf:info "Seconds";
+                    description
+                      "Seconds";
+                    type empty;
+                  }
+                }
+              }
+            }
+          }
+        }
+        container alarm {
+          tailf:info "CFM Alarm";
+          description
+            "CFM Alarm";
+          leaf delay {
+            tailf:info "CFM alarm delay";
+            description
+              "msec (default 2500 msec)";
+            type uint16 {
+              range "2500..10000";
+            }
+          }
+          container notification {
+            tailf:info "CFM alarm notification";
+            description
+              "CFM alarm notification";
+            leaf all {
+              tailf:info "Report all defects: DefRDI, DefMACStatus, DefRemote, DefError, DefXcon";
+              description
+                "Report all defects: DefRDI, DefMACStatus, DefRemote, DefError, DefXcon";
+              type empty;
+            }
+            leaf error-xcon {
+              tailf:info "Report only: DefError and DefXcon";
+              description
+                "Report only: DefError and DefXcon";
+              type empty;
+            }
+            leaf mac-remote-error-xcon {
+              tailf:info "Report only: DefMACStatus, DefRemote, DefError and DefXcon (default)";
+              description
+                "Report only: DefMACStatus, DefRemote, DefError and DefXcon (default)";
+              type empty;
+            }
+            leaf none {
+              tailf:info "No defects to be reported";
+              description
+                "No defects to be reported";
+              type empty;
+            }
+            leaf remote-error-xcon {
+              tailf:info "Report only: DefRemote, DefError and DefXcon";
+              description
+                "Report only: DefRemote, DefError and DefXcon";
+              type empty;
+            }
+            leaf xcon {
+              tailf:info "Report only: DefXcon";
+              description
+                "Report only: DefXcon";
+              type empty;
+            }
+          }
+          leaf packet {
+            tailf:info "CFM fault alarm Continuity Check packets";
+            description
+              "max DefError and DefXcon packets";
+            type uint16 {
+              range "1..65535";
+            }
+          }
+          leaf reset {
+            tailf:info "CFM alarm reset";
+            description
+              "msec (default 10000 msec)";
+            type uint16 {
+              range "2500..10000";
+            }
+          }
+        }
+        leaf ieee {
+          tailf:info "CFM IEEE enable";
+          description
+            "CFM IEEE enable";
+          tailf:cli-full-command;
+          type empty;
+        }
+        leaf global {
+          tailf:info "CFM global enable";
+          description
+            "CFM global enable";
+          tailf:cli-full-command;
+          type empty;
+        }
+        list domain {
+          tailf:info "Configure a domain";
+          description
+            "Configure a domain";
+          tailf:cli-mode-name "config-ecfm";
+          tailf:cli-compact-syntax;
+          tailf:cli-incomplete-command;
+          key "name";
+          leaf name {
+            type string {
+              tailf:info "WORD;;maintenance domain name";
+            }
+          }
+          leaf level {
+            tailf:info "Maintenance Level";
+            description
+              "Maintenance Level";
+            tailf:cli-hide-in-submode;
+            type uint8 {
+              tailf:info "<0-7>  maintenance level number";
+            }
+          }
+          list service {
+            tailf:info "Maintenance Association within Domain";
+            description
+              "Maintenance Association within Domain";
+            tailf:cli-mode-name "config-ecfm-srv";
+            tailf:cli-compact-syntax;
+            tailf:cli-sequence-commands;
+            key "name";
+            leaf name {
+              type string {
+                tailf:info "WORD;; service instance id - short MA name";
+              }
+            }
+            leaf evc {
+              tailf:info "Specify EVC";
+              description
+                "Specify EVC";
+              tailf:cli-hide-in-submode;
+              type string {
+                tailf:info "WORD;;EVC name";
+              }
+              tailf:non-strict-leafref {
+                path "/ios:native/ethernet/evc/name";
+              }
+            }
+            leaf vlan {
+              tailf:info "VLAN id";
+              description
+                "VLAN id";
+              tailf:cli-break-sequence-commands;
+              type uint16 {
+                tailf:info "<1-4094>;;between 1 and 4094";
+                range "1..4094";
+              }
+            }
+            container continuity-check {
+              tailf:info "Enable Continuity Check for Maintenance Association";
+              description
+                "Enable Continuity Check for Maintenance Association";
+              presence "true";
+            }
+          }
+        }
+        container logging {
+          tailf:info "Enable CFM syslog messages";
+          description
+            "Enable CFM syslog messages";
+          presence "true";
+          leaf ais {
+            tailf:info "AIS logging";
+            description
+              "AIS logging";
+            type empty;
+          }
+          container alarm {
+            tailf:info "Alarm logging";
+            description
+              "Alarm logging";
+            leaf cisco {
+              tailf:info "Cisco MIB syslogs";
+              description
+                "Cisco MIB syslogs";
+              type empty;
+            }
+            leaf ieee {
+              tailf:info "IEEE MIB syslogs";
+              description
+                "IEEE MIB syslogs";
+              type empty;
+            }
+          }
+        }
+        container mep {
+          tailf:info "Maintenance End Point";
+          description
+            "Maintenance End Point";
+          container crosscheck {
+            tailf:info "Cross Check remote MEPs";
+            description
+              "Cross Check remote MEPs";
+            leaf start-delay {
+              tailf:info "Wait time before cross check starts";
+              description
+                "seconds (30 seconds default)";
+              type uint16 {
+                range "1..65535";
+              }
+            }
+          }
+        }
+        container mip {
+          tailf:info "CFM MIP commands";
+          description
+            "CFM MIP commands";
+          container auto-create {
+            tailf:info "CFM MIP auto creation";
+            description
+              "CFM MIP auto creation";
+            container level {
+              tailf:info "Maintenance Level";
+              description
+                "Maintenance Level";
+              list mef-num {
+                tailf:cli-drop-node-name;
+                tailf:cli-suppress-mode;
+                key "mef-num";
+                leaf mef-num {
+                  tailf:info "maintenance level number";
+                  description
+                    "maintenance level number";
+                  type uint8 {
+                    range "0..7";
+                  }
+                }
+                leaf evc {
+                  tailf:info "auto create for CFM over EVC";
+                  description
+                    "EVC name";
+                  type string;
+                }
+                leaf vlan {
+                  tailf:info "Specify vlan (range 1-4094)";
+                  description
+                    "VLAN id";
+                  type uint16 {
+                    range "1..4094";
+                  }
+                }
+              }
+            }
+          }
+          leaf filter {
+            tailf:info "CFM MIP filter";
+            description
+              "CFM MIP filter";
+            type empty;
+          }
+        }
+        container traceroute {
+          tailf:info "CFM Traceroute";
+          description
+            "CFM Traceroute";
+          container cache {
+            tailf:info "CFM Traceroute Cache";
+            description
+              "CFM Traceroute Cache";
+            presence "true";
+            leaf hold-time {
+              tailf:info "Hold Time";
+              description
+                "minutes (default 100)";
+              type uint16 {
+                range "1..65535";
+              }
+            }
+            leaf size {
+              tailf:info "Cache size";
+              description
+                "Number of cached lines (default 100)";
+              type uint16 {
+                range "1..4095";
+              }
+            }
+          }
+        }
+      }
+      container ring {
+        tailf:info "Ring";
+        description
+          "Ring";
+        container g8032 {
+          tailf:info "Specify the g.8032 ethernet ring";
+          description
+            "Specify the g.8032 ethernet ring";
+          list rings {
+            tailf:cli-drop-node-name;
+            tailf:cli-mode-name "config-erp-ring";
+            key "name";
+            leaf name {
+              tailf:info "Name of the ethernet ring";
+              description
+                "Name of the ethernet ring";
+              type string;
+            }
+            container ring-Mode-config-erp-ring {
+              tailf:cli-drop-node-name;
+              container exclusion-list {
+                tailf:info "Specifiy exclusion list not protected by ERP";
+                description
+                  "Specifiy exclusion list not protected by ERP";
+                leaf vlan-ids {
+                  tailf:info "Assign list of VLANs to the exclusion list";
+                  description
+                    "List of VLAN IDs in the form a-b,c,d,e-f,g";
+                  type string;
+                }
+              }
+              list instance {
+                tailf:info "Configure the g.8032 ethernet ring instance";
+                description
+                  "Configure the g.8032 ethernet ring instance";
+                tailf:cli-mode-name "config-erp-inst";
+                key "number";
+                leaf number {
+                  tailf:info "Instance number";
+                  description
+                    "Instance number";
+                  type uint8 {
+                    range "1..2";
+                  }
+                }
+                container aps-channel {
+                  tailf:info "Configure g.8032 instance aps-channel";
+                  description
+                    "Configure g.8032 instance aps-channel";
+                  tailf:cli-add-mode;
+                  tailf:cli-mode-name "config-erp-inst-aps";
+                  presence "true";
+                  container aps-Mode-config-erp-inst-aps {
+                    tailf:cli-drop-node-name;
+                    leaf level {
+                      tailf:info "Specify the APS message level";
+                      description
+                        "Specify the APS message level";
+                      type uint8 {
+                        tailf:info "<0-7>;;APS message level";
+                        range "0..7";
+                      }
+                    }
+                    container port0 {
+                      tailf:info "Configure g.8032 aps-channel info associated to port0";
+                      description
+                        "Configure g.8032 aps-channel info associated to port0";
+                      container service {
+                        tailf:info "Specify an Ethernet Service Instance";
+                        description
+                          "Specify an Ethernet Service Instance";
+                        leaf instance {
+                          tailf:info "Specify an Ethernet Service Instance";
+                          description
+                            "Specify an Ethernet Service Instance";
+                          type uint16 {
+                            tailf:info "<1-8184>;;Ethernet Service Instance ID";
+                            range "1..8184";
+                          }
+                        }
+                      }
+                    }
+                    container port1 {
+                      tailf:info "Configure g.8032 aps-channel info associated to port1";
+                      description
+                        "Configure g.8032 aps-channel info associated to port1";
+                      choice service-instance {
+                        case none-case {
+                          leaf none {
+                            tailf:info "Specify port1 APS channel as none";
+                            description
+                              "Specify port1 APS channel as none";
+                            type empty;
+                          }
+                        }
+                        case service-instance-case {
+                          container service {
+                            tailf:info "Specify an Ethernet Service Instance";
+                            description
+                              "Specify an Ethernet Service Instance";
+                            leaf instance {
+                              tailf:info "Specify an Ethernet Service Instance";
+                              description
+                                "Specify an Ethernet Service Instance";
+                              type uint16 {
+                                tailf:info "<1-8184>;;Ethernet Service Instance ID";
+                                range "1..8184";
+                              }
+                            }
+                          }
+                        }
+                      }
+                    }
+                  }
+                }
+                leaf description {
+                  tailf:info "Description for g.8032 ethernet ring instance";
+                  description
+                    "Description for the instance";
+                  tailf:cli-multi-value;
+                  type string;
+                }
+                container inclusion-list {
+                  tailf:info "Specify inclusion list protected by ERP";
+                  description
+                    "Specify inclusion list protected by ERP";
+                  leaf vlan-ids {
+                    tailf:info "Associates a set of VLAN IDs with the current instance";
+                    description
+                      "Associates a set of VLAN IDs with the current instance";
+                    type string {
+                      tailf:info "WORD;;List of VLAN IDs in the form a-b,c,d,e-f,g";
+                    }
+                  }
+                }
+                leaf profile {
+                  tailf:info "Specify associated g.8032 ethernet ring profile";
+                  description
+                    "Ethernet ring profile name";
+                  type string;
+                }
+                container rpl {
+                  tailf:info "Specify RPL owner, neighbor or next-neighbor";
+                  description
+                    "Specify RPL owner, neighbor or next-neighbor";
+                  choice port {
+                    case port0 {
+                      leaf port0 {
+                        tailf:info "Assign port0 as RPL owner, neighbor or next-neighbor";
+                        description
+                          "Assign port0 as RPL owner, neighbor or next-neighbor";
+                        type enumeration {
+                          enum "neighbor" {
+                            tailf:info "RPL neighbor";
+                          }
+                          enum "next-neighbor" {
+                            tailf:info "RPL next neighbor";
+                          }
+                          enum "owner" {
+                            tailf:info "RPL owner";
+                          }
+                        }
+                      }
+                    }
+                    case port1 {
+                      leaf port1 {
+                        tailf:info "Assign port1 as RPL owner, neighbor or next-neighbor";
+                        description
+                          "Assign port1 as RPL owner, neighbor or next-neighbor";
+                        type enumeration {
+                          enum "neighbor" {
+                            tailf:info "RPL neighbor";
+                          }
+                          enum "next-neighbor" {
+                            tailf:info "RPL next neighbor";
+                          }
+                          enum "owner" {
+                            tailf:info "RPL owner";
+                          }
+                        }
+                      }
+                    }
+                  }
+                }
+              }
+              leaf open-ring {
+                tailf:info "Specify the g.8032 ring as open ring";
+                description
+                  "Specify the g.8032 ring as open ring";
+                type empty;
+              }
+              container port0 {
+                tailf:info "Port0 of the local node connected to G.8032 ring";
+                description
+                  "Port0 of the local node connected to G.8032 ring";
+                container interface {
+                  tailf:info "Assign port interface";
+                  description
+                    "Assign port interface";
+                  tailf:cli-compact-syntax;
+                  tailf:cli-flatten-container;
+                  uses interface-grouping;
+                }
+              }
+              container port1 {
+                tailf:info "Port1 of the local node connected to G.8032 ring";
+                description
+                  "Port1 of the local node connected to G.8032 ring";
+                container interface {
+                  tailf:info "Assign port interface";
+                  description
+                    "Assign port interface";
+                  tailf:cli-compact-syntax;
+                  tailf:cli-flatten-container;
+                  uses interface-grouping;
+                }
+                leaf none {
+                  tailf:info "Assign port1 as none to enable g.8032 open-ring";
+                  description
+                    "Assign port1 as none to enable g.8032 open-ring";
+                  type empty;
+                }
+              }
+            }
+          }
+          list profile {
+            tailf:info "g.8032 ring profile configuration";
+            description
+              "g.8032 ring profile configuration";
+            tailf:cli-mode-name "config-erp-profile";
+            key "pr-name";
+            leaf pr-name {
+              tailf:info "ERP profile name string";
+              description
+                "ERP profile name string";
+              type string;
+            }
+            container pr-Mode-config-erp-profile {
+              tailf:cli-drop-node-name;
+              leaf non-revertive {
+                tailf:info "Non-revertive ring instance";
+                description
+                  "Non-revertive ring instance";
+                type empty;
+              }
+              container timer {
+                tailf:info "g.8032 timer";
+                description
+                  "g.8032 timer";
+                leaf guard {
+                  tailf:info "Guard timer";
+                  description
+                    "milliseconds";
+                  type uint16 {
+                    range "10..2000";
+                  }
+                }
+                leaf hold-off {
+                  tailf:info "Hold off timer";
+                  description
+                    "seconds";
+                  type uint8 {
+                    range "0..10";
+                  }
+                }
+                leaf wtr {
+                  tailf:info "Wait-to-Restore timer";
+                  description
+                    "minutes";
+                  type uint8 {
+                    range "1..12";
+                  }
+                }
+              }
+            }
+          }
+        }
+      }
+    }
+    list alarm-contact {
+      tailf:cli-suppress-mode;
+      tailf:cli-delete-when-empty;
+      key "name";
+      leaf name {
+        type uint8 {
+          tailf:info "WORD;;Contact number";
+          range "1..4";
+        }
+      }
+      leaf description {
+        tailf:cli-multi-value;
+        type string {
+          length "1..80";
+        }
+      }
+      leaf severity {
+        type enumeration {
+          enum "critical";
+          enum "major";
+          enum "minor";
+        }
+      }
+      leaf trigger {
+        type enumeration {
+          enum "open";
+          enum "closed";
+        }
+      }
+    }
+    container access-list {
+      tailf:cli-incomplete-command;
+      tailf:cli-compact-syntax;
+      tailf:info "Add an access list entry";
+      description
+        "Add an access list entry";
+      list access-list-standard-range {
+        tailf:cli-drop-node-name;
+        tailf:cli-suppress-mode;
+        tailf:cli-delete-when-empty;
+        tailf:cli-compact-syntax;
+        tailf:cli-incomplete-command;
+        key "listnumber";
+        leaf listnumber {
+          tailf:cli-drop-node-name;
+          tailf:cli-incomplete-command;
+          tailf:cli-incomplete-no;
+          tailf:cli-suppress-range;
+          type uint16 {
+            range "1..99";
+            tailf:info "<1..99>;;IP standard access list";
+          }
+        }
+        list std-access-list-rule {
+          tailf:cli-suppress-mode;
+          tailf:cli-delete-when-empty;
+          tailf:cli-drop-node-name;
+          tailf:cli-compact-syntax;
+          tailf:cli-show-long-obu-diffs;
+          ordered-by user;
+          key "rule";
+          leaf rule {
+            tailf:cli-drop-node-name;
+            tailf:cli-multi-word-key;
+            type string {
+              tailf:info
+                "deny;;Specify packets to reject
+                 permit;;Specify packets to forwards
+                 remark;;Access list entry comment";
+            }
+          }
+        }
+      }
+      list access-list-extended-range {
+        tailf:cli-drop-node-name;
+        tailf:cli-suppress-mode;
+        tailf:cli-delete-when-empty;
+        tailf:cli-compact-syntax;
+        tailf:cli-incomplete-command;
+        key "listnumber";
+        leaf listnumber {
+          tailf:cli-drop-node-name;
+          tailf:cli-incomplete-command;
+          tailf:cli-incomplete-no;
+          tailf:cli-suppress-range;
+          type uint16 {
+            range "100..199";
+            tailf:info "<100..199>;;IP extended access list";
+          }
+        }
+        list ext-access-list-rule {
+          tailf:cli-suppress-mode;
+          tailf:cli-delete-when-empty;
+          tailf:cli-drop-node-name;
+          tailf:cli-compact-syntax;
+          tailf:cli-show-long-obu-diffs;
+          ordered-by user;
+          key "rule";
+          leaf rule {
+            tailf:cli-drop-node-name;
+            tailf:cli-multi-word-key;
+            type string {
+              tailf:info "deny;;Specify packets to rejectdynamic;;Specify DYNAMIC list of PERMITs or DENYspermit;;Specify packets to forwardsremark;;Access list entry comment";
+            }
+          }
+        }
+      }
+      container hardware {
+        container capture {
+          leaf mode {
+            type enumeration {
+              enum "vlan";
+            }
+          }
+        }
+      }
+    }
+
+    grouping config-bdomain-mode-grouping {
+      container ip {
+        tailf:info "IP related commands";
+        description
+          "IP related commands";
+        container igmp {
+          tailf:info "IP igmp commands";
+          description
+            "IP igmp commands";
+          container snooping {
+            tailf:info "IP igmp snooping commands";
+            description
+              "IP igmp snooping commands";
+            presence "true";
+            container check {
+              tailf:info "enforce TTL or Rtr-Alert Option checking";
+              description
+                "enforce TTL or Rtr-Alert Option checking";
+              leaf rtr-alert-option {
+                tailf:info "Only accept IGMP packets with router-alert option";
+                description
+                  "Only accept IGMP packets with router-alert option";
+                type empty;
+              }
+              leaf ttl {
+                tailf:info "Only accept IGMP packets with TTL=1";
+                description
+                  "Only accept IGMP packets with TTL=1";
+                type empty;
+              }
+            }
+            container explicit-tracking {
+              tailf:info "IGMP explicit host tracking configuration";
+              description
+                "IGMP explicit host tracking configuration";
+              leaf limit {
+                tailf:info "Explicit Host Tracking DB limit";
+                description
+                  "Explicit Host Tracking DB limit";
+                type empty;
+              }
+            }
+            leaf immediate-leave {
+              tailf:info "Enable IGMPv2 immediate leave processing";
+              description
+                "Enable IGMPv2 immediate leave processing";
+              type empty;
+            }
+            leaf last-member-query-count {
+              tailf:info "Last member query count";
+              description
+                "Last member query count";
+              type uint8 {
+                tailf:info "<1..7>;;Interval (milliseconds)";
+                range "1..7";
+              }
+            }
+            leaf last-member-query-interval {
+              tailf:info "Last member query interval";
+              description
+                "Last member query interval";
+              type uint16 {
+                tailf:info "<100..32767>;;Interval (milliseconds)";
+                range "100..32767";
+              }
+            }
+            container mrouter {
+              tailf:info "Configure an L2 port as a multicast router port";
+              description
+                "Configure an L2 port as a multicast router port";
+              leaf interface {
+                tailf:info "next-hop interface to mrouter";
+                description
+                  "next-hop interface to mrouter";
+                type empty;
+              }
+            }
+            container querier {
+              tailf:info "Enable IGMP querier for this Bdomain";
+              description
+                "Enable IGMP querier for this Bdomain";
+              presence "true";
+              leaf address {
+                tailf:info "IGMP querier source IP address";
+                description
+                  "IGMP querier source IP address";
+                type empty;
+              }
+              leaf max-response-time {
+                tailf:info "IGMP querier maximum response time (sec)";
+                description
+                  "IGMP querier maximum response time (sec)";
+                type empty;
+              }
+              leaf query-interval {
+                tailf:info "IGMP querier query interval (sec)";
+                description
+                  "IGMP querier query interval (sec)";
+                type empty;
+              }
+              leaf tcn {
+                tailf:info "IGMP querier TCN related parameters";
+                description
+                  "IGMP querier TCN related parameters";
+                type empty;
+              }
+              leaf timer {
+                tailf:info "IGMP other querier timer";
+                description
+                  "IGMP other querier timer";
+                type empty;
+              }
+              leaf version {
+                tailf:info "IGMP version";
+                description
+                  "IGMP version";
+                type empty;
+              }
+            }
+            leaf report-suppression {
+              tailf:info "Enable IGMP report suppression";
+              description
+                "Enable IGMP report suppression";
+              type empty;
+            }
+            leaf robustness-variable {
+              tailf:info "IGMP snooping bdomain robustness variable";
+              type uint8 {
+                tailf:info "<1..3>;;Robustness variable";
+                range "1..3";
+              }
+            }
+            leaf static {
+              tailf:info "Configure an L2 port as a member of a group";
+              description
+                "Configure an L2 port as a member of a group";
+              type inet:ipv4-address {
+                tailf:info "IP address of the group";
+              }
+            }
+          }
+        }
+      }
+      container mac {
+        tailf:info "MAC Address related commands";
+        description
+          "MAC Address related commands";
+        leaf aging-time {
+          tailf:info "Set age time of mac addresses per bridge domain";
+          description
+            "Set age time of mac addresses per bridge domain";
+          type uint16 {
+            tailf:info "<30..3600>;;Aging time in seconds, default 300 seconds (or 1800 seconds for overlay bridge domains)";
+            range "30..3600";
+          }
+        }
+        leaf learning {
+          tailf:info "Disable mac learning on bridge domain";
+          description
+            "Disable mac learning on bridge domain";
+          type empty;
+        }
+        container limit {
+          tailf:info "Limit the MAC Addresses learnt";
+          description
+            "Limit the MAC Addresses learnt";
+          container action {
+            tailf:info "action when exceeding the limit";
+            description
+              "action when exceeding the limit";
+            container flooding {
+              tailf:info "Mac flooding";
+              description
+                "Mac flooding";
+              leaf disable {
+                tailf:info "disable";
+                description
+                  "disable";
+                type empty;
+              }
+            }
+          }
+          container maximum {
+            tailf:info "Maximum";
+            description
+              "Maximum";
+            leaf addresses {
+              tailf:info "Addresses";
+              description
+                "Addresses";
+              type uint32 {
+                tailf:info "<1..65536>;;Number of addresses that can be learnt";
+                range "1..65536";
+              }
+            }
+          }
+        }
+      }
+      container member {
+        tailf:info "bridge-domain member";
+        description
+          "bridge-domain member";
+        list mem-ipv4 {
+          tailf:cli-drop-node-name;
+          tailf:cli-suppress-mode;
+          key "mem-ipv4";
+          leaf mem-ipv4 {
+            tailf:info "IP address of the peer";
+            description
+              "IP address of the peer";
+            type inet:ipv4-address;
+          }
+          list mem-vcid {
+            tailf:cli-drop-node-name;
+            tailf:cli-suppress-mode;
+            key "mem-vcid";
+            leaf mem-vcid {
+              tailf:info "<1..4294967295>;;Enter VC ID value";
+              description
+                "<1..4294967295>;;Enter VC ID value";
+              type uint32 {
+                range "1..4294967295";
+              }
+            }
+            container encapsulation {
+              tailf:info "Data encapsulation method";
+              description
+                "Data encapsulation method";
+              presence "true";
+              leaf mpls {
+                tailf:info "Use MPLS encapsulation";
+                description
+                  "Use MPLS encapsulation";
+                type empty;
+              }
+            }
+            container template {
+              tailf:info "Template to use for encapsulation and protocol configuration";
+              description
+                "Template to use for encapsulation and protocol configuration";
+              presence "true";
+              leaf template {
+                tailf:info "<WORD>;;template name (Max size 32)";
+                description
+                  "<WORD>;;template name (Max size 32)";
+                tailf:cli-drop-node-name;
+                type string;
+              }
+            }
+          }
+          container encapsulation {
+            tailf:info "Data encapsulation method";
+            description
+              "Data encapsulation method";
+            leaf mpls {
+              tailf:info "Use MPLS encapsulation";
+              description
+                "Use MPLS encapsulation";
+              type empty;
+            }
+          }
+          leaf template {
+            tailf:info "Template to use for encapsulation and protocol configuration";
+            description
+              "Template to use for encapsulation and protocol configuration";
+            type string {
+              tailf:info "<WORD>;;template name (Max size 32)";
+            }
+          }
+        }
+        list ACR {
+          tailf:cli-suppress-mode;
+          key "acr-int";
+          leaf acr-int {
+            tailf:info "<WORD>;;Virtual ACR interface";
+            description
+              "<WORD>;;Virtual ACR interface";
+            type string;
+          }
+          container service-instance {
+            tailf:info "ethernt serivce instance";
+            description
+              "ethernt serivce instance";
+            list sii {
+              tailf:cli-drop-node-name;
+              tailf:cli-suppress-mode;
+              key "sii";
+              leaf sii {
+                tailf:info "<1..8000>;;Service Instance Identifier";
+                description
+                  "<1..8000>;;Service Instance Identifier";
+                type uint16 {
+                  range "1..8000";
+                }
+              }
+              leaf split-horizon {
+                tailf:info "Configure this port as a member of a split horizon group";
+                description
+                  "Configure this port as a member of a split horizon group";
+                type empty;
+              }
+            }
+          }
+        }
+        leaf Analysis-Module {
+          tailf:info "Cisco network analysis service module";
+          description
+            "Cisco network analysis service module";
+          type uint8 {
+            tailf:info "Analysis-Module interface number";
+          }
+        }
+        leaf Fcpa {
+          tailf:info "Fiber Channel";
+          description
+            "Fiber Channel";
+          type uint8 {
+            tailf:info "Fcpa interface number";
+          }
+        }
+        leaf SBC {
+          tailf:info "Session Border Controller";
+          description
+            "Session Border Controller";
+          type uint32 {
+            tailf:info "<0..2147483647>;;SBC interface number";
+            range "0..2147483647";
+          }
+        }
+        leaf SONET_ACR {
+          tailf:info "Virtual SONET-ACR controller";
+          description
+            "Virtual SONET-ACR controller";
+          type uint8 {
+            tailf:info "SONET_ACR interface number";
+          }
+        }
+        leaf Service-Engine {
+          tailf:info "Cisco service engine module";
+          description
+            "Cisco service engine module";
+          type uint8 {
+            tailf:info "Service-Engine interface number";
+          }
+        }
+        leaf Tunnel-tp {
+          tailf:info "MPLS Transport Profile interface";
+          description
+            "MPLS Transport Profile interface";
+          type uint16 {
+            tailf:info "<0..65535>;;Tunnel-tp interface number";
+            range "0..65535";
+          }
+        }
+        leaf VPN {
+          tailf:info "VPN interface";
+          description
+            "VPN interface";
+          type uint32 {
+            tailf:info "<0..2147483647>;;VPN interface number";
+            range "0..2147483647";
+          }
+        }
+        leaf Virtual-TokenRing {
+          tailf:info "Virtual TokenRing";
+          description
+            "Virtual TokenRing";
+          type uint32 {
+            tailf:info "<0..2147483647>;;Virtual-TokenRing interface number";
+            range "0..2147483647";
+          }
+        }
+        leaf ucse {
+          tailf:info "Cisco ucse server";
+          description
+            "Cisco ucse server";
+          type uint8 {
+            tailf:info "ucse interface number";
+          }
+        }
+        leaf vasileft {
+          tailf:info "VasiLeft interface";
+          description
+            "VasiLeft interface";
+          type uint16 {
+            tailf:info "<1..2000>;;vasileft interface number";
+            range "1..2000";
+          }
+        }
+        leaf vasiright {
+          tailf:info "VasiRight interface";
+          description
+            "VasiRight interface";
+          type uint16 {
+            tailf:info "<1..2000>;;vasiright interface number";
+            range "1..2000";
+          }
+        }
+        leaf vfi {
+          tailf:info "Configure the Virtual Forwarding Instance (VFI) member";
+          description
+            "Enter VFI name";
+          type string;
+        }
+        leaf vni {
+          type uint32 {
+            tailf:info "<4096..16777215>;;VNI ID/number";
+            range "4096..16777215";
+          }
+        }
+        list member-interface {
+          tailf:cli-drop-node-name;
+          tailf:cli-suppress-mode;
+          tailf:cli-sequence-commands;
+          tailf:cli-compact-syntax;
+          key "interface";
+          leaf interface {
+            type string;
+          }
+          leaf interface-id {
+            tailf:cli-drop-node-name;
+            tailf:cli-optional-in-sequence;
+            type union {
+              type string;
+              type uint32;
+            }
+          }
+          leaf service-instance {
+            tailf:info "ethernt serivce instance";
+            description
+              "ethernt serivce instance";
+            type uint32 {
+              tailf:info "<1-8000>;;Service Instance Identifier";
+              range "1..8000";
+            }
+          }
+          container split-horizon {
+            tailf:info "Configure this port as a member of a split horizon group";
+            description
+              "Configure this port as a member of a split horizon group";
+            tailf:cli-flatten-container;
+            tailf:cli-break-sequence-commands;
+            leaf group {
+              tailf:info "Split-horizon group";
+              description
+                "Split-horizon group";
+              type uint8 {
+                tailf:info "<0-1>;;Split-horizon group number";
+              }
+            }
+          }
+        }
+      }
+      leaf shutdown {
+        tailf:info "Take the bridge domain admin down";
+        description
+          "Take the bridge domain admin down";
+        type empty;
+      }
+    }
+    container bridge-domain {
+      tailf:info "Bridge-domain global configuration commands";
+      description
+        "Bridge-domain global configuration commands";
+      list brd-id {
+        tailf:cli-drop-node-name;
+        tailf:cli-mode-name "config-bdomain";
+        key "bridge-domain-id";
+        leaf bridge-domain-id {
+          tailf:info "<1..8192>;;bridge-domain ID";
+          description
+            "<1..8192>;;bridge-domain ID";
+          type uint16 {
+            range "1..8192";
+          }
+        }
+        uses config-bdomain-mode-grouping;
+      }
+      container c-mac {
+        tailf:info "Configure c-mac global commands";
+        description
+          "Configure c-mac global commands";
+        leaf aging-time {
+          tailf:info "Configure aging time for c-mac bridge domains";
+          description
+            "Configure aging time for c-mac bridge domains";
+          type uint16 {
+            tailf:info "<30..3600>;;Aging time in second, default 300 seconds (or 1800 seconds for overlay bridge domains)";
+            range "30..3600";
+          }
+        }
+      }
+      container otv {
+        tailf:info "Configure overlay bridge domains";
+        description
+          "Configure overlay bridge domains";
+        container default {
+          tailf:info "Change default setting of overlay bridge domains";
+          description
+            "Change default setting of overlay bridge domains";
+          leaf age-time {
+            tailf:info "Configure default mac aging time of overlay bridge domains";
+            description
+              "Configure default mac aging time of overlay bridge domains";
+            type uint16 {
+              tailf:info "<30..3600>;;Default aging time in seconds for overlay bridge domains";
+              range "30..3600";
+            }
+          }
+        }
+      }
+      container parameterized {
+        tailf:info "bridge-domain is derived from parameters";
+        description
+          "bridge-domain is derived from parameters";
+        container vlan {
+          tailf:info "bridge-domain from service instance vlan";
+          description
+            "bridge-domain from service instance vlan";
+          tailf:cli-add-mode;
+          tailf:cli-mode-name "config-bdomain";
+          presence "true";
+          uses config-bdomain-mode-grouping;
+        }
+      }
+    }
+    container crypto {
+      tailf:info "Encryption module";
+      description
+        "Encryption module";
+      container call {
+        tailf:info "Configure Crypto Call Admission Control";
+        description
+          "Configure Crypto Call Admission Control";
+        container admission {
+          tailf:info "Configure Crypto Call Admission Control";
+          description
+            "Configure Crypto Call Admission Control";
+          container limit {
+            tailf:info "Configure Crypto Call Admission Control limits";
+            description
+              "Configure Crypto Call Admission Control limits";
+            container all {
+              tailf:info "onfigure Crypto Call Admission Control total in-negotiation SA limit";
+              description
+                "onfigure Crypto Call Admission Control total in-negotiation SA limit";
+              leaf in-negotiation-sa {
+                tailf:info "Maximum number of in-negotiation SAs allowed";
+                description
+                  "Maximum number of in-negotiation SAs allowed";
+                type uint32 {
+                  tailf:info "<10-99999>;;maximum in-negotiation TOTAL SA limit";
+                  range "10..99999";
+                }
+              }
+            }
+            container ike {
+              tailf:info "Configure Crypto Call Admission Control active IKE SA limit";
+              description
+                "Configure Crypto Call Admission Control active IKE SA limit";
+              leaf in-negotiation-sa {
+                tailf:info "Maximum number of in-negotiation IKE SAs allowed";
+                description
+                  "Maximum number of in-negotiation IKE SAs allowed";
+                type uint32 {
+                  tailf:info "<10-99999>;;maximum in-negotiation IKE SA limit";
+                  range "10..99999";
+                }
+              }
+              leaf sa {
+                tailf:info "Maximum active IKE SAs allowed";
+                description
+                  "Maximum active IKE SAs allowed";
+                type uint32 {
+                  tailf:info "<0-99999>;;IKE active SA limit";
+                  range "0..99999";
+                }
+              }
+            }
+            container ipsec {
+              tailf:info "Configure Crypto Call Admission Control active IPSec SA limit";
+              description
+                "Configure Crypto Call Admission Control active IPSec SA limit";
+              leaf sa {
+                tailf:info "Maximum active IPSec SAs allowed";
+                description
+                  "Maximum active IPSec SAs allowed";
+                type uint32 {
+                  tailf:info "<0-99999>;;IPSEC active SA limit";
+                  range "0..99999";
+                }
+              }
+            }
+          }
+        }
+      }
+      list dynamic-map {
+        tailf:info "Specify a dynamic crypto map template";
+        description
+          "Specify a dynamic crypto map template";
+        tailf:cli-mode-name "config-crypto-map";
+        key "name sequence";
+        leaf name {
+          type string {
+            tailf:info "WORD;;Dynamic crypto map template tag";
+          }
+        }
+        leaf sequence {
+          type uint16 {
+            tailf:info "<1-65535>;;Sequence to insert into dynamic-map entry";
+          }
+        }
+        container default {
+          tailf:info "Set a command to its defaults";
+          description
+            "Set a command to its defaults";
+          uses crypto-dynamic-map-default-grouping;
+        }
+        uses crypto-dynamic-map-grouping;
+      }
+      container engine {
+        tailf:info "Enter a crypto engine configurable menu";
+        description
+          "Enter a crypto engine configurable menu";
+        leaf software {
+          tailf:info "Software crypto engine";
+          description
+            "Software crypto engine";
+          type enumeration {
+            enum "ipsec" {
+              tailf:info "Allow software crypto engine to process IPSec";
+            }
+            enum "isakmp" {
+              tailf:info "Force isakmp to use the software crypto engine";
+            }
+          }
+        }
+      }
+      container gdoi {
+        tailf:info "Configure GKM (Group Key Management, GDOI or G-IKEv2) Policy";
+        description
+          "Configure GKM (Group Key Management, GDOI or G-IKEv2) Policy";
+        list group {
+          tailf:info "Configure a GKM (Group Key Management, GDOI or G-IKEv2) Group";
+          description
+            "Configure a GKM (Group Key Management, GDOI or G-IKEv2) Group";
+          tailf:cli-mode-name "config-gkm-group";
+          key "name";
+          leaf name {
+            type string {
+              tailf:info "WORD;;Group name";
+            }
+            tailf:cli-disallow-value "ipv6";
+          }
+          leaf ipv6 {
+            tailf:info "IPv6 GKM (Group Key Management) Group";
+            description
+              "IPv6 GKM (Group Key Management) Group";
+            tailf:cli-prefix-key;
+            type empty;
+          }
+          uses crypto-gdio-grouping;
+          container default {
+            tailf:info "Set a command to its defaults";
+            description
+              "Set a command to its defaults";
+            uses crypto-gdio-default-grouping;
+          }
+        }
+      }
+      container gkm {
+        tailf:info "Configure GKM (Group Key Management, GDOI or G-IKEv2) Policy";
+        description
+          "Configure GKM (Group Key Management, GDOI or G-IKEv2) Policy";
+        list group {
+          tailf:info "Configure a GKM (Group Key Management, GDOI or G-IKEv2) Group";
+          description
+            "Configure a GKM (Group Key Management, GDOI or G-IKEv2) Group";
+          tailf:cli-mode-name "config-gkm-group";
+          key "name";
+          leaf name {
+            type string {
+              tailf:info "WORD;;Group name";
+            }
+            tailf:cli-disallow-value "ipv6";
+          }
+          leaf ipv6 {
+            tailf:info "IPv6 GKM (Group Key Management) Group";
+            description
+              "IPv6 GKM (Group Key Management) Group";
+            tailf:cli-prefix-key;
+            type empty;
+          }
+          uses crypto-gdio-grouping;
+          container default {
+            tailf:info "Set a command to its defaults";
+            description
+              "Set a command to its defaults";
+            uses crypto-gdio-default-grouping;
+          }
+        }
+      }
+      list identity {
+        tailf:info "Enter a crypto identity list";
+        description
+          "Enter a crypto identity list";
+        tailf:cli-mode-name "config-crypto-identity";
+        key "name";
+        leaf name {
+          type string {
+            tailf:info "WORD;;Crypto identity tag";
+          }
+        }
+        container default {
+          tailf:info "Set a command to its defaults";
+          description
+            "Set a command to its defaults";
+          uses crypto-identity-default-grouping;
+        }
+        uses crypto-identity-grouping;
+      }
+      container ikev2 {
+        tailf:info "Configure IKEv2 Options";
+        description
+          "Configure IKEv2 Options";
+        uses crypto-ikev2-grouping;
+      }
+      container ipsec {
+        tailf:info "Configure IPSEC policy";
+        description
+          "Configure IPSEC policy";
+        uses crypto-ipsec-grouping;
+      }
+      container isakmp {
+        tailf:info "Configure ISAKMP policy";
+        description
+          "Configure ISAKMP policy";
+        uses crypto-isakmp-grouping;
+      }
+      container key {
+        tailf:info "Long term key operations";
+        description
+          "Long term key operations";
+        uses crypto-key-grouping;
+      }
+      list keyring {
+        tailf:info "Key ring commands";
+        description
+          "Key ring commands";
+        tailf:cli-mode-name "config-keyring";
+        key "name";
+        leaf name {
+          type string {
+            tailf:info "WORD;;name of the key ring";
+          }
+        }
+        leaf vrf {
+          tailf:info "Mention a vrf it belongs to";
+          description
+            "Mention a vrf it belongs to";
+          tailf:cli-hide-in-submode;
+          type string {
+            tailf:info "WORD;;the VRF name";
+          }
+        }
+        container default {
+          tailf:info "Set a command to its defaults";
+          description
+            "Set a command to its defaults";
+          uses crypto-keyring-grouping;
+        }
+        uses crypto-keyring-grouping;
+      }
+      container logging {
+        tailf:info "logging messages";
+        description
+          "logging messages";
+        container ezvpn {
+          tailf:info "ezvpn logging enable/disable";
+          description
+            "ezvpn logging enable/disable";
+          presence "true";
+          leaf group {
+            tailf:info "ezvpn group";
+            description
+              "ezvpn group";
+            type string {
+              tailf:info "WORD;;group name";
+            }
+          }
+        }
+        leaf ikev2 {
+          tailf:info "logging IKEv2 sessions";
+          description
+            "logging IKEv2 sessions";
+          type empty;
+        }
+        leaf session {
+          tailf:info "logging up/down session";
+          description
+            "logging up/down session";
+          type empty;
+        }
+      }
+      container map-ipv6 {
+        tailf:cli-drop-node-name;
+        list map {
+          tailf:info "Enter a crypto map";
+          description
+            "Enter a crypto map";
+          tailf:cli-mode-name "config-crypto-map";
+          tailf:cli-sequence-commands;
+          tailf:cli-compact-syntax;
+          key "name";
+          leaf name {
+            type string {
+              tailf:info "WORD;;Crypto map tag";
+            }
+          }
+          leaf ipv6 {
+            tailf:info "IPv6 crypto map";
+            description
+              "IPv6 crypto map";
+            tailf:cli-optional-in-sequence;
+            tailf:cli-prefix-key;
+            type empty;
+          }
+          leaf sequence-number {
+            tailf:cli-drop-node-name;
+            tailf:cli-hide-in-submode;
+            type uint16 {
+              tailf:info "<1-65535>;;Sequence to insert into crypto map entry";
+            }
+          }
+          leaf keying {
+            tailf:cli-drop-node-name;
+            tailf:cli-hide-in-submode;
+            tailf:cli-optional-in-sequence;
+            type enumeration {
+              enum "ipsec-isakmp" {
+                tailf:info "IPSEC w/ISAKMP";
+              }
+              enum "ipsec-manual" {
+                tailf:info "IPSEC w/manual keying";
+              }
+              enum "gdoi" {
+                tailf:info "configure GDOI map";
+              }
+            }
+          }
+          choice dynamic-profile {
+            case dynamic-case {
+              leaf dynamic {
+                tailf:info "Enable dynamic crypto map support";
+                description
+                  "Enable dynamic crypto map support";
+                tailf:cli-hide-in-submode;
+                tailf:cli-break-sequence-commands;
+                tailf:cli-full-command;
+                when "../keying = 'ipsec-isakmp'";
+                type string {
+                  tailf:info "WORD;;Name of dynamic-map template";
+                }
+              }
+            }
+            case profile-case {
+              leaf profile {
+                tailf:info "Enable crypto map as a crypto-profile";
+                description
+                  "Enable crypto map as a crypto-profile";
+                tailf:cli-hide-in-submode;
+                tailf:cli-full-command;
+                when "../keying = 'ipsec-isakmp'";
+                type string {
+                  tailf:info "WORD;;Name for this crypto profile";
+                }
+              }
+            }
+          }
+          container default {
+            tailf:info "Set a command to its defaults";
+            description
+              "Set a command to its defaults";
+            tailf:cli-break-sequence-commands;
+            uses crypto-map-default-grouping;
+          }
+          uses crypto-map-grouping;
+        }
+      }
+      container map-ipv6-gdoi {
+        tailf:cli-drop-node-name;
+        list map {
+          tailf:info "Enter a crypto map";
+          description
+            "Enter a crypto map";
+          tailf:cli-mode-name "config-crypto-map-fail-close";
+          key "name";
+          leaf name {
+            type string {
+              tailf:info "WORD;;Crypto map tag";
+            }
+          }
+          leaf ipv6 {
+            tailf:info "IPv6 crypto map";
+            description
+              "IPv6 crypto map";
+            tailf:cli-prefix-key;
+            type empty;
+          }
+          leaf gdoi {
+            tailf:info "Configure crypto map gdoi features";
+            description
+              "Configure crypto map gdoi features";
+            tailf:cli-hide-in-submode;
+            type enumeration {
+              enum "fail-close" {
+                tailf:info "Configure crypto map on Fail Close mode";
+              }
+            }
+          }
+          container default {
+            tailf:info "Set a command to its defaults";
+            description
+              "Set a command to its defaults";
+            uses crypto-map-gdoi-default-mapping;
+          }
+          uses crypto-map-gdoi-mapping;
+        }
+      }
+      container map-client {
+        tailf:cli-drop-node-name;
+        list map {
+          tailf:info "Enter a crypto map";
+          description
+            "Enter a crypto map";
+          tailf:cli-suppress-mode;
+          key "name";
+          leaf name {
+            type string {
+              tailf:info "WORD;;Crypto map tag";
+            }
+          }
+          leaf ipv6 {
+            tailf:info "IPv6 crypto map";
+            description
+              "IPv6 crypto map";
+            tailf:cli-prefix-key;
+            type empty;
+          }
+          container client {
+            tailf:info "Specify client configuration settings";
+            description
+              "Specify client configuration settings";
+            tailf:cli-display-separated;
+            container accounting {
+              tailf:info "Accounting parameters.";
+              description
+                "Accounting parameters.";
+              leaf list {
+                tailf:info "AAA accounting list to use";
+                description
+                  "AAA accounting list to use";
+                tailf:cli-full-command;
+                type string {
+                  tailf:info "WORD;;Named accounting list.";
+                }
+              }
+            }
+            container authentication {
+              tailf:info "Use Extended Authentication";
+              description
+                "Use Extended Authentication";
+              leaf list {
+                tailf:info "AAA authentication list to use";
+                description
+                  "AAA authentication list to use";
+                tailf:cli-full-command;
+                type string {
+                  tailf:info "WORD;;Named authentication list.";
+                }
+              }
+            }
+            container configuration {
+              tailf:info "Specify client configuration settings";
+              description
+                "Specify client configuration settings";
+              container address {
+                tailf:info "Specify client network address configuration";
+                description
+                  "Specify client network address configuration";
+                leaf initiate {
+                  tailf:info "Push the network address to the client";
+                  description
+                    "Push the network address to the client";
+                  tailf:cli-full-command;
+                  type empty;
+                }
+                leaf respond {
+                  tailf:info "Respond to network address requests from the client";
+                  description
+                    "Respond to network address requests from the client";
+                  tailf:cli-full-command;
+                  type empty;
+                }
+              }
+            }
+          }
+          container isakmp {
+            tailf:info "Specify isakmp configuration settings";
+            description
+              "Specify isakmp configuration settings";
+            tailf:cli-sequence-commands;
+            tailf:cli-compact-syntax;
+            tailf:cli-display-separated;
+            leaf authorization {
+              tailf:info "Authorization parameters.";
+              description
+                "Authorization parameters.";
+              type empty;
+            }
+            leaf list {
+              tailf:info "AAA Authorization list to use";
+              description
+                "AAA Authorization list to use";
+              tailf:cli-full-command;
+              type string {
+                tailf:info "WORD;;Named Authorization list.";
+              }
+            }
+          }
+          leaf isakmp-profile {
+            tailf:info "Specify isakmp profile to use";
+            description
+              "Specify isakmp profile to use";
+            tailf:cli-full-command;
+            type string {
+              tailf:info "WORD;;Name of the isakmp profile";
+            }
+          }
+          leaf local-address {
+            tailf:info "Interface to use for local address for this crypto map";
+            description
+              "Interface to use for local address for this crypto map";
+            tailf:cli-full-command;
+            type string;
+          }
+          container redundancy {
+            tailf:info "High availability options for this map";
+            description
+              "High availability options for this map";
+            tailf:cli-display-separated;
+            container replay-interval {
+              tailf:info "HA replay counter interval";
+              description
+                "HA replay counter interval";
+              tailf:cli-sequence-commands;
+              tailf:cli-compact-syntax;
+              leaf inbound {
+                tailf:info "HA inbound replay counter interval";
+                description
+                  "HA inbound replay counter interval";
+                type uint32 {
+                  tailf:info "<0-1000>;;Inbound interval in packets";
+                  range "0..1000";
+                }
+              }
+              leaf outbound {
+                tailf:info "HA outbound replay counter interval";
+                description
+                  "HA outbound replay counter interval";
+                type uint32 {
+                  tailf:info "<1000-100000>;;Outbound interval in packets";
+                  range "1000..10000";
+                }
+              }
+            }
+          }
+        }
+      }
+      container mib {
+        tailf:info "Configure Crypto-related MIB Parameters";
+        description
+          "Configure Crypto-related MIB Parameters";
+        container ipsec {
+          tailf:info "onfigure MIB Parameters";
+          description
+            "onfigure MIB Parameters";
+          container flowmib {
+            tailf:info "Configure IPSec Flow-MIB Parameters";
+            description
+              "Configure IPSec Flow-MIB Parameters";
+            container history {
+              tailf:info "Configure IPSEC Flow MIB History Parameters";
+              description
+                "Configure IPSEC Flow MIB History Parameters";
+              container failure {
+                tailf:info "Configure IPSEC Flow MIB Failure History Parameters";
+                description
+                  "Configure IPSEC Flow MIB Failure History Parameters";
+                leaf size {
+                  tailf:info "Configure IPSEC Flow MIB Tunnel Failure History Window Size";
+                  description
+                    "Configure IPSEC Flow MIB Tunnel Failure History Window Size";
+                  type uint8 {
+                    tailf:info "<2-200>;;Specify the failure history window size for IPSec Flow MIB";
+                  }
+                }
+              }
+              container tunnel {
+                tailf:info "Configure IPSEC Flow MIB Tunnel History Parameters";
+                description
+                  "Configure IPSEC Flow MIB Tunnel History Parameters";
+                leaf size {
+                  tailf:info "Configure IPSEC Flow MIB Tunnel Failure History Window Size";
+                  description
+                    "Configure IPSEC Flow MIB Tunnel Failure History Window Size";
+                  type uint8 {
+                    tailf:info "<2-200>;;Specify the tunnel history window size for IPSec Flow MIB";
+                  }
+                }
+              }
+            }
+          }
+        }
+      }
+      container pki {
+        tailf:info "Public Key components";
+        description
+          "Public Key components";
+        leaf authenticate {
+          tailf:info "Get the CA certificate";
+          description
+            "Get the CA certificate";
+          type string {
+            tailf:info "WORD;;CA Server Name";
+          }
+        }
+        container certificate {
+          tailf:info "Actions on certificates";
+          description
+            "Actions on certificates";
+          list chain {
+            tailf:info "Identify certificates";
+            description
+              "Identify certificates";
+            tailf:cli-mode-name "config-cert-chain";
+            key "name";
+            leaf name {
+              type string {
+                tailf:info "WORD;;CA Server Name";
+              }
+            }
+            list certificate {
+              tailf:info "Certificate issued by the CA";
+              description
+                "Certificate issued by the CA";
+              tailf:cli-mode-name "config-pki-hexmode";
+              tailf:cli-exit-command "quit";
+              tailf:cli-delete-when-empty;
+              key "serial";
+              leaf serial {
+                type string {
+                  tailf:info "WORD;;Certificate serial number";
+                }
+              }
+              leaf certtype {
+                tailf:cli-drop-node-name;
+                tailf:cli-prefix-key;
+                type enumeration {
+                  enum "ca" {
+                    tailf:info "CA certificate";
+                  }
+                  enum "ra-encrypt" {
+                    tailf:info "RA encryption certificate";
+                  }
+                  enum "ra-general" {
+                    tailf:info "RA general purpose certificate";
+                  }
+                  enum "ra-sign" {
+                    tailf:info "RA signing certificate";
+                  }
+                  enum "rollover" {
+                    tailf:info "Shadow rollover certificate";
+                  }
+                  enum "self-signed" {
+                    tailf:info "Self-signed certificate";
+                  }
+                }
+              }
+            }
+          }
+          list map {
+            tailf:info "Define certificate attributes map";
+            description
+              "Define certificate attributes map";
+            tailf:cli-mode-name "ca-certificate-map";
+            key "tag";
+            leaf tag {
+              type string {
+                tailf:info "WORD;;Certificate attribute map tag";
+              }
+            }
+            leaf sequence {
+              tailf:cli-drop-node-name;
+              tailf:cli-hide-in-submode;
+              type uint16 {
+                tailf:info "<1-65535>;;Sequence to insert into certificate map entry";
+              }
+            }
+            uses crypto-pki-certificate-map-grouping;
+          }
+          leaf pool {
+            tailf:info "Identify CA certificates in pool";
+            description
+              "Identify CA certificates in pool";
+            type empty;
+          }
+          leaf query {
+            tailf:info "Get certificates from the CA after reboot";
+            description
+              "Get certificates from the CA after reboot";
+            type empty;
+          }
+          container storage {
+            tailf:info "specify where to store certificates";
+            description
+              "specify where to store certificates";
+            leaf path {
+              tailf:cli-drop-node-name;
+              tailf:cli-full-command;
+              type union {
+                type enumeration {
+                  enum "bootflash:" {
+                    tailf:info "path  to store certificates";
+                  }
+                  enum "flash:" {
+                    tailf:info "path  to store certificates";
+                  }
+                  enum "nvram:" {
+                    tailf:info "path  to store certificates";
+                  }
+                }
+                type string {
+                  tailf:info "WORD";
+                }
+              }
+            }
+            leaf on {
+              tailf:info "Create keypairs on device";
+              description
+                "Create keypairs on device";
+              type empty;
+            }
+            leaf with-keypair {
+              tailf:info "Store certificates with keypair";
+              description
+                "Store certificates with keypair";
+              type empty;
+            }
+          }
+          leaf validate {
+            tailf:info "Validate a certificate chain";
+            description
+              "Validate a certificate chain";
+            type string {
+              tailf:info "WORD;;trust point";
+            }
+          }
+        }
+        container crl {
+          tailf:info "Actions on certificate revocation lists";
+          description
+            "Actions on certificate revocation lists";
+          container cache {
+            tailf:info "Cache which holds recently parsed CRLs";
+            description
+              "Cache which holds recently parsed CRLs";
+            leaf size {
+              tailf:info "Size of the recently parsed CRL cache";
+              description
+                "Size of the recently parsed CRL cache";
+              type uint32 {
+                tailf:info "<0-131072>;;Maximum size of the CRL cache in kilobytes";
+                range "0..131072";
+              }
+            }
+          }
+          container download {
+            tailf:info "auto-download CRL";
+            description
+              "auto-download CRL";
+            container schedule {
+              tailf:info "Schedule time to auto-download CRL";
+              description
+                "Schedule time to auto-download CRL";
+              leaf prepublish {
+                tailf:info "Requests CRL at prepublish time";
+                description
+                  "Requests CRL at prepublish time";
+                type uint16 {
+                  tailf:info "<0-65535>;;Time interval to Pre-download CRL before CRL expiry";
+                }
+              }
+              container retries {
+                tailf:info "Retry request for failed CDP locations";
+                description
+                  "Retry request for failed CDP locations";
+                leaf number {
+                  tailf:cli-drop-node-name;
+                  type uint8 {
+                    tailf:info "<1-15>;;number of retries";
+                    range "1..15";
+                  }
+                }
+                leaf interval {
+                  tailf:info "retry time interval for each attempt";
+                  description
+                    "retry time interval for each attempt";
+                  type uint16 {
+                    tailf:info "<15-600>;;retry time interval in minutes";
+                    range "15..600";
+                  }
+                }
+              }
+              container time {
+                tailf:info "Request auto-download CRL at this time";
+                description
+                  "Request auto-download CRL at this time";
+                tailf:cli-sequence-commands;
+                tailf:cli-compact-syntax;
+                leaf date {
+                  tailf:cli-drop-node-name;
+                  type enumeration {
+                    enum "Friday" {
+                      tailf:info "Friday";
+                    }
+                    enum "Monday" {
+                      tailf:info "Monday";
+                    }
+                    enum "Saturday" {
+                      tailf:info "Saturday";
+                    }
+                    enum "Sunday" {
+                      tailf:info "Sunday";
+                    }
+                    enum "Thursday" {
+                      tailf:info "Thursday";
+                    }
+                    enum "Tuesday" {
+                      tailf:info "Tuesday";
+                    }
+                    enum "Wednesday" {
+                      tailf:info "Wednesday";
+                    }
+                  }
+                }
+                leaf clock {
+                  tailf:cli-drop-node-name;
+                  type string {
+                    tailf:info "hh:mm;;Request auto-download CRL at this time";
+                  }
+                }
+              }
+            }
+            leaf trustpoint {
+              tailf:info "Trustpoint to auto-download CRL";
+              description
+                "Trustpoint to auto-download CRL";
+              type string {
+                tailf:info "WORD;;Name of Trustpoint to use for CRL download";
+              }
+            }
+            container url {
+              tailf:info "URL to auto-download CRL";
+              description
+                "URL to auto-download CRL";
+              tailf:cli-sequence-commands;
+              tailf:cli-compact-syntax;
+              leaf name {
+                tailf:cli-drop-node-name;
+                type string {
+                  tailf:info "WORD;;http or ldap url";
+                }
+              }
+              leaf source-interface {
+                tailf:info "Interface used as source address";
+                description
+                  "Interface used as source address";
+                tailf:cli-break-sequence-commands;
+                type string;
+              }
+              leaf vrf {
+                tailf:info "VRF to use for CRL download";
+                description
+                  "VRF to use for CRL download";
+                type string {
+                  tailf:info "WORD;;Name of VRF to use for CRL download";
+                }
+              }
+            }
+          }
+          leaf request {
+            tailf:info "Requests a current CRL";
+            description
+              "Requests a current CRL";
+            type string {
+              tailf:info "WORD;;CA Server Name";
+            }
+          }
+        }
+        leaf enroll {
+          tailf:info "Request a certificate from a CA";
+          description
+            "Request a certificate from a CA";
+          type string {
+            tailf:info "WORD;;CA Server Name";
+          }
+        }
+        list export {
+          tailf:info "Export certificate or PKCS12 file";
+          description
+            "Export certificate or PKCS12 file";
+          tailf:cli-suppress-mode;
+          key "name";
+          leaf name {
+            type string {
+              tailf:info "WORD;;Trustpoint label to associate keys and certs with";
+            }
+          }
+          container pem {
+            tailf:info "Export to PEM files";
+            description
+              "Export to PEM files";
+            tailf:cli-hide-in-submode;
+            container terminal {
+              tailf:info "Export via the terminal (cut-and-paste)";
+              description
+                "Export via the terminal (cut-and-paste)";
+              presence "true";
+              container pem-3des {
+                tailf:info "Encrypt the private key with 3DES";
+                description
+                  "Encrypt the private key with 3DES";
+                tailf:alt-name "3des";
+                leaf password {
+                  tailf:info "Passphrase";
+                  description
+                    "Passphrase";
+                  tailf:cli-multi-value;
+                  type string {
+                    tailf:info "LINE;;Passphrase used to protect the private key";
+                  }
+                }
+              }
+              container des {
+                tailf:info "Encrypt the private key with DES";
+                description
+                  "Encrypt the private key with DES";
+                leaf password {
+                  tailf:info "Passphrase";
+                  description
+                    "Passphrase";
+                  tailf:cli-multi-value;
+                  type string {
+                    tailf:info "LINE;;Passphrase used to protect the private key";
+                  }
+                }
+              }
+              leaf rollover {
+                tailf:info "Export the rollover CA certificate";
+                description
+                  "Export the rollover CA certificate";
+                type empty;
+              }
+            }
+            container url {
+              tailf:info "Export via the file systems";
+              description
+                "Export via the file systems";
+              tailf:cli-sequence-commands;
+              tailf:cli-compact-syntax;
+              uses crypto-key-url-file-ex-grouping;
+              leaf encrypt {
+                tailf:cli-drop-node-name;
+                tailf:cli-optional-in-sequence;
+                type enumeration {
+                  enum "3des" {
+                    tailf:info "Encrypt the private key with 3DES";
+                  }
+                  enum "des" {
+                    tailf:info "Encrypt the private key with DES";
+                  }
+                }
+              }
+              leaf password {
+                tailf:info "Passphrase";
+                description
+                  "Passphrase";
+                tailf:cli-multi-value;
+                when "../encrypt";
+                type string {
+                  tailf:info "LINE;;Passphrase used to protect the private key";
+                }
+              }
+            }
+          }
+          container pkcs12 {
+            tailf:info "Export to PKCS12 file";
+            description
+              "Export to PKCS12 file";
+            tailf:cli-hide-in-submode;
+            tailf:cli-sequence-commands;
+            tailf:cli-compact-syntax;
+            uses crypto-key-url-file-ex-grouping;
+            leaf password {
+              tailf:info "Passphrase";
+              description
+                "Passphrase";
+              tailf:cli-multi-value;
+              type string {
+                tailf:info "LINE;;Passphrase used to protect the private key";
+              }
+            }
+          }
+        }
+        list import {
+          tailf:info "Import certificate or PKCS12 file";
+          description
+            "Import certificate or PKCS12 file";
+          tailf:cli-suppress-mode;
+          key "name";
+          leaf name {
+            type string {
+              tailf:info "WORD;;Trustpoint label to associate certificate or pkcs-12 file with";
+            }
+          }
+          leaf certificate {
+            tailf:info "Import a certificate from a TFTP server or the terminal";
+            description
+              "Import a certificate from a TFTP server or the terminal";
+            type empty;
+          }
+          container pem {
+            tailf:info "Import from PEM files";
+            description
+              "Import from PEM files";
+            tailf:cli-hide-in-submode;
+            tailf:cli-compact-syntax;
+            leaf check {
+              tailf:info "Validate certificate on input";
+              description
+                "Validate certificate on input";
+              type empty;
+            }
+            leaf exportable {
+              tailf:info "Allow the key as to be exported";
+              description
+                "Allow the key as to be exported";
+              type empty;
+            }
+            container terminal {
+              tailf:info "Import via the terminal (cut-and-paste)";
+              description
+                "Import via the terminal (cut-and-paste)";
+              leaf password {
+                tailf:info "Passphrase";
+                description
+                  "Passphrase";
+                tailf:cli-multi-value;
+                type string {
+                  tailf:info "LINE;;Passphrase used to protect the private key";
+                }
+              }
+            }
+            container url {
+              tailf:info "Export via the file systems";
+              description
+                "Export via the file systems";
+              tailf:cli-sequence-commands;
+              tailf:cli-compact-syntax;
+              uses crypto-key-url-file-ex-grouping;
+              leaf password {
+                tailf:info "Passphrase";
+                description
+                  "Passphrase";
+                tailf:cli-multi-value;
+                type string {
+                  tailf:info "LINE;;Passphrase used to protect the private key";
+                }
+              }
+            }
+            leaf usage-keys {
+              tailf:info "Usage key pairs";
+              description
+                "Usage key pairs";
+              type empty;
+            }
+          }
+          container pkcs12 {
+            tailf:info "Import from PKCS12 file";
+            description
+              "Import from PKCS12 file";
+            tailf:cli-hide-in-submode;
+            tailf:cli-sequence-commands;
+            tailf:cli-compact-syntax;
+            uses crypto-key-url-file-ex-grouping;
+            leaf password {
+              tailf:info "Passphrase";
+              description
+                "Passphrase";
+              tailf:cli-multi-value;
+              type string {
+                tailf:info "LINE;;Passphrase used to protect the private key";
+              }
+            }
+          }
+        }
+        container profile {
+          tailf:info "Define a certificate profile";
+          description
+            "Define a certificate profile";
+          list enrollment {
+            tailf:info "Define an enrollment profile";
+            description
+              "Define an enrollment profile";
+            tailf:cli-mode-name "ca-profile-enroll";
+            key "tag";
+            leaf tag {
+              type string {
+                tailf:info "WORD;;Certificate enrollment profile tag";
+              }
+            }
+            uses crypto-pki-profile-enrollment-grouping;
+            container default {
+              tailf:info "Set a command to its defaults";
+              description
+                "Set a command to its defaults";
+              uses crypto-pki-profile-enrollment-grouping;
+            }
+          }
+        }
+        container server {
+          tailf:info "Enable IOS Certificate server";
+          description
+            "Enable IOS Certificate server";
+          tailf:cli-sequence-commands;
+          tailf:cli-compact-syntax;
+          leaf name {
+            tailf:cli-drop-node-name;
+            type string {
+              tailf:info "WORD;;Certificate Server Name";
+            }
+          }
+          leaf rollover {
+            tailf:info "Rollover the server's key and certificate";
+            description
+              "Rollover the server's key and certificate";
+            tailf:cli-optional-in-sequence;
+            type empty;
+          }
+          leaf cancel {
+            tailf:info "Cancel a pending rollover";
+            description
+              "Cancel a pending rollover";
+            tailf:cli-optional-in-sequence;
+            type empty;
+          }
+        }
+        list trustpoint {
+          tailf:info "Define a CA trustpoint";
+          description
+            "Define a CA trustpoint";
+          tailf:cli-mode-name "ca-trustpoint";
+          key "id";
+          leaf id {
+            type string {
+              tailf:info "WORD;;CA Server Name";
+            }
+          }
+          container enrollment {
+            tailf:info "Enrollment parameters";
+            description
+              "Enrollment parameters";
+            leaf http-proxy {
+              tailf:info "HTTP proxy server for enrollment";
+              description
+                "HTTP proxy server for enrollment";
+              type string {
+                tailf:info "WORD;;host-name";
+              }
+            }
+            container mode {
+              tailf:info "Mode supported by the Certificate Authority";
+              description
+                "Mode supported by the Certificate Authority";
+              leaf ra {
+                tailf:info "Registration Authority mode";
+                description
+                  "Registration Authority mode";
+                type empty;
+              }
+            }
+            leaf pkcs12 {
+              type empty;
+            }
+            leaf profile {
+              tailf:info "Specify an profile for enrollment";
+              description
+                "Specify an profile for enrollment";
+              type string {
+                tailf:info "WORD;;Profile name";
+              }
+            }
+            container retry {
+              tailf:info "Polling parameters";
+              description
+                "Polling parameters";
+              leaf count {
+                tailf:info "How many times to poll CA for our certificate";
+                description
+                  "How many times to poll CA for our certificate";
+                type uint8 {
+                  tailf:info "<1-100>;;Number of times to poll a CA for a certificate";
+                  range "1..100";
+                }
+              }
+              leaf period {
+                tailf:info "How long to wait between requests to CA for our certificate";
+                description
+                  "How long to wait between requests to CA for our certificate";
+                type uint8 {
+                  tailf:info "<1-60>;;Period in minutes between attempts to contact a CA";
+                  range "1..60";
+                }
+              }
+            }
+            leaf selfsigned {
+              tailf:info "Generate a Self Signed Certificate";
+              description
+                "Generate a Self Signed Certificate";
+              type empty;
+            }
+            container terminal {
+              tailf:info "Enroll via the terminal (cut-and-paste)";
+              description
+                "Enroll via the terminal (cut-and-paste)";
+              presence "true";
+              leaf pem {
+                tailf:info "Include PEM encapsulation boundaries";
+                description
+                  "Include PEM encapsulation boundaries";
+                type empty;
+              }
+            }
+            leaf url {
+              tailf:info "CA server enrollment URL";
+              description
+                "CA server enrollment URL";
+              type string {
+                tailf:info "WORD;;HTTP URL";
+              }
+            }
+          }
+          leaf revocation-check {
+            tailf:info "Revocation checking options";
+            description
+              "Revocation checking options";
+            type enumeration {
+              enum "crl" {
+                tailf:info "Revocation check by CRL";
+              }
+              enum "none" {
+                tailf:info "Ignore revocation check";
+              }
+              enum "ocsp" {
+                tailf:info "Revocation check by OCSP";
+              }
+            }
+          }
+          leaf rsakeypair {
+            tailf:info "Specify rsakeypair for this identity";
+            description
+              "Specify rsakeypair for this identity";
+            type string;
+          }
+          leaf subject-name {
+            tailf:info "Subject Name";
+            description
+              "Subject Name";
+            type string;
+          }
+        }
+        container token {
+          tailf:info "Configure cryptographic token";
+          description
+            "Configure cryptographic token";
+          list token-name {
+            tailf:cli-suppress-mode;
+            tailf:cli-delete-when-empty;
+            tailf:cli-drop-node-name;
+            tailf:cli-compact-syntax;
+            key "name";
+            leaf name {
+              type string {
+                tailf:info "WORD;;token name";
+              }
+            }
+            uses crypto-pki-token-grouping;
+          }
+        }
+        container trustpool {
+          tailf:info "Define CA trustpool";
+          description
+            "Define CA trustpool";
+          container import {
+            tailf:info "Import a trustpool bundle";
+            description
+              "Import a trustpool bundle";
+            presence "true";
+            leaf clean {
+              tailf:info "Remove all downloaded trustpool certificates prior to import";
+              description
+                "Remove all downloaded trustpool certificates prior to import";
+              type empty;
+            }
+            leaf terminal {
+              tailf:info "Import bundle via the terminal (cut-and-paste) in PEM format";
+              description
+                "Import bundle via the terminal (cut-and-paste) in PEM format";
+              type empty;
+            }
+            container url {
+              tailf:info "Import via the file systems";
+              description
+                "Import via the file systems";
+              uses crypto-key-url-file-im-grouping;
+            }
+          }
+        }
+        container default {
+          tailf:info "set default values for tokens";
+          description
+            "set default values for tokens";
+          uses crypto-pki-token-grouping;
+        }
+      }
+      container ssl {
+        tailf:info "Configure Crypto SSL Options";
+        description
+          "Configure Crypto SSL Options";
+        container authorization {
+          tailf:info "ssl authorization";
+          description
+            "ssl authorization";
+          leaf policy {
+            tailf:info "Crypto SSL authorization policy";
+            description
+              "Crypto SSL authorization policy";
+            type string {
+              tailf:info "WORD;;Name of the policy";
+            }
+          }
+        }
+        container diagnose {
+          tailf:info "SSLVPN diagnose";
+          description
+            "SSLVPN diagnose";
+          leaf error {
+            tailf:info "Start error trace debug";
+            description
+              "Start error trace debug";
+            type uint16 {
+              tailf:info "<1-1000>;;Maximum number of exit path entry";
+              range "1..1000";
+            }
+          }
+        }
+        leaf policy {
+          tailf:info "Define SSL policies";
+          description
+            "Define SSL policies";
+          type string {
+            tailf:info "WORD;;Name of ssl policy";
+          }
+        }
+        leaf profile {
+          tailf:info "Define SSL profiles";
+          description
+            "Define SSL profiles";
+          type string {
+            tailf:info "WORD;;Name of ssl profile";
+          }
+        }
+        container proposal {
+          tailf:info "Define ssl Proposal";
+          description
+            "Define ssl Proposal";
+          tailf:cli-add-mode;
+          tailf:cli-mode-name "config-crypto-ssl-proposal";
+          leaf name {
+            tailf:cli-drop-node-name;
+            tailf:cli-hide-in-submode;
+            type string {
+              tailf:info "WORD;;Name of ssl Proposal";
+            }
+          }
+          container protection {
+            tailf:info "Specify the protection algorithms";
+            description
+              "Specify the protection algorithms";
+            leaf rsa-3des-ede-sha1 {
+              tailf:info "RSA, 3DES and SHA1";
+              description
+                "RSA, 3DES and SHA1";
+              type empty;
+            }
+            leaf rsa-aes128-sha1 {
+              tailf:info "RSA, AES128 and SHA1";
+              description
+                "RSA, AES128 and SHA1";
+              type empty;
+            }
+            leaf rsa-aes256-sha1 {
+              tailf:info "RSA, AES256 and SHA1";
+              description
+                "RSA, AES256 and SHA1";
+              type empty;
+            }
+            leaf rsa-rc4128-md5 {
+              tailf:info "RSA, RC4 and MD5";
+              description
+                "RSA, RC4 and MD5";
+              type empty;
+            }
+          }
+        }
+      }
+      container vpn {
+        tailf:info "Configure crypto vpn commands";
+        description
+          "Configure crypto vpn commands";
+        container anyconnect {
+          tailf:info "Configure anyconnect client package";
+          description
+            "Configure anyconnect client package";
+          container file {
+            tailf:cli-drop-node-name;
+            tailf:cli-sequence-commands;
+            tailf:cli-compact-syntax;
+            leaf filename {
+              tailf:cli-drop-node-name;
+              type string {
+                tailf:info "WORD;;Filename of installing package";
+              }
+            }
+            leaf sequence {
+              tailf:info "client-side download sequence num (priority) of this package";
+              description
+                "client-side download sequence num (priority) of this package";
+              tailf:cli-optional-in-sequence;
+              type uint8 {
+                tailf:info "<1-9>;;download sequence number of this package for the client";
+              }
+            }
+          }
+          container profile-container {
+            tailf:cli-drop-node-name;
+            tailf:cli-sequence-commands;
+            tailf:cli-compact-syntax;
+            leaf profile {
+              tailf:info "Configure anyconnect client profile";
+              description
+                "Configure anyconnect client profile";
+              type string {
+                tailf:info "WORD;;Name of the AnyConnect profile";
+              }
+            }
+            leaf filename {
+              tailf:cli-drop-node-name;
+              type string {
+                tailf:info "WORD;;device:filename";
+              }
+            }
+          }
+        }
+        leaf csd {
+          tailf:info "Configure Secure Desktop package";
+          description
+            "Configure Secure Desktop package";
+          type string {
+            tailf:info "WORD;;Filename of installing package";
+          }
+        }
+      }
+      leaf xauth {
+        tailf:info "X-Auth parameters";
+        description
+          "X-Auth parameters";
+        type string;
+      }
+    }
+    container cts {
+      tailf:info "Cisco Trusted Security commands";
+      description
+        "Cisco Trusted Security commands";
+      container authorization {
+        tailf:info "CTS global authorization configuration";
+        description
+          "CTS global authorization configuration";
+        leaf list {
+          tailf:info "Local authorization list to use for CTS";
+          description
+            "Local authorization list to use for CTS";
+          type string {
+            tailf:info "WORD;;Name of locally configured authorization list";
+          }
+        }
+      }
+      leaf dot1x-server-timeout {
+        tailf:info "Timeout for Radius Retries";
+        description
+          "Timeout for Radius Retries";
+        type uint16 {
+          tailf:info "<30-65535>;;Dot1x Sever timeout value";
+          range "30..65535";
+        }
+      }
+      leaf dot1x-supp-timeout {
+        tailf:info "Timeout for supplicant reply";
+        description
+          "Timeout for supplicant reply";
+        type uint16 {
+          tailf:info "<30-65535>;;Dot1x Supplicant timeout value";
+          range "30..65535";
+        }
+      }
+      leaf logging {
+        tailf:info "Set logging parameters";
+        description
+          "Set logging parameters";
+        type enumeration {
+          enum "verbose" {
+            tailf:info "Show verbose messages in system logs";
+          }
+        }
+      }
+      container role-based {
+        tailf:info "Role-based Access Control configuration commands";
+        description
+          "Role-based Access Control configuration commands";
+        leaf sgt-caching {
+          tailf:info "Enable SGT caching";
+          description
+            "Enable SGT caching";
+          type empty;
+        }
+        list sgt-map {
+          tailf:info "Assign Security Group Tag (SGT) to IP host or network address";
+          description
+            "Assign Security Group Tag (SGT) to IP host or network address";
+          tailf:cli-suppress-mode;
+          key "ip sgt";
+          leaf vrf {
+            tailf:cli-prefix-key {
+              tailf:cli-before-key "1";
+            }
+            tailf:info "Select VPN Routing/Forwarding instance for the binding";
+            description
+              "Select VPN Routing/Forwarding instance for the binding";
+            type string {
+              tailf:info "WORD;;VPN Routing/Forwarding instance name";
+            }
+          }
+          leaf host {
+            tailf:cli-prefix-key {
+              tailf:cli-before-key "1";
+            }
+            type empty;
+          }
+          leaf ip {
+            type union {
+              type inet:ipv4-address {
+                tailf:info "A.B.C.D;;IPv4 host address";
+              }
+              type inet:ipv4-prefix {
+                tailf:info "A.B.C.D/nn;;IPv4 prefix <network>/<length>, e.g., 35.0.0.0/8";
+              }
+              type inet:ipv6-address {
+                tailf:info "X:X:X:X::X;;IPv6 host address x:x::y";
+              }
+              type inet:ipv6-prefix {
+                tailf:info "X:X:X:X::X/<0-128>;;IPv6 prefix <network>/<length> (x:x::y/<z>)";
+              }
+            }
+          }
+          leaf sgt {
+            tailf:info "Security Group Tag (SGT)";
+            description
+              "Security Group Tag (SGT)";
+            tailf:cli-expose-key-name;
+            type uint16 {
+              tailf:info "<2-65519>;;Security Group Tag value";
+            }
+          }
+        }
+      }
+      leaf sgt {
+        tailf:info "Local device security group";
+        description
+          "Local device security group";
+        type uint16 {
+          tailf:info "<2-65519>;;Security Group Tag (SGT) value";
+          range "2..65519";
+        }
+      }
+      container sxp {
+        tailf:info "CTS sxp configuration";
+        description
+          "CTS sxp configuration";
+      }
+    }
+    container bfd {
+      tailf:info "BFD configuration commands";
+      description
+        "BFD configuration commands";
+      leaf l2cos {
+        tailf:info "L2 COS value to be used for BFD packets over VLAN interfaces";
+        description
+          "Value of L2 COS for BFD Pkts over VLAN interfaces";
+        type uint8 {
+          range "0..6";
+        }
+      }
+      container map {
+        tailf:info "configure bfd map entry for multi-hop sessions";
+        description
+          "configure bfd map entry for multi-hop sessions";
+        container ipv4 {
+          tailf:info "IPv4 Address Family";
+          description
+            "IPv4 Address Family";
+          container no-vrf {
+            tailf:cli-drop-node-name;
+            tailf:cli-sequence-commands;
+            tailf:cli-compact-syntax;
+            leaf dest-ip {
+              tailf:cli-drop-node-name;
+              type ios:ipv4-prefix {
+                tailf:info "A.B.C.D/nn;;Destination IP prefix/len";
+              }
+            }
+            leaf src-ip {
+              tailf:cli-drop-node-name;
+              tailf:cli-break-sequence-commands;
+              type ios:ipv4-prefix {
+                tailf:info "A.B.C.D/nn;;Source IP prefix/len";
+              }
+            }
+            leaf template-name {
+              tailf:cli-drop-node-name;
+              tailf:cli-full-command;
+              type string {
+                tailf:info "WORD;;bfd template name";
+              }
+            }
+          }
+          container vrf {
+            tailf:info "Destination VRF name";
+            description
+              "Destination VRF name";
+            list des-vrf {
+              tailf:cli-drop-node-name;
+              tailf:cli-suppress-mode;
+              key "des-vrf";
+              leaf des-vrf {
+                tailf:info "Destination VRF instance name";
+                description
+                  "Destination VRF instance name";
+                type string;
+              }
+              leaf A_PERIOD_B_PERIOD_C_PERIOD_D_SLASH_nn {
+                tailf:alt-name "A.B.C.D/nn";
+                tailf:info "Destination IP prefix/len";
+                description
+                  "Destination IP prefix/len";
+                type empty;
+              }
+            }
+          }
+        }
+        container ipv6 {
+          tailf:info "IPv6 Address Family";
+          description
+            "IPv6 Address Family";
+          list dp-ipv6_prefix {
+            tailf:cli-drop-node-name;
+            tailf:cli-suppress-mode;
+            key "dp-ipv6_prefix";
+            leaf dp-ipv6_prefix {
+              tailf:info "Destination IPv6 prefix/len";
+              description
+                "Destination IPv6 prefix/len";
+              type inet:ipv6-prefix;
+            }
+            leaf bfd-nm {
+              tailf:info "bfd template name";
+              description
+                "bfd template name";
+              tailf:cli-drop-node-name;
+              type string;
+            }
+            list src-ipv6_prefix0 {
+              tailf:cli-drop-node-name;
+              tailf:cli-suppress-mode;
+              key "src-ipv6_prefix0";
+              leaf src-ipv6_prefix0 {
+                tailf:info "Source IPv6 prefix/len";
+                description
+                  "Source IPv6 prefix/len";
+                type inet:ipv6-prefix;
+              }
+              leaf bfd-name {
+                tailf:info "bfd template name";
+                description
+                  "bfd template name";
+                tailf:cli-drop-node-name;
+                type string;
+              }
+            }
+            container vrf {
+              tailf:info "Source VRF name";
+              description
+                "Source VRF name";
+              list sr-vrf {
+                tailf:cli-drop-node-name;
+                tailf:cli-suppress-mode;
+                key "sr-vrf";
+                leaf sr-vrf {
+                  tailf:info "Source VRF instance name";
+                  description
+                    "Source VRF instance name";
+                  type string;
+                }
+                leaf sr-ipv6_prefix {
+                  tailf:info "Source IPv6 prefix/len";
+                  description
+                    "Source IPv6 prefix/len";
+                  tailf:cli-drop-node-name;
+                  type inet:ipv6-prefix;
+                }
+              }
+            }
+          }
+          container vrf {
+            tailf:info "Destination VRF name";
+            description
+              "Destination VRF name";
+            list dn-vrf {
+              tailf:cli-drop-node-name;
+              tailf:cli-suppress-mode;
+              key "dn-vrf";
+              leaf dn-vrf {
+                tailf:info "Destination VRF instance name";
+                description
+                  "Destination VRF instance name";
+                type string;
+              }
+              leaf dn-ipv6_prefix {
+                tailf:info "Destination IPv6 prefix/len";
+                description
+                  "Destination IPv6 prefix/len";
+                tailf:cli-drop-node-name;
+                type inet:ipv6-prefix;
+              }
+            }
+          }
+        }
+      }
+      leaf slow-timers {
+        tailf:info "Change slow timers used by BFD";
+        description
+          "Value in ms to use for slow timers";
+        type uint16 {
+          range "1000..30000";
+        }
+      }
+    }
+    container bfd-template {
+      tailf:info "BFD-template";
+      description
+        "BFD-template";
+      container single-hop {
+        tailf:info "Single-hop template";
+        description
+          "Single-hop template";
+        tailf:cli-add-mode;
+        tailf:cli-mode-name "config-bfd";
+        leaf name {
+          tailf:cli-drop-node-name;
+          tailf:cli-hide-in-submode;
+          type string {
+            tailf:info "BFD-template name";
+          }
+        }
+        container interval {
+          tailf:info "Transmit interval between BFD packets";
+          description
+            "Transmit interval between BFD packets";
+          container microseconds {
+            tailf:info "Specify BFD timers in microseconds";
+            description
+              "Specify BFD timers in microseconds";
+            tailf:cli-compact-syntax;
+            tailf:cli-sequence-commands;
+            leaf min-tx {
+              tailf:info "Minimum transmit interval capability";
+              description
+                "Minimum transmit interval capability";
+              type uint32 {
+                tailf:info "<3300-999000>  Microseconds";
+                range "3300..999000";
+              }
+            }
+            leaf min-rx {
+              tailf:info "Minimum receive interval capability";
+              description
+                "Minimum receive interval capability";
+              type uint32 {
+                tailf:info "<3300-999000>  Microseconds";
+                range "3300..999000";
+              }
+            }
+            leaf multiplier {
+              tailf:info "Multiplier value used to compute holddown";
+              description
+                "Multiplier value used to compute holddown";
+              type uint8 {
+                tailf:info "<3-50>  value used to multiply the interval";
+                range "3..50";
+              }
+            }
+          }
+        }
+      }
+    }
+
+    grouping pfr-border-grouping {
+      container cost-minimization {
+        tailf:info "Specify an ISP's bw cost related information";
+        description
+          "Specify an ISP's bw cost related information";
+        container calc {
+          tailf:info "Specify how the fee is calculated";
+          description
+            "Specify how the fee is calculated";
+          presence "true";
+          leaf combined {
+            tailf:info "Billing based on combination of Egress and Ingress rollup samples";
+            description
+              "Billing based on combination of Egress and Ingress rollup samples";
+            type empty;
+          }
+          leaf separate {
+            tailf:info "Billing based on separate egress and ingress rollup samples";
+            description
+              "Billing based on separate egress and ingress rollup samples";
+            type empty;
+          }
+          leaf sum {
+            tailf:info "Billing based on summed egress and ingress rollup samples";
+            description
+              "Billing based on summed egress and ingress rollup samples";
+            type empty;
+          }
+        }
+        container discard {
+          tailf:info "Specify how often and how many rollup samples are discarded";
+          description
+            "Specify how often and how many rollup samples are discarded";
+          presence "true";
+          leaf absolute {
+            tailf:info "Specify that the discard is a number of rollup samples discarded";
+            description
+              "Specify that the discard is a number of rollup samples discarded";
+            type empty;
+          }
+          leaf daily {
+            tailf:info "Specify if the discard period is daily rather than monthly";
+            description
+              "Specify if the discard period is daily rather than monthly";
+            type empty;
+          }
+          leaf percent {
+            tailf:info "Specify that the discard is a percentage of rollup samples discarded";
+            description
+              "Specify that the discard is a percentage of rollup samples discarded";
+            type empty;
+          }
+        }
+        container end {
+          tailf:info "Specify the billing end date and time zone difference";
+          description
+            "Specify the billing end date and time zone difference";
+          presence "true";
+          leaf day-of-month {
+            tailf:info "Specify the day of month that the billing period ends";
+            description
+              "Specify the day of month that the billing period ends";
+            type empty;
+          }
+        }
+        container fixed {
+          tailf:info "Specify that fee is fixed regardless of usage";
+          description
+            "Specify that fee is fixed regardless of usage";
+          presence "true";
+          leaf fee {
+            tailf:info "Fixed fee for billing";
+            description
+              "Fixed fee for billing";
+            type empty;
+          }
+        }
+        container nickname {
+          tailf:info "Specify an nickname for the cost structure";
+          description
+            "Specify an nickname for the cost structure";
+          presence "true";
+          leaf nick-str {
+            tailf:info "Specify the nickname alphanumeric string";
+            description
+              "Specify the nickname alphanumeric string";
+            tailf:cli-drop-node-name;
+            type string;
+          }
+        }
+        container sampling {
+          tailf:info "Specify the sampling period and rollup details";
+          description
+            "Specify the sampling period and rollup details";
+          presence "true";
+          leaf period {
+            tailf:info "Specify the sampling period";
+            description
+              "Specify the sampling period";
+            type empty;
+          }
+        }
+        container summer-time {
+          tailf:info "Specify summer time start and end";
+          description
+            "Specify summer time start and end";
+          presence "true";
+          leaf wk-start {
+            tailf:info "Week number to start";
+            description
+              "Week number to start";
+            tailf:cli-drop-node-name;
+            type uint8 {
+              range "1..4";
+            }
+          }
+          leaf first {
+            tailf:info "First week of the month";
+            description
+              "First week of the month";
+            type empty;
+          }
+          leaf last {
+            tailf:info "Last week of the month";
+            description
+              "Last week of the month";
+            type empty;
+          }
+        }
+        container tier {
+          tailf:info "Specify the top of a tier and the associated fee";
+          description
+            "Specify the top of a tier and the associated fee";
+          presence "true";
+          leaf tier-cap {
+            tailf:info "Specify the top of the tier as a percentage of capacity";
+            description
+              "Specify the top of the tier as a percentage of capacity";
+            tailf:cli-drop-node-name;
+            type uint8 {
+              range "1..100";
+            }
+          }
+        }
+      }
+      container downgrade {
+        tailf:info "Specify route downgrade options for this interface";
+        description
+          "Specify route downgrade options for this interface";
+        container bgp {
+          tailf:info "Specify downgrade options for BGP advertisements";
+          description
+            "Specify downgrade options for BGP advertisements";
+          presence "true";
+          leaf community {
+            tailf:info "Specify downgrade options for BGP advertisements";
+            description
+              "Specify downgrade options for BGP advertisements";
+            type empty;
+          }
+        }
+      }
+      leaf link-group {
+        tailf:info "Specify the link group";
+        description
+          "Specify link group name";
+        type string;
+      }
+      container max-xmit-utilization {
+        tailf:info "Specify the threshold utilization for an external interface";
+        description
+          "Specify the threshold utilization for an external interface";
+        container absolute {
+          tailf:info "Specify the utilization as an absolute value";
+          description
+            "Specify the utilization as an absolute value";
+          presence "true";
+          leaf exit-kbps {
+            tailf:info "Specify the kbps threshold for this exit's bandwitdh";
+            description
+              "Specify the kbps threshold for this exit's bandwitdh";
+            tailf:cli-drop-node-name;
+            type uint32 {
+              range "1..1000000000";
+            }
+          }
+        }
+        container percentage {
+          tailf:info "Specify the utilization as a percentage of the exit's bandwidth";
+          description
+            "Specify the utilization as a percentage of the exit's bandwidth";
+          presence "true";
+          leaf exit-pct {
+            tailf:info "Specify the percentage of the exit's bandwidth";
+            description
+              "Specify the percentage of the exit's bandwidth";
+            tailf:cli-drop-node-name;
+            type uint8 {
+              range "1..100";
+            }
+          }
+        }
+      }
+      container maximum {
+        tailf:info "Specify maximum values";
+        description
+          "Specify maximum values";
+        container utilization {
+          tailf:info "Specify the utilization parameters";
+          description
+            "Specify the utilization parameters";
+          presence "true";
+          leaf receive {
+            tailf:info "Specify receive utilization parameter";
+            description
+              "Specify receive utilization parameter";
+            type empty;
+          }
+        }
+      }
+    }
+
+    grouping pfr-border-intf-grouping {
+      container interface {
+        tailf:info "Specify an PfR managed border router interface";
+        description
+          "Specify an PfR managed border router interface";
+        list ATM-int {
+          tailf:cli-drop-node-name;
+          tailf:cli-suppress-mode;
+          key "ATM-int";
+          leaf ATM-int {
+            tailf:info "ATM interface";
+            description
+              "ATM interface";
+            type string;
+          }
+          container external_term {
+            tailf:cli-drop-node-name;
+            container external {
+              tailf:cli-add-mode;
+              tailf:cli-mode-name "config-pfr-mc-br-if";
+              presence "true";
+              uses pfr-border-grouping;
+            }
+          }
+          list external {
+            tailf:info "Specify/configure an PfR managed exit interface";
+            description
+              "Specify/configure an PfR managed exit interface";
+            tailf:cli-mode-name "config-pfr-mc-br-if";
+            key "ext-nick";
+            leaf ext-nick {
+              tailf:info "Exit nickname";
+              description
+                "Exit nickname";
+              type string;
+            }
+            uses pfr-border-grouping;
+          }
+          leaf internal {
+            tailf:info "Specify an PfR managed intra-domain interface";
+            description
+              "Specify an PfR managed intra-domain interface";
+            type empty;
+          }
+        }
+        leaf BRI {
+          tailf:info "ISDN Basic Rate Interface";
+          description
+            "Interface unit number";
+          type string;
+        }
+        leaf Hssi {
+          tailf:info "High Speed Serial Interface";
+          description
+            "Interface unit number";
+          type string;
+        }
+        leaf Integrated-Service-Engine {
+          tailf:info "cisco integrated service engine module";
+          description
+            "Interface unit number";
+          type string;
+        }
+        leaf Tunnel {
+          tailf:info "Tunnel interface";
+          description
+            "Interface unit number";
+          type string;
+        }
+        leaf Vlan {
+          tailf:info "Catalyst Vlans";
+          description
+            "Interface unit number";
+          type string;
+        }
+      }
+    }
+    container pfr {
+      tailf:info "Performance Routing configuration submodes";
+      description
+        "Performance Routing configuration submodes";
+      container border {
+        tailf:info "Enter PfR border router configuration submode";
+        description
+          "Enter PfR border router configuration submode";
+        tailf:cli-add-mode;
+        tailf:cli-mode-name "config-pfr-br";
+        presence "true";
+        container pfr-Mode-config-pfr-br {
+          tailf:cli-drop-node-name;
+          container active-probe {
+            tailf:info "Specify active probe parameters";
+            description
+              "Specify active probe parameters";
+            container address {
+              tailf:info "Identify probe address parameters";
+              description
+                "Identify probe address parameters";
+              container source {
+                tailf:info "Identify probe source address";
+                description
+                  "Identify probe source address";
+                container interface {
+                  tailf:info "Identify probe source address from interface";
+                  description
+                    "Identify probe source address from interface";
+                  tailf:cli-compact-syntax;
+                  tailf:cli-flatten-container;
+                  uses interface-grouping;
+                }
+              }
+            }
+          }
+          container local {
+            tailf:info "Specify the local interface for PfR connection";
+            description
+              "Specify the local interface for PfR connection";
+            container interface {
+              tailf:cli-drop-node-name;
+              tailf:info "Identify probe source address from interface";
+              tailf:cli-compact-syntax;
+              tailf:cli-flatten-container;
+              uses interface-grouping;
+            }
+          }
+          leaf logging {
+            tailf:info "Event logging";
+            description
+              "Event logging";
+            type empty;
+          }
+          container master {
+            tailf:info "Specify the PfR master controller IP address";
+            description
+              "Specify the PfR master controller IP address";
+            list kc-ipv4 {
+              tailf:cli-drop-node-name;
+              tailf:cli-suppress-mode;
+              key "kc-ipv4";
+              leaf kc-ipv4 {
+                tailf:info "IP address";
+                description
+                  "IP address";
+                type inet:ipv4-address;
+              }
+              leaf key-chain {
+                tailf:info "Specify a key-chain";
+                description
+                  "name of key-chain";
+                type string;
+              }
+            }
+          }
+          leaf port {
+            tailf:info "Specify PfR port number";
+            description
+              "Specify PfR port number";
+            type uint16 {
+              range "1..65535";
+            }
+          }
+          leaf shutdown {
+            tailf:info "Disable PfR border router functionality";
+            description
+              "Disable PfR border router functionality";
+            type empty;
+          }
+        }
+      }
+      container master {
+        tailf:info "Enter PfR master controller configuration submode";
+        description
+          "Enter PfR master controller configuration submode";
+        tailf:cli-add-mode;
+        tailf:cli-mode-name "config-pfr-mc";
+        presence "true";
+        container icmp-Mode-config-pfr-mc {
+          tailf:cli-drop-node-name;
+          container active-probe {
+            tailf:info "Manually create an active probe for a known target";
+            description
+              "Manually create an active probe for a known target";
+            leaf echo {
+              tailf:info "Perform ICMP echo probe operations";
+              description
+                "IP address of probe target";
+              type inet:host;
+            }
+            container jitter {
+              tailf:info "Perform jitter probe operations (requires a responder)";
+              description
+                "Perform jitter probe operations (requires a responder)";
+              list p-ipv4-or-hostname {
+                tailf:cli-drop-node-name;
+                tailf:cli-suppress-mode;
+                key "p-ipv4-or-hostname";
+                leaf p-ipv4-or-hostname {
+                  tailf:info "IP address of probe target";
+                  description
+                    "IP address of probe target";
+                  type inet:host;
+                }
+                leaf target-port {
+                  tailf:info "Required Target Port for udp-echo or tcp-conn or jitter";
+                  description
+                    "Target Port Number";
+                  type uint16 {
+                    range "1..65535";
+                  }
+                }
+              }
+            }
+            container tcp-conn {
+              tailf:info "Perform TCP Connection / Disconnect probe operations";
+              description
+                "Perform TCP Connection / Disconnect probe operations";
+              list t-ipv4-or-hostname {
+                tailf:cli-drop-node-name;
+                tailf:cli-suppress-mode;
+                key "t-ipv4-or-hostname";
+                leaf t-ipv4-or-hostname {
+                  tailf:info "IP address of probe target";
+                  description
+                    "IP address of probe target";
+                  type inet:host;
+                }
+                leaf target-port {
+                  tailf:info "Required Target Port for udp-echo or tcp-conn or jitter";
+                  description
+                    "Target Port Number";
+                  type uint16 {
+                    range "1..65535";
+                  }
+                }
+              }
+            }
+            container udp-echo {
+              tailf:info "Perform UDP Echo probe operations (requires a responder)";
+              description
+                "Perform UDP Echo probe operations (requires a responder)";
+              list u-ipv4-or-hostname {
+                tailf:cli-drop-node-name;
+                tailf:cli-suppress-mode;
+                key "u-ipv4-or-hostname";
+                leaf u-ipv4-or-hostname {
+                  tailf:info "IP address of probe target";
+                  description
+                    "IP address of probe target";
+                  type inet:host;
+                }
+                leaf target-port {
+                  tailf:info "Required Target Port for udp-echo or tcp-conn or jitter";
+                  description
+                    "Target Port Number";
+                  type uint16 {
+                    range "1..65535";
+                  }
+                }
+              }
+            }
+          }
+          container application {
+            tailf:info "Define application";
+            description
+              "Define application";
+            container define {
+              tailf:info "Define application";
+              description
+                "Define application";
+              list app-def {
+                tailf:cli-drop-node-name;
+                tailf:cli-suppress-mode;
+                key "app-def";
+                leaf app-def {
+                  tailf:info "Application definition name";
+                  description
+                    "Application definition name";
+                  type string;
+                }
+                leaf access-list {
+                  tailf:info "Define application using access-list";
+                  description
+                    "Application definition access-list name";
+                  type string;
+                }
+                leaf nbar {
+                  tailf:info "Define nbar application";
+                  description
+                    "Define nbar application";
+                  type empty;
+                }
+              }
+            }
+          }
+          container backoff {
+            tailf:info "Specify backoff timer parameters";
+            description
+              "Specify backoff timer parameters";
+            list boff {
+              tailf:cli-drop-node-name;
+              tailf:cli-suppress-mode;
+              key "boff";
+              leaf boff {
+                tailf:info "Specify minimum value of backoff timer (secs)";
+                description
+                  "Specify minimum value of backoff timer (secs)";
+                type uint16 {
+                  range "90..7200";
+                }
+              }
+              list boff0 {
+                tailf:cli-drop-node-name;
+                tailf:cli-suppress-mode;
+                key "boff0";
+                leaf boff0 {
+                  tailf:info "Specify maximum value of backoff timer (secs)";
+                  description
+                    "Specify maximum value of backoff timer (secs)";
+                  type uint16 {
+                    range "90..7200";
+                  }
+                }
+                leaf bstep {
+                  tailf:info "Specify optional backoff timer step (secs)";
+                  description
+                    "Specify optional backoff timer step (secs)";
+                  tailf:cli-drop-node-name;
+                  type uint16 {
+                    range "90..7110";
+                  }
+                }
+              }
+            }
+          }
+          leaf bandwidth-resolution {
+            tailf:info "Enable/configure Bandwidth Resolution";
+            description
+              "Enable/configure Bandwidth Resolution";
+            type empty;
+          }
+          container border {
+            tailf:info "Enter PfR managed border router configuration submode";
+            description
+              "Enter PfR managed border router configuration submode";
+            list br-ipv4 {
+              tailf:cli-drop-node-name;
+              tailf:cli-mode-name "config-pfr-mc-br";
+              key "br-ipv4";
+              leaf br-ipv4 {
+                tailf:info "IP address of border router";
+                description
+                  "IP address of border router";
+                type inet:ipv4-address;
+              }
+              list key-chain {
+                tailf:info "Specify a key-chain";
+                description
+                  "Specify a key-chain";
+                tailf:cli-mode-name "config-pfr-mc-br";
+                key "kc-name";
+                leaf kc-name {
+                  tailf:info "name of key-chain";
+                  description
+                    "name of key-chain";
+                  type string;
+                }
+                leaf interface {
+                  tailf:info "Specify an PfR managed border router interface";
+                  description
+                    "Specify an PfR managed border router interface";
+                  type empty;
+                }
+              }
+              leaf interface {
+                tailf:info "Specify an PfR managed border router interface";
+                description
+                  "Specify an PfR managed border router interface";
+                type empty;
+              }
+            }
+          }
+          container delay {
+            tailf:info "Specify delay parameters";
+            description
+              "Specify delay parameters";
+            leaf relative {
+              tailf:info "Maximum allowable relative change from short to long term";
+              description
+                "short/long term in percentage. e.g. 125 is short/long = 1.25";
+              type uint16 {
+                range "1..1000";
+              }
+            }
+            leaf threshold {
+              tailf:info "Maximum allowable absolute delay";
+              description
+                "Maximum absolute delay threshold (msecs)";
+              type uint16 {
+                range "1..10000";
+              }
+            }
+          }
+          leaf exporter {
+            tailf:info "Specify PfR NetFlow Version 9 Exporter parameters";
+            description
+              "name of flow exporter";
+            type string;
+          }
+          leaf holddown {
+            tailf:info "Specify hold-down timer parameter";
+            description
+              "Specify hold-down timer parameter (secs)";
+            type uint16 {
+              range "90..65535";
+            }
+          }
+          container jitter {
+            tailf:info "Specify jitter parameters";
+            description
+              "Specify jitter parameters";
+            leaf threshold {
+              tailf:info "Maximum allowable absolute jitter";
+              description
+                "Maximum absolute jitter threshold (ms)";
+              type uint16 {
+                range "1..1000";
+              }
+            }
+          }
+          leaf keepalive {
+            tailf:info "Specify keepalive interval";
+            description
+              "Specify keepalive interval in seconds";
+            type uint16 {
+              range "0..1000";
+            }
+          }
+          container learn {
+            tailf:info "Enter prefix and traffic class learning submode";
+            description
+              "Enter prefix and traffic class learning submode";
+            tailf:cli-add-mode;
+            tailf:cli-mode-name "config-pfr-mc-learn";
+            presence "true";
+            container lrn-Mode-config-pfr-mc-learn {
+              tailf:cli-drop-node-name;
+              container aggregation-type {
+                tailf:info "Type of prefix to aggregate";
+                description
+                  "Type of prefix to aggregate";
+                leaf bgp {
+                  tailf:info "Aggregate prefixes learned via BGP";
+                  description
+                    "Aggregate prefixes learned via BGP";
+                  type empty;
+                }
+                leaf non-bgp {
+                  tailf:info "Aggregate prefixes not learned via BGP";
+                  description
+                    "Aggregate prefixes not learned via BGP";
+                  type empty;
+                }
+                leaf prefix-length {
+                  tailf:info "Aggregate on prefix length";
+                  description
+                    "Specify the prefix mask";
+                  type uint8 {
+                    range "1..32";
+                  }
+                }
+              }
+              leaf delay {
+                tailf:info "Learn top prefixes based on delay";
+                description
+                  "Learn top prefixes based on delay";
+                type empty;
+              }
+              container expire {
+                tailf:info "Set expiry criteria for learn prefixes";
+                description
+                  "Set expiry criteria for learn prefixes";
+                container after {
+                  tailf:info "Specify expiry criteria for learn prefixes";
+                  description
+                    "Specify expiry criteria for learn prefixes";
+                  leaf session {
+                    tailf:info "Expire prefixes based on number of learn sessions";
+                    description
+                      "Specify the value";
+                    type uint16 {
+                      range "1..65535";
+                    }
+                  }
+                  leaf time {
+                    tailf:info "Expire prefixes based on time in minutes";
+                    description
+                      "Specify the value";
+                    type uint16 {
+                      range "1..65535";
+                    }
+                  }
+                }
+              }
+              container inside {
+                tailf:info "Learn prefixes inside the network";
+                description
+                  "Learn prefixes inside the network";
+                leaf bgp {
+                  tailf:info "Learn inside prefixes advertised by BGP out PfR External Interfaces";
+                  description
+                    "Learn inside prefixes advertised by BGP out PfR External Interfaces";
+                  type empty;
+                }
+              }
+              container list {
+                tailf:info "Create PfR Learn Traffic Class List and enter the sub-mode";
+                description
+                  "Create PfR Learn Traffic Class List and enter the sub-mode";
+                container seq {
+                  tailf:info "PfR Learn Traffic Class List sequence number";
+                  description
+                    "PfR Learn Traffic Class List sequence number";
+                  list pfr-tc {
+                    tailf:cli-drop-node-name;
+                    tailf:cli-suppress-mode;
+                    key "pfr-tc";
+                    leaf pfr-tc {
+                      tailf:info "PfR Learn Traffic Class List sequence number";
+                      description
+                        "PfR Learn Traffic Class List sequence number";
+                      type uint16 {
+                        range "1..65535";
+                      }
+                    }
+                    leaf refname {
+                      tailf:info "PfR Learn Traffic Class List reference name";
+                      description
+                        "PfR Learn Traffic Class List reference name";
+                      type empty;
+                    }
+                  }
+                }
+              }
+              leaf monitor-period {
+                tailf:info "Period to monitor prefix for learning";
+                description
+                  "Specify the period in minutes";
+                type uint16 {
+                  range "1..1440";
+                }
+              }
+              leaf periodic-interval {
+                tailf:info "Interval before learning restarts";
+                description
+                  "Specify the interval in minutes";
+                type uint16 {
+                  range "0..10080";
+                }
+              }
+              container prefixes {
+                tailf:info "Number of prefixes to learn";
+                description
+                  "Number of prefixes to learn";
+                list prnum {
+                  tailf:cli-drop-node-name;
+                  tailf:cli-suppress-mode;
+                  key "prnum";
+                  leaf prnum {
+                    tailf:info "Specify the number of prefixes";
+                    description
+                      "Specify the number of prefixes";
+                    type uint32 {
+                      range "0..100000";
+                    }
+                  }
+                  leaf applications {
+                    tailf:info "Number of applications to learn";
+                    description
+                      "Specify the number of appl";
+                    type uint16 {
+                      range "0..50000";
+                    }
+                  }
+                }
+              }
+              leaf throughput {
+                tailf:info "Learn top prefixes based on throughput";
+                description
+                  "Learn top prefixes based on throughput";
+                type empty;
+              }
+              container traffic-class {
+                tailf:info "Set traffic class filters";
+                description
+                  "Set traffic class filters";
+                container aggregate {
+                  tailf:info "Traffic class aggregation specification";
+                  description
+                    "Traffic class aggregation specification";
+                  leaf access-list {
+                    tailf:info "Match named access list";
+                    description
+                      "IP access-list name";
+                    type string;
+                  }
+                }
+                container filter {
+                  tailf:info "Traffic class filter specification";
+                  description
+                    "Traffic class filter specification";
+                  leaf access-list {
+                    tailf:info "Match named access list";
+                    description
+                      "IP access-list name";
+                    type string;
+                  }
+                }
+                container keys {
+                  tailf:info "Specify Learn keys for applications";
+                  description
+                    "Specify Learn keys for applications";
+                  container dport {
+                    tailf:info "Learn top appls based on destination port";
+                    description
+                      "Learn top appls based on destination port";
+                    presence "true";
+                    leaf dscp {
+                      tailf:info "Learn top appls based on DSCP";
+                      description
+                        "Learn top appls based on DSCP";
+                      type empty;
+                    }
+                    leaf protocol {
+                      tailf:info "Learn top appls based on protocol";
+                      description
+                        "Learn top appls based on protocol";
+                      type empty;
+                    }
+                    leaf sport {
+                      tailf:info "Learn top appls based on source port";
+                      description
+                        "Learn top appls based on source port";
+                      type empty;
+                    }
+                  }
+                  container dscp {
+                    tailf:info "Learn top appls based on DSCP";
+                    description
+                      "Learn top appls based on DSCP";
+                    presence "true";
+                    leaf dport {
+                      tailf:info "Learn top appls based on destination port";
+                      description
+                        "Learn top appls based on destination port";
+                      type empty;
+                    }
+                    leaf protocol {
+                      tailf:info "Learn top appls based on protocol";
+                      description
+                        "Learn top appls based on protocol";
+                      type empty;
+                    }
+                    leaf sport {
+                      tailf:info "Learn top appls based on source port";
+                      description
+                        "Learn top appls based on source port";
+                      type empty;
+                    }
+                  }
+                  container protocol {
+                    tailf:info "Learn top appls based on protocol";
+                    description
+                      "Learn top appls based on protocol";
+                    presence "true";
+                    leaf dport {
+                      tailf:info "Learn top appls based on destination port";
+                      description
+                        "Learn top appls based on destination port";
+                      type empty;
+                    }
+                    leaf dscp {
+                      tailf:info "Learn top appls based on DSCP";
+                      description
+                        "Learn top appls based on DSCP";
+                      type empty;
+                    }
+                    container sport {
+                      tailf:info "Learn top appls based on source port";
+                      description
+                        "Learn top appls based on source port";
+                      presence "true";
+                      leaf dport {
+                        tailf:info "Learn top appls based on destination port";
+                        description
+                          "Learn top appls based on destination port";
+                        type empty;
+                      }
+                      leaf dscp {
+                        tailf:info "Learn top appls based on DSCP";
+                        description
+                          "Learn top appls based on DSCP";
+                        type empty;
+                      }
+                    }
+                  }
+                  container sport {
+                    tailf:info "Learn top appls based on source port";
+                    description
+                      "Learn top appls based on source port";
+                    presence "true";
+                    leaf dport {
+                      tailf:info "Learn top appls based on destination port";
+                      description
+                        "Learn top appls based on destination port";
+                      type empty;
+                    }
+                    leaf dscp {
+                      tailf:info "Learn top appls based on DSCP";
+                      description
+                        "Learn top appls based on DSCP";
+                      type empty;
+                    }
+                    leaf protocol {
+                      tailf:info "Learn top appls based on protocol";
+                      description
+                        "Learn top appls based on protocol";
+                      type empty;
+                    }
+                  }
+                }
+              }
+            }
+          }
+          leaf logging {
+            tailf:info "Event Logging";
+            description
+              "Event Logging";
+            type empty;
+          }
+          container loss {
+            tailf:info "Specify loss parameters";
+            description
+              "Specify loss parameters";
+            leaf relative {
+              tailf:info "Maximum allowable relative change from short to long term";
+              description
+                "short/long term in percentage. e.g. 125 is short/long = 1.25";
+              type uint16 {
+                range "1..1000";
+              }
+            }
+            leaf threshold {
+              tailf:info "Maximum allowable absolute packet lost packets";
+              description
+                "Maximum absolute lost packet threshold in percentage e.g., 1 is 0.0001 percent";
+              type uint32 {
+                range "1..1000000";
+              }
+            }
+          }
+          container max {
+            tailf:info "Specify the upper limit";
+            description
+              "Specify the upper limit";
+            container prefix {
+              tailf:info "Specify prefix upper limit";
+              description
+                "Specify prefix upper limit";
+              container total {
+                tailf:info "Specify max total prefix limit";
+                description
+                  "Specify max total prefix limit";
+                list maxpr {
+                  tailf:cli-drop-node-name;
+                  tailf:cli-suppress-mode;
+                  key "maxpr";
+                  leaf maxpr {
+                    tailf:info "Specify the max total prefix limit value";
+                    description
+                      "Specify the max total prefix limit value";
+                    type uint32 {
+                      range "1..100000";
+                    }
+                  }
+                  leaf learn {
+                    tailf:info "Specify max learn prefix limit";
+                    description
+                      "Specify max learn prefix limit value";
+                    type uint32 {
+                      range "0..100000";
+                    }
+                  }
+                }
+              }
+            }
+            container range {
+              tailf:info "Specify range value";
+              description
+                "Specify range value";
+              container receive {
+                tailf:info "Specify receive range";
+                description
+                  "Specify receive range";
+                leaf percent {
+                  tailf:info "Specify the percentage range";
+                  description
+                    "Specify the percentage range";
+                  type uint8 {
+                    range "0..100";
+                  }
+                }
+              }
+            }
+          }
+          container max-range-utilization {
+            tailf:info "Configure the maximum range for utilization of all exits";
+            description
+              "Configure the maximum range for utilization of all exits";
+            leaf percent {
+              tailf:info "Specify the percentage range";
+              description
+                "Specify the percentage range";
+              type uint8 {
+                range "1..100";
+              }
+            }
+          }
+          container mc-peer {
+            tailf:info "Enable MC-to-MC peering";
+            description
+              "Enable MC-to-MC peering";
+            presence "true";
+            list he-ipv4 {
+              tailf:cli-drop-node-name;
+              tailf:cli-suppress-mode;
+              key "he-ipv4";
+              leaf he-ipv4 {
+                tailf:info "IP address of head-end MC peer";
+                description
+                  "IP address of head-end MC peer";
+                type inet:ipv4-address;
+              }
+              list lb-int {
+                tailf:cli-drop-node-name;
+                tailf:cli-suppress-mode;
+                key "lb-int";
+                leaf lb-int {
+                  tailf:info "Loopback interface";
+                  description
+                    "Loopback interface";
+                  type string;
+                }
+                leaf description {
+                  tailf:info "MC site description string";
+                  description
+                    "MC site description (max 40 char)";
+                  tailf:cli-multi-value;
+                  type string;
+                }
+                leaf domain {
+                  tailf:info "SAF domain ID to be used for MC-to-MC peering";
+                  description
+                    "Domain value";
+                  type uint16 {
+                    range "1..65535";
+                  }
+                }
+              }
+            }
+            leaf description {
+              tailf:info "MC site description string";
+              description
+                "MC site description (max 40 char)";
+              tailf:cli-multi-value;
+              type string;
+            }
+            container domain {
+              tailf:info "SAF domain ID to be used for MC-to-MC peering";
+              description
+                "SAF domain ID to be used for MC-to-MC peering";
+              list dmval {
+                tailf:cli-drop-node-name;
+                tailf:cli-suppress-mode;
+                key "dmval";
+                leaf dmval {
+                  tailf:info "Domain value";
+                  description
+                    "Domain value";
+                  type uint16 {
+                    range "1..65535";
+                  }
+                }
+                list hep-ipv4 {
+                  tailf:cli-drop-node-name;
+                  tailf:cli-suppress-mode;
+                  key "hep-ipv4";
+                  leaf hep-ipv4 {
+                    tailf:info "IP address of head-end MC peer";
+                    description
+                      "IP address of head-end MC peer";
+                    type inet:ipv4-address;
+                  }
+                  leaf loop-int {
+                    tailf:info "Loopback interface";
+                    description
+                      "Loopback interface";
+                    tailf:cli-drop-node-name;
+                    type string;
+                  }
+                }
+                leaf description {
+                  tailf:info "MC site description string";
+                  description
+                    "MC site description (max 40 char)";
+                  tailf:cli-multi-value;
+                  type string;
+                }
+                leaf eigrp {
+                  tailf:info "Use explicit EIGRP configuration instead of auto-config";
+                  description
+                    "Loopback interface";
+                  type string;
+                }
+                leaf head-end {
+                  tailf:info "Specify this router as head-end MC-peer";
+                  description
+                    "Loopback interface";
+                  type string;
+                }
+              }
+            }
+            container eigrp {
+              tailf:info "Use explicit EIGRP configuration instead of auto-config";
+              description
+                "Use explicit EIGRP configuration instead of auto-config";
+              list eigrp-lb {
+                tailf:cli-drop-node-name;
+                tailf:cli-suppress-mode;
+                key "eigrp-lb";
+                leaf eigrp-lb {
+                  tailf:info "Loopback interface";
+                  description
+                    "Loopback interface";
+                  type string;
+                }
+                leaf description {
+                  tailf:info "MC site description string";
+                  description
+                    "MC site description (max 40 char)";
+                  tailf:cli-multi-value;
+                  type string;
+                }
+                leaf domain {
+                  tailf:info "SAF domain ID to be used for MC-to-MC peering";
+                  description
+                    "Domain value";
+                  type uint16 {
+                    range "1..65535";
+                  }
+                }
+              }
+            }
+            container head-end {
+              tailf:info "Specify this router as head-end MC-peer";
+              description
+                "Specify this router as head-end MC-peer";
+              list he-loop {
+                tailf:cli-drop-node-name;
+                tailf:cli-suppress-mode;
+                key "he-loop";
+                leaf he-loop {
+                  tailf:info "Loopback interface";
+                  description
+                    "Loopback interface";
+                  type string;
+                }
+                leaf description {
+                  tailf:info "MC site description string";
+                  description
+                    "MC site description (max 40 char)";
+                  tailf:cli-multi-value;
+                  type string;
+                }
+                leaf domain {
+                  tailf:info "SAF domain ID to be used for MC-to-MC peering";
+                  description
+                    "Domain value";
+                  type uint16 {
+                    range "1..65535";
+                  }
+                }
+              }
+            }
+          }
+          container mode {
+            tailf:info "Specify PfR operating mode settings";
+            description
+              "Specify PfR operating mode settings";
+            container monitor {
+              tailf:info "Specify PfR prefix monitoring policy settings";
+              description
+                "Specify PfR prefix monitoring policy settings";
+              container active {
+                tailf:info "Enable active monitoring mode";
+                description
+                  "Enable active monitoring mode";
+                presence "true";
+                leaf throughput {
+                  tailf:info "Enable active monitoring with throughput from passive mode";
+                  description
+                    "Enable active monitoring with throughput from passive mode";
+                  type empty;
+                }
+              }
+              leaf both {
+                tailf:info "Enable active and passive monitoring modes";
+                description
+                  "Enable active and passive monitoring modes";
+                type empty;
+              }
+              leaf fast {
+                tailf:info "Enable fast monitoring mode";
+                description
+                  "Enable fast monitoring mode";
+                type empty;
+              }
+              leaf passive {
+                tailf:info "Enable passive monitoring mode";
+                description
+                  "Enable passive monitoring mode";
+                type empty;
+              }
+            }
+            container route {
+              tailf:info "Specify PfR route control policy settings";
+              description
+                "Specify PfR route control policy settings";
+              leaf control {
+                tailf:info "Enable PfR to control routes automatically";
+                description
+                  "Enable PfR to control routes automatically";
+                type empty;
+              }
+              container metric {
+                tailf:info "Specify PfR route protocol related settings";
+                description
+                  "Specify PfR route protocol related settings";
+                container bgp {
+                  tailf:info "Specify PfR bgp protocol settings";
+                  description
+                    "Specify PfR bgp protocol settings";
+                  leaf local-pref {
+                    tailf:info "Specify OER bgp local preference";
+                    description
+                      "Specify the local preference for bgp controlled routes";
+                    type uint16 {
+                      range "1..65535";
+                    }
+                  }
+                }
+                container eigrp {
+                  tailf:info "Specify PfR eigrp routes related settings";
+                  description
+                    "Specify PfR eigrp routes related settings";
+                  leaf tag {
+                    tailf:info "Specify the eigrp route tag value";
+                    description
+                      "Specify a tag value for PfR controlled eigrp routes";
+                    type uint16 {
+                      range "1..65535";
+                    }
+                  }
+                }
+                container static {
+                  tailf:info "Specify PfR static routes related settings";
+                  description
+                    "Specify PfR static routes related settings";
+                  leaf tag {
+                    tailf:info "Specify the static route tag value";
+                    description
+                      "Specify a tag value for PfR controlled static routes";
+                    type uint16 {
+                      range "1..65535";
+                    }
+                  }
+                }
+              }
+              leaf observe {
+                tailf:info "PfR offers route control advice, but does not take any action";
+                description
+                  "PfR offers route control advice, but does not take any action";
+                type empty;
+              }
+              container protocol {
+                tailf:info "Specify OER route control protocol";
+                description
+                  "Specify OER route control protocol";
+                leaf pbr {
+                  tailf:info "Specify OER route control protocol Policy-Based-Routing";
+                  description
+                    "Specify OER route control protocol Policy-Based-Routing";
+                  type empty;
+                }
+              }
+            }
+            container verify {
+              tailf:info "Specify verification behavior";
+              description
+                "Specify verification behavior";
+              leaf bidirectional {
+                tailf:info "Verify bidirectional traffic of applications";
+                description
+                  "Verify bidirectional traffic of applications";
+                type empty;
+              }
+            }
+          }
+          container mos {
+            tailf:info "Specify mos parameters";
+            description
+              "Specify mos parameters";
+            container threshold {
+              tailf:info "Minimum MOS threshold";
+              description
+                "Minimum MOS threshold";
+              list mos-thresh {
+                tailf:cli-drop-node-name;
+                tailf:cli-suppress-mode;
+                key "mos-thresh";
+                leaf mos-thresh {
+                  tailf:info "Minimum absolute MOS threshold 1.00 - 5.00";
+                  description
+                    "Minimum absolute MOS threshold 1.00 - 5.00";
+                  type string;
+                }
+                leaf percent {
+                  tailf:info "Maximum percentage probe with MOS below threshold";
+                  description
+                    "Maximum percentage probe with MOS below threshold";
+                  type uint8 {
+                    range "1..100";
+                  }
+                }
+              }
+            }
+          }
+          leaf periodic {
+            tailf:info "Specify periodic rotation timer value";
+            description
+              "Specify periodic rotation timer value (secs)";
+            type uint16 {
+              range "90..7200";
+            }
+          }
+          leaf policy-rules {
+            tailf:info "Name of pfr-map defining PfR policy";
+            description
+              "pfr-map name";
+            type string;
+          }
+          leaf port {
+            tailf:info "Specify tcp port number for PfR communication";
+            description
+              "Specify tcp port number for PfR communication";
+            type uint16 {
+              range "1..65535";
+            }
+          }
+          container probe {
+            tailf:info "Specify number of packets for jitter probe";
+            description
+              "Specify number of packets for jitter probe";
+            leaf packets {
+              tailf:info "Specify number of packets for jitter probe";
+              description
+                "probe packets <number>";
+              type uint8 {
+                range "1..255";
+              }
+            }
+          }
+          container resolve {
+            tailf:info "Specify PfR policy resolver settings";
+            description
+              "Specify PfR policy resolver settings";
+            leaf cost {
+              tailf:info "Specify PfR cost policy resolver settings";
+              description
+                "Specify PfR cost policy resolver settings";
+              type empty;
+            }
+            container delay {
+              tailf:info "Specify PfR delay policy resolver settings";
+              description
+                "Specify PfR delay policy resolver settings";
+              container priority {
+                tailf:info "Specify the order in which resolver will consider this policy";
+                description
+                  "Specify the order in which resolver will consider this policy";
+                list del-pol {
+                  tailf:cli-drop-node-name;
+                  tailf:cli-suppress-mode;
+                  key "del-pol";
+                  leaf del-pol {
+                    tailf:info "Specify this policy's priority; 1 being highest";
+                    description
+                      "Specify this policy's priority; 1 being highest";
+                    type uint8 {
+                      range "1..9";
+                    }
+                  }
+                  leaf variance {
+                    tailf:info "Specify the range of values considered equivalent for this policy";
+                    description
+                      "Specify range; e.g. 25 means all exits measuring up to 25% worse than the best exit are considered equivalent";
+                    type uint8 {
+                      range "1..100";
+                    }
+                  }
+                }
+              }
+            }
+            leaf equivalent-path-round-robin {
+              tailf:info "Specify equivalent-path round-robin resolver";
+              description
+                "Specify equivalent-path round-robin resolver";
+              type empty;
+            }
+            container jitter {
+              tailf:info "Specify PfR jitter policy resolver settings";
+              description
+                "Specify PfR jitter policy resolver settings";
+              container priority {
+                tailf:info "Specify the order in which resolver will consider this policy";
+                description
+                  "Specify the order in which resolver will consider this policy";
+                list jit-pol {
+                  tailf:cli-drop-node-name;
+                  tailf:cli-suppress-mode;
+                  key "jit-pol";
+                  leaf jit-pol {
+                    tailf:info "Specify this policy's priority; 1 being highest";
+                    description
+                      "Specify this policy's priority; 1 being highest";
+                    type uint8 {
+                      range "1..9";
+                    }
+                  }
+                  leaf variance {
+                    tailf:info "Specify the range of values considered equivalent for this policy";
+                    description
+                      "Specify range; e.g. 25 means all exits measuring up to 25% worse than the best exit are considered equivalent";
+                    type uint8 {
+                      range "1..100";
+                    }
+                  }
+                }
+              }
+            }
+            container loss {
+              tailf:info "Specify PfR loss policy resolver settings";
+              description
+                "Specify PfR loss policy resolver settings";
+              container priority {
+                tailf:info "Specify the order in which resolver will consider this policy";
+                description
+                  "Specify the order in which resolver will consider this policy";
+                list loss-pol {
+                  tailf:cli-drop-node-name;
+                  tailf:cli-suppress-mode;
+                  key "loss-pol";
+                  leaf loss-pol {
+                    tailf:info "Specify this policy's priority; 1 being highest";
+                    description
+                      "Specify this policy's priority; 1 being highest";
+                    type uint8 {
+                      range "1..9";
+                    }
+                  }
+                  leaf variance {
+                    tailf:info "Specify the range of values considered equivalent for this policy";
+                    description
+                      "Specify range; e.g. 25 means all exits measuring up to 25% worse than the best exit are considered equivalent";
+                    type uint8 {
+                      range "1..100";
+                    }
+                  }
+                }
+              }
+            }
+            container mos {
+              tailf:info "Specify PfR MOS policy resolver settings";
+              description
+                "Specify PfR MOS policy resolver settings";
+              container priority {
+                tailf:info "Specify the order in which resolver will consider this policy";
+                description
+                  "Specify the order in which resolver will consider this policy";
+                list mos-pol {
+                  tailf:cli-drop-node-name;
+                  tailf:cli-suppress-mode;
+                  key "mos-pol";
+                  leaf mos-pol {
+                    tailf:info "Specify this policy's priority; 1 being highest";
+                    description
+                      "Specify this policy's priority; 1 being highest";
+                    type uint8 {
+                      range "1..9";
+                    }
+                  }
+                  leaf variance {
+                    tailf:info "Specify the range of values considered equivalent for this policy";
+                    description
+                      "Specify range; e.g. 25 means all exits measuring up to 25% worse than the best exit are considered equivalent";
+                    type uint8 {
+                      range "1..100";
+                    }
+                  }
+                }
+              }
+            }
+          }
+          container rsvp {
+            tailf:info "Specify rsvp parameters";
+            description
+              "Specify rsvp parameters";
+            leaf post-dial-delay {
+              tailf:info "Specify rsvp post-dial-delay in msecs";
+              description
+                "RSVP post-dial-delay in msecs";
+              type uint16 {
+                range "0..500";
+              }
+            }
+            leaf signaling-retries {
+              tailf:info "Specify number of rsvp signaling-retries";
+              description
+                "Number of signaling-retries";
+              type uint8 {
+                range "0..1";
+              }
+            }
+          }
+          leaf shutdown {
+            tailf:info "Disable PfR master controller functionality";
+            description
+              "Disable PfR master controller functionality";
+            type empty;
+          }
+          container target-discovery {
+            tailf:info "Enable/configure Target Discovery";
+            description
+              "Enable/configure Target Discovery";
+            presence "true";
+            container responder-list {
+              tailf:info "Specify static list of responders";
+              description
+                "Specify static list of responders";
+              list td-num {
+                tailf:cli-drop-node-name;
+                tailf:cli-suppress-mode;
+                key "td-num";
+                leaf td-num {
+                  tailf:info "Prefix-list containing list of responders";
+                  description
+                    "Prefix-list containing list of responders";
+                  type string;
+                }
+                leaf inside-prefixes {
+                  tailf:info "Prefix-list containing list of inside prefixes";
+                  description
+                    "Prefix-list containing list of inside prefixes";
+                  type string;
+                }
+              }
+            }
+          }
+          container traceroute {
+            tailf:info "Configure Traceroute global parameters";
+            description
+              "Configure Traceroute global parameters";
+            leaf probe-delay {
+              tailf:info "Delay between subsequent traceroute probes";
+              description
+                "Specify the time between two probes in msec";
+              type uint16 {
+                range "0..65535";
+              }
+            }
+          }
+          leaf trigger-log-percentage {
+            tailf:info "Specify the percentage of out-of-policy TCs that will trigger a syslog";
+            description
+              "Specify the percentage of out-of-policy TCs that will trigger a syslog";
+            type uint8 {
+              range "0..100";
+            }
+          }
+          container unreachable {
+            tailf:info "Specify unreachable parameters";
+            description
+              "Specify unreachable parameters";
+            leaf relative {
+              tailf:info "Maximum allowable relative change from short to long term";
+              description
+                "short/long term in percentage. e.g. 125 is short/long = 1.25";
+              type uint16 {
+                range "1..1000";
+              }
+            }
+            leaf threshold {
+              tailf:info "Maximum allowable absolute unreachables";
+              description
+                "Maximum absolute unreachable threshold (flows-per-million)";
+              type uint32 {
+                range "1..1000000";
+              }
+            }
+          }
+        }
+      }
+    }
+    list pfr-map {
+      tailf:info "Create pfr-map and enter pfr-map command mode";
+      description
+        "Create pfr-map and enter pfr-map command mode";
+      tailf:cli-mode-name "config-pfr-map";
+      key "pfr-tg";
+      leaf pfr-tg {
+        tailf:info "pfr-map tag";
+        description
+          "pfr-map tag";
+        type string;
+      }
+      container pfr-Mode-config-pfr-map {
+        tailf:cli-drop-node-name;
+        container match {
+          tailf:info "Match values for PfR policy";
+          description
+            "Match values for PfR policy";
+          container ip {
+            tailf:info "IP specific information";
+            description
+              "IP specific information";
+            leaf address {
+              tailf:info "Match address";
+              description
+                "Match address";
+              type empty;
+            }
+          }
+          container pfr {
+            tailf:info "Match PfR prefixes";
+            description
+              "Match PfR prefixes";
+            leaf learn {
+              tailf:info "Match PfR learned prefixes";
+              description
+                "Match PfR learned prefixes";
+              type empty;
+            }
+          }
+          container traffic-class {
+            tailf:info "Specify Traffic class";
+            description
+              "Specify Traffic class";
+            leaf access-list {
+              tailf:info "Specify Traffic class(es) using access-list";
+              description
+                "Specify Traffic class(es) using access-list";
+              type empty;
+            }
+            leaf application {
+              tailf:info "Specify the application to learn";
+              description
+                "Specify the application to learn";
+              type empty;
+            }
+            leaf prefix-list {
+              tailf:info "Specify Traffic class(es) using prefix-list";
+              description
+                "Specify Traffic class(es) using prefix-list";
+              type empty;
+            }
+          }
+        }
+        container set {
+          tailf:info "Set values for PfR policy";
+          description
+            "Set values for PfR policy";
+          container active-probe {
+            tailf:info "Manually create an active probe for a known target";
+            description
+              "Manually create an active probe for a known target";
+            container echo {
+              tailf:info "Perform ICMP echo probe operations";
+              description
+                "Perform ICMP echo probe operations";
+              list prb-ipv4-or-hostname {
+                tailf:cli-drop-node-name;
+                tailf:cli-suppress-mode;
+                key "prb-ipv4-or-hostname";
+                leaf prb-ipv4-or-hostname {
+                  tailf:info "IP address of probe target";
+                  description
+                    "IP address of probe target";
+                  type inet:host;
+                }
+                leaf dscp {
+                  tailf:info "Specify the DSCP value";
+                  description
+                    "Specify the DSCP value";
+                  type empty;
+                }
+              }
+            }
+            container jitter {
+              tailf:info "Perform jitter probe operations (requires a responder)";
+              description
+                "Perform jitter probe operations (requires a responder)";
+              list jit-ipv4-or-hostname {
+                tailf:cli-drop-node-name;
+                tailf:cli-suppress-mode;
+                key "jit-ipv4-or-hostname";
+                leaf jit-ipv4-or-hostname {
+                  tailf:info "IP address of probe target";
+                  description
+                    "IP address of probe target";
+                  type inet:host;
+                }
+                leaf target-port {
+                  tailf:info "Required Target Port for udp-echo or tcp-conn or jitter";
+                  description
+                    "Required Target Port for udp-echo or tcp-conn or jitter";
+                  type empty;
+                }
+              }
+            }
+            container tcp-conn {
+              tailf:info "Perform TCP Connection / Disconnect probe operations";
+              description
+                "Perform TCP Connection / Disconnect probe operations";
+              list tcp-ipv4-or-hostname {
+                tailf:cli-drop-node-name;
+                tailf:cli-suppress-mode;
+                key "tcp-ipv4-or-hostname";
+                leaf tcp-ipv4-or-hostname {
+                  tailf:info "IP address of probe target";
+                  description
+                    "IP address of probe target";
+                  type inet:host;
+                }
+                leaf target-port {
+                  tailf:info "Required Target Port for udp-echo or tcp-conn or jitter";
+                  description
+                    "Required Target Port for udp-echo or tcp-conn or jitter";
+                  type empty;
+                }
+              }
+            }
+            container udp-echo {
+              tailf:info "Perform UDP Echo probe operations (requires a responder)";
+              description
+                "Perform UDP Echo probe operations (requires a responder)";
+              list udp-ipv4-or-hostname {
+                tailf:cli-drop-node-name;
+                tailf:cli-suppress-mode;
+                key "udp-ipv4-or-hostname";
+                leaf udp-ipv4-or-hostname {
+                  tailf:info "IP address of probe target";
+                  description
+                    "IP address of probe target";
+                  type inet:host;
+                }
+                leaf target-port {
+                  tailf:info "Required Target Port for udp-echo or tcp-conn or jitter";
+                  description
+                    "Required Target Port for udp-echo or tcp-conn or jitter";
+                  type empty;
+                }
+              }
+            }
+          }
+          container backoff {
+            tailf:info "Specify backoff timer parameters";
+            description
+              "Specify backoff timer parameters";
+            list boff-t {
+              tailf:cli-drop-node-name;
+              tailf:cli-suppress-mode;
+              key "boff-t";
+              leaf boff-t {
+                tailf:info "Specify minimum value of backoff timer (secs)";
+                description
+                  "Specify minimum value of backoff timer (secs)";
+                type uint16 {
+                  range "90..7200";
+                }
+              }
+              list boff-t0 {
+                tailf:cli-drop-node-name;
+                tailf:cli-suppress-mode;
+                key "boff-t0";
+                leaf boff-t0 {
+                  tailf:info "Specify maximum value of backoff timer (secs)";
+                  description
+                    "Specify maximum value of backoff timer (secs)";
+                  type uint16 {
+                    range "90..7200";
+                  }
+                }
+                leaf boff-rng {
+                  tailf:info "Specify optional backoff timer step (secs)";
+                  description
+                    "Specify optional backoff timer step (secs)";
+                  tailf:cli-drop-node-name;
+                  type uint16 {
+                    range "90..7110";
+                  }
+                }
+              }
+            }
+          }
+          container delay {
+            tailf:info "Specify delay parameters";
+            description
+              "Specify delay parameters";
+            leaf relative {
+              tailf:info "Maximum allowable relative change from short to long term";
+              description
+                "Maximum allowable relative change from short to long term";
+              type empty;
+            }
+            leaf threshold {
+              tailf:info "Maximum allowable absolute delay";
+              description
+                "Maximum allowable absolute delay";
+              type empty;
+            }
+          }
+          leaf holddown {
+            tailf:info "Specify hold-down timer parameter";
+            description
+              "Specify hold-down timer parameter (secs)";
+            type uint16 {
+              range "90..65535";
+            }
+          }
+          leaf interface {
+            tailf:info "Specify an PfR managed border router interface";
+            description
+              "Set the forwarding interface to Null0";
+            type string;
+          }
+          leaf jitter {
+            tailf:info "Specify jitter parameters";
+            description
+              "Specify jitter parameters";
+            type empty;
+          }
+          container link-group {
+            tailf:info "Specify the link group";
+            description
+              "Specify the link group";
+            list lg-name {
+              tailf:cli-drop-node-name;
+              tailf:cli-suppress-mode;
+              key "lg-name";
+              leaf lg-name {
+                tailf:info "Specify primary link group name";
+                description
+                  "Specify primary link group name";
+                type string;
+              }
+              container fallback {
+                tailf:info "Specify the fallback link group";
+                description
+                  "Specify the fallback link group";
+                presence "true";
+                leaf fall-name {
+                  tailf:info "Specify Fallback link group name";
+                  description
+                    "Specify Fallback link group name";
+                  tailf:cli-drop-node-name;
+                  type string;
+                }
+              }
+            }
+          }
+          container loss {
+            tailf:info "Specify loss parameters";
+            description
+              "Specify loss parameters";
+            leaf relative {
+              tailf:info "Maximum allowable relative change from short to long term";
+              description
+                "short/long term in percentage. e.g. 125 is short/long = 1.25";
+              type uint16 {
+                range "1..1000";
+              }
+            }
+            leaf threshold {
+              tailf:info "Maximum allowable absolute packet lost packets";
+              description
+                "Maximum absolute lost packet threshold in percentage e.g., 1 is 0.0001 percent";
+              type uint32 {
+                range "1..1000000";
+              }
+            }
+          }
+          leaf mode {
+            tailf:info "Specify PfR operating mode settings";
+            description
+              "Specify PfR operating mode settings";
+            type empty;
+          }
+          leaf mos {
+            tailf:info "Specify mos parameters";
+            description
+              "Specify mos parameters";
+            type empty;
+          }
+          leaf next-hop {
+            tailf:info "Specify the next-hop ip address";
+            description
+              "Specify the next-hop ip address";
+            type empty;
+          }
+          leaf periodic {
+            tailf:info "Specify periodic rotation timer value";
+            description
+              "Specify periodic rotation timer value";
+            type empty;
+          }
+          leaf probe {
+            tailf:info "Specify active probe parameter";
+            description
+              "Specify active probe parameter";
+            type empty;
+          }
+          leaf resolve {
+            tailf:info "Specify PfR policy resolver settings";
+            description
+              "Specify PfR policy resolver settings";
+            type empty;
+          }
+          leaf traceroute {
+            tailf:info "Enable traceroute";
+            description
+              "Enable traceroute";
+            type empty;
+          }
+          leaf trap-enable {
+            tailf:info "Enable PfR MIB Traps";
+            description
+              "Enable PfR MIB Traps";
+            type empty;
+          }
+          leaf trigger-log-percentage {
+            tailf:info "Specify the percentage of out-of-policy TCs that will trigger a syslog";
+            description
+              "Specify the percentage of out-of-policy TCs that will trigger a syslog";
+            type empty;
+          }
+          leaf unreachable {
+            tailf:info "Specify unreachable parameters";
+            description
+              "Specify unreachable parameters";
+            type empty;
+          }
+        }
+      }
+    }
+    container ptp {
+      tailf:info "Precision Time Protocol";
+      description
+        "Precision Time Protocol";
+      container clock {
+        tailf:info "Configure PTP clock";
+        description
+          "Configure PTP clock";
+        tailf:cli-add-mode;
+        tailf:cli-mode-name "config-ptp-clk";
+        container ordinary {
+          tailf:info "Configure PTP Ordinary clock";
+          description
+            "Configure PTP Ordinary clock";
+          tailf:cli-hide-in-submode;
+          leaf domain {
+            tailf:info "PTP domain";
+            description
+              "PTP domain";
+            type int8 {
+              tailf:info "<0-127>##Domain number";
+              range "0..127";
+            }
+          }
+        }
+        container clock-port {
+          tailf:info "Configure clock port";
+          description
+            "Configure clock port";
+          tailf:cli-add-mode;
+          tailf:cli-mode-name "config-ptp-port";
+          leaf name {
+            tailf:info "Port name";
+            description
+              "Port name";
+            tailf:cli-drop-node-name;
+            tailf:cli-incomplete-command;
+            tailf:cli-hide-in-submode;
+            type string {
+              tailf:info "WORD##Port name";
+            }
+          }
+          leaf slave {
+            tailf:info "Configure as Slave";
+            description
+              "Configure as Slave";
+            tailf:cli-hide-in-submode;
+            type empty;
+          }
+          leaf master {
+            tailf:info "Configure as Master";
+            description
+              "Configure as Master";
+            tailf:cli-hide-in-submode;
+            type empty;
+          }
+          container transport {
+            tailf:info "Set port transport parameters";
+            description
+              "Set port transport parameters";
+            tailf:cli-compact-syntax;
+            tailf:cli-sequence-commands;
+            leaf ipv4 {
+              tailf:info "Use IPv4 encapsulation";
+              description
+                "Use IPv4 encapsulation";
+              type empty;
+            }
+            container unicast {
+              tailf:info "Use unicast communication channel";
+              description
+                "Use unicast communication channel";
+              tailf:cli-flatten-container;
+              tailf:cli-compact-syntax;
+              tailf:cli-sequence-commands;
+              leaf interface {
+                type string {
+                  tailf:info "Interface name";
+                }
+              }
+              leaf negotiation {
+                tailf:info "Enable unicast negotiation";
+                description
+                  "Enable unicast negotiation";
+                type empty;
+              }
+            }
+          }
+          container clock {
+            leaf source {
+              type inet:ipv4-address {
+                tailf:info "A.B.C.D;;IP address of the clock source";
+              }
+            }
+          }
+        }
+      }
+    }
+    container facility-alarm {
+      tailf:info "Configure facility alarms";
+      description
+        "Configure facility alarms";
+      tailf:cli-explicit-exit;
+      tailf:cli-compact-syntax;
+      tailf:cli-sequence-commands;
+      leaf severity {
+        tailf:cli-drop-node-name;
+        tailf:cli-incomplete-command;
+        type enumeration {
+          enum "critical" {
+            tailf:info "Behavior on critical threshold exceed";
+          }
+        }
+      }
+      leaf exceed-action {
+        tailf:info "Behavior on critical threshold exceed";
+        description
+          "Behavior on critical threshold exceed";
+        type enumeration {
+          enum "shutdown" {
+            tailf:info "Behavior on critical threshold exceed";
+          }
+        }
+      }
+    }
+    container esmc {
+      tailf:info "Ethernet Synchronization Messaging Channel";
+      description
+        "Ethernet Synchronization Messaging Channel";
+      tailf:cli-explicit-exit;
+      leaf process {
+        tailf:info "process";
+        description
+          "process";
+        type empty;
+      }
+    }
+    container tod-clock {
+      tailf:info "Tod clock config commands";
+      description
+        "Tod clock config commands";
+      tailf:cli-explicit-exit;
+      container input-source {
+        tailf:info "Synchronization Input Source";
+        description
+          "Synchronization Input Source";
+        tailf:cli-compact-syntax;
+        tailf:cli-sequence-commands;
+        leaf priority {
+          tailf:cli-drop-node-name;
+          type uint8 {
+            tailf:info "<1-250>  Priority";
+            range "1..250";
+          }
+        }
+        container ptp {
+          tailf:cli-flatten-container;
+          leaf domain {
+            type uint8 {
+              tailf:info "PTP domain number";
+            }
+          }
+        }
+      }
+    }
+    container network-clock {
+      tailf:info "Network clock config commands";
+      description
+        "Network clock config commands";
+      tailf:cli-explicit-exit;
+      container synchronization {
+        tailf:info "Network clock synchronization selection process";
+        description
+          "Network clock synchronization selection process";
+        leaf automatic {
+          tailf:info "ITU-T G.781/Telcordia standard based";
+          description
+            "ITU-T G.781/Telcordia standard based";
+          type empty;
+        }
+        leaf mode {
+          tailf:info "synchronization networking mode";
+          description
+            "synchronization networking mode";
+          type enumeration {
+            enum "QL-enabled" {
+              tailf:info "QL-enabled mode";
+            }
+          }
+        }
+      }
+      container wait-to-restore {
+        tailf:info "Wait-to-Restore timer";
+        description
+          "Wait-to-Restore timer";
+        tailf:cli-compact-syntax;
+        tailf:cli-sequence-commands;
+        leaf time {
+          tailf:info "Wait-to-Restore time";
+          description
+            "Wait-to-Restore time";
+          tailf:cli-drop-node-name;
+          type uint32 {
+            tailf:info "<0-86400>  sec (default 300 seconds)";
+            range "0..86400";
+          }
+        }
+        leaf global {
+          tailf:info "Global";
+          description
+            "Global";
+          type empty;
+        }
+      }
+      container input-source {
+        tailf:info "Synchronization Input Source";
+        description
+          "Synchronization Input Source";
+        tailf:cli-compact-syntax;
+        tailf:cli-sequence-commands;
+        leaf priority {
+          tailf:cli-drop-node-name;
+          type uint8 {
+            tailf:info "<1-250>  Priority";
+            range "1..250";
+          }
+        }
+        container interface {
+          tailf:cli-optional-in-sequence;
+          tailf:cli-flatten-container;
+          uses interface-grouping;
+        }
+        container ptp {
+          tailf:cli-optional-in-sequence;
+          tailf:cli-flatten-container;
+          leaf domain {
+            type uint8 {
+              tailf:info "PTP domain number";
+            }
+          }
+        }
+      }
+    }
+    container l2vpn {
+      tailf:info "Layer2 VPN commands";
+      description
+        "Layer2 VPN commands";
+      container l2-Mode-config-l2vpn {
+        tailf:cli-drop-node-name;
+        container pseudowire {
+          tailf:info "Global pseudowire parameters";
+          description
+            "Global pseudowire parameters";
+          container static-oam {
+            tailf:info "Static PW OAM configuration";
+            description
+              "Static PW OAM configuration";
+            list class {
+              tailf:info "Static PW OAM class configuration";
+              description
+                "Static PW OAM class configuration";
+              tailf:cli-mode-name "config-st-pw-oam-class";
+              key "pw-nm";
+              leaf pw-nm {
+                type string {
+                  tailf:info "WORD;;Static PW OAM class name";
+                }
+              }
+              container timeout {
+                tailf:info "timeout configurations";
+                description
+                  "timeout configurations";
+                container refresh {
+                  tailf:info "refresh timeout configurations";
+                  description
+                    "refresh timeout configurations";
+                  container send {
+                    tailf:info "refresh send timeout configuration";
+                    description
+                      "refresh send timeout configuration";
+                    leaf interval {
+                      tailf:cli-drop-node-name;
+                      type uint32 {
+                        tailf:info "<1-4095>;;Seconds, default is 30";
+                        range "1..4095";
+                      }
+                    }
+                  }
+                }
+              }
+            }
+          }
+          container tlv {
+            tailf:info "Global PW TLV configuration";
+            description
+              "Global PW TLV configuration";
+            list template {
+              tailf:info "PW TLV Template Keyword";
+              description
+                "PW TLV Template Keyword";
+              tailf:cli-mode-name "config-pw-tlv-template";
+              key "tlv-nm";
+              leaf tlv-nm {
+                type string {
+                  tailf:info "WORD;;PW TLV template name";
+                }
+              }
+              container tlv {
+                tailf:info "TLV config command";
+                description
+                  "TLV config command";
+                container tlv-type {
+                  tailf:cli-drop-node-name;
+                  leaf type {
+                    tailf:cli-drop-node-name;
+                    type uint8 {
+                      tailf:info "<1-40>;;TLV type in hex format";
+                      range "1..40";
+                    }
+                  }
+                }
+                container tlv-description {
+                  tailf:cli-drop-node-name;
+                  leaf description {
+                    tailf:cli-drop-node-name;
+                    type string {
+                      tailf:info "WORD;;TLV description string";
+                    }
+                  }
+                }
+              }
+            }
+          }
+          container group {
+            tailf:info "Configure pseudowire group parameters";
+            description
+              "Configure pseudowire group parameters";
+            leaf status {
+              tailf:info "Send pseudowire group status messages";
+              description
+                "Send pseudowire group status messages";
+              type empty;
+            }
+          }
+          leaf routing {
+            tailf:info "Configure l2vpn pseudowire routing";
+            description
+              "Configure l2vpn pseudowire routing";
+            type empty;
+          }
+        }
+        container vfi {
+          tailf:info "Configure a Virtual Forwarding Instance (VFI)";
+          description
+            "Configure a Virtual Forwarding Instance (VFI)";
+          list context {
+            tailf:info "Layer2 VPN Context";
+            description
+              "Layer2 VPN Context";
+            tailf:cli-mode-name "config-vfi";
+            key "vfi-nm";
+            leaf vfi-nm {
+              tailf:info "Virtual Forwarding Instance (VFI) name";
+              description
+                "Virtual Forwarding Instance (VFI) name";
+              type string;
+            }
+            container autodiscovery {
+              tailf:info "Auto Discovery mode";
+              description
+                "Auto Discovery mode";
+              container bgp {
+                tailf:info "Use BGP for neighbor discovery";
+                description
+                  "Use BGP for neighbor discovery";
+                container signaling {
+                  tailf:info "Signaling protocol to use";
+                  description
+                    "Signaling protocol to use";
+                  container bgp {
+                    tailf:info "Use BGP signaling and discovery";
+                    description
+                      "Use BGP signaling and discovery";
+                    tailf:cli-add-mode;
+                    tailf:cli-mode-name "config-vfi-autodiscovery";
+                    presence "true";
+                    leaf template {
+                      tailf:info "Template to be used for autodiscovered pseudowires";
+                      description
+                        "Template to be used for autodiscovered pseudowires";
+                      tailf:cli-hide-in-submode;
+                      type string {
+                        tailf:info "WORD;;template name (Max size 32)";
+                      }
+                    }
+                  }
+                  container ldp {
+                    tailf:info "Use LDP signaling";
+                    description
+                      "Use LDP signaling";
+                    tailf:cli-add-mode;
+                    tailf:cli-mode-name "config-vfi-autodiscovery";
+                    presence "true";
+                    leaf template {
+                      tailf:info "Template to be used for autodiscovered pseudowires";
+                      description
+                        "Template to be used for autodiscovered pseudowires";
+                      tailf:cli-hide-in-submode;
+                      type string {
+                        tailf:info "WORD;;template name (Max size 32)";
+                      }
+                    }
+                  }
+                }
+              }
+            }
+            container vpn {
+              tailf:info "VPN configuration";
+              description
+                "VPN configuration";
+              leaf id {
+                tailf:info "VPN id";
+                description
+                  "VPN id value";
+                type uint32 {
+                  range "1..4294967295";
+                }
+              }
+            }
+          }
+        }
+        container xconnect {
+          tailf:info "Configure a cross connect";
+          description
+            "Configure a cross connect";
+          list context {
+            tailf:info "Layer2 VPN Context";
+            description
+              "Layer2 VPN Context";
+            tailf:cli-mode-name "config-xconnect";
+            key "xc-name";
+            leaf xc-name {
+              tailf:info "Configure the cross connect name";
+              description
+                "Configure the cross connect name";
+              type string;
+            }
+            container xc-Mode-config-xconnect {
+              tailf:cli-drop-node-name;
+              leaf description {
+                tailf:info "Set xconnect description string";
+                description
+                  "Description string";
+                tailf:cli-multi-value;
+                type string;
+              }
+              container interworking {
+                tailf:info "Interworking options for the cross connect";
+                description
+                  "Interworking options for the cross connect";
+                leaf ethernet {
+                  tailf:info "Ethernet interworking";
+                  description
+                    "Ethernet interworking";
+                  type empty;
+                }
+                leaf ip {
+                  tailf:info "IP interworking";
+                  description
+                    "IP interworking";
+                  type empty;
+                }
+                leaf vlan {
+                  tailf:info "VLAN interworking";
+                  description
+                    "VLAN interworking";
+                  type empty;
+                }
+              }
+              container match {
+                tailf:info "Set Xconnect packet matching criteria";
+                description
+                  "Set Xconnect packet matching criteria";
+                container protocol {
+                  tailf:info "Protocol matching criterion";
+                  description
+                    "Protocol matching criterion";
+                  leaf ipv6 {
+                    tailf:info "IPV6";
+                    description
+                      "IPV6";
+                    type empty;
+                  }
+                }
+              }
+              container member {
+                tailf:info "Configure the cross connect member";
+                description
+                  "Configure the cross connect member";
+                list mem-ipv4 {
+                  tailf:cli-drop-node-name;
+                  tailf:cli-suppress-mode;
+                  key "mem-ipv4";
+                  leaf mem-ipv4 {
+                    tailf:info "IP address of the peer";
+                    description
+                      "IP address of the peer";
+                    type inet:ipv4-address;
+                  }
+                  leaf mem-vcid {
+                    tailf:info "Enter VC ID value";
+                    description
+                      "Enter VC ID value";
+                    tailf:cli-drop-node-name;
+                    type uint32 {
+                      range "1..4294967295";
+                    }
+                  }
+                }
+                list mbr-interface {
+                  tailf:cli-drop-node-name;
+                  tailf:cli-suppress-mode;
+                  key "mbr-interface";
+                  leaf mbr-interface {
+                    tailf:info "GigabitEthernet IEEE 802.3z";
+                    description
+                      "GigabitEthernet IEEE 802.3z";
+                    type string;
+                  }
+                  leaf group {
+                    tailf:info "Configure the cross connect member redundancy group";
+                    description
+                      "Configure the cross connect member redundancy group";
+                    type empty;
+                  }
+                  leaf service-instance {
+                    tailf:info "Ethernet Service Instance";
+                    description
+                      "Ethernet Service Instance";
+                    type empty;
+                  }
+                }
+                leaf Vlan {
+                  tailf:info "Catalyst Vlans";
+                  description
+                    "Vlan interface number";
+                  type uint16 {
+                    range "1..4094";
+                  }
+                }
+              }
+              container redundancy {
+                tailf:info "Xconnect redundancy information";
+                description
+                  "Xconnect redundancy information";
+                leaf delay {
+                  tailf:info "Xconnect redundancy delay parameters";
+                  description
+                    "Enable delay";
+                  type uint8 {
+                    range "0..180";
+                  }
+                }
+                container predictive {
+                  tailf:info "Switch over to backup member without waiting for UP status";
+                  description
+                    "Switch over to backup member without waiting for UP status";
+                  leaf disabled {
+                    tailf:info "Disable predictive switchover capability for this xconnect";
+                    description
+                      "Disable predictive switchover capability for this xconnect";
+                    type empty;
+                  }
+                  leaf enabled {
+                    tailf:info "Enable predictive switchover capability for this xconnect";
+                    description
+                      "Enable predictive switchover capability for this xconnect";
+                    type empty;
+                  }
+                }
+              }
+              container remote {
+                tailf:info "L2VPN remote peer configuration commands";
+                description
+                  "L2VPN remote peer configuration commands";
+                container circuit {
+                  tailf:info "Remote peer circuit configuration";
+                  description
+                    "Remote peer circuit configuration";
+                  leaf id {
+                    tailf:info "Remote peer circuit ID";
+                    description
+                      "Remote peer circuit ID";
+                    type empty;
+                  }
+                }
+                container link {
+                  tailf:info "Link information";
+                  description
+                    "Link information";
+                  leaf failure {
+                    tailf:info "Failure information";
+                    description
+                      "Failure information";
+                    type empty;
+                  }
+                }
+              }
+              leaf shutdown {
+                tailf:info "Shutdown Xconnect";
+                description
+                  "Shutdown Xconnect";
+                type empty;
+              }
+            }
+          }
+        }
+      }
+      container config-l2vpn {
+        tailf:cli-drop-node-name;
+        tailf:cli-add-mode;
+        tailf:cli-mode-name "config-l2vpn";
+        presence "true";
+        container logging {
+          tailf:info "Configure logging flags";
+          description
+            "Configure logging flags";
+          container pseudowire {
+            tailf:info "pseudowire status transition logging";
+            description
+              "pseudowire status transition logging";
+            leaf status {
+              tailf:info "pseudowire status up/down logging";
+              description
+                "pseudowire status up/down logging";
+              type empty;
+            }
+          }
+          leaf redundancy {
+            tailf:info "xconnect redundancy events";
+            description
+              "xconnect redundancy events";
+            type empty;
+          }
+        }
+        container redundancy {
+          tailf:info "Configure L2VPN redundancy parameters";
+          description
+            "Configure L2VPN redundancy parameters";
+          container predictive {
+            tailf:info "Switch over to backup member without waiting for UP status";
+            description
+              "Switch over to backup member without waiting for UP status";
+            leaf enabled {
+              tailf:info "Enable predictive switchover capability for all xconnects";
+              description
+                "Enable predictive switchover capability for all xconnects";
+              type empty;
+            }
+          }
+        }
+        leaf router-id {
+          tailf:info "Configure a Layer2 router-id";
+          description
+            "Layer2 router-id value";
+          type inet:ipv4-address;
+        }
+        leaf shutdown {
+          tailf:info "Shutdown Layer2 VPN";
+          description
+            "Shutdown Layer2 VPN";
+          type empty;
+        }
+      }
+    }
+    container l3vpn {
+      tailf:info "l3vpn encapsulation ip commands";
+      description
+        "l3vpn encapsulation ip commands";
+      container encapsulation {
+        tailf:info "l3vpn encapsulation ip";
+        description
+          "l3vpn encapsulation ip";
+        list ip {
+          tailf:info "l3vpn encapsulation ip";
+          description
+            "l3vpn encapsulation ip";
+          tailf:cli-mode-name "config-l3vpn-encap-ip";
+          key "profile-name";
+          leaf profile-name {
+            type string {
+              tailf:info "WORD;;profile name";
+            }
+          }
+          container transport {
+            tailf:info "transport mode";
+            description
+              "transport mode";
+            container ipv4 {
+              tailf:info "transport ipv4 mode";
+              description
+                "transport ipv4 mode";
+              presence "true";
+              leaf source {
+                tailf:info "transport source";
+                description
+                  "transport source";
+                type string {
+                  tailf:info "WORD::Interface name";
+                }
+              }
+            }
+          }
+          container protocol {
+            tailf:info "protocol mode";
+            description
+              "protocol mode";
+            container gre {
+              tailf:info "protocol gre";
+              description
+                "protocol gre";
+              presence "true";
+              leaf key {
+                tailf:info "gre key";
+                description
+                  "gre key";
+                type uint32 {
+                  tailf:info "<0-4294967295>;;key value";
+                  range "0..4294967295";
+                }
+              }
+            }
+          }
+          container mpls {
+            tailf:info "Configure MPLS interface parameters";
+            description
+              "Configure MPLS interface parameters";
+            leaf mtu {
+              tailf:info "Set MPLS Maximum Transmission Unit";
+              description
+                "Set MPLS Maximum Transmission Unit";
+              type union {
+                type uint32 {
+                  tailf:info "<64-17916>;;MTU (bytes)";
+                  range "64..17916";
+                }
+                type enumeration {
+                  enum "max" {
+                    tailf:info "set mpls mtu to maximum mtu";
+                  }
+                }
+              }
+            }
+          }
+        }
+      }
+    }
+    container mpls {
+      tailf:info "Configure MPLS parameters";
+      description
+        "Configure MPLS parameters";
+      container atm {
+        tailf:info "Configure ATM options";
+        description
+          "Configure ATM options";
+        leaf disable-headend-vc {
+          tailf:info "Dedicated lsc capability: In this mode headend Tag VCs are disabled.";
+          description
+            "Dedicated lsc capability: In this mode headend Tag VCs are disabled.";
+          type empty;
+        }
+      }
+      leaf cos-map {
+        tailf:info "Configure MPLS CoS ATM Multi-VC CoS Map";
+        description
+          "Configure MPLS CoS ATM Multi-VC CoS Map";
+        tailf:cli-full-command;
+        type uint8 {
+          range "1..255" {
+            tailf:info "<1-255>;;cos-map number";
+          }
+        }
+      }
+      container ip {
+        tailf:info "Dynamic MPLS forwarding for IP";
+        description
+          "Dynamic MPLS forwarding for IP";
+        leaf default-route {
+          tailf:info "Allow MPLS forwarding for ip default route";
+          description
+            "Allow MPLS forwarding for ip default route";
+          tailf:cli-full-command;
+          type empty;
+        }
+        container conf {
+          tailf:cli-no-keyword;
+          tailf:cli-drop-node-name;
+          leaf propagate-ttl {
+            tailf:cli-boolean-no;
+            type boolean;
+            default "true";
+          }
+        }
+        container conf-arg {
+          tailf:cli-drop-node-name;
+          container propagate-ttl {
+            tailf:cli-incomplete-command;
+            tailf:cli-incomplete-no;
+            leaf forwarded {
+              tailf:cli-boolean-no;
+              tailf:cli-show-with-default;
+              type boolean;
+            }
+          }
+        }
+        container ttl-expiration {
+          tailf:info "Control MPLS TTL expiration behavior";
+          description
+            "Control MPLS TTL expiration behavior";
+          leaf pop {
+            tailf:info "Popping labels on TTL expiration";
+            description
+              "Popping labels on TTL expiration";
+            type uint8 {
+              range "1..6";
+              tailf:info "<1-6>;;Popping all labels if original packet has less than N labels";
+            }
+          }
+        }
+      }
+      container label {
+        tailf:info "Label properties";
+        description
+          "Label properties";
+        container atm {
+          tailf:info "Configure ATM options";
+          description
+            "Configure ATM options";
+          leaf disable-headend-vc {
+            tailf:info "Dedicated lsc capability: In this mode headend Tag VCs are disabled.";
+            description
+              "Dedicated lsc capability: In this mode headend Tag VCs are disabled.";
+            type empty;
+          }
+        }
+        leaf protocol {
+          tailf:info "Set platform default label distribution protocol";
+          description
+            "Set platform default label distribution protocol";
+          tailf:cli-full-command;
+          type enumeration {
+            enum "ldp" {
+              tailf:code-name "label_ldp";
+              tailf:info "Use LDP (default)";
+            }
+            enum "tdp:" {
+              tailf:code-name "label_tdp";
+              tailf:info "Use TDP";
+            }
+          }
+        }
+        container range {
+          tailf:info "Label range";
+          description
+            "Label range";
+          tailf:cli-sequence-commands;
+          tailf:cli-compact-syntax;
+          leaf min {
+            tailf:cli-drop-node-name;
+            tailf:cli-incomplete-command;
+            type uint32 {
+              range "16..1048575";
+              tailf:info "<16-1048575>  Minimum label value";
+            }
+          }
+          leaf max {
+            tailf:cli-drop-node-name;
+            must ". > ../min" {
+              tailf:dependency "../min";
+              error-message "Max label value must be > min label value";
+            }
+            type uint32 {
+              range "16..1048575";
+              tailf:info "<16-1048575>  Maximum label value";
+            }
+          }
+          container static {
+            tailf:info "Specify block of labels for static bindings";
+            description
+              "Specify block of labels for static bindings";
+            tailf:cli-compact-syntax;
+            tailf:cli-sequence-commands;
+            tailf:cli-flatten-container;
+            leaf min {
+              tailf:cli-drop-node-name;
+              tailf:cli-incomplete-command;
+              type uint32 {
+                range "16..1048575";
+                tailf:info "<16-1048575>;;Upper minimum static label value";
+              }
+            }
+            leaf max {
+              tailf:cli-drop-node-name;
+              must ". > ../min" {
+                tailf:dependency "../min";
+                error-message "Max label value must be > min label value";
+              }
+              type uint32 {
+                range "16..1048575";
+                tailf:info "<16-1048575>;;Maximum static label value";
+              }
+            }
+          }
+        }
+      }
+      container ldp {
+        tailf:info "Label Distribution Protocol";
+        description
+          "Label Distribution Protocol";
+        container enable {
+          tailf:cli-drop-node-name;
+          leaf advertise-labels {
+            tailf:cli-boolean-no;
+            tailf:cli-trim-default;
+            tailf:cli-show-no;
+            type boolean;
+            default "true";
+          }
+        }
+        container enable2 {
+          tailf:cli-drop-node-name;
+          container advertise-labels {
+            tailf:cli-incomplete-command;
+            tailf:cli-incomplete-no;
+            tailf:info "Label advertisements";
+            description
+              "Label advertisements";
+            container for {
+              tailf:info "Access-list specifying controls on destination prefixes";
+              description
+                "Access-list specifying controls on destination prefixes";
+              tailf:cli-sequence-commands;
+              tailf:cli-compact-syntax;
+              leaf from {
+                tailf:cli-drop-node-name;
+                type string {
+                  tailf:info "WORD;;IP access-list for destination prefixes; name or number (1-99)";
+                }
+              }
+              leaf to {
+                tailf:info "Access-list specifying controls on LDP peers";
+                description
+                  "Access-list specifying controls on LDP peers";
+                type string {
+                  tailf:info "WORD;;IP access-list for LDP peers; name or number (1-99)";
+                }
+              }
+            }
+            list interface {
+              tailf:info "Advertise /32 interface address";
+              description
+                "Advertise /32 interface address";
+              tailf:cli-suppress-mode;
+              key "name";
+              leaf name {
+                type string;
+              }
+            }
+            leaf oldstyle {
+              tailf:info "Use old style (TDP) method for matching prefix acl";
+              description
+                "Use old style (TDP) method for matching prefix acl";
+              tailf:cli-full-command;
+              type empty;
+            }
+          }
+        }
+        container atm {
+          tailf:info "Configure ATM MPLS options";
+          description
+            "Configure ATM MPLS options";
+          leaf control-mode {
+            tailf:info "Select LSP setup control mode for MPLS VCs";
+            description
+              "Select LSP setup control mode for MPLS VCs";
+            tailf:cli-full-command;
+            type enumeration {
+              enum "independent" {
+                tailf:info "Independent Downstream on Demand Label VC setup";
+              }
+              enum "ordered" {
+                tailf:info "Ordered Dowstream on Demand Label VC setup";
+              }
+            }
+            default "ordered";
+            tailf:cli-trim-default;
+          }
+          leaf vc-merge {
+            tailf:info "Select VC merge capability";
+            description
+              "Select VC merge capability";
+            tailf:cli-full-command;
+            tailf:cli-boolean-no;
+            tailf:cli-trim-default;
+            type boolean;
+            default "true";
+          }
+        }
+        container backoff {
+          tailf:info "Set LDP session backoff parameters";
+          description
+            "Set LDP session backoff parameters";
+          tailf:cli-sequence-commands;
+          tailf:cli-compact-syntax;
+          leaf initial {
+            tailf:cli-drop-node-name;
+            tailf:cli-incomplete-command;
+            type uint32 {
+              tailf:info "<5-2147483>;;Initial session backoff time (seconds)";
+              range "5..2147483";
+            }
+          }
+          leaf max {
+            tailf:cli-drop-node-name;
+            type uint32 {
+              tailf:info "<5-2147483>;;Maximum session backoff time (seconds)";
+              range "5..2147483";
+            }
+          }
+        }
+        container discovery {
+          tailf:info "LDP discovery";
+          description
+            "LDP discovery";
+          container hello {
+            tailf:info "LDP discovery Hello";
+            description
+              "LDP discovery Hello";
+            leaf holdtime {
+              tailf:info "LDP discovery Hello holdtime";
+              description
+                "LDP discovery Hello holdtime";
+              type uint16 {
+                tailf:info "<1-65535>;;Holdtime in seconds";
+                range "1..65535";
+              }
+            }
+            leaf interval {
+              tailf:info "LDP discovery Hello interval";
+              description
+                "LDP discovery Hello interval";
+              tailf:cli-full-command;
+              type uint16 {
+                tailf:info "<1-65535>;;Hello interval in seconds";
+                range "1..65535";
+              }
+            }
+          }
+          container targeted-hello {
+            tailf:info "LDP discovery Targeted Hello";
+            description
+              "LDP discovery Targeted Hello";
+            container accept {
+              tailf:info "Accept targeted hellos";
+              description
+                "Accept targeted hellos";
+              presence "Accept targeted hellos";
+              leaf from {
+                tailf:info "Access list to specify acceptable targeted hello sources";
+                description
+                  "Access list to specify acceptable targeted hello sources";
+                type string {
+                  tailf:info "WORD;;IP access-list for acceptable targeted hello sources";
+                }
+              }
+            }
+            leaf holdtime {
+              tailf:info "LDP discovery Hello holdtime";
+              description
+                "LDP discovery Hello holdtime";
+              type uint16 {
+                tailf:info "<1-65535>;;Holdtime in seconds";
+                range "1..65535";
+              }
+            }
+            leaf interval {
+              tailf:info "LDP discovery Hello interval";
+              description
+                "LDP discovery Hello interval";
+              tailf:cli-full-command;
+              type uint16 {
+                tailf:info "<1-65535>;;Hello interval in seconds";
+                range "1..65535";
+              }
+            }
+          }
+        }
+        container explicit-null {
+          tailf:info "Advertise Explicit Null label in place of Implicit Null";
+          description
+            "Advertise Explicit Null label in place of Implicit Null";
+          presence "Advertise Explicit Null label in place of Implicit Null";
+          leaf for {
+            tailf:info "Access-list specifying controls on destination prefixes";
+            description
+              "Access-list specifying controls on destination prefixes";
+            type string {
+              tailf:info "WORD;;IP access-list for destination prefixes; name or number (1-99)";
+            }
+          }
+          leaf to {
+            tailf:info "Access-list specifying controls on LDP peers";
+            description
+              "Access-list specifying controls on LDP peers";
+            type string {
+              tailf:info "WORD;;IP access-list for LDP peers; name or number (1-99)";
+            }
+          }
+        }
+        container graceful-restart {
+          tailf:info "Configure Graceful Restart timers";
+          description
+            "Configure Graceful Restart timers";
+          presence "Configure Graceful Restart timers";
+          container timers {
+            tailf:info "Configure Graceful Restart timers";
+            description
+              "Configure Graceful Restart timers";
+            leaf forwarding-holding {
+              tailf:info "Forwarding State Holding time";
+              description
+                "Forwarding State Holding time";
+              tailf:cli-full-command;
+              type uint16 {
+                tailf:info "<30-600>;;seconds";
+                range "30..600";
+              }
+            }
+            leaf max-recovery {
+              tailf:info "Max-Recovery time";
+              description
+                "Max-Recovery time";
+              tailf:cli-full-command;
+              type uint16 {
+                tailf:info "<15-600>;;seconds";
+                range "15..600";
+              }
+            }
+            leaf neighbor-liveness {
+              tailf:info "Neighbor-Liveness time";
+              description
+                "Neighbor-Liveness time";
+              tailf:cli-full-command;
+              type uint16 {
+                range "5..600";
+                tailf:info "<5-300>;;seconds";
+              }
+            }
+          }
+        }
+        leaf holdtime {
+          tailf:info "LDP session holdtime";
+          description
+            "LDP session holdtime";
+          tailf:cli-full-command;
+          type uint32 {
+            tailf:info "<15-2147483>;;Holdtime in seconds";
+            range "15..2147483";
+          }
+        }
+        container logging {
+          tailf:info "Enable LDP logging";
+          description
+            "Enable LDP logging";
+          leaf neighbor-changes {
+            tailf:info "Log LDP neighbor state changes";
+            description
+              "Log LDP neighbor state changes";
+            type empty;
+          }
+        }
+        leaf loop-detection {
+          tailf:info "Enable LDP Loop Detection";
+          description
+            "Enable LDP Loop Detection";
+          tailf:cli-full-command;
+          type empty;
+        }
+        leaf maxhops {
+          tailf:info "Limit hop count for LDP LSP setup";
+          description
+            "Limit hop count for LDP LSP setup";
+          tailf:cli-full-command;
+          type uint8 {
+            range "0..255";
+            tailf:info "<1-255>;;Maximum hop count value";
+          }
+        }
+        list neighbor {
+          tailf:info "Configure neighbor parameters";
+          description
+            "Configure neighbor parameters";
+          tailf:cli-suppress-mode;
+          tailf:cli-delete-when-empty;
+          key "address";
+          leaf address {
+            type inet:ipv4-address {
+              tailf:info "A.B.C.D;;IP address for LDP neighbor";
+            }
+          }
+          leaf implicit-withdraw {
+            tailf:info "Enable LDP Implicit Withdraw Label";
+            description
+              "Enable LDP Implicit Withdraw Label";
+            tailf:cli-full-command;
+            type empty;
+          }
+          container labels {
+            tailf:info "Configure label binding exchange controls";
+            description
+              "Configure label binding exchange controls";
+            leaf accept {
+              tailf:info "Specify label bindings to accept";
+              description
+                "Specify label bindings to accept";
+              type string {
+                tailf:info "WORD;;IP access-list for LDP peers; name or number (1-99)";
+              }
+            }
+          }
+          container password {
+            tailf:info "Set a password";
+            description
+              "Set a password";
+            tailf:cli-compact-syntax;
+            leaf enctype {
+              tailf:cli-drop-node-name;
+              tailf:cli-incomplete-command;
+              tailf:cli-reset-container;
+              type uint8 {
+                range "0..7";
+                tailf:info "<0-7>;;Encryption type (0 to disable encryption, 7 for proprietary)";
+              }
+              default "0";
+            }
+            leaf text {
+              tailf:cli-drop-node-name;
+              tailf:cli-full-command;
+              tailf:cli-multi-value;
+              tailf:cli-reset-container;
+              type string {
+                pattern "[a-zA-Z].*";
+                tailf:info "LINE;;The password";
+              }
+            }
+          }
+          container targeted {
+            tailf:info "Establish targeted session";
+            description
+              "Establish targeted session";
+            presence "Establish targeted session";
+            leaf protocol {
+              tailf:cli-drop-node-name;
+              type enumeration {
+                enum "ldp" {
+                  tailf:code-name "target_ldp";
+                  tailf:info "User LDP";
+                }
+                enum "tdp" {
+                  tailf:code-name "target_tdp";
+                  tailf:info "Use TDP";
+                }
+              }
+            }
+          }
+        }
+        container request-labels {
+          tailf:info "Access list to specify valid downstream on demand destinations.";
+          description
+            "Access list to specify valid downstream on demand destinations.";
+          leaf for {
+            tailf:info "Access list to specify acceptable downstream on demand destinations";
+            description
+              "Access list to specify acceptable downstream on demand destinations";
+            type string {
+              tailf:info "WORD;;IP access-list for destination prefixes; name or number (1-99)";
+            }
+          }
+        }
+        container router-id {
+          tailf:info "Select interface to prefer for LDP identifier address";
+          description
+            "Select interface to prefer for LDP identifier address";
+          tailf:cli-sequence-commands {
+            tailf:cli-reset-siblings;
+          }
+          tailf:cli-compact-syntax;
+          leaf interface {
+            tailf:cli-drop-node-name;
+            type string {
+              tailf:info "WORD;;intrace name";
+            }
+          }
+          leaf force {
+            tailf:info "Forcibly change the LDP router id";
+            description
+              "Forcibly change the LDP router id";
+            type empty;
+          }
+        }
+        container tcp {
+          tailf:info "Set TCP parameters for LDP";
+          description
+            "Set TCP parameters for LDP";
+          leaf pak-priority {
+            tailf:info "Set (local) priority for LDP session TCP connection";
+            description
+              "Set (local) priority for LDP session TCP connection";
+            type empty;
+          }
+        }
+      }
+      container prefix-map {
+        tailf:info "Configure MPLS CoS Tag-VC Multi-VC Prefix Map";
+        description
+          "Configure MPLS CoS Tag-VC Multi-VC Prefix Map";
+        tailf:cli-sequence-commands;
+        tailf:cli-compact-syntax;
+        leaf nr {
+          tailf:cli-drop-node-name;
+          tailf:cli-incomplete-command;
+          type uint8 {
+            range "1..255";
+            tailf:info "<1-255>;;prefix-map number";
+          }
+        }
+        leaf access-list {
+          tailf:info "Configure access-list for this prefix-map";
+          description
+            "Configure access-list for this prefix-map";
+          tailf:cli-incomplete-command;
+          type uint8 {
+            range "1..255";
+            tailf:info "<1-255>;;access-list number";
+          }
+        }
+        leaf cos-map {
+          tailf:info "Configure cos-map for this prefix-map";
+          description
+            "Configure cos-map for this prefix-map";
+          type uint8 {
+            range "1..255";
+            tailf:info "<1-255>;;cos-map number";
+          }
+        }
+      }
+      container static {
+        tailf:info "MPLS static application";
+        description
+          "MPLS static application";
+        presence "true";
+        container binding {
+          tailf:info "Establish static label bindings";
+          description
+            "Establish static label bindings";
+          tailf:cli-sequence-commands {
+            tailf:cli-reset-all-siblings;
+          }
+          tailf:cli-compact-syntax;
+          container ipv4 {
+            tailf:info "Bind IPv4 destination with label";
+            description
+              "Bind IPv4 destination with label";
+            tailf:cli-flatten-container;
+            tailf:cli-incomplete-command;
+            tailf:cli-compact-syntax;
+            list global {
+              tailf:cli-drop-node-name;
+              tailf:cli-incomplete-command;
+              tailf:cli-suppress-mode;
+              key "address mask";
+              leaf address {
+                tailf:cli-incomplete-command;
+                type inet:ipv4-address {
+                  tailf:info "A.B.C.D  Destination prefix";
+                }
+              }
+              leaf mask {
+                tailf:cli-incomplete-command;
+                type inet:ipv4-address {
+                  tailf:info "A.B.C.D  Destination prefix mask";
+                }
+              }
+              uses mpls-static-binding-ipv4-grouping;
+            }
+            list vrf {
+              tailf:cli-suppress-mode;
+              tailf:cli-incomplete-command;
+              tailf:cli-diff-dependency "/ios:native/ip/vrf";
+              tailf:cli-diff-dependency "/ios:native/vrf/definition";
+              key "name address mask";
+              leaf name {
+                type string {
+                  tailf:info "WORD;;VPN Routing/Forwarding instance name";
+                }
+              }
+              leaf address {
+                tailf:cli-drop-node-name;
+                tailf:cli-incomplete-command;
+                type inet:ipv4-address {
+                  tailf:info "A.B.C.D  Destination prefix";
+                }
+              }
+              leaf mask {
+                tailf:cli-drop-node-name;
+                tailf:cli-incomplete-command;
+                type inet:ipv4-address {
+                  tailf:info "A.B.C.D  Destination prefix mask";
+                }
+              }
+              uses mpls-static-binding-ipv4-grouping;
+            }
+          }
+        }
+      }
+      container traffic-eng {
+        tailf:info "Configure Traffic Engineering parameters";
+        description
+          "Configure Traffic Engineering parameters";
+        container auto-bw {
+          tailf:info "auto-bw parameters";
+          description
+            "auto-bw parameters";
+          container timers {
+            tailf:info "Enable auto-bw Timers Collection and Application";
+            description
+              "Enable auto-bw Timers Collection and Application";
+            presence "Enable auto-bw Timers Collection and Application";
+            leaf frequency {
+              tailf:info "Interval between auto-bw data collection";
+              description
+                "Interval between auto-bw data collection";
+              type uint32 {
+                tailf:info "<1-604800>;;seconds between auto-bw";
+                range "1..604800";
+              }
+            }
+          }
+        }
+        container auto-tunnel {
+          tailf:info "Configure automatic TE tunnels";
+          description
+            "Configure automatic TE tunnels";
+          container backup {
+            tailf:info "Configure auto-tunnel backup tunnel";
+            description
+              "Configure auto-tunnel backup tunnel";
+            presence "true";
+            container config {
+              tailf:info "Config commands to apply to all backup auto-tunnels";
+              description
+                "Config commands to apply to all backup auto-tunnels";
+              container affinity {
+                tailf:info "desired link attributes for links comprising tunnel";
+                description
+                  "desired link attributes for links comprising tunnel";
+                list aff-val {
+                  tailf:cli-drop-node-name;
+                  tailf:cli-suppress-mode;
+                  key "aff-val";
+                  leaf aff-val {
+                    tailf:info "<0x0-0xFFFFFFFF>;;affinity value";
+                    description
+                      "<0x0-0xFFFFFFFF>;;affinity value";
+                    type string;
+                  }
+                  leaf mask {
+                    tailf:info "mask on desired link attributes";
+                    description
+                      "mask on desired link attributes";
+                    type string {
+                      tailf:info "<0x0-0xFFFFFFFF>;;mask value";
+                    }
+                  }
+                }
+              }
+              container unnumbered-interface {
+                tailf:info "Configure the interface to use for unnumbered";
+                description
+                  "Configure the interface to use for unnumbered";
+                leaf unn-interface {
+                  tailf:info "Virtual ACR interface";
+                  description
+                    "Virtual ACR interface";
+                  tailf:cli-drop-node-name;
+                  type string;
+                }
+                leaf unn-controller {
+                  tailf:info "Telecom-Bus Clock Controller";
+                  description
+                    "Telecom-Bus Clock Controller";
+                  tailf:cli-drop-node-name;
+                  type string;
+                }
+                leaf Tunnel {
+                  tailf:info "Tunnel interface";
+                  description
+                    "Tunnel interface number";
+                  type uint32 {
+                    range "0..2147483647";
+                  }
+                }
+                leaf Tunnel-tp {
+                  tailf:info "MPLS Transport Profile interface";
+                  description
+                    "Tunnel-tp interface number";
+                  type uint16 {
+                    range "0..65535";
+                  }
+                }
+                leaf VPN {
+                  tailf:info "VPN interface";
+                  description
+                    "VPN interface number";
+                  type uint32 {
+                    range "0..2147483647";
+                  }
+                }
+                leaf VirtualPortGroup {
+                  tailf:info "Virtual Port Group";
+                  description
+                    "VirtualPortGroup interface number";
+                  type uint8 {
+                    range "0..31";
+                  }
+                }
+                leaf Vlan {
+                  tailf:info "Catalyst Vlans";
+                  description
+                    "Vlan interface number";
+                  type uint16 {
+                    range "1..4094";
+                  }
+                }
+                leaf vasileft {
+                  tailf:info "VasiLeft interface";
+                  description
+                    "vasileft interface number";
+                  type uint16 {
+                    range "1..2000";
+                  }
+                }
+                leaf vasiright {
+                  tailf:info "VasiRight interface";
+                  description
+                    "vasiright interface number";
+                  type uint16 {
+                    range "1..2000";
+                  }
+                }
+              }
+            }
+            leaf nhop-only {
+              tailf:info "Automatically create n-hop backup tunnels only";
+              description
+                "Automatically create n-hop backup tunnels only";
+              type empty;
+            }
+            container srlg {
+              tailf:info "Shared Risk Link Groups influence backup tunnel path selection";
+              description
+                "Shared Risk Link Groups influence backup tunnel path selection";
+              container exclude {
+                tailf:info "Backup tunnels avoid SRLGs of protected interfaces";
+                description
+                  "Backup tunnels avoid SRLGs of protected interfaces";
+                leaf force {
+                  tailf:info "Backup tunnels MUST not use SRLGs of protected interfaces";
+                  description
+                    "Backup tunnels MUST not use SRLGs of protected interfaces";
+                  type empty;
+                }
+                leaf preferred {
+                  tailf:info "Backup tunnels try to avoid using SRLGs of protected interfaces";
+                  description
+                    "Backup tunnels try to avoid using SRLGs of protected interfaces";
+                  type empty;
+                }
+              }
+            }
+            container timers {
+              tailf:info "Configure timers for backup auto-tunnels";
+              description
+                "Configure timers for backup auto-tunnels";
+              container removal {
+                tailf:info "Configure timer for removal of backup tunnel";
+                description
+                  "Configure timer for removal of backup tunnel";
+                leaf unused {
+                  tailf:info "Configure period to check for removing not in use tunnels";
+                  description
+                    "seconds between scanning to remove not in use tunnels";
+                  type uint32 {
+                    range "0..604800";
+                  }
+                }
+              }
+            }
+            container tunnel-num {
+              tailf:info "Configure tunnel I/F numbers for backup auto-tunnels";
+              description
+                "Configure tunnel I/F numbers for backup auto-tunnels";
+              container min {
+                tailf:info "Configure the starting id-range";
+                description
+                  "Configure the starting id-range";
+                list tnr-range {
+                  tailf:cli-drop-node-name;
+                  tailf:cli-suppress-mode;
+                  key "tnr-range";
+                  leaf tnr-range {
+                    tailf:info "starting tunnel number range";
+                    description
+                      "starting tunnel number range";
+                    type uint16 {
+                      range "0..65535";
+                    }
+                  }
+                  leaf max {
+                    tailf:info "Configure the ending id-range";
+                    description
+                      "Configure the ending id-range";
+                    type empty;
+                  }
+                }
+              }
+            }
+          }
+          container mesh {
+            tailf:info "Automatically create mesh tunnels";
+            description
+              "Automatically create mesh tunnels";
+            presence "true";
+            container tunnel-num {
+              tailf:info "Configure tunnel I/F numbers for mesh auto-tunnels";
+              description
+                "Configure tunnel I/F numbers for mesh auto-tunnels";
+              container min {
+                tailf:info "Configure the starting id-range";
+                description
+                  "Configure the starting id-range";
+                list mesh-range {
+                  tailf:cli-drop-node-name;
+                  tailf:cli-suppress-mode;
+                  key "mesh-range";
+                  leaf mesh-range {
+                    tailf:info "starting tunnel number range";
+                    description
+                      "starting tunnel number range";
+                    type uint16 {
+                      range "0..65535";
+                    }
+                  }
+                  leaf max {
+                    tailf:info "Configure the ending id-range";
+                    description
+                      "Configure the ending id-range";
+                    type empty;
+                  }
+                }
+              }
+            }
+          }
+          container primary {
+            tailf:info "Automatically create one-hop primary tunnels";
+            description
+              "Automatically create one-hop primary tunnels";
+            container config {
+              tailf:info "Config commands to apply to all primary auto-tunnels";
+              description
+                "Config commands to apply to all primary auto-tunnels";
+              container mpls {
+                tailf:info "Configure dynamic MPLS forwarding";
+                description
+                  "Configure dynamic MPLS forwarding";
+                leaf ip {
+                  tailf:info "Configure dynamic MPLS forwarding for ip";
+                  description
+                    "Configure dynamic MPLS forwarding for ip";
+                  type empty;
+                }
+              }
+              container unnumbered-interface {
+                tailf:info "Configure the interface to use for unnumbered";
+                description
+                  "Configure the interface to use for unnumbered";
+                leaf vacr-interface {
+                  tailf:info "Virtual ACR interface";
+                  description
+                    "Virtual ACR interface";
+                  tailf:cli-drop-node-name;
+                  type string;
+                }
+                leaf tbcc-controller {
+                  tailf:info "Telecom-Bus Clock Controller";
+                  description
+                    "Telecom-Bus Clock Controller";
+                  tailf:cli-drop-node-name;
+                  type string;
+                }
+                leaf Tunnel {
+                  tailf:info "Tunnel interface";
+                  description
+                    "Tunnel interface number";
+                  type uint32 {
+                    range "0..2147483647";
+                  }
+                }
+                leaf Tunnel-tp {
+                  tailf:info "MPLS Transport Profile interface";
+                  description
+                    "Tunnel-tp interface number";
+                  type uint16 {
+                    range "0..65535";
+                  }
+                }
+                leaf VPN {
+                  tailf:info "VPN interface";
+                  description
+                    "VPN interface number";
+                  type uint32 {
+                    range "0..2147483647";
+                  }
+                }
+                leaf VirtualPortGroup {
+                  tailf:info "Virtual Port Group";
+                  description
+                    "VirtualPortGroup interface number";
+                  type uint8 {
+                    range "0..31";
+                  }
+                }
+                leaf Vlan {
+                  tailf:info "Catalyst Vlans";
+                  description
+                    "Vlan interface number";
+                  type uint16 {
+                    range "1..4094";
+                  }
+                }
+                leaf vasileft {
+                  tailf:info "VasiLeft interface";
+                  description
+                    "vasileft interface number";
+                  type uint16 {
+                    range "1..2000";
+                  }
+                }
+                leaf vasiright {
+                  tailf:info "VasiRight interface";
+                  description
+                    "vasiright interface number";
+                  type uint16 {
+                    range "1..2000";
+                  }
+                }
+              }
+            }
+            leaf onehop {
+              tailf:info "Automatically create tunnel to all next-hops";
+              description
+                "Automatically create tunnel to all next-hops";
+              type empty;
+            }
+            container timers {
+              tailf:info "Configure timers for primary auto-tunnels";
+              description
+                "Configure timers for primary auto-tunnels";
+              container removal {
+                tailf:info "Configure removal of primary tunnels";
+                description
+                  "Configure removal of primary tunnels";
+                leaf rerouted {
+                  tailf:info "Configure time to remove primary after failure";
+                  description
+                    "seconds how long auto-tunnel primary can stay frr active";
+                  type uint32 {
+                    range "30..604800";
+                  }
+                }
+              }
+            }
+            container tunnel-num {
+              tailf:info "Configure tunnel I/F numbers for primary auto-tunnels";
+              description
+                "Configure tunnel I/F numbers for primary auto-tunnels";
+              container min {
+                tailf:info "Configure the starting id-range";
+                description
+                  "Configure the starting id-range";
+                list tnr-range {
+                  tailf:cli-drop-node-name;
+                  tailf:cli-suppress-mode;
+                  key "tnr-range";
+                  leaf tnr-range {
+                    tailf:info "starting tunnel number range";
+                    description
+                      "starting tunnel number range";
+                    type uint16 {
+                      range "0..65535";
+                    }
+                  }
+                  leaf max {
+                    tailf:info "Configure the ending id-range";
+                    description
+                      "Configure the ending id-range";
+                    type empty;
+                  }
+                }
+              }
+            }
+          }
+        }
+        container ds-te {
+          tailf:info "Configure standard DS-TE parameters";
+          description
+            "Configure standard DS-TE parameters";
+          container bc-model {
+            tailf:info "Configure BC model";
+            description
+              "Configure BC model";
+            leaf mam {
+              tailf:info "BC Maximum allocation model";
+              description
+                "BC Maximum allocation model";
+              type empty;
+            }
+          }
+          container mode {
+            tailf:info "Configure DS-TE migration mode";
+            description
+              "Configure DS-TE migration mode";
+            leaf ietf {
+              tailf:info "Configure DS-TE standard mode";
+              description
+                "Configure DS-TE standard mode";
+              type empty;
+            }
+            leaf migration {
+              tailf:info "Configure DS-TE migration mode";
+              description
+                "Configure DS-TE migration mode";
+              type empty;
+            }
+          }
+          container te-classes {
+            tailf:info "Specify TE-Class parameters";
+            description
+              "Specify TE-Class parameters";
+            tailf:cli-add-mode;
+            tailf:cli-mode-name "config-te-class";
+            presence "true";
+            container te-Mode-config-te-class {
+              tailf:cli-drop-node-name;
+              leaf list {
+                tailf:info "Re-list all the TE-Classes";
+                description
+                  "Re-list all the TE-Classes";
+                type empty;
+              }
+              container te-class {
+                tailf:info "Configure a TE-Class";
+                description
+                  "Configure a TE-Class";
+                list te-idx {
+                  tailf:cli-drop-node-name;
+                  tailf:cli-suppress-mode;
+                  key "te-idx";
+                  leaf te-idx {
+                    tailf:info "Specify the TE-Class index";
+                    description
+                      "Specify the TE-Class index";
+                    type uint8 {
+                      range "0..7";
+                    }
+                  }
+                  leaf class-type {
+                    tailf:info "Specify the Class-Type for this TE-Class";
+                    description
+                      "Specify Class-Type value (0 for Global and 1 for Sub-Pool)";
+                    type uint8 {
+                      range "0..1";
+                    }
+                  }
+                  leaf unused {
+                    tailf:info "Specify that this TE-Class index is unused";
+                    description
+                      "Specify that this TE-Class index is unused";
+                    type empty;
+                  }
+                }
+              }
+            }
+          }
+        }
+        container fast-reroute {
+          tailf:info "fast-reroute parameters";
+          description
+            "fast-reroute parameters";
+          container backup-prot-preempt {
+            tailf:info "Preemption algorithm for backup tunnels";
+            description
+              "Preemption algorithm for backup tunnels";
+            leaf optimize-bw {
+              tailf:info "Reduce bandwidth wastage (default: minimize LSPs preempted)";
+              description
+                "Reduce bandwidth wastage (default: minimize LSPs preempted)";
+              type empty;
+            }
+          }
+          container timers {
+            tailf:info "configure fast-reroute timer";
+            description
+              "configure fast-reroute timer";
+            leaf promotion {
+              tailf:info "Configure how often we scan for LSP backup promotion";
+              description
+                "seconds between promotions (0 disables promotion.)";
+              type uint32 {
+                range "0..604800";
+              }
+            }
+          }
+        }
+        container link-management {
+          tailf:info "Link Management configuration";
+          description
+            "Link Management configuration";
+          container timers {
+            tailf:info "Link Management timers configuration";
+            description
+              "Link Management timers configuration";
+            leaf bandwidth-hold {
+              tailf:info "Link Management bandwidth hold timer";
+              description
+                "Link Management bandwidth hold timer";
+              tailf:cli-full-command;
+              type uint16 {
+                tailf:info "<1-300>;;seconds";
+                range "1..300";
+              }
+            }
+            leaf periodic-flooding {
+              tailf:info "Link Management periodic flooding interval";
+              description
+                "Link Management periodic flooding interval";
+              tailf:cli-full-command;
+              type uint16 {
+                tailf:info "<0-3600>;;seconds";
+                range "0..3600";
+              }
+            }
+          }
+        }
+        container logging {
+          tailf:info "Trap logging configuration";
+          description
+            "Trap logging configuration";
+          container lsp {
+            tailf:info "LSP-specific traps logging configuration";
+            description
+              "LSP-specific traps logging configuration";
+            container path-errors {
+              tailf:info "Log LSP Path Error traps";
+              description
+                "Log LSP Path Error traps";
+              presence "Log LSP Path Error traps";
+              leaf access-list {
+                tailf:cli-drop-node-name;
+                type access-list-type;
+              }
+            }
+            container preemption {
+              tailf:info "Log LSP Preemption traps";
+              description
+                "Log LSP Preemption traps";
+              presence "Log LSP Preemption traps";
+              leaf access-list {
+                tailf:cli-drop-node-name;
+                type access-list-type;
+              }
+            }
+            container reservation-errors {
+              tailf:info "Log LSP Reservation Error traps";
+              description
+                "Log LSP Reservation Error traps";
+              presence "Log LSP Reservation Error traps";
+              leaf access-list {
+                tailf:cli-drop-node-name;
+                type access-list-type;
+              }
+            }
+            container setups {
+              tailf:info "Log LSP Establishment Traps";
+              description
+                "Log LSP Establishment Traps";
+              presence "Log LSP Establishment Traps";
+              leaf access-list {
+                tailf:cli-drop-node-name;
+                type access-list-type;
+              }
+            }
+            container teardowns {
+              tailf:info "Log LSP Teardown Traps";
+              description
+                "Log LSP Teardown Traps";
+              presence "Log LSP Teardown Traps";
+              leaf access-list {
+                tailf:cli-drop-node-name;
+                type access-list-type;
+              }
+            }
+          }
+          container tunnel {
+            tailf:info "Tunnel-specific traps logging configuration";
+            description
+              "Tunnel-specific traps logging configuration";
+            container lsp-selection {
+              tailf:info "Log Tunnel LSP Selection traps";
+              description
+                "Log Tunnel LSP Selection traps";
+              presence "Log Tunnel LSP Selection traps";
+              leaf access-list {
+                tailf:cli-drop-node-name;
+                type access-list-type;
+              }
+            }
+            container path {
+              tailf:info "Log Tunnel Path-related traps";
+              description
+                "Log Tunnel Path-related traps";
+              container change {
+                tailf:info "Log Tunnel Path change traps";
+                description
+                  "Log Tunnel Path change traps";
+                presence "Log Tunnel Path change traps";
+                leaf access-list {
+                  tailf:cli-drop-node-name;
+                  type access-list-type;
+                }
+              }
+            }
+          }
+        }
+        container lsp {
+          tailf:info "Configure LSP parameters";
+          description
+            "Configure LSP parameters";
+          list attributes {
+            tailf:info "Configure LSP attributes";
+            description
+              "Configure LSP attributes";
+            tailf:cli-mode-name "config-lsp-attr";
+            key "lsp-att";
+            leaf lsp-att {
+              tailf:info "Name of LSP attribute list";
+              description
+                "Name of LSP attribute list";
+              type string;
+            }
+            container flag-Mode-config-lsp-attr {
+              tailf:cli-drop-node-name;
+              container affinity {
+                tailf:info "Specify attribute flags for links comprising LSP";
+                description
+                  "Specify attribute flags for links comprising LSP";
+                list fl-val {
+                  tailf:cli-drop-node-name;
+                  tailf:cli-suppress-mode;
+                  key "fl-val";
+                  leaf fl-val {
+                    tailf:info "<0x0-0xFFFFFFFF>;;affinity value";
+                    description
+                      "<0x0-0xFFFFFFFF>;;affinity value";
+                    type string;
+                  }
+                  leaf mask {
+                    tailf:info "mask on desired link attributes";
+                    description
+                      "mask on desired link attributes";
+                    type empty;
+                  }
+                }
+              }
+              container auto-bw {
+                tailf:info "Specify automatic bandwidth configuration";
+                description
+                  "Specify automatic bandwidth configuration";
+                presence "true";
+                leaf adjustment-threshold {
+                  tailf:info "Set the bandwidth change threshold to trigger adjustment";
+                  description
+                    "Percent bandwidth change to trigger adjustment";
+                  type uint8 {
+                    range "1..99";
+                  }
+                }
+                leaf collect-bw {
+                  tailf:info "Just collect bandwidth info";
+                  description
+                    "Just collect bandwidth info";
+                  type empty;
+                }
+                leaf frequency {
+                  tailf:info "frequency to change LSP bandwidth";
+                  description
+                    "seconds between applying auto-bw";
+                  type uint32 {
+                    range "300..604800";
+                  }
+                }
+                leaf max-bw {
+                  tailf:info "Set the Maximum Bandwidth for auto-bw";
+                  description
+                    "Maximum bandwidth to apply (kbps)";
+                  type uint32 {
+                    range "0..4294967295";
+                  }
+                }
+                leaf min-bw {
+                  tailf:info "Set the minimum bandwidth for auto-bw";
+                  description
+                    "Minimum bandwidth to apply (kbps)";
+                  type uint32 {
+                    range "0..4294967295";
+                  }
+                }
+                leaf overflow-limit {
+                  tailf:info "Percent bandwidth change to trigger adjustment";
+                  description
+                    "Number of consecutive samples exceeding threshold";
+                  type uint8 {
+                    range "1..10";
+                  }
+                }
+              }
+              container bandwidth {
+                tailf:info "Specify LSP bandwidth";
+                description
+                  "Specify LSP bandwidth";
+                leaf bnd-kbp {
+                  tailf:info "bandwidth requirement in kbps";
+                  description
+                    "bandwidth requirement in kbps";
+                  tailf:cli-drop-node-name;
+                  type uint32 {
+                    range "0..4294967295";
+                  }
+                }
+                leaf sub-pool {
+                  tailf:info "use sub-pool bandwidth";
+                  description
+                    "bandwidth requirement in kbps";
+                  type uint32 {
+                    range "1..4294967295";
+                  }
+                }
+              }
+              leaf list {
+                tailf:info "Re-list all of the attribute list entries";
+                description
+                  "Re-list all of the attribute list entries";
+                type empty;
+              }
+              leaf lockdown {
+                tailf:info "Lockdown the LSP--disable reoptimization";
+                description
+                  "Lockdown the LSP--disable reoptimization";
+                type empty;
+              }
+              container priority {
+                description
+                  "Specify LSP priority";
+                list lss-pri {
+                  tailf:info "Specify LSP priority";
+                  tailf:cli-drop-node-name;
+                  tailf:cli-suppress-mode;
+                  key "lss-pri";
+                  leaf lss-pri {
+                    tailf:info "setup priority";
+                    description
+                      "setup priority";
+                    type uint8 {
+                      range "0..7";
+                    }
+                  }
+                  leaf lss-pri0 {
+                    tailf:info "hold priority";
+                    description
+                      "hold priority";
+                    tailf:cli-drop-node-name;
+                    type uint8 {
+                      range "0..7";
+                    }
+                  }
+                }
+              }
+              container protection {
+                tailf:info "Enable failure protection";
+                description
+                  "Enable failure protection";
+                presence "true";
+                container fast-reroute {
+                  tailf:info "Enable fast-reroute failure protection";
+                  description
+                    "Enable fast-reroute failure protection";
+                  presence "true";
+                  leaf bw-protect {
+                    tailf:info "Enable BW protection";
+                    description
+                      "Enable BW protection";
+                    type empty;
+                  }
+                }
+              }
+              leaf record-route {
+                tailf:info "Record the route used by the LSP";
+                description
+                  "Record the route used by the LSP";
+                type empty;
+              }
+            }
+          }
+        }
+        leaf nsr {
+          tailf:info "TE NSR configuration";
+          description
+            "TE NSR configuration";
+          type empty;
+        }
+        container path-option {
+          tailf:info "Configure path-option";
+          description
+            "Configure path-option";
+          container list {
+            tailf:info "Configure path-option list";
+            description
+              "Configure path-option list";
+            list identifier {
+              tailf:info "Specify path-option list by number";
+              description
+                "Specify path-option list by number";
+              tailf:cli-mode-name "cfg-pathoption-list";
+              key "po-num";
+              leaf po-num {
+                tailf:info "Enter number";
+                description
+                  "Enter number";
+                type uint16 {
+                  range "1..65535";
+                }
+              }
+            }
+            list name {
+              tailf:info "Specify path-option list by name";
+              description
+                "Specify path-option list by name";
+              tailf:cli-mode-name "cfg-pathoption-list";
+              key "spo-name";
+              leaf spo-name {
+                tailf:info "Enter name";
+                description
+                  "Enter name";
+                type string;
+              }
+            }
+          }
+        }
+        container path-selection {
+          tailf:info "Path Selection Configuration";
+          description
+            "Path Selection Configuration";
+          leaf metric {
+            tailf:info "Metric Type Configuration";
+            description
+              "Metric Type Configuration";
+            tailf:cli-full-command;
+            type enumeration {
+              enum "igp" {
+                tailf:info "Use IGP metric";
+              }
+              enum "te" {
+                tailf:info "User TE metric";
+              }
+            }
+          }
+          container overload {
+            tailf:info "Overload Node Configuration";
+            description
+              "Overload Node Configuration";
+            container allow {
+              tailf:info "Allow overloaded nodes in CSPFs";
+              description
+                "Allow overloaded nodes in CSPFs";
+              tailf:cli-sequence-commands;
+              leaf head {
+                tailf:info "Allow overloaded head node in TE CSPF";
+                description
+                  "Allow overloaded head node in TE CSPF";
+                tailf:cli-optional-in-sequence;
+                tailf:cli-reset-container;
+                type empty;
+              }
+              leaf middle {
+                tailf:info "Allow overloaded middle node in TE CSPF";
+                description
+                  "Allow overloaded middle node in TE CSPF";
+                tailf:cli-optional-in-sequence;
+                tailf:cli-reset-container;
+                type empty;
+              }
+              leaf tail {
+                tailf:info "Allow overloaded middle node in TE CSPF";
+                description
+                  "Allow overloaded middle node in TE CSPF";
+                tailf:cli-optional-in-sequence;
+                tailf:cli-reset-container;
+                type empty;
+              }
+            }
+          }
+        }
+        container reoptimize {
+          tailf:info "Reoptimization parameters";
+          description
+            "Reoptimization parameters";
+          container events {
+            tailf:info "Reoptimization triggers";
+            description
+              "Reoptimization triggers";
+            leaf link-up {
+              tailf:info "Reoptimize tunnels on link up events";
+              description
+                "Reoptimize tunnels on link up events";
+              type empty;
+            }
+          }
+          container timers {
+            tailf:info "Reoptimization timers";
+            description
+              "Reoptimization timers";
+            container delay {
+              tailf:info "Delay reoptimization action";
+              description
+                "Delay reoptimization action";
+              leaf cleanup {
+                tailf:info "Delay cleanup of reoptimized LSP";
+                description
+                  "Delay cleanup of reoptimized LSP";
+                tailf:cli-full-command;
+                type uint8 {
+                  range "0..60";
+                  tailf:info "<0-60>;;seconds to delay cleanup of replaced tunnel LSP";
+                }
+              }
+              leaf installation {
+                tailf:info "Delay replacement of current LSP by reoptimized LSP";
+                description
+                  "Delay replacement of current LSP by reoptimized LSP";
+                tailf:cli-full-command;
+                type uint16 {
+                  range "0..3600";
+                  tailf:info "<0-3600>;;seconds to delay replacement of tunnel LSP";
+                }
+              }
+            }
+            leaf frequency {
+              tailf:info "Interval between reoptimization scans";
+              description
+                "Interval between reoptimization scans";
+              tailf:cli-full-command;
+              type uint32 {
+                tailf:info "<0-604800>;;seconds between reoptimizations (0 disables reoptimization)";
+                range "0..604800";
+              }
+            }
+          }
+        }
+        container signalling {
+          tailf:info "Traffic Engineering Signalling Parameters";
+          description
+            "Traffic Engineering Signalling Parameters";
+          container advertise {
+            tailf:info "Signalling advertisement parameters";
+            description
+              "Signalling advertisement parameters";
+            container implicit-null {
+              tailf:info "Use MPLS encoding for Implicit-Null Label in signalling messages";
+              description
+                "Use MPLS encoding for Implicit-Null Label in signalling messages";
+              presence "Use MPLS encoding for Implicit-Null Label in signalling messages";
+              leaf nr {
+                tailf:cli-drop-node-name;
+                type uint8 {
+                  range "1..99";
+                  tailf:info "<1-99>;;Number of IP access-list to determine applicable signalling peers";
+                }
+              }
+            }
+          }
+          container forwarding {
+            tailf:info "Control interaction of LSP signalling and LFIB maintenance";
+            description
+              "Control interaction of LSP signalling and LFIB maintenance";
+            leaf sync {
+              tailf:info "Program linecard LFIBs before signalling LSP label upstream";
+              description
+                "Program linecard LFIBs before signalling LSP label upstream";
+              type empty;
+            }
+          }
+          container restart {
+            tailf:info "Signalling restart parameters";
+            description
+              "Signalling restart parameters";
+            container neighbors {
+              tailf:info "Identify signalling restart capable neighbors";
+              description
+                "Identify signalling restart capable neighbors";
+              presence "Identify signalling restart capable neighbors";
+              leaf nr {
+                tailf:cli-drop-node-name;
+                type uint8 {
+                  range "1..99";
+                  tailf:info "<1-99>;;Number of IP access-list to determine applicable signalling peers";
+                }
+              }
+            }
+          }
+        }
+        container topology {
+          tailf:info "Topology Database Configuration";
+          description
+            "Topology Database Configuration";
+          container holddown {
+            tailf:info "Topology Database hold down timers";
+            description
+              "Topology Database hold down timers";
+            leaf sigerr {
+              tailf:info "Link hold down time for signalling errors";
+              description
+                "Link hold down time for signalling errors";
+              type uint16 {
+                range "0..300";
+                tailf:info "<0-300>;;Hold down time in seconds";
+              }
+            }
+          }
+        }
+        container trace {
+          tailf:info "Trace configuration";
+          description
+            "Trace configuration";
+          container buffer-size {
+            tailf:info "Trace buffer size configuration";
+            description
+              "Trace buffer size configuration";
+            leaf error {
+              tailf:info "Error trace buffer size in kB (default 32kB)";
+              description
+                "trace error buffer size in kB (default 32kB)";
+              type uint16 {
+                range "1..500";
+              }
+            }
+            leaf event {
+              tailf:info "Event trace buffer size in kB (default 1% of system memory)";
+              description
+                "trace event buffer size in kB (default 1% of system memory)";
+              type uint16 {
+                range "1..2500";
+              }
+            }
+            leaf warning {
+              tailf:info "Warning trace buffer size in kB (default 32kB)";
+              description
+                "trace warning buffer size in kB (default 32kB)";
+              type uint8 {
+                range "1..250";
+              }
+            }
+          }
+        }
+        leaf tunnels {
+          tailf:info "Traffic Engineering tunnels";
+          description
+            "Traffic Engineering tunnels";
+          tailf:cli-full-command;
+          type empty;
+        }
+      }
+      container tp {
+        tailf:info "Configure MPLS Transport Profile parameters";
+        description
+          "Configure MPLS Transport Profile parameters";
+        presence "true";
+      }
+    }
+    container router {
+      tailf:info "Enable a routing process";
+      description
+        "Enable a routing process";
+      list bgp {
+        tailf:info "Border Gateway Protocol (BGP)";
+        description
+          "Border Gateway Protocol (BGP)";
+        tailf:cli-mode-name "config-router";
+        tailf:cli-diff-dependency "/ios:native/vrf/definition";
+        tailf:cli-diff-dependency "/ios:native/ip/vrf";
+        key "as-no";
+        max-elements "1";
+        leaf as-no {
+          tailf:cli-suppress-range;
+          type bgp-as-number-type;
+        }
+        uses bgp-address-family-grouping;
+        container address-family {
+          tailf:info "Enter Address Family command mode";
+          description
+            "Enter Address Family command mode";
+          container no-vrf {
+            tailf:cli-drop-node-name;
+            list ipv4 {
+              tailf:info "Address family";
+              description
+                "Address family";
+              tailf:cli-full-command;
+              tailf:cli-delete-when-empty;
+              tailf:cli-exit-command "exit-address-family" {
+                tailf:info "Exit from Address Family configuration mode";
+              }
+              key "unicast-multicast";
+              leaf unicast-multicast {
+                type enumeration {
+                  enum "unicast" {
+                    tailf:code-name "ipv4_unicast";
+                    tailf:info "Address Family modifier";
+                  }
+                  enum "multicast" {
+                    tailf:code-name "ipv4_multicast";
+                    tailf:info "Address Family modifier";
+                  }
+                  enum "mdt" {
+                    tailf:info "IPv4 multicast distribution tree (MDT)";
+                  }
+                  enum "tunnel" {
+                    tailf:info "IPv4 tunnel address prefixes.";
+                  }
+                  enum "labeled-unicast" {
+                    tailf:info "IPv4 labeled-unicast address prefixes";
+                  }
+                  enum "flowspec" {
+                    tailf:info "IPv4 flowspec";
+                  }
+                  enum "mvpn" {
+                    tailf:info "IPv4 mvpn";
+                  }
+                }
+                tailf:key-default "unicast";
+              }
+              uses bgp-address-family-grouping;
+            }
+          }
+          container with-vrf {
+            tailf:cli-drop-node-name;
+            list ipv4 {
+              tailf:info "Address family";
+              description
+                "Address family";
+              tailf:cli-suppress-mode;
+              tailf:cli-delete-when-empty;
+              tailf:cli-incomplete-command;
+              key "unicast-multicast";
+              leaf unicast-multicast {
+                type enumeration {
+                  enum "unicast" {
+                    tailf:code-name "ipv4_unicast";
+                    tailf:info "Address Family modifier";
+                  }
+                  enum "multicast" {
+                    tailf:code-name "ipv4_multicast";
+                    tailf:info "Address Family modifier";
+                  }
+                  enum "mdt" {
+                    tailf:info "IPv4 multicast distribution tree (MDT)";
+                  }
+                  enum "tunnel" {
+                    tailf:info "IPv4 tunnel address prefixes.";
+                  }
+                  enum "labeled-unicast" {
+                    tailf:info "IPv4 labeled-unicast address prefixes";
+                  }
+                  enum "flowspec" {
+                    tailf:info "IPv4 flowspec";
+                  }
+                  enum "mvpn" {
+                    tailf:info "IPv4 mvpn";
+                  }
+                }
+                tailf:key-default "unicast";
+              }
+              list vrf {
+                tailf:cli-mode-name "config-router-af";
+                tailf:cli-full-command;
+                tailf:cli-diff-dependency "/ios:native/ip/vrf";
+                tailf:cli-diff-dependency "/ios:native/vrf/definition";
+                tailf:cli-exit-command "exit-address-family" {
+                  tailf:info "Exit from Address Family configuration mode";
+                }
+                key "name";
+                leaf name {
+                  type string {
+                    tailf:info "WORD;;VPN Routing/Forwarding instance name";
+                  }
+                }
+                uses bgp-address-family-grouping;
+              }
+            }
+          }
+          list ipv6 {
+            tailf:info "Address family";
+            description
+              "Address family";
+            tailf:cli-suppress-mode;
+            tailf:cli-delete-when-empty;
+            tailf:cli-full-command;
+            tailf:cli-exit-command "exit-address-family" {
+              tailf:info "Exit from Address Family configuration mode";
+            }
+            key "unicast-multicast";
+            leaf unicast-multicast {
+              type enumeration {
+                enum "unicast" {
+                  tailf:code-name "ipv6_unicast";
+                  tailf:info "Address Family modifier";
+                }
+                enum "multicast" {
+                  tailf:code-name "ipv6_multicast";
+                  tailf:info "Address Family modifier";
+                }
+                enum "mdt" {
+                  tailf:info "IPv6 multicast distribution tree (MDT)";
+                }
+                enum "flowspec" {
+                  tailf:info "IPv6 flowspec";
+                }
+                enum "mvpn" {
+                  tailf:info "IPv6 mvpn";
+                }
+              }
+              tailf:key-default "unicast";
+            }
+            list vrf {
+              tailf:cli-full-command;
+              tailf:cli-diff-dependency "/ios:native/vrf/definition";
+              tailf:cli-exit-command "exit-address-family" {
+                tailf:info "Exit from Address Family configuration mode";
+              }
+              key "name";
+              leaf name {
+                type string {
+                  tailf:info "WORD;;VPN Routing/Forwarding instance name";
+                }
+              }
+              uses bgp-address-family-grouping;
+            }
+            uses bgp-address-family-grouping;
+          }
+          list vpnv4 {
+            tailf:info "Address family";
+            description
+              "Address family";
+            tailf:cli-exit-command "exit-address-family" {
+              tailf:info "Exit from Address Family configuration mode";
+            }
+            key "unicast-multicast";
+            leaf unicast-multicast {
+              type enumeration {
+                enum "unicast" {
+                  tailf:code-name "vpnv4_unicast";
+                  tailf:info "Address Family modifier";
+                }
+              }
+              tailf:key-default "unicast";
+            }
+            uses bgp-address-family-grouping;
+          }
+          list vpnv6 {
+            tailf:info "Address family";
+            description
+              "Address family";
+            tailf:cli-exit-command "exit-address-family" {
+              tailf:info "Exit from Address Family configuration mode";
+            }
+            key "unicast-multicast";
+            leaf unicast-multicast {
+              type enumeration {
+                enum "unicast" {
+                  tailf:code-name "vpnv6_unicast";
+                  tailf:info "Address Family modifier";
+                }
+              }
+              tailf:key-default "unicast";
+            }
+            uses bgp-address-family-grouping;
+          }
+          list nsap {
+            tailf:info "Address family";
+            description
+              "Address family";
+            tailf:cli-exit-command "exit-address-family" {
+              tailf:info "Exit from Address Family configuration mode";
+            }
+            key "unicast-multicast";
+            leaf unicast-multicast {
+              type enumeration {
+                enum "unicast" {
+                  tailf:code-name "nsap_unicast";
+                  tailf:info "Address Family modifier";
+                }
+              }
+              tailf:key-default "unicast";
+            }
+            uses bgp-address-family-grouping;
+          }
+          list l2vpn {
+            tailf:info "Address family";
+            description
+              "Address family";
+            tailf:cli-exit-command "exit-address-family" {
+              tailf:info "Exit from Address Family configuration mode";
+            }
+            key "evpn_vpls";
+            leaf evpn_vpls {
+              type enumeration {
+                enum "evpn" {
+                  tailf:code-name "l2vpn_evpn";
+                  tailf:info "Address Family modifier";
+                }
+                enum "vpls" {
+                  tailf:code-name "l2vpn_vpls";
+                  tailf:info "Address Family modifier";
+                }
+              }
+              tailf:key-default "evpn";
+            }
+            uses bgp-address-family-grouping;
+          }
+          list rtfilter {
+            tailf:info "Address family";
+            description
+              "Address family";
+            tailf:cli-exit-command "exit-address-family" {
+              tailf:info "Exit from Address Family configuration mode";
+            }
+            key "unicast-multicast";
+            leaf unicast-multicast {
+              type enumeration {
+                enum "unicast" {
+                  tailf:code-name "rtfilter_unicast";
+                  tailf:info "Address Family modifier";
+                }
+              }
+              tailf:key-default "unicast";
+            }
+            uses bgp-address-family-grouping;
+          }
+        }
+        container template {
+          tailf:info "Enter template command mode";
+          description
+            "Enter template command mode";
+          list peer-policy {
+            tailf:info "Template configuration for policy parameters";
+            description
+              "Template configuration for policy parameters";
+            tailf:cli-mode-name "config-router-ptmp";
+            tailf:cli-exit-command "exit-peer-policy" {
+              tailf:info "Exit from template configuration mode";
+            }
+            key "name";
+            leaf name {
+              type string {
+                tailf:info "WORD;;Name of peer-policy template";
+              }
+            }
+            list route-map {
+              tailf:info "Apply route map to neighbor";
+              description
+                "Apply route map to neighbor";
+              tailf:cli-suppress-mode;
+              key "name";
+              leaf name {
+                type string {
+                  tailf:info "WORD;;Name of route map";
+                }
+              }
+              leaf in {
+                tailf:info "Apply map to incoming routes";
+                description
+                  "Apply map to incoming routes";
+                type empty;
+              }
+              leaf out {
+                tailf:info "Apply map to outgoing routes";
+                description
+                  "Apply map to outgong routes";
+                type empty;
+              }
+            }
+          }
+          list peer-session {
+            tailf:info "Template configuration for session parameters";
+            description
+              "Template configuration for session parameters";
+            tailf:cli-exit-command "exit-peer-session" {
+              tailf:info "Exit from template configuration mode";
+            }
+            key "name";
+            leaf name {
+              type string {
+                tailf:info "WORD;;Name of peer-session template";
+              }
+            }
+          }
+        }
+      }
+      list ospfv3 {
+        tailf:cli-mode-name "config-router";
+        tailf:info "OSPFv3";
+        description
+          "OSPFv3";
+        key "id";
+        leaf id {
+          tailf:cli-suppress-range;
+          type uint16 {
+            range "1..65535";
+            tailf:info "<1-65535>;;Process ID";
+          }
+        }
+        uses ospf-ospfv3-common-grouping;
+        uses ospfv3-grouping;
+        container address-family {
+          tailf:info "Enter Address Family command mode";
+          description
+            "Enter Address Family command mode";
+          container ipv4 {
+            tailf:info "IPv4 Address family";
+            description
+              "IPv4 Address family";
+            container unicast {
+              tailf:info "Address Family Modifier";
+              description
+                "Address Family Modifier";
+              tailf:cli-add-mode;
+              tailf:cli-mode-name "config-router-af";
+              tailf:cli-exit-command "exit-address-family" {
+                tailf:info "Exit from Address Family configuration mode";
+              }
+              presence "true";
+              uses ospf-ospfv3-common-grouping;
+              uses ospf-ospfv3-common-address-family-grouping;
+              uses ospfv3-address-family-grouping;
+            }
+            list vrf {
+              tailf:info "Specify parameters for a VPN Routing/Forwarding instance";
+              description
+                "Specify parameters for a VPN Routing/Forwarding instance";
+              tailf:cli-diff-dependency "/ios:native/ip/vrf";
+              tailf:cli-diff-dependency "/ios:native/vrf/definition";
+              tailf:cli-mode-name "config-router-af";
+              tailf:cli-exit-command "exit-address-family" {
+                tailf:info "Exit from Address Family configuration mode";
+              }
+              key "name";
+              leaf name {
+                type string {
+                  tailf:info "WORD;;VPN Routing/Forwarding instance name";
+                }
+              }
+              uses ospf-ospfv3-common-grouping;
+              uses ospf-ospfv3-common-address-family-grouping;
+              uses ospfv3-address-family-grouping;
+            }
+          }
+          container ipv6 {
+            tailf:info "IPv6 Address family";
+            description
+              "IPv6 Address family";
+            container unicast {
+              tailf:cli-add-mode;
+              tailf:cli-mode-name "config-router-af";
+              tailf:info "Address Family Modifier";
+              tailf:cli-exit-command "exit-address-family" {
+                tailf:info "Exit from Address Family configuration mode";
+              }
+              presence "true";
+              uses ospf-ospfv3-common-grouping;
+              uses ospf-ospfv3-common-address-family-grouping;
+              uses ospfv3-address-family-grouping;
+            }
+            list vrf {
+              tailf:info "Specify parameters for a VPN Routing/Forwarding instance";
+              description
+                "Specify parameters for a VPN Routing/Forwarding instance";
+              tailf:cli-diff-dependency "/ios:native/ip/vrf";
+              tailf:cli-diff-dependency "/ios:native/vrf/definition";
+              tailf:cli-mode-name "config-router-af";
+              tailf:cli-exit-command "exit-address-family" {
+                tailf:info "Exit from Address Family configuration mode";
+              }
+              key "name";
+              leaf name {
+                type string {
+                  tailf:info "WORD;;VPN Routing/Forwarding instance name";
+                }
+              }
+              uses ospf-ospfv3-common-grouping;
+              uses ospf-ospfv3-common-address-family-grouping;
+              uses ospfv3-address-family-grouping;
+            }
+            uses ospfv3-af-ipv6-summary-prefix-grouping;
+          }
+        }
+      }
+      list ospf {
+        tailf:cli-mode-name "config-router";
+        tailf:info "Open Shortest Path First (OSPF)";
+        description
+          "Open Shortest Path First (OSPF)";
+        key "id";
+        leaf id {
+          tailf:cli-suppress-range;
+          type uint16 {
+            range "1..65535";
+            tailf:info "<1-65535>;;Process ID";
+          }
+        }
+        leaf vrf {
+          tailf:info "VPN Routing/Forwarding Instance";
+          description
+            "VPN Routing/Forwarding Instance";
+          tailf:cli-full-command;
+          tailf:cli-hide-in-submode;
+          tailf:cli-diff-dependency "/ios:native/ip/vrf";
+          tailf:cli-diff-dependency "/ios:native/vrf/definition";
+          type string {
+            tailf:info "WORD;;VPN Routing/Forwarding Instance (VRF) name";
+          }
+        }
+        container address-family {
+          tailf:info "Enter Address Family command mode";
+          description
+            "Enter Address Family command mode";
+          container ipv4_1 {
+            tailf:cli-drop-node-name;
+            container ipv4 {
+              tailf:info "Address family";
+              description
+                "Address family";
+              tailf:cli-add-mode;
+              tailf:cli-mode-name "config-router-af";
+              tailf:cli-full-command;
+              uses ospf-address-family-grouping;
+            }
+          }
+          container ipv4 {
+            tailf:info "Address family";
+            description
+              "Address family";
+            container unicast {
+              tailf:info "Address Family Modifier";
+              description
+                "Address Family Modifier";
+              tailf:cli-add-mode;
+              tailf:cli-mode-name "config-router-af";
+              tailf:cli-full-command;
+              uses ospf-address-family-grouping;
+            }
+            container multicast {
+              tailf:info "Address Family Modifier";
+              description
+                "Address Family Modifier";
+              tailf:cli-add-mode;
+              tailf:cli-mode-name "config-router-af";
+              tailf:cli-full-command;
+              uses ospf-address-family-grouping;
+            }
+          }
+        }
+        uses ospf-ospfv3-common-grouping;
+        uses ospf-ospfv3-common-address-family-grouping;
+        uses distribute-list-grouping;
+        container domain-id {
+          tailf:info "OSPF domain-id";
+          description
+            "OSPF domain-id";
+          choice domain-id-choice {
+            leaf ip-format {
+              tailf:cli-drop-node-name;
+              type inet:ipv4-address {
+                tailf:info "A.B.C.D;;OSPF domain ID in IP address format";
+              }
+            }
+            container ip-format-secondary {
+              tailf:cli-drop-node-name;
+              tailf:cli-compact-syntax;
+              tailf:cli-sequence-commands;
+              leaf ip {
+                tailf:cli-drop-node-name;
+                type inet:ipv4-address {
+                  tailf:info "A.B.C.D;;OSPF domain ID in IP address format";
+                }
+              }
+              leaf secondary {
+                tailf:info "Secondary Domain-ID";
+                description
+                  "Secondary Domain-ID";
+                type empty;
+              }
+            }
+            leaf Null {
+              tailf:info "Null Domain-ID";
+              description
+                "Null Domain-ID";
+              tailf:cli-full-command;
+              type empty;
+            }
+            container type {
+              tailf:info "OSPF domain ID type in Hex format";
+              description
+                "OSPF domain ID type in Hex format";
+              tailf:cli-sequence-commands;
+              tailf:cli-compact-syntax;
+              leaf type-leaf {
+                tailf:cli-drop-node-name;
+                tailf:cli-incomplete-command;
+                type enumeration {
+                  enum "0005" {
+                    tailf:info "Type 0x0005";
+                  }
+                  enum "0105" {
+                    tailf:info "Type 0x0105";
+                  }
+                  enum "0205" {
+                    tailf:info "Type 0x0205";
+                  }
+                  enum "8005" {
+                    tailf:info "Type 0x8005";
+                  }
+                }
+              }
+              leaf value {
+                tailf:info "OSPF domain ID value in Hex format";
+                description
+                  "OSPF domain ID value in Hex format";
+                type string {
+                  tailf:info "Hex-data;;OSPF domain ID ext. community value in Hex";
+                  pattern "[0-9a-fA-F]{12}";
+                }
+              }
+            }
+          }
+        }
+        leaf domain-tag {
+          tailf:info "OSPF domain-tag";
+          description
+            "OSPF domain-tag";
+          tailf:cli-full-command;
+          type uint32 {
+            range "1 .. 4294967295";
+            tailf:info "<1-4294967295>;;OSPF domain tag - 32-bit value";
+          }
+        }
+        container fast-reroute {
+          tailf:info "LFA FastReroute parameters";
+          description
+            "LFA FastReroute parameters";
+          leaf keep-all-paths {
+            tailf:info "Keep LFA FRR audit trail";
+            description
+              "Keep LFA FRR audit trail";
+            tailf:cli-full-command;
+            type empty;
+          }
+          container per-prefix {
+            tailf:info "Per-prefix LFA FRR parameters";
+            description
+              "Per-prefix LFA FRR parameters";
+            container enable {
+              tailf:info "Enable LFA Fast Reroute";
+              description
+                "Enable LFA Fast Reroute";
+              tailf:cli-compact-syntax;
+              leaf area {
+                tailf:info "Area to enable LFA FRR in";
+                description
+                  "Area to enable LFA FRR in";
+                tailf:cli-incomplete-command;
+                type ospf-area-type;
+              }
+              leaf prefix-priority {
+                tailf:info "Priority of prefixes to be protected";
+                description
+                  "Priority of prefixes to be protected";
+                type enumeration {
+                  enum "high" {
+                    tailf:info "High priority prefixes";
+                  }
+                  enum "low" {
+                    tailf:info "Low priority prefixes";
+                  }
+                }
+              }
+            }
+            container remote-lfa {
+              tailf:info "Remote LFA FastReroute parameters";
+              description
+                "Remote LFA FastReroute parameters";
+              leaf area {
+                tailf:info "Area for remote LFA command";
+                description
+                  "Area for remote LFA command";
+                tailf:cli-incomplete-command;
+                type ospf-area-type;
+              }
+              leaf maximum-cost {
+                tailf:info "Maximum distance to tunnel endpoint";
+                description
+                  "Maximum distance to tunnel endpoint";
+                tailf:cli-full-command;
+                type uint32 {
+                  tailf:info "<1-16777214>;;Value of the maximum distance to tunnel endpoint";
+                  range "1..16777214";
+                }
+              }
+              leaf tunnel {
+                tailf:info "Remote LFA tunnel type";
+                description
+                  "Remote LFA tunnel type";
+                tailf:cli-full-command;
+                type enumeration {
+                  enum "mpls-ldp" {
+                    tailf:info "Enable remote LFA tunneling via MPLS";
+                  }
+                }
+              }
+            }
+            container tie-break {
+              tailf:info "LFA FRR repair path selection policy tiebreaks";
+              description
+                "LFA FRR repair path selection policy tiebreaks";
+              container broadcast-interface-disjoint {
+                tailf:info "Interface protection attribute";
+                description
+                  "Interface protection attribute";
+                tailf:cli-compact-syntax;
+                uses tie-break-index;
+              }
+              container downstream {
+                tailf:info "Downstream repair path attribute";
+                description
+                  "Downstream repair path attribute";
+                tailf:cli-compact-syntax;
+                uses tie-break-index;
+              }
+              container linecard-disjoint {
+                tailf:info "Line card protection attribute";
+                description
+                  "Line card protection attribute";
+                tailf:cli-compact-syntax;
+                uses tie-break-index;
+              }
+              container lowest-metric {
+                tailf:info "Lowest metric repair path attribute";
+                description
+                  "Lowest metric repair path attribute";
+                tailf:cli-compact-syntax;
+                uses tie-break-index;
+              }
+              container node-protecting {
+                tailf:info "Node protecting repair path attribute";
+                description
+                  "Node protecting repair path attribute";
+                tailf:cli-compact-syntax;
+                uses tie-break-index;
+              }
+              container primary-path {
+                tailf:info "Equal cost multipath attribute";
+                description
+                  "Equal cost multipath attribute";
+                tailf:cli-compact-syntax;
+                uses tie-break-index;
+              }
+              container secondary-path {
+                tailf:info "Not-equal cost multipath attribute";
+                description
+                  "Not-equal cost multipath attribute";
+                tailf:cli-compact-syntax;
+                uses tie-break-index;
+              }
+              container srlg {
+                tailf:info "Shared risk link group attribute";
+                description
+                  "Shared risk link group attribute";
+                tailf:cli-compact-syntax;
+                uses tie-break-index;
+              }
+            }
+          }
+        }
+        container graceful-restart {
+          tailf:info "Graceful-restart options";
+          presence "true";
+          description
+            "Graceful-restart options";
+          leaf disable {
+            tailf:info "Graceful restart disable";
+            description
+              "Graceful restart disable";
+            type empty;
+          }
+          container helper {
+            tailf:info "helper support";
+            description
+              "helper support";
+            presence "true";
+            leaf disable {
+              tailf:info "disable helper support";
+              description
+                "disable helper support";
+              type empty;
+            }
+            leaf strict-lsa-checking {
+              tailf:info "enable helper strict LSA checking";
+              description
+                "enable helper strict LSA checking";
+              type empty;
+            }
+          }
+          leaf restart-interval {
+            tailf:info "Graceful restart interval";
+            description
+              "Graceful restart interval";
+            type uint16 {
+              tailf:info "<1-1800>;;Maximum route lifetime following restart, in seconds";
+            }
+          }
+        }
+        container ignore {
+          tailf:info "Do not complain about specific event";
+          description
+            "Do not complain about specific event";
+          container lsa {
+            tailf:info "Do not complain upon receiving LSA of the specified type";
+            description
+              "Do not complain upon receiving LSA of the specified type";
+            leaf mospf {
+              tailf:info "MOSPF Type 6 LSA";
+              description
+                "MOSPF Type 6 LSA";
+              type empty;
+            }
+          }
+        }
+        leaf ispf {
+          tailf:info "Enable incremental SPF computation";
+          description
+            "Enable incremental SPF computation";
+          tailf:cli-full-command;
+          type empty;
+        }
+        container limit {
+          tailf:info "Limit a specific OSPF feature";
+          description
+            "Limit a specific OSPF feature";
+          tailf:cli-compact-syntax;
+          container retransmissions {
+            tailf:info "LS update, DBD, and LS request retransmissions";
+            description
+              "LS update, DBD, and LS request retransmissions";
+            leaf non-dc {
+              tailf:info "Non-demand-circuit retransmissions";
+              description
+                "Non-demand-circuit retransmissions";
+              type limit-dc-non-dc-type;
+            }
+            leaf dc {
+              tailf:info "Demand circuit retransmissions";
+              description
+                "Demand circuit retransmissions";
+              type limit-dc-non-dc-type;
+            }
+          }
+        }
+        container local-rib-criteria {
+          tailf:info "Enable or disable usage of local RIB as route criteria";
+          description
+            "Enable or disable usage of local RIB as route criteria";
+          tailf:cli-compact-syntax;
+          leaf forwarding-address {
+            tailf:info "Local RIB used to validate external/NSSA forwarding addresses";
+            description
+              "Local RIB used to validate external/NSSA forwarding addresses";
+            type empty;
+          }
+          leaf inter-area-summary {
+            tailf:info "Local RIB used as criteria for inter-area summaries";
+            description
+              "Local RIB used as criteria for inter-area summaries";
+            type empty;
+          }
+          leaf nssa-translation {
+            tailf:info "Local RIB used as criteria for NSSA translation";
+            description
+              "Local RIB used as criteria for NSSA translation";
+            type empty;
+          }
+        }
+        container microloop {
+          tailf:info "Traffic microloop control parameters";
+          description
+            "Traffic microloop control parameters";
+          container avoidance {
+            tailf:info "Traffic microloop avoidance parameters";
+            description
+              "Traffic microloop avoidance parameters";
+            presence "true";
+            leaf disable {
+              tailf:info "Microloop avoidance auto-enable prohibited";
+              description
+                "Microloop avoidance auto-enable prohibited";
+              tailf:cli-full-command;
+              type empty;
+            }
+            leaf protected {
+              tailf:info "Microloop avoidance for protected prefixes only";
+              description
+                "Microloop avoidance for protected prefixes only";
+              tailf:cli-full-command;
+              type empty;
+            }
+            leaf rib-update-delay {
+              tailf:info "Delay before updating the RIB";
+              description
+                "Delay before updating the RIB";
+              tailf:cli-full-command;
+              type uint32 {
+                tailf:info "<1-600000>;;RIB update delay in msec";
+                range "1..600000";
+              }
+            }
+          }
+        }
+        container mpls {
+          tailf:info "Configure MPLS routing protocol parameters";
+          description
+            "Configure MPLS routing protocol parameters";
+          container ldp {
+            tailf:info "routing protocol commands for MPLS LDP";
+            description
+              "routing protocol commands for MPLS LDP";
+            container autoconfig {
+              tailf:info "Configure LDP automatic configuration";
+              description
+                "Configure LDP automatic configuration";
+              presence "Configure LDP automatic configuration";
+              leaf area {
+                tailf:info "Configure an OSPF area to run MPLS LDP";
+                description
+                  "Configure an OSPF area to run MPLS LDP";
+                type ospf-area-type;
+              }
+            }
+            container sync {
+              tailf:info "Configure LDP-IGP Synchronization";
+              description
+                "Configure LDP-IGP Synchronization";
+              presence "Configure LDP-IGP Synchronization";
+            }
+          }
+          container traffic-eng {
+            tailf:info "routing protocol commands for MPLS Traffic Engineering";
+            description
+              "routing protocol commands for MPLS Traffic Engineering";
+            tailf:cli-compact-syntax;
+            leaf multicast-intact {
+              tailf:info "MPLS TE and PIM interaction";
+              description
+                "MPLS TE and PIM interaction";
+              tailf:cli-full-command;
+              type empty;
+            }
+            leaf area {
+              tailf:info "configure an ospf area to run MPLS Traffic Engineering";
+              description
+                "configure an ospf area to run MPLS Traffic Engineering";
+              tailf:cli-full-command;
+              type ospf-area-type;
+            }
+            container autoroute-exclude {
+              tailf:info "MPLS TE autoroute exclude";
+              description
+                "MPLS TE autoroute exclude";
+              leaf prefix-list {
+                tailf:info "Filter prefixes";
+                description
+                  "Filter prefixes";
+                type string {
+                  tailf:info "WORD  Name of an IP prefix-list";
+                }
+              }
+            }
+            container interface {
+              tailf:info "MPLS TE interface configuration for this OSPF process";
+              description
+                "MPLS TE interface configuration for this OSPF process";
+              tailf:cli-sequence-commands;
+              tailf:cli-compact-syntax;
+              leaf name {
+                tailf:cli-drop-node-name;
+                tailf:cli-incomplete-command;
+                type string {
+                  tailf:info "WORD;;Interface name";
+                }
+              }
+              leaf id {
+                tailf:cli-drop-node-name;
+                tailf:cli-optional-in-sequence;
+                type uint32;
+              }
+              leaf area {
+                tailf:info "advertise MPLS TE information for this interface into area";
+                description
+                  "advertise MPLS TE information for this interface into area";
+                type uint32 {
+                  tailf:info "<0-0>;;OSPF area ID as a decimal value";
+                }
+              }
+            }
+            container mesh-group-container {
+              tailf:cli-drop-node-name;
+              tailf:cli-sequence-commands;
+              tailf:cli-compact-syntax;
+              leaf mesh-group {
+                tailf:info "Traffic Engineering Mesh-Group advertisement";
+                description
+                  "Traffic Engineering Mesh-Group advertisement";
+                tailf:cli-incomplete-command;
+                type uint32 {
+                  range "0 .. 4294967295";
+                  tailf:info "<0-4294967295>;;Mesh Group Id";
+                }
+              }
+              leaf interface {
+                tailf:info "Interface";
+                description
+                  "Interface";
+                tailf:cli-incomplete-command;
+                tailf:cli-drop-node-name;
+                type string {
+                  tailf:info "WORD;;Interface name";
+                }
+              }
+              leaf id {
+                tailf:cli-drop-node-name;
+                tailf:cli-optional-in-sequence;
+                type uint32;
+              }
+              list area {
+                tailf:info "configure flooding scope as area";
+                description
+                  "configure flooding scope as area";
+                tailf:cli-suppress-mode;
+                tailf:cli-delete-when-empty;
+                key "id";
+                leaf id {
+                  tailf:cli-suppress-range;
+                  type ospf-area-type;
+                }
+              }
+            }
+            container router-id {
+              tailf:info "Traffic Engineering stable IP address for system";
+              description
+                "Traffic Engineering stable IP address for system";
+              tailf:cli-sequence-commands;
+              tailf:cli-compact-syntax;
+              leaf interface {
+                tailf:info "Interface";
+                description
+                  "Interface";
+                tailf:cli-drop-node-name;
+                type string {
+                  tailf:info "WORD;;Interface name";
+                }
+              }
+              leaf id {
+                tailf:cli-drop-node-name;
+                tailf:cli-optional-in-sequence;
+                type uint32;
+              }
+            }
+          }
+        }
+        list neighbor {
+          tailf:info "Specify a neighbor router";
+          description
+            "Specify a neighbor router";
+          tailf:cli-suppress-mode;
+          tailf:cli-delete-when-empty;
+          key "ip";
+          leaf ip {
+            type inet:ipv4-address {
+              tailf:info "A.B.C.D;;Neighbor address";
+            }
+          }
+          leaf cost {
+            tailf:info "OSPF cost for point-to-multipoint neighbor";
+            description
+              "OSPF cost for point-to-multipoint neighbor";
+            type uint32 {
+              range "1 .. 65535";
+              tailf:info "<1-65535>;;metric";
+            }
+          }
+          container database-filter {
+            tailf:info "Filter OSPF LSA during synchronization and flooding for point-to-multipoint neighbor";
+            description
+              "Filter OSPF LSA during synchronization and flooding for point-to-multipoint neighbor";
+            tailf:cli-flatten-container;
+            container all {
+              tailf:info "Filter all LSA";
+              description
+                "Filter all LSA";
+              tailf:cli-compact-syntax;
+              tailf:cli-flatten-container;
+              leaf out {
+                tailf:info "Outgoing LSA";
+                description
+                  "Outgoing LSA";
+                type empty;
+              }
+            }
+          }
+          leaf poll-interval {
+            tailf:info "OSPF dead-router polling interval";
+            description
+              "OSPF dead-router polling interval";
+            type uint32 {
+              range "0 .. 65535";
+              tailf:info "<0-65535>;;Seconds";
+            }
+          }
+          leaf priority {
+            tailf:info "OSPF priority of non-broadcast neighbor";
+            description
+              "OSPF priority of non-broadcast neighbor";
+            type uint32 {
+              range "0 .. 255";
+              tailf:info "<0-255>;;Priority";
+            }
+          }
+        }
+        list network {
+          tailf:info "Enable routing on an IP network";
+          description
+            "Enable routing on an IP network";
+          tailf:cli-incomplete-command;
+          tailf:cli-suppress-mode;
+          tailf:cli-delete-when-empty;
+          key "ip mask";
+          leaf ip {
+            type inet:ipv4-address {
+              tailf:info "A.B.C.D;;Network number";
+            }
+          }
+          leaf mask {
+            type inet:ipv4-address {
+              tailf:info "A.B.C.D;;OSPF wild card bits";
+            }
+          }
+          leaf area {
+            tailf:info "Set the OSPF area ID";
+            description
+              "Set the OSPF area ID";
+            type ospf-area-type;
+          }
+        }
+        container nsf {
+          tailf:info "Non-stop forwarding";
+          description
+            "Non-stop forwarding";
+          presence "true";
+          container cisco {
+            tailf:info "Cisco Non-stop forwarding";
+            description
+              "Cisco Non-stop forwarding";
+            presence "true";
+            container helper {
+              tailf:info "helper support";
+              description
+                "helper support";
+              presence "helper support";
+              leaf disable {
+                tailf:cli-reset-container;
+                tailf:info "disable helper support";
+                description
+                  "disable helper support";
+                type empty;
+              }
+            }
+          }
+          container ietf {
+            tailf:info "IETF graceful restart";
+            description
+              "IETF graceful restart";
+            container helper {
+              tailf:info "helper support";
+              description
+                "helper support";
+              presence "helper support";
+              leaf disable {
+                tailf:cli-reset-container;
+                tailf:cli-delete-container-on-delete;
+                tailf:info "disable helper support";
+                description
+                  "disable helper support";
+                type empty;
+              }
+              leaf strict-lsa-checking {
+                tailf:info "enable helper strict LSA checking";
+                description
+                  "enable helper strict LSA checking";
+                type empty;
+              }
+            }
+          }
+        }
+        container prefix-priority {
+          tailf:info "OSPF prefix priority";
+          description
+            "OSPF prefix priority";
+          tailf:cli-compact-syntax;
+          tailf:cli-sequence-commands;
+          leaf high {
+            tailf:info "High prefix priority";
+            description
+              "High prefix priority";
+            type empty;
+          }
+          leaf route-map {
+            tailf:info "Prefix priority selection by route-map";
+            description
+              "Prefix priority selection by route-map";
+            type string {
+              tailf:info "WORD;;Route-map name";
+            }
+          }
+        }
+        leaf prefix-suppression {
+          tailf:info "OSPF prefix suppression";
+          description
+            "OSPF prefix suppression";
+          tailf:cli-full-command;
+          type empty;
+        }
+        leaf priority {
+          tailf:info "OSPF topology priority";
+          description
+            "OSPF topology priority";
+          type uint8 {
+            tailf:info "<0-127>;;OSPF topology priority";
+            range "0..127";
+          }
+        }
+        container process-min-time {
+          tailf:info "Percentage of quantum to be used before releasing CPU";
+          description
+            "Percentage of quantum to be used before releasing CPU";
+          leaf percent {
+            tailf:info "percent";
+            description
+              "percent";
+            type uint32 {
+              range "1 .. 100";
+              tailf:info "<1-100>;;Minimum CPU quantum";
+            }
+          }
+        }
+        leaf shutdown {
+          tailf:info "Shutdown the OSPF protocol under the current instance";
+          description
+            "Shutdown the OSPF protocol under the current instance";
+          tailf:cli-boolean-no;
+          type boolean;
+        }
+        uses ospf-snmp-grouping;
+        list summary-address {
+          tailf:info "Configure IP address summaries";
+          description
+            "Configure IP address summaries";
+          tailf:cli-suppress-mode;
+          tailf:cli-delete-when-empty;
+          key "ip wildcard";
+          leaf ip {
+            type inet:ipv4-address {
+              tailf:info "A.B.C.D;;IP summary address";
+            }
+          }
+          leaf wildcard {
+            type inet:ipv4-address {
+              tailf:info "A.B.C.D;;Summary mask";
+            }
+          }
+          choice tag-no-advertise-choice {
+            leaf nssa-only {
+              tailf:info "Limit summary to NSSA areas";
+              description
+                "Limit summary to NSSA areas";
+              type empty;
+            }
+            leaf tag {
+              tailf:info "Set tag";
+              description
+                "Set tag";
+              tailf:cli-full-command;
+              type uint32 {
+                range "0 .. 4294967295";
+                tailf:info "<0-4294967295>;;32-bit tag value";
+              }
+            }
+            leaf not-advertise {
+              tailf:info "Do not advertise when translating OSPF type-7 LSA";
+              description
+                "Do not advertise when translating OSPF type-7 LSA";
+              type empty;
+              tailf:cli-full-command;
+            }
+          }
+        }
+      }
+      list eigrp {
+        tailf:info "Enhanced Interior Gateway Routing Protocol (EIGRP)";
+        description
+          "Enhanced Interior Gateway Routing Protocol (EIGRP)";
+        tailf:cli-mode-name "config-router";
+        key "id";
+        leaf id {
+          tailf:info "Autonomous System ID";
+          description
+            "Autonomous System ID";
+          type union {
+            type uint16 {
+              tailf:info "<1..65535>;;ID";
+              range "1..65535";
+            }
+            type string {
+              tailf:info "WORD;;EIGRP Virtual-Instance Name";
+            }
+          }
+        }
+        container address-family {
+          tailf:info "Enter Address Family command mode";
+          description
+            "Enter Address Family command mode";
+          container ipv4 {
+            tailf:info "Address Family IPv4";
+            description
+              "Address Family IPv4";
+            list af-list {
+              tailf:cli-drop-node-name;
+              description
+                "Specify Address-Family Autonomous System Number";
+              tailf:cli-mode-name "config-router-af";
+              tailf:cli-exit-command "exit-address-family";
+              tailf:cli-full-command;
+              key "autonomous-system";
+              leaf autonomous-system {
+                tailf:cli-expose-key-name;
+                tailf:info "Specify Address-Family Autonomous System Number";
+                description
+                  "Specify Address-Family Autonomous System Number";
+                type uint16 {
+                  tailf:info "<1-65535>;;Autonomous System";
+                }
+              }
+              leaf unicast-multicast {
+                tailf:cli-drop-node-name;
+                tailf:cli-prefix-key;
+                type enumeration {
+                  enum "unicast" {
+                    tailf:info "Address Family Unicast";
+                  }
+                  enum "multicast" {
+                    tailf:info "Address Family Multicast";
+                  }
+                }
+              }
+              leaf vrf {
+                tailf:cli-prefix-key;
+                tailf:info "Specify a specific virtual routing/forwarding instance";
+                description
+                  "Virtual Routing/Forwarding instance name";
+                type string;
+              }
+              list af-interface {
+                tailf:info "Enter Address Family interface configuration";
+                description
+                  "Enter Address Family interface configuration";
+                tailf:cli-mode-name "config-router-af-interface";
+                tailf:cli-exit-command "exit-af-interface";
+                key "name";
+                leaf name {
+                  type string;
+                }
+                leaf hello-interval {
+                  tailf:info "Configures hello interval";
+                  description
+                    "Configures hello interval";
+                  type uint16 {
+                    tailf:info "<1-65535>;;Seconds between hello transmissions";
+                  }
+                }
+                leaf hold-time {
+                  tailf:info "Configures hold time";
+                  description
+                    "Configures hold time";
+                  type uint16 {
+                    tailf:info "<1-65535>;;Seconds before neighbor is considered down";
+                  }
+                }
+                leaf passive-interface {
+                  tailf:info "Suppress address updates on an interface";
+                  description
+                    "Suppress address updates on an interface";
+                  type empty;
+                }
+                leaf split-horizon {
+                  tailf:info "Perform split horizon";
+                  description
+                    "Perform split horizon";
+                  tailf:cli-boolean-no;
+                  tailf:cli-trim-default;
+                  type boolean;
+                }
+                container authentication {
+                  tailf:info "authentication subcommands";
+                  description
+                    "authentication subcommands";
+                  container mode {
+                    tailf:info "authentication mode";
+                    description
+                      "authentication mode";
+                    leaf md5 {
+                      tailf:info "Keyed message digest";
+                      description
+                        "Keyed message digest";
+                      tailf:cli-full-command;
+                      type empty;
+                    }
+                    container hmac-sha-256 {
+                      tailf:info "HMAC-SHA-256 Authentication";
+                      description
+                        "HMAC-SHA-256 Authentication";
+                      tailf:cli-compact-syntax;
+                      leaf auth-type {
+                        tailf:cli-drop-node-name;
+                        type uint8 {
+                          tailf:info "<0-7>;;Encryption type (0 for not yet encrypted, 7 for proprietary)";
+                        }
+                      }
+                      leaf auth-key {
+                        tailf:cli-drop-node-name;
+                        tailf:cli-full-command;
+                        tailf:cli-multi-value;
+                        type string {
+                          tailf:info "WORD;;Authentication key (8 chars)";
+                        }
+                      }
+                    }
+                  }
+                  leaf key-chain {
+                    tailf:info "key-chain";
+                    description
+                      "key-chain";
+                    tailf:cli-full-command;
+                    type string {
+                      tailf:info "WORD;;name of key-chain";
+                    }
+                  }
+                }
+                container summary-address {
+                  tailf:cli-sequence-commands;
+                  tailf:cli-compact-syntax;
+                  leaf address {
+                    tailf:cli-drop-node-name;
+                    type inet:ipv4-address;
+                  }
+                  leaf mask {
+                    tailf:cli-drop-node-name;
+                    type inet:ipv4-address;
+                  }
+                }
+              }
+              list topology {
+                tailf:info "Topology configuration mode";
+                description
+                  "Topology configuration mode";
+                tailf:cli-mode-name "config-router-af-topology";
+                tailf:cli-exit-command "exit-af-topology";
+                key "name";
+                leaf name {
+                  type string {
+                    tailf:info "WORD;;Topology name";
+                  }
+                }
+                container distribute-list {
+                  tailf:info "Filter entries in eigrp updates";
+                  description
+                    "Filter entries in eigrp updates";
+                  list route-map {
+                    tailf:info "Filter prefixes based on the route-map";
+                    description
+                      "Filter prefixes based on the route-map";
+                    tailf:cli-suppress-mode;
+                    key "name";
+                    leaf name {
+                      type string {
+                        tailf:info "WORD;;route-map name";
+                      }
+                    }
+                    leaf in {
+                      tailf:info "Filter incoming service updates";
+                      description
+                        "Filter incoming service updates";
+                      type string {
+                        tailf:info "WORD;;Interface name";
+                      }
+                    }
+                    leaf out {
+                      tailf:info "Filter outgoing service updates";
+                      description
+                        "Filter outgoing service updates";
+                      type string {
+                        tailf:info "WORD;;Interface name";
+                      }
+                    }
+                  }
+                }
+              }
+              container network {
+                tailf:info "Enable routing on an IP network";
+                description
+                  "Enable routing on an IP network";
+                tailf:cli-sequence-commands;
+                tailf:cli-compact-syntax;
+                leaf number {
+                  description
+                    "Network number";
+                  tailf:cli-drop-node-name;
+                  type inet:ipv4-address {
+                    tailf:info "A.B.C.D;;Network number";
+                  }
+                }
+                leaf wild-card {
+                  description
+                    "EIGRP wild card bits";
+                  tailf:cli-drop-node-name;
+                  type inet:ipv4-address {
+                    tailf:info "A.B.C.D;;EIGRP wild card bits";
+                  }
+                }
+              }
+              container eigrp {
+                tailf:info "EIGRP Address Family specific commands";
+                description
+                  "EIGRP Address Family specific commands";
+                leaf router-id {
+                  tailf:info "router id for this EIGRP process";
+                  description
+                    "router id for this EIGRP process";
+                  tailf:cli-full-command;
+                  type inet:ipv4-address {
+                    tailf:info "A.B.C.D;;EIGRP Router-ID in IP address format";
+                  }
+                }
+                container stub {
+                  tailf:info "Set address-family in stubbed mode";
+                  description
+                    "Set address-family in stubbed mode";
+                  tailf:cli-compact-syntax;
+                  presence "true";
+                  leaf connected {
+                    tailf:info "Do advertise connected routes";
+                    description
+                      "Do advertise connected routes";
+                    type empty;
+                  }
+                  leaf leak-map {
+                    tailf:info "Allow dynamic prefixes based on the leak-map";
+                    description
+                      "Allow dynamic prefixes based on the leak-map";
+                    tailf:cli-full-command;
+                    type string {
+                      tailf:info "WORD;;leak-map name";
+                    }
+                  }
+                  leaf receive-only {
+                    tailf:info "Set receive only neighbor";
+                    description
+                      "Set receive only neighbor";
+                    type empty;
+                  }
+                  leaf redistributed {
+                    tailf:info "Do advertise redistributed routes";
+                    description
+                      "Do advertise redistributed routes";
+                    type empty;
+                  }
+                  leaf static {
+                    tailf:info "Do advertise static routes";
+                    description
+                      "Do advertise static routes";
+                    type empty;
+                  }
+                  leaf summary {
+                    tailf:info "Do advertise summary routes";
+                    description
+                      "Do advertise summary routes";
+                    type empty;
+                  }
+                }
+              }
+              leaf nsf {
+                tailf:info "Non-stop forwarding";
+                description
+                  "Non-stop forwarding";
+                tailf:cli-full-command;
+                type empty;
+              }
+            }
+          }
+        }
+        leaf auto-summary {
+          tailf:info "Enable automatic network number summarization";
+          description
+            "Enable automatic network number summarization";
+          type empty;
+        }
+        container bfd {
+          tailf:info "BFD configuration commands";
+          description
+            "BFD configuration commands";
+          leaf all-interfaces {
+            tailf:info "Enable BFD on all interfaces";
+            description
+              "Enable BFD on all interfaces";
+            type empty;
+          }
+          container interface {
+            tailf:info "Enable BFD on specific interface";
+            description
+              "Enable BFD on specific interface";
+            tailf:cli-compact-syntax;
+            tailf:cli-flatten-container;
+            uses interface-grouping;
+          }
+        }
+        container default-information {
+          tailf:info "Control distribution of default information";
+          description
+            "Control distribution of default information";
+          container in {
+            tailf:info "Accept input default routing information";
+            description
+              "Accept input default routing information";
+            presence "true";
+            leaf sa-num {
+              tailf:info "A standard expanded IP access list number";
+              description
+                "A standard expanded IP access list number";
+              tailf:cli-drop-node-name;
+              type uint16 {
+                range "1300..1999";
+              }
+            }
+            leaf sa-name {
+              tailf:info "Standard Access-list name";
+              description
+                "Standard Access-list name";
+              tailf:cli-drop-node-name;
+              type string;
+            }
+          }
+          container out {
+            tailf:info "Accept output default routing information";
+            description
+              "Accept output default routing information";
+            presence "true";
+            leaf sa-out-num {
+              tailf:info "A standard expanded IP access list number";
+              description
+                "A standard expanded IP access list number";
+              tailf:cli-drop-node-name;
+              type uint16 {
+                range "1300..1999";
+              }
+            }
+            leaf sa-out-name {
+              tailf:info "Standard Access-list name";
+              description
+                "Standard Access-list name";
+              tailf:cli-drop-node-name;
+              type string;
+            }
+          }
+        }
+        container default-metric {
+          tailf:info "Set metric of redistributed routes";
+          description
+            "Set metric of redistributed routes";
+          list dm-rdr {
+            tailf:cli-drop-node-name;
+            tailf:cli-suppress-mode;
+            key "dm-rdr";
+            leaf dm-rdr {
+              tailf:info "Bandwidth in Kbits per second";
+              description
+                "Bandwidth in Kbits per second";
+              type uint32 {
+                range "1..4294967295";
+              }
+            }
+            list dm-rdr0 {
+              tailf:cli-drop-node-name;
+              tailf:cli-suppress-mode;
+              key "dm-rdr0";
+              leaf dm-rdr0 {
+                tailf:info "delay metric in 10 microsecond units";
+                description
+                  "delay metric in 10 microsecond units";
+                type uint32 {
+                  range "0..4294967295";
+                }
+              }
+              leaf dm-rdr-pct {
+                tailf:info "Reliability metric where 255 is 100% reliable";
+                description
+                  "Reliability metric where 255 is 100% reliable";
+                tailf:cli-drop-node-name;
+                type uint8 {
+                  range "0..255";
+                }
+              }
+            }
+          }
+        }
+        container distance {
+          tailf:info "Define an administrative distance";
+          description
+            "Define an administrative distance";
+          list rad-dis {
+            tailf:cli-drop-node-name;
+            tailf:cli-suppress-mode;
+            key "rad-dis";
+            leaf rad-dis {
+              tailf:info "Set route administrative distance";
+              description
+                "Set route administrative distance";
+              type uint8 {
+                range "1..255";
+              }
+            }
+            list dis-ipv4 {
+              tailf:cli-drop-node-name;
+              tailf:cli-suppress-mode;
+              key "dis-ipv4";
+              leaf dis-ipv4 {
+                tailf:info "IP Source address";
+                description
+                  "IP Source address";
+                type inet:ipv4-address;
+              }
+              leaf dis-ipv40 {
+                tailf:info "Wildcard bits";
+                description
+                  "Wildcard bits";
+                tailf:cli-drop-node-name;
+                type inet:ipv4-address;
+              }
+            }
+          }
+          container eigrp {
+            tailf:info "Set distance for internal and external routes";
+            description
+              "Set distance for internal and external routes";
+            list di-rt {
+              tailf:cli-drop-node-name;
+              tailf:cli-suppress-mode;
+              key "di-rt";
+              leaf di-rt {
+                tailf:info "Distance for internal routes";
+                description
+                  "Distance for internal routes";
+                type uint8 {
+                  range "1..255";
+                }
+              }
+              leaf di-rt0 {
+                tailf:info "Distance for external routes";
+                description
+                  "Distance for external routes";
+                tailf:cli-drop-node-name;
+                type uint8 {
+                  range "1..255";
+                }
+              }
+            }
+          }
+        }
+        container distribute-list {
+          tailf:info "Filter entries in eigrp updates";
+          description
+            "Filter entries in eigrp updates";
+          list eig-filt {
+            tailf:cli-drop-node-name;
+            tailf:cli-suppress-mode;
+            key "eig-filt";
+            leaf eig-filt {
+              tailf:info "IP expanded access list number";
+              description
+                "IP expanded access list number";
+              type uint16 {
+                range "1300..2699";
+              }
+            }
+            container in {
+              tailf:info "Filter incoming service updates";
+              description
+                "Filter incoming service updates";
+              presence "true";
+              leaf interface_name {
+                tailf:info "Interface name";
+                description
+                  "Interface name";
+                tailf:cli-drop-node-name;
+                type string;
+              }
+            }
+            container out {
+              tailf:info "Filter outgoing service updates";
+              description
+                "Filter outgoing service updates";
+              presence "true";
+              leaf interface_name {
+                tailf:info "Interface name";
+                description
+                  "Interface name";
+                tailf:cli-drop-node-name;
+                type string;
+              }
+            }
+          }
+          list al-num {
+            tailf:cli-drop-node-name;
+            tailf:cli-suppress-mode;
+            key "al-num";
+            leaf al-num {
+              tailf:info "Access-list name";
+              description
+                "Access-list name";
+              type string;
+            }
+            container in {
+              tailf:info "Filter incoming service updates";
+              description
+                "Filter incoming service updates";
+              presence "true";
+              leaf interface_name {
+                tailf:info "Interface name";
+                description
+                  "Interface name";
+                tailf:cli-drop-node-name;
+                type string;
+              }
+            }
+            container out {
+              tailf:info "Filter outgoing service updates";
+              description
+                "Filter outgoing service updates";
+              presence "true";
+              leaf interface_name {
+                tailf:info "Interface name";
+                description
+                  "Interface name";
+                tailf:cli-drop-node-name;
+                type string;
+              }
+            }
+          }
+          container gateway {
+            tailf:info "Filtering incoming address updates based on gateway";
+            description
+              "Filtering incoming address updates based on gateway";
+            list gw-list {
+              tailf:cli-drop-node-name;
+              tailf:cli-suppress-mode;
+              key "gw-list";
+              leaf gw-list {
+                tailf:info "Name of an IP prefix-list";
+                description
+                  "Name of an IP prefix-list";
+                type string;
+              }
+              leaf in {
+                tailf:info "Filter incoming service updates";
+                description
+                  "Filter incoming service updates";
+                type empty;
+              }
+              leaf out {
+                tailf:info "Filter outgoing service updates";
+                description
+                  "Filter outgoing service updates";
+                type empty;
+              }
+            }
+          }
+          container prefix {
+            tailf:info "Filter prefixes in address updates";
+            description
+              "Filter prefixes in address updates";
+            list pl-name {
+              tailf:cli-drop-node-name;
+              tailf:cli-suppress-mode;
+              key "pl-name";
+              leaf pl-name {
+                tailf:info "Name of an IP prefix-list";
+                description
+                  "Name of an IP prefix-list";
+                type string;
+              }
+              leaf gateway {
+                tailf:info "Filtering incoming address updates based on gateway";
+                description
+                  "Filtering incoming address updates based on gateway";
+                type empty;
+              }
+              leaf in {
+                tailf:info "Filter incoming service updates";
+                description
+                  "Filter incoming service updates";
+                type empty;
+              }
+              leaf out {
+                tailf:info "Filter outgoing service updates";
+                description
+                  "Filter outgoing service updates";
+                type empty;
+              }
+            }
+          }
+          container route-map {
+            tailf:info "Filter prefixes based on the route-map";
+            description
+              "Filter prefixes based on the route-map";
+            list rmap-name {
+              tailf:cli-drop-node-name;
+              tailf:cli-suppress-mode;
+              key "rmap-name";
+              leaf rmap-name {
+                tailf:info "route-map name";
+                description
+                  "route-map name";
+                type string;
+              }
+              leaf in {
+                tailf:info "Filter incoming service updates";
+                description
+                  "Filter incoming service updates";
+                type empty;
+              }
+              leaf out {
+                tailf:info "Filter outgoing service updates";
+                description
+                  "Filter outgoing service updates";
+                type empty;
+              }
+            }
+          }
+        }
+        container eigrp {
+          tailf:info "EIGRP specific commands";
+          description
+            "EIGRP specific commands";
+          leaf event-log-size {
+            tailf:info "Set EIGRP maximum event log entries";
+            description
+              "Max event log entries";
+            type uint32 {
+              range "0..12356402";
+            }
+          }
+          leaf log-neighbor-changes {
+            tailf:info "Enable/Disable EIGRP neighbor logging";
+            description
+              "Enable/Disable EIGRP neighbor logging";
+            type empty;
+          }
+          container log-neighbor-warnings {
+            tailf:info "Enable/Disable EIGRP neighbor warnings";
+            description
+              "Enable/Disable EIGRP neighbor warnings";
+            presence "true";
+            leaf warn-sec {
+              tailf:info "Neighbor warning interval in seconds";
+              description
+                "Neighbor warning interval in seconds";
+              tailf:cli-drop-node-name;
+              type uint16 {
+                range "1..65535";
+              }
+            }
+          }
+          leaf router-id {
+            tailf:info "router id for this EIGRP process";
+            description
+              "EIGRP Router-ID in IP address format";
+            type inet:ipv4-address;
+          }
+          container stub {
+            tailf:info "Set address-family in stubbed mode";
+            description
+              "Set address-family in stubbed mode";
+            presence "true";
+            container connected {
+              tailf:info "Do advertise connected routes";
+              description
+                "Do advertise connected routes";
+              presence "true";
+              leaf leak-map {
+                tailf:info "Allow dynamic prefixes based on the leak-map";
+                description
+                  "Allow dynamic prefixes based on the leak-map";
+                type empty;
+              }
+              leaf redistributed {
+                tailf:info "Do advertise redistributed routes";
+                description
+                  "Do advertise redistributed routes";
+                type empty;
+              }
+              leaf static {
+                tailf:info "Do advertise static routes";
+                description
+                  "Do advertise static routes";
+                type empty;
+              }
+              leaf summary {
+                tailf:info "Do advertise summary routes";
+                description
+                  "Do advertise summary routes";
+                type empty;
+              }
+            }
+            leaf leak-map {
+              tailf:info "Allow dynamic prefixes based on the leak-map";
+              description
+                "leak-map name";
+              type string;
+            }
+            leaf receive-only {
+              tailf:info "Set receive only neighbor";
+              description
+                "Set receive only neighbor";
+              type empty;
+            }
+            container redistributed {
+              tailf:info "Do advertise redistributed routes";
+              description
+                "Do advertise redistributed routes";
+              presence "true";
+              leaf connected {
+                tailf:info "Do advertise connected routes";
+                description
+                  "Do advertise connected routes";
+                type empty;
+              }
+              leaf leak-map {
+                tailf:info "Allow dynamic prefixes based on the leak-map";
+                description
+                  "Allow dynamic prefixes based on the leak-map";
+                type empty;
+              }
+              leaf static {
+                tailf:info "Do advertise static routes";
+                description
+                  "Do advertise static routes";
+                type empty;
+              }
+              leaf summary {
+                tailf:info "Do advertise summary routes";
+                description
+                  "Do advertise summary routes";
+                type empty;
+              }
+            }
+            container static {
+              tailf:info "Do advertise static routes";
+              description
+                "Do advertise static routes";
+              presence "true";
+              leaf connected {
+                tailf:info "Do advertise connected routes";
+                description
+                  "Do advertise connected routes";
+                type empty;
+              }
+              leaf leak-map {
+                tailf:info "Allow dynamic prefixes based on the leak-map";
+                description
+                  "Allow dynamic prefixes based on the leak-map";
+                type empty;
+              }
+              leaf redistributed {
+                tailf:info "Do advertise redistributed routes";
+                description
+                  "Do advertise redistributed routes";
+                type empty;
+              }
+              leaf summary {
+                tailf:info "Do advertise summary routes";
+                description
+                  "Do advertise summary routes";
+                type empty;
+              }
+            }
+            container summary {
+              tailf:info "Do advertise summary routes";
+              description
+                "Do advertise summary routes";
+              presence "true";
+              leaf connected {
+                tailf:info "Do advertise connected routes";
+                description
+                  "Do advertise connected routes";
+                type empty;
+              }
+              leaf leak-map {
+                tailf:info "Allow dynamic prefixes based on the leak-map";
+                description
+                  "Allow dynamic prefixes based on the leak-map";
+                type empty;
+              }
+              leaf redistributed {
+                tailf:info "Do advertise redistributed routes";
+                description
+                  "Do advertise redistributed routes";
+                type empty;
+              }
+              leaf static {
+                tailf:info "Do advertise static routes";
+                description
+                  "Do advertise static routes";
+                type empty;
+              }
+            }
+          }
+          leaf upgrade-cli {
+            tailf:info "Upgrade the Classic Mode config to Named Mode";
+            description
+              "EIGRP Virtual-Instance Name";
+            type string;
+          }
+        }
+        leaf maximum-paths {
+          tailf:info "Forward packets over multiple paths";
+          description
+            "Number of paths";
+          type uint8 {
+            range "1..32";
+          }
+        }
+        container metric {
+          tailf:info "Modify metrics and parameters for advertisement";
+          description
+            "Modify metrics and parameters for advertisement";
+          leaf maximum-hops {
+            tailf:info "Advertise greater than <hops> as unreachable";
+            description
+              "Hop count";
+            type uint8 {
+              range "1..255";
+            }
+          }
+          leaf weights {
+            tailf:info "Modify metric coefficients";
+            description
+              "Type (Only TOS 0 supported)";
+            type uint8 {
+              range "0..8";
+            }
+          }
+        }
+        container neighbor {
+          tailf:info "Specify a neighbor router";
+          description
+            "Specify a neighbor router";
+          list neb-ipv4 {
+            tailf:cli-drop-node-name;
+            tailf:cli-suppress-mode;
+            key "neb-ipv4";
+            leaf neb-ipv4 {
+              tailf:info "Neighbor address";
+              description
+                "Neighbor address";
+              type inet:ipv4-address;
+            }
+            container interface {
+              tailf:cli-drop-node-name;
+              tailf:info "Specify interface for global address";
+              description
+                "Specify interface for global address";
+              tailf:cli-compact-syntax;
+              tailf:cli-flatten-container;
+              uses interface-grouping;
+            }
+          }
+        }
+        container network {
+          tailf:info "Enable routing on an IP network";
+          description
+            "Enable routing on an IP network";
+          list nw-ipv4 {
+            tailf:cli-drop-node-name;
+            tailf:cli-suppress-mode;
+            key "nw-ipv4";
+            leaf nw-ipv4 {
+              tailf:info "Network number";
+              description
+                "Network number";
+              type inet:ipv4-address;
+            }
+            leaf nw-ipv40 {
+              tailf:info "EIGRP wild card bits";
+              description
+                "EIGRP wild card bits";
+              tailf:cli-drop-node-name;
+              type inet:ipv4-address;
+            }
+          }
+        }
+        leaf nsf {
+          tailf:info "Non-stop forwarding";
+          description
+            "Non-stop forwarding";
+          type empty;
+        }
+        container offset-list {
+          tailf:info "Add or subtract offset from EIGRP metrics";
+          description
+            "Add or subtract offset from EIGRP metrics";
+          list nsr-list {
+            tailf:cli-drop-node-name;
+            tailf:cli-suppress-mode;
+            key "nsr-list";
+            leaf nsr-list {
+              tailf:info "Access list of networks to apply offset (extended range)";
+              description
+                "Access list of networks to apply offset (extended range)";
+              type uint16 {
+                range "1300..1999";
+              }
+            }
+            leaf in {
+              tailf:info "Perform offset on incoming updates";
+              description
+                "Perform offset on incoming updates";
+              type empty;
+            }
+            leaf out {
+              tailf:info "Perform offset on outgoing updates";
+              description
+                "Perform offset on outgoing updates";
+              type empty;
+            }
+          }
+          list ol-acl {
+            tailf:cli-drop-node-name;
+            tailf:cli-suppress-mode;
+            key "ol-acl";
+            leaf ol-acl {
+              tailf:info "Access-list name";
+              description
+                "Access-list name";
+              type string;
+            }
+            leaf in {
+              tailf:info "Perform offset on incoming updates";
+              description
+                "Perform offset on incoming updates";
+              type empty;
+            }
+            leaf out {
+              tailf:info "Perform offset on outgoing updates";
+              description
+                "Perform offset on outgoing updates";
+              type empty;
+            }
+          }
+        }
+        leaf passive-interface {
+          tailf:info "Suppress routing updates on an interface";
+          description
+            "Suppress routing updates on an interface";
+          type string;
+        }
+        container redistribute {
+          tailf:info "Redistribute IPv4 routes from another routing protocol";
+          description
+            "Redistribute IPv4 routes from another routing protocol";
+          list bgp {
+            tailf:info "Border Gateway Protocol (BGP)";
+            description
+              "Border Gateway Protocol (BGP)";
+            tailf:cli-suppress-mode;
+            tailf:cli-compact-syntax;
+            key "rdr-as";
+            leaf rdr-as {
+              tailf:info "Autonomous system number";
+              description
+                "Autonomous system number";
+              type bgp-as-number-type;
+            }
+            container metric {
+              tailf:info "Metric for redistributed routes";
+              description
+                "Metric for redistributed routes";
+              tailf:cli-flatten-container;
+              tailf:cli-compact-syntax;
+              tailf:cli-sequence-commands;
+              leaf bandwith {
+                tailf:cli-drop-node-name;
+                description
+                  "Bandwidth metric in Kbits per second";
+                type uint32 {
+                  tailf:info "<1-4294967295>;;Bandwidth metric in Kbits per second";
+                  range "1..4294967295";
+                }
+              }
+              leaf delay {
+                tailf:cli-drop-node-name;
+                description
+                  "EIGRP delay metric, in 10 microsecond units";
+                type uint32 {
+                  tailf:info "<0-4294967295>;;EIGRP delay metric, in 10 microsecond units";
+                  range "0..4294967295";
+                }
+              }
+              leaf reliability {
+                tailf:cli-drop-node-name;
+                description
+                  "EIGRP reliability metric where 255 is 100% reliable";
+                type uint8 {
+                  tailf:info "<0-255>;;EIGRP reliability metric where 255 is 100% reliable";
+                  range "0..255";
+                }
+              }
+              leaf Effective {
+                tailf:cli-drop-node-name;
+                description
+                  "EIGRP Effective bandwidth metric (Loading) where 255 is 100% loaded";
+                type uint8 {
+                  tailf:info "<1-255>;;EIGRP Effective bandwidth metric (Loading) where 255 is 100% loaded";
+                  range "1..255";
+                }
+              }
+              leaf mtu {
+                tailf:cli-drop-node-name;
+                description
+                  "EIGRP MTU of the path";
+                type uint16 {
+                  tailf:info "<1-65535>;;EIGRP MTU of the path";
+                  range "1..65535";
+                }
+              }
+            }
+            leaf route-map {
+              tailf:info "Route map reference";
+              description
+                "Route map reference";
+              type string {
+                tailf:info "WORD;;Pointer to route-map entries";
+              }
+            }
+            leaf rd-LESSER_1_PERIOD_0-XX_PERIOD_YY_GREATER_ {
+              tailf:alt-name "_LT_1.0-XX.YY_GT_";
+              tailf:info "Autonomous system number";
+              description
+                "Autonomous system number";
+              type empty;
+            }
+          }
+          container connected {
+            tailf:info "Connected";
+            description
+              "Connected";
+            presence "true";
+            leaf metric {
+              tailf:info "Metric for redistributed routes";
+              description
+                "Metric for redistributed routes";
+              type empty;
+            }
+            leaf route-map {
+              tailf:info "Route map reference";
+              description
+                "Route map reference";
+              type empty;
+            }
+          }
+          leaf eigrp {
+            tailf:info "Enhanced Interior Gateway Routing Protocol (EIGRP)";
+            description
+              "Autonomous system number";
+            type uint16 {
+              range "1..65535";
+            }
+          }
+          container isis {
+            tailf:info "ISO IS-IS";
+            description
+              "ISO IS-IS";
+            presence "true";
+            leaf si-tag {
+              tailf:info "ISO routing area tag";
+              description
+                "ISO routing area tag";
+              tailf:cli-drop-node-name;
+              type string;
+            }
+            leaf level-1 {
+              tailf:info "IS-IS level-1 routes only";
+              description
+                "IS-IS level-1 routes only";
+              type empty;
+            }
+            leaf level-1-2 {
+              tailf:info "IS-IS level-1 and level-2 routes";
+              description
+                "IS-IS level-1 and level-2 routes";
+              type empty;
+            }
+            leaf level-2 {
+              tailf:info "IS-IS level-2 routes only";
+              description
+                "IS-IS level-2 routes only";
+              type empty;
+            }
+            leaf metric {
+              tailf:info "Metric for redistributed routes";
+              description
+                "Metric for redistributed routes";
+              type empty;
+            }
+            leaf route-map {
+              tailf:info "Route map reference";
+              description
+                "Route map reference";
+              type empty;
+            }
+          }
+          container lisp {
+            tailf:info "Locator ID Separation Protocol (LISP)";
+            description
+              "Locator ID Separation Protocol (LISP)";
+            presence "true";
+            leaf metric {
+              tailf:info "Metric for redistributed routes";
+              description
+                "Metric for redistributed routes";
+              type empty;
+            }
+            leaf route-map {
+              tailf:info "Route map reference";
+              description
+                "Route map reference";
+              type empty;
+            }
+          }
+          container mobile {
+            tailf:info "Mobile routes";
+            description
+              "Mobile routes";
+            presence "true";
+            leaf metric {
+              tailf:info "Metric for redistributed routes";
+              description
+                "Metric for redistributed routes";
+              type empty;
+            }
+            leaf route-map {
+              tailf:info "Route map reference";
+              description
+                "Route map reference";
+              type empty;
+            }
+          }
+          container odr {
+            tailf:info "On Demand stub Routes";
+            description
+              "On Demand stub Routes";
+            presence "true";
+            leaf metric {
+              tailf:info "Metric for redistributed routes";
+              description
+                "Metric for redistributed routes";
+              type empty;
+            }
+            leaf route-map {
+              tailf:info "Route map reference";
+              description
+                "Route map reference";
+              type empty;
+            }
+          }
+          leaf ospf {
+            tailf:info "Open Shortest Path First (OSPF)";
+            description
+              "Process ID";
+            type uint16 {
+              range "1..65535";
+            }
+          }
+          container rip {
+            tailf:info "Routing Information Protocol (RIP)";
+            description
+              "Routing Information Protocol (RIP)";
+            presence "true";
+            leaf metric {
+              tailf:info "Metric for redistributed routes";
+              description
+                "Metric for redistributed routes";
+              type empty;
+            }
+            leaf route-map {
+              tailf:info "Route map reference";
+              description
+                "Route map reference";
+              type empty;
+            }
+          }
+          container static {
+            tailf:info "Static routes";
+            description
+              "Static routes";
+            presence "true";
+            leaf metric {
+              tailf:info "Metric for redistributed routes";
+              description
+                "Metric for redistributed routes";
+              type empty;
+            }
+            leaf route-map {
+              tailf:info "Route map reference";
+              description
+                "Route map reference";
+              type empty;
+            }
+          }
+          container vrf {
+            tailf:info "Specify a source virtual routing/forwarding instance";
+            description
+              "Specify a source virtual routing/forwarding instance";
+            leaf vrf-fin {
+              tailf:info "Virtual Routing/Forwarding instance name";
+              description
+                "Virtual Routing/Forwarding instance name";
+              tailf:cli-drop-node-name;
+              type string;
+            }
+            leaf global {
+              tailf:info "global VRF";
+              description
+                "global VRF";
+              type empty;
+            }
+          }
+        }
+        leaf shutdown {
+          tailf:info "Shutdown this instance of EIGRP";
+          description
+            "Shutdown this instance of EIGRP";
+          type empty;
+        }
+        container summary-metric {
+          tailf:info "Specify summary to apply metric/filtering";
+          description
+            "Specify summary to apply metric/filtering";
+          list sm-ipv4 {
+            tailf:cli-drop-node-name;
+            tailf:cli-suppress-mode;
+            key "sm-ipv4";
+            leaf sm-ipv4 {
+              tailf:info "Summary to configure static metric";
+              description
+                "Summary to configure static metric";
+              type inet:ipv4-address;
+            }
+            leaf sm-ipv4-mask {
+              tailf:info "Network mask";
+              description
+                "Network mask";
+              tailf:cli-drop-node-name;
+              type inet:ipv4-address;
+            }
+          }
+          leaf A-PERIOD-B-PERIOD-C-PERIOD-D-SLASH-nn {
+            tailf:alt-name "A.B.C.D/nn";
+            tailf:info "Summary <network>/<length>, e.g., 192.168.0.0/16";
+            description
+              "Summary <network>/<length>, e.g., 192.168.0.0/16";
+            type empty;
+          }
+        }
+        container timers {
+          tailf:info "Adjust routing timers";
+          description
+            "Adjust routing timers";
+          container active-time {
+            tailf:info "time limit for active state";
+            description
+              "time limit for active state";
+            leaf atimer {
+              tailf:info "active state time limit in minutes";
+              description
+                "active state time limit in minutes";
+              tailf:cli-drop-node-name;
+              type uint16 {
+                range "1..65535";
+              }
+            }
+            leaf disabled {
+              tailf:info "disable time limit for active state";
+              description
+                "disable time limit for active state";
+              type empty;
+            }
+          }
+          container graceful-restart {
+            tailf:info "EIGRP Graceful Restart timer";
+            description
+              "EIGRP Graceful Restart timer";
+            leaf purge-time {
+              tailf:info "EIGRP stale route purge time";
+              description
+                "EIGRP stale route purge time";
+              type empty;
+            }
+          }
+          container nsf {
+            tailf:info "EIGRP NSF timer";
+            description
+              "EIGRP NSF timer";
+            leaf converge {
+              tailf:info "EIGRP time limit for convergence after switchover";
+              description
+                "EIGRP time limit for convergence after switchover";
+              type empty;
+            }
+            leaf signal {
+              tailf:info "EIGRP time limit for signaling NSF restart";
+              description
+                "EIGRP time limit for signaling NSF restart";
+              type empty;
+            }
+          }
+        }
+        container traffic-share {
+          tailf:info "How to compute traffic share over alternate paths";
+          description
+            "How to compute traffic share over alternate paths";
+          leaf balanced {
+            tailf:info "Share inversely proportional to metric";
+            description
+              "Share inversely proportional to metric";
+            type empty;
+          }
+          container min {
+            tailf:info "All traffic shared among min metric paths";
+            description
+              "All traffic shared among min metric paths";
+            leaf across-interfaces {
+              tailf:info "Use different interfaces for equal-cost paths";
+              description
+                "Use different interfaces for equal-cost paths";
+              type empty;
+            }
+          }
+        }
+        leaf variance {
+          tailf:info "Control load balancing variance";
+          description
+            "Metric variance multiplier";
+          type uint8 {
+            range "1..128";
+          }
+        }
+      }
+      container isis {
+        tailf:cli-add-mode;
+        tailf:info "ISO IS-IS";
+        description
+          "ISO IS-IS";
+        tailf:cli-mode-name "config-router";
+        presence "true";
+        uses isis-main-grouping;
+      }
+      container isis-container {
+        tailf:cli-drop-node-name;
+        list isis {
+          tailf:info "ISO IS-IS";
+          description
+            "ISO IS-IS";
+          tailf:cli-mode-name "config-router";
+          key "area-tag";
+          leaf area-tag {
+            type string {
+              tailf:info "WORD;;ISO routing area tag";
+            }
+          }
+          uses isis-main-grouping;
+        }
+      }
+      container rip {
+        tailf:cli-add-mode;
+        tailf:cli-mode-name "config-router";
+        tailf:info "Routing Information Protocol (RIP)";
+        description
+          "Routing Information Protocol (RIP)";
+        uses router-rip-grouping;
+        container address-family {
+          tailf:info "Enter Address Family command mode";
+          description
+            "Enter Address Family command mode";
+          container ipv4 {
+            tailf:info "Address family";
+            description
+              "Address family";
+            container unicast {
+              tailf:cli-add-mode;
+              tailf:cli-mode-name "config-router-af";
+              tailf:info "Address Family Modifier";
+              tailf:cli-full-command;
+              tailf:cli-exit-command "exit-address-family" {
+                tailf:info "Exit from Address Family configuration mode";
+              }
+              uses router-rip-grouping;
+            }
+            list vrf {
+              tailf:info "Specify parameters for a VPN Routing/Forwarding instance";
+              description
+                "Specify parameters for a VPN Routing/Forwarding instance";
+              tailf:cli-full-command;
+              tailf:cli-mode-name "config-router-af";
+              tailf:cli-diff-dependency "/ios:native/ip/vrf";
+              tailf:cli-diff-dependency "/ios:native/vrf/definition";
+              tailf:cli-exit-command "exit-address-family" {
+                tailf:info "Exit from Address Family configuration mode";
+              }
+              key "name";
+              leaf name {
+                type string {
+                  tailf:info "WORD;;VPN Routing/Forwarding instance name";
+                }
+              }
+              uses address-family-vrf-grouping;
+            }
+          }
+        }
+        container default {
+          tailf:info "Set a command to its defaults";
+          description
+            "Set a command to its defaults";
+          container address-family {
+            tailf:info "Enter Address Family command mode";
+            description
+              "Enter Address Family command mode";
+            container ipv4 {
+              presence "true";
+              tailf:info "Address family";
+              description
+                "Address family";
+              leaf unicast {
+                tailf:info "Address Family Modifier";
+                description
+                  "Address Family Modifier";
+                type empty;
+              }
+              list vrf {
+                tailf:info "Specify parameters for a VPN Routing/Forwarding instance";
+                description
+                  "Specify parameters for a VPN Routing/Forwarding instance";
+                tailf:cli-suppress-mode;
+                tailf:cli-delete-when-empty;
+                tailf:cli-diff-dependency "/ios:native/ip/vrf";
+                tailf:cli-diff-dependency "/ios:native/vrf/definition";
+                key "name";
+                leaf name {
+                  type string {
+                    tailf:info "WORD;;VPN Routing/Forwarding instance name";
+                  }
+                }
+              }
+            }
+          }
+          uses default-router-rip-grouping;
+          container default-information {
+            tailf:info "Control distribution of default information";
+            description
+              "Control distribution of default information";
+            leaf originate {
+              tailf:info "Distribute a default route";
+              description
+                "Distribute a default route";
+              type empty;
+            }
+          }
+          leaf default-metric {
+            tailf:cli-full-command;
+            tailf:info "Set metric of redistributed routes";
+            description
+              "Set metric of redistributed routes";
+            type empty;
+          }
+          uses distance-grouping;
+          uses distribute-list-grouping;
+          leaf flash-update-threshold {
+            tailf:cli-full-command;
+            tailf:info "Specify flash update threshold in second";
+            description
+              "Specify flash update threshold in second";
+            type empty;
+          }
+          leaf input-queue {
+            tailf:cli-full-command;
+            tailf:info "Specify input queue depth";
+            description
+              "Specify input queue depth";
+            type empty;
+          }
+          uses offset-list-grouping;
+          leaf output-delay {
+            tailf:cli-full-command;
+            tailf:info "Interpacket delay for RIP updates";
+            description
+              "Interpacket delay for RIP updates";
+            type empty;
+          }
+          uses passive-interface-grouping;
+          container redistribute {
+            tailf:info "Redistribute information from another routing protocol";
+            description
+              "Redistribute information from another routing protocol";
+            uses default-redistribute-grouping;
+          }
+          container timers {
+            tailf:info "Adjust routing timers";
+            description
+              "Adjust routing timers";
+            leaf basic {
+              tailf:info "Basic routing protocol update timers";
+              description
+                "Basic routing protocol update timers";
+              type empty;
+            }
+          }
+          container traffic-share {
+            tailf:info "How to compute traffic share over alternate paths";
+            description
+              "How to compute traffic share over alternate paths";
+            container min {
+              tailf:info "All traffic shared among min metric paths";
+              description
+                "All traffic shared among min metric paths";
+              leaf across-interfaces {
+                tailf:info "Use different interfaces for equal-cost paths";
+                description
+                  "Use different interfaces for equal-cost paths";
+                type empty;
+              }
+            }
+          }
+          leaf version {
+            tailf:cli-full-command;
+            tailf:info "Set routing protocol version";
+            description
+              "Set routing protocol version";
+            type empty;
+          }
+        }
+      }
+      container lisp {
+        tailf:info "Locator/ID Separation Protocol";
+        description
+          "Locator/ID Separation Protocol";
+        tailf:cli-add-mode;
+        tailf:cli-mode-name "config-router-lisp";
+        uses router-lisp-grouping;
+      }
+      list lisp-list {
+        tailf:cli-drop-node-name;
+        description
+          "Locator/ID Separation Protocol";
+        tailf:cli-mode-name "config-router-lisp";
+        key "lisp";
+        leaf lisp {
+          tailf:info "Locator/ID Separation Protocol";
+          description
+            "Locator/ID Separation Protocol";
+          tailf:cli-expose-key-name;
+          type uint16 {
+            tailf:info "<0-65520>;;router lisp ID";
+          }
+        }
+        uses router-lisp-grouping;
+      }
+    }
+
+    grouping config-service-chain-grouping {
+      leaf description {
+        tailf:info "Service function forwarder description";
+        description
+          "Service function forwarder description";
+        tailf:cli-multi-value;
+        type string {
+          tailf:info "LINE;;Up to 256 characters describing this service function forwarder";
+          length "1..256";
+        }
+      }
+      container ip {
+        tailf:info "IP address for Service Function Forwarder";
+        description
+          "IP address for Service Function Forwarder";
+        leaf address {
+          tailf:info "Set IPv4 address";
+          description
+            "Set IPv4 address";
+          type inet:ipv4-address {
+            tailf:info "A.B.C.D;;IP address of Service Function Forwarder";
+          }
+        }
+      }
+    }
+    container service-chain {
+      tailf:info "Service Chain mode";
+      description
+        "Service Chain mode";
+      list service-function {
+        tailf:info "Service function details";
+        description
+          "Service function details";
+        tailf:cli-mode-name "config-service-chain-sf";
+        key "name";
+        leaf name {
+          tailf:info "WORD;;Service function name";
+          description
+            "WORD;;Service function name";
+          type string;
+        }
+        container config-service-chain-sf-mode {
+          tailf:cli-drop-node-name;
+          leaf description {
+            tailf:info "Service function description";
+            description
+              "Service function description";
+            tailf:cli-multi-value;
+            tailf:cli-full-command;
+            type string {
+              tailf:info "LINE;;Up to 256 characters describing this service function";
+              length "1..256";
+            }
+          }
+          container encapsulation {
+            tailf:info "Service node encapsulation";
+            description
+              "Service node encapsulation";
+            container gre {
+              tailf:info "Service node encapsulation type";
+              description
+                "Service node encapsulation type";
+              leaf enhanced {
+                tailf:info "Add enhanced NSH TLV information";
+                description
+                  "Add enhanced NSH TLV information";
+                type enumeration {
+                  enum "copy" {
+                    tailf:info "Send a copy of the packet";
+                  }
+                  enum "divert" {
+                    tailf:info "Divert the packet (default)";
+                  }
+                }
+              }
+            }
+            leaf none {
+              tailf:info "Service node encapsulation type";
+              description
+                "Service node encapsulation type";
+              type empty;
+            }
+          }
+          container ip {
+            tailf:info "Service node";
+            description
+              "Service node";
+            leaf address {
+              type inet:ipv4-address {
+                tailf:info "A.B.C.D;;Service node";
+              }
+            }
+          }
+        }
+      }
+      container service-function-forwarder {
+        tailf:info "Service function forwarder details";
+        description
+          "Service function forwarder details";
+        list service-ff-name {
+          tailf:cli-drop-node-name;
+          tailf:cli-mode-name "config-service-chain-sff";
+          key "name";
+          leaf name {
+            tailf:info "WORD;;Service function forwarder name";
+            description
+              "WORD;;Service function forwarder name";
+            type string;
+          }
+          uses config-service-chain-grouping;
+        }
+        container local {
+          tailf:info "Local service function forwarder";
+          description
+            "Local service function forwarder";
+          tailf:cli-add-mode;
+          tailf:cli-mode-name "config-service-chain-sff";
+          presence "true";
+          uses config-service-chain-grouping;
+        }
+      }
+      list service-path {
+        tailf:info "Service Path Entries";
+        description
+          "Service Path Entries";
+        tailf:cli-mode-name "config-service-chain-path";
+        key "service-path-id";
+        leaf service-path-id {
+          type uint32 {
+            range "0..16777215";
+            tailf:info "<0-16777215>;;Service Path ID";
+          }
+        }
+        container config-service-chain-path-mode {
+          tailf:cli-drop-node-name;
+          leaf description {
+            tailf:info "Path Description";
+            description
+              "Path Description";
+            tailf:cli-multi-value;
+            tailf:cli-full-command;
+            type string {
+              tailf:info "LINE;;Up to 256 characters describing this service path";
+              length "1..256";
+            }
+          }
+          container service-index {
+            tailf:info "Service Index";
+            description
+              "Service Index";
+            list services {
+              tailf:cli-drop-node-name;
+              tailf:cli-suppress-mode;
+              key "service-index-id";
+              leaf service-index-id {
+                type uint8 {
+                  range "2..255";
+                  tailf:info "<2-255>;;Service Index ID";
+                }
+              }
+              choice service-type-choice {
+                leaf service-function {
+                  tailf:info "Service Function name";
+                  description
+                    "Service Function name";
+                  type string {
+                    tailf:info "WORD;;Service Function name";
+                  }
+                }
+                leaf service-function-forwarder {
+                  tailf:info "Service Function Forwarder name";
+                  description
+                    "Service Function Forwarder name";
+                  type string {
+                    tailf:info "WORD;;Service Function Forwarder name";
+                  }
+                }
+                leaf terminate {
+                  tailf:info "Terminate(Proxy)";
+                  description
+                    "Terminate(Proxy)";
+                  type empty;
+                }
+              }
+            }
+          }
+        }
+      }
+    }
+    container service-routing {
+      tailf:info "Configure service-routing";
+      description
+        "Configure service-routing";
+      leaf capabilities-manager {
+        tailf:info "Service-Routing Capabilities Manager configuration";
+        description
+          "Service-Routing Capabilities Manager configuration";
+        tailf:cli-boolean-no;
+        tailf:cli-trim-default;
+        type boolean;
+      }
+    }
+    container performance {
+      tailf:info "Global Performance monitor configuration";
+      description
+        "Global Performance monitor configuration";
+      container monitor {
+        tailf:info "monitor";
+        description
+          "monitor";
+        list context {
+          tailf:info "Define ezPM context";
+          description
+            "Define ezPM context";
+          tailf:cli-mode-name "config-perf-mon";
+          key "name";
+          leaf name {
+            type string {
+              tailf:info "WORD;;ezPM context name";
+            }
+          }
+          leaf profile {
+            tailf:info "Select ezPM profile";
+            description
+              "Select ezPM profile";
+            tailf:cli-hide-in-submode;
+            type enumeration {
+              enum "application-experience" {
+                tailf:info "Application eXperience performance monitor profile";
+              }
+              enum "application-performance" {
+                tailf:info "Application performance profile";
+              }
+              enum "application-statistics" {
+                tailf:info "Application statistics profile";
+              }
+            }
+          }
+          container default {
+            tailf:info "Set a command to its defaults";
+            description
+              "Set a command to its defaults";
+            leaf description {
+              tailf:info "Provide a description for ezPM context";
+              description
+                "Provide a description for ezPM context";
+              tailf:cli-full-command;
+              type empty;
+            }
+            uses performance-monitor-context-default-grouping;
+          }
+          leaf description {
+            tailf:info "Provide a description for ezPM context";
+            description
+              "Provide a description for ezPM context";
+            tailf:cli-multi-value;
+            tailf:cli-full-command;
+            type string {
+              tailf:info "LINE;;ezPM context description";
+            }
+          }
+          uses performance-monitor-context-grouping;
+        }
+        container observation-point {
+          tailf:info "Select observation point";
+          description
+            "Select observation point";
+          leaf encrypted-text {
+            tailf:info "Select clear text for observation";
+            description
+              "Select clear text for observation";
+            tailf:cli-full-command;
+            type empty;
+          }
+        }
+      }
+    }
+    container otv {
+      tailf:info "Configure OTV information";
+      description
+        "Configure OTV information";
+      container fragmentation {
+        tailf:info "Clear the DF (Don't Fragment) bit in the IP header";
+        description
+          "Clear the DF (Don't Fragment) bit in the IP header";
+        container join-interface {
+          tailf:info "Allow fragmentation for overlays using this join-interface";
+          description
+            "Allow fragmentation for overlays using this join-interface";
+          uses interface-grouping;
+        }
+      }
+      container isis {
+        tailf:info "OTV ISIS instance subcommands";
+        description
+          "OTV ISIS instance subcommands";
+        list Overlay {
+          tailf:info "Overlay interface";
+          description
+            "Overlay interface";
+          tailf:cli-mode-name "config-otv-isis";
+          key "number";
+          leaf number {
+            type uint16 {
+              tailf:info "<0-512>;;Overlay interface number";
+              range "0..512";
+            }
+          }
+          uses otv-isis-overlay-grouping;
+        }
+        container site {
+          tailf:info "Site Instance";
+          description
+            "Site Instance";
+          tailf:cli-add-mode;
+          tailf:cli-mode-name "config-otv-isis";
+          uses otv-isis-site-grouping;
+        }
+      }
+      list site {
+        tailf:info "OTV site network configuration";
+        description
+          "OTV site network configuration";
+        tailf:cli-mode-name "config-otv-site";
+        key "bridge-domain";
+        leaf bridge-domain {
+          tailf:info "Bridge-domain to discover local OTV enabled devices";
+          description
+            "Bridge-domain to discover local OTV enabled devices";
+          tailf:cli-expose-key-name;
+          tailf:cli-full-command;
+          type uint16 {
+            tailf:info "<1-8192>;;Bridge-domain ID";
+            range "1..8192";
+          }
+        }
+        container default {
+          tailf:info "Set a command to its defaults";
+          description
+            "Set a command to its defaults";
+          container otv {
+            tailf:info "OTV site configuration subcommands";
+            description
+              "OTV site configuration subcommands";
+            uses otv-isis-grouping;
+          }
+        }
+        container otv {
+          tailf:info "OTV site configuration subcommands";
+          description
+            "OTV site configuration subcommands";
+          uses otv-isis-grouping;
+        }
+      }
+      leaf site-identifier {
+        tailf:info "OTV site id";
+        description
+          "OTV site id";
+        tailf:cli-full-command;
+        type union {
+          type uint32 {
+            tailf:info "<0x1-0xFFFFFFFF>;;site-id in Hex format";
+          }
+          type string {
+            tailf:info "H.H.H;;site-id in MAC format";
+          }
+        }
+      }
+    }
+    container utd {
+      tailf:info "Global Unified Threat Defense";
+      description
+        "Global Unified Threat Defense";
+      tailf:cli-add-mode;
+      tailf:cli-mode-name "config-utd";
+      presence "true";
+      container engine {
+        tailf:info "UTD engine";
+        description
+          "UTD engine";
+        container advanced {
+          tailf:info "UTD engine advanced";
+          description
+            "UTD engine advanced";
+          tailf:cli-add-mode;
+          tailf:cli-mode-name "config-utd-eng-adv";
+          container default {
+            tailf:info "Set a command to its defaults";
+            description
+              "Set a command to its defaults";
+            container threat {
+              tailf:info "Provide threat detection";
+              description
+                "Provide threat detection";
+              presence "true";
+            }
+          }
+          container threat {
+            tailf:info "Provide threat detection";
+            description
+              "Provide threat detection";
+            presence "true";
+            leaf detection {
+              tailf:info "Provide threat detection";
+              description
+                "Provide threat detection";
+              type empty;
+            }
+          }
+        }
+        container standard {
+          tailf:info "UTD engine standard";
+          description
+            "UTD engine standard";
+          tailf:cli-add-mode;
+          tailf:cli-mode-name "config-utd-eng-std";
+          container default {
+            tailf:info "Set a command to its defaults";
+            description
+              "Set a command to its defaults";
+            leaf policy {
+              tailf:info "Provide the policy option (default=balanced)";
+              description
+                "Provide the policy option (default=balanced)";
+              tailf:cli-full-command;
+              type empty;
+            }
+            leaf threat {
+              tailf:info "Provide the threat detection/protection option (default=detection)";
+              description
+                "Provide the threat detection/protection option (default=detection)";
+              tailf:cli-full-command;
+              type empty;
+            }
+          }
+          uses utd-engine-standard-grouping;
+        }
+      }
+      container whitelist {
+        tailf:info "UTD whitelist config submode";
+        description
+          "UTD whitelist config submode";
+        tailf:cli-add-mode;
+        tailf:cli-mode-name "config-utd-whitelist";
+        container signature {
+          tailf:info "Provide signatures for the whitelist";
+          description
+            "Provide signatures for the whitelist";
+          tailf:cli-sequence-commands;
+          tailf:cli-compact-syntax;
+          leaf id {
+            tailf:info "Provide signature id for the whitelist";
+            description
+              "Provide signature id for the whitelist";
+            type uint64 {
+              tailf:info "<0-4294967295>;;Provide the signature ID to be whitelisted";
+              range "0..4294967295";
+            }
+          }
+          leaf comment {
+            tailf:info "Provide a comment for the signature";
+            description
+              "Provide a comment for the signature";
+            tailf:cli-optional-in-sequence;
+            tailf:cli-multi-value;
+            type string {
+              tailf:info "LINE;;Enter the comment string";
+            }
+          }
+        }
+      }
+    }
+    container remote-management {
+      tailf:info "Enable the remote managment";
+      description
+        "Enable the remote managment";
+      tailf:cli-add-mode;
+      tailf:cli-mode-name "config-remote-mgmt";
+      leaf dmi {
+        tailf:info "data-model-interface";
+        description
+          "data-model-interface";
+        tailf:cli-full-command;
+        type empty;
+      }
+      leaf restful-api {
+        tailf:info "RESTful API";
+        description
+          "RESTful API";
+        tailf:cli-boolean-no;
+        tailf:cli-trim-default;
+        type boolean;
+        default "true";
+      }
+    }
+    list virtual-service {
+      tailf:info "Configure virtual service";
+      description
+        "Configure virtual service";
+      tailf:cli-mode-name "config-virt-serv";
+      key "name";
+      leaf name {
+        type string {
+          tailf:info "WORD;;Virtual service name (up to 63 characters)";
+          length "1..63";
+        }
+      }
+      leaf activate {
+        tailf:info "Activate configured virtual service";
+        description
+          "Activate configured virtual service";
+        tailf:cli-full-command;
+        type empty;
+      }
+      leaf profile {
+        type string;
+      }
+      container vnic {
+        tailf:info "Guest vnic configuration";
+        description
+          "Guest vnic configuration";
+        container gateway {
+          tailf:info "Gateway interface to connect to the guest vnic";
+          description
+            "Gateway interface to connect to the guest vnic";
+          list VirtualPortGroup {
+            tailf:info "Virtual Port Group";
+            description
+              "Virtual Port Group";
+            tailf:cli-mode-name "config-virt-serv-vnic";
+            tailf:cli-allow-join-with-key {
+              tailf:cli-display-joined;
+            }
+            key "number";
+            leaf number {
+              type uint16 {
+                tailf:info "<0-31>;;VirtualPortGroup interface number";
+                range "0..31";
+              }
+            }
+            container guest {
+              tailf:info "Configure guest vnic address";
+              description
+                "Configure guest vnic address";
+              choice ip-address {
+                case ipv4-case {
+                  container ip {
+                    tailf:info "Guest vnic IP address";
+                    description
+                      "Guest vnic IP address";
+                    leaf address {
+                      tailf:info "Set the IP address of virtual interface on guest";
+                      description
+                        "Set the IP address of virtual interface on guest";
+                      type inet:ipv4-address {
+                        tailf:info "A.B.C.D;;IP address";
+                      }
+                    }
+                  }
+                }
+                case ipv6-case {
+                  container ipv6 {
+                    tailf:info "Guest vnic IPv6 address";
+                    description
+                      "Guest vnic IPv6 address";
+                    leaf address {
+                      tailf:info "Set the IPv6 address of virtual interface on guest";
+                      description
+                        "Set the IPv6 address of virtual interface on guest";
+                      type inet:ipv6-address {
+                        tailf:info "X:X:X:X::X;;IPv6 prefix";
+                      }
+                    }
+                  }
+                }
+              }
+            }
+          }
+        }
+        container management {
+          tailf:info "Gateway interface to connect to the guest vnic";
+          description
+            "Gateway interface to connect to the guest vnic";
+          tailf:cli-add-mode;
+          tailf:cli-mode-name "config-virt-serv-vnic";
+          leaf GigabitEthernet0 {
+            tailf:info "Management Ethernet Interface";
+            description
+              "Management Ethernet Interface";
+            tailf:cli-hide-in-submode;
+            type empty;
+          }
+          container guest {
+            tailf:info "Configure guest vnic address";
+            description
+              "Configure guest vnic address";
+            choice ip-address {
+              case ipv4-case {
+                container ip {
+                  tailf:info "Guest vnic IP address";
+                  description
+                    "Guest vnic IP address";
+                  leaf address {
+                    tailf:info "Set the IP address of virtual interface on guest";
+                    description
+                      "Set the IP address of virtual interface on guest";
+                    type inet:ipv4-address {
+                      tailf:info "A.B.C.D;;IP address";
+                    }
+                  }
+                }
+              }
+              case ipv6-case {
+                container ipv6 {
+                  tailf:info "Guest vnic IPv6 address";
+                  description
+                    "Guest vnic IPv6 address";
+                  leaf address {
+                    tailf:info "Set the IPv6 address of virtual interface on guest";
+                    description
+                      "Set the IPv6 address of virtual interface on guest";
+                    type inet:ipv6-address {
+                      tailf:info "X:X:X:X::X;;IPv6 prefix";
+                    }
+                  }
+                }
+              }
+            }
+          }
+        }
+      }
+    }
+  }
+  augment "/ios:native/router/rip/default/distribute-list/accesslist" {
+    leaf id {
+      tailf:cli-drop-node-name;
+      tailf:cli-prefix-key;
+      mandatory true;
+      tailf:cli-disallow-value "prefix|gateway|route-map";
+      type default-access-list-id-type;
+    }
+  }
+  augment "/ios:native/router/rip/distribute-list/accesslist" {
+    leaf id {
+      tailf:cli-drop-node-name;
+      tailf:cli-prefix-key;
+      mandatory true;
+      tailf:cli-disallow-value "prefix|gateway|route-map";
+      type access-list-id-type;
+    }
+  }
+  augment "/ios:native/router/rip/default/distribute-list/accesslist-ifname" {
+    leaf id {
+      tailf:cli-drop-node-name;
+      tailf:cli-prefix-key;
+      mandatory true;
+      tailf:cli-disallow-value "prefix|gateway|route-map";
+      type default-access-list-id-type;
+    }
+  }
+  augment "/ios:native/router/rip/distribute-list/accesslist-ifname" {
+    leaf id {
+      tailf:cli-drop-node-name;
+      tailf:cli-prefix-key;
+      mandatory true;
+      tailf:cli-disallow-value "prefix|gateway|route-map";
+      type access-list-id-type;
+    }
+  }
+  augment "/ios:native/router/rip/default/distance/distance-list" {
+    leaf access-list {
+      tailf:cli-drop-node-name;
+      type default-access-list-standard-id-type;
+    }
+  }
+  augment "/ios:native/router/rip/distance/distance-list" {
+    leaf access-list {
+      tailf:cli-drop-node-name;
+      type access-list-standard-id-type;
+    }
+  }
+  augment "/ios:native/router/rip/default/offset-list" {
+    leaf id {
+      tailf:cli-incomplete-command;
+      tailf:cli-drop-node-name;
+      tailf:cli-prefix-key {
+        tailf:cli-before-key "1";
+      }
+      mandatory true;
+      tailf:cli-disallow-value "in|out";
+      type default-offset-list-id-type;
+    }
+  }
+  augment "/ios:native/router/rip/offset-list" {
+    leaf id {
+      tailf:cli-incomplete-command;
+      tailf:cli-drop-node-name;
+      tailf:cli-prefix-key {
+        tailf:cli-before-key "1";
+      }
+      mandatory true;
+      tailf:cli-disallow-value "in|out";
+      type offset-list-id-type;
+    }
+  }
+  augment "/ios:native/router/ospf/distribute-list/accesslist" {
+    leaf id {
+      tailf:cli-drop-node-name;
+      tailf:cli-prefix-key;
+      mandatory true;
+      tailf:cli-disallow-value "prefix|gateway|route-map";
+      type access-list-id-type;
+    }
+  }
+  augment "/ios:native/router/ospf/distribute-list/accesslist-ifname" {
+    leaf id {
+      tailf:cli-drop-node-name;
+      tailf:cli-prefix-key;
+      mandatory true;
+      tailf:cli-disallow-value "prefix|gateway|route-map";
+      type access-list-id-type;
+    }
+  }
+  augment "/ios:native" {
+    container snmp {
+      tailf:info "Modify non engine SNMP parameters";
+      description
+        "Modify non engine SNMP parameters";
+      container ifmib {
+        tailf:info "IF-MIB commands";
+        description
+          "IF-MIB commands";
+        container ifindex {
+          tailf:info "ifindex persistence";
+          description
+            "ifindex persistence";
+          leaf persist {
+            tailf:info "Persist interface indices";
+            description
+              "Persist interface indices";
+            type empty;
+          }
+        }
+        container ifalias {
+          tailf:info "ifAlias description option, by default it is limited to 64 character";
+          description
+            "ifAlias description option, by default it is limited to 64 character";
+          leaf long {
+            tailf:info "ifAlias description can be up to 256 characters";
+            description
+              "ifAlias description can be up to 256 characters";
+            type empty;
+          }
+        }
+      }
+      container mib {
+        tailf:info "MIB commands";
+        description
+          "MIB commands";
+        container bulkstat {
+          tailf:info "Bulkstat Configuration commands";
+          description
+            "Bulkstat Configuration commands";
+          list object-list {
+            tailf:info "Configure an Object List.";
+            description
+              "Configure an Object List.";
+            tailf:cli-suppress-mode;
+            tailf:cli-delete-when-empty;
+            key "name";
+            leaf name {
+              type string {
+                tailf:info "WORD;;Name of object list";
+              }
+            }
+          }
+        }
+        leaf persist {
+          tailf:info "Persistence for MIBS";
+          description
+            "Persistence for MIBS";
+          tailf:cli-full-command;
+          type enumeration {
+            enum "cbqos" {
+              tailf:info "CBQOS MIB index persistence";
+            }
+            enum "circuit" {
+              tailf:info "Circuit MIB persistence";
+            }
+          }
+        }
+      }
+    }
+    container snmp-server {
+      tailf:info "Modify SNMP engine parameters";
+      description
+        "Modify SNMP engine parameters";
+      leaf chassis-id {
+        tailf:info "String to uniquely identify this chassis";
+        description
+          "String to uniquely identify this chassis";
+        tailf:cli-multi-value;
+        type string {
+          tailf:info "LINE;;Unique ID string";
+        }
+      }
+      list community {
+        tailf:info "Enable SNMP; set community string and access privs";
+        description
+          "Enable SNMP; set community string and access privs";
+        tailf:cli-suppress-mode;
+        tailf:cli-delete-when-empty;
+        tailf:cli-compact-syntax;
+        tailf:cli-sequence-commands {
+          tailf:cli-reset-siblings;
+        }
+        key "name";
+        leaf name {
+          type string {
+            tailf:info "WORD;;SNMP community string";
+          }
+        }
+        leaf view {
+          tailf:info "Restrict this community to a named MIB view";
+          description
+            "Restrict this community to a named MIB view";
+          tailf:cli-optional-in-sequence;
+          type string {
+            tailf:info "WORD;;MIB view to which this community has access";
+          }
+        }
+        choice access-choice {
+          leaf RO {
+            tailf:info "Read-only access with this community string";
+            description
+              "Read-only access with this community string";
+            tailf:cli-optional-in-sequence;
+            type empty;
+          }
+          leaf RW {
+            tailf:info "Read-write access with this community string";
+            description
+              "Read-write access with this community string";
+            tailf:cli-optional-in-sequence;
+            type empty;
+          }
+        }
+        choice access-list-choice {
+          case ipv6 {
+            leaf ipv6 {
+              tailf:info "Specify IPv6 Named Access-List";
+              description
+                "Specify IPv6 Named Access-List";
+              type string {
+                tailf:info "WORD;;IPv6 Access-list name";
+              }
+            }
+          }
+          case ipv4 {
+            leaf access-list-name {
+              tailf:cli-drop-node-name;
+              type std-acl-type;
+            }
+          }
+        }
+      }
+      leaf contact {
+        tailf:info "Text for mib object sysContact";
+        description
+          "Text for mib object sysContact";
+        tailf:cli-multi-value;
+        type string {
+          tailf:info "LINE;;identification of the contact person for this managed node";
+        }
+      }
+      container enable {
+        tailf:info "Enable SNMP Traps or Informs";
+        description
+          "Enable SNMP Traps or Informs";
+        choice enable-choice {
+          case informs {
+            leaf informs {
+              tailf:info "Enable SNMP Informs";
+              description
+                "Enable SNMP Informs";
+              type empty;
+            }
+          }
+          case traps {
+            container traps {
+              tailf:info "Enable SNMP Traps";
+              description
+                "Enable SNMP Traps";
+              leaf aaa_server {
+                tailf:info "Enable SNMP AAA Server traps";
+                description
+                  "Enable SNMP AAA Server traps";
+                tailf:cli-full-command;
+                type empty;
+              }
+              container alarms {
+                tailf:info "Enable SNMP alarms traps";
+                description
+                  "Enable SNMP alarms traps";
+                tailf:cli-delete-when-empty;
+                presence "true";
+                leaf alarm-type {
+                  tailf:cli-drop-node-name;
+                  type union {
+                    type uint8 {
+                      tailf:info "<1-4>;;Alarm Logging severity level";
+                      range "1..4";
+                    }
+                    type enumeration {
+                      enum "critical" {
+                        tailf:info "Service affecting Condition       (severity=1)";
+                      }
+                      enum "informational" {
+                        tailf:info "Informational messages            (severity=4)";
+                      }
+                      enum "major" {
+                        tailf:info "Immediate action needed           (severity=2)";
+                      }
+                      enum "minor" {
+                        tailf:info "Minor warning conditions          (severity=3)";
+                      }
+                    }
+                  }
+                }
+              }
+              container atm {
+                tailf:info "Enable SNMP atm traps";
+                description
+                  "Enable SNMP atm traps";
+                container pvc {
+                  tailf:info "Enable SNMP atm pvc traps";
+                  description
+                    "Enable SNMP atm pvc traps";
+                  tailf:cli-sequence-commands;
+                  tailf:cli-delete-when-empty;
+                  presence "true";
+                  container extension {
+                    tailf:info "Enable SNMP atm pvc extension traps";
+                    description
+                      "Enable SNMP atm pvc extension traps";
+                    tailf:cli-optional-in-sequence;
+                    leaf down {
+                      tailf:info "Enable SNMP atm pvc extended down trap";
+                      description
+                        "Enable SNMP atm pvc extended down trap";
+                      tailf:cli-full-command;
+                      type empty;
+                    }
+                    leaf up {
+                      tailf:info "Enable SNMP atm pvc extended up traps";
+                      description
+                        "Enable SNMP atm pvc extended up traps";
+                      tailf:cli-full-command;
+                      type empty;
+                    }
+                    leaf mibversion {
+                      tailf:info "Extension MIB version to be used";
+                      description
+                        "Extension MIB version to be used";
+                      tailf:cli-full-command;
+                      type enumeration {
+                        enum "1" {
+                          tailf:info "Use Extension mibversion 1";
+                        }
+                        enum "2" {
+                          tailf:info "Use Extension mibversion 2";
+                        }
+                      }
+                    }
+                    container oam {
+                      tailf:info "Enable SNMP atm pvc extended oam trap";
+                      description
+                        "Enable SNMP atm pvc extended oam trap";
+                      container failure {
+                        tailf:info "Enable SNMP atm pvc extended any oam failure trap";
+                        description
+                          "Enable SNMP atm pvc extended any oam failure trap";
+                        leaf loopback {
+                          tailf:info "Enable SNMP atm pvc extended oam loopback failure trap";
+                          description
+                            "Enable SNMP atm pvc extended oam loopback failure trap";
+                          tailf:cli-full-command;
+                          type empty;
+                        }
+                      }
+                    }
+                  }
+                  leaf interval {
+                    tailf:info "minimum period between successive traps";
+                    description
+                      "minimum period between successive traps";
+                    tailf:cli-optional-in-sequence;
+                    type uint16 {
+                      tailf:info "<1-3600>;;minimum period between successive traps (in seconds)";
+                      range "1..3600";
+                    }
+                  }
+                  leaf fail-interval {
+                    tailf:info "minimum period for storing the failed timestamp";
+                    description
+                      "minimum period for storing the failed timestamp";
+                    type uint16 {
+                      tailf:info "<0-3600>;;minimum period for storing the failed timestamp (in seconds)";
+                      range "0..3600";
+                    }
+                  }
+                }
+                container subif {
+                  tailf:info "Enable SNMP atm subinterface traps";
+                  description
+                    "Enable SNMP atm subinterface traps";
+                  tailf:cli-sequence-commands;
+                  tailf:cli-delete-when-empty;
+                  presence "true";
+                  leaf interval {
+                    tailf:info "Interval duration in which to limit the number of traps sent";
+                    description
+                      "Interval duration in which to limit the number of traps sent";
+                    tailf:cli-optional-in-sequence;
+                    type uint16 {
+                      tailf:info "<0-3600>;;Duration of rate-limiting interval (0-3600 seconds)";
+                      range "0..3600";
+                    }
+                  }
+                  leaf count {
+                    tailf:info "Maximum number of traps sent per interval";
+                    description
+                      "Maximum number of traps sent per interval";
+                    type uint16 {
+                      tailf:info "<1-1000>  Maximum traps per interval (1-1000)";
+                      range "1..1000";
+                    }
+                  }
+                }
+              }
+              leaf authenticate-fail {
+                tailf:info "Enable SNMP 802.11 Authentication Fail Trap";
+                description
+                  "Enable SNMP 802.11 Authentication Fail Trap";
+                tailf:cli-full-command;
+                type empty;
+              }
+              container auth-framework {
+                tailf:cli-delete-when-empty;
+                presence "true";
+                leaf sec-violation {
+                  type empty;
+                }
+              }
+              leaf bfd {
+                tailf:cli-full-command;
+                type empty;
+              }
+              leaf bgp {
+                tailf:info "Enable BGP traps";
+                description
+                  "Enable BGP traps";
+                tailf:cli-full-command;
+                type empty;
+              }
+              container bridge {
+                tailf:cli-delete-when-empty;
+                presence "true";
+                leaf newroot {
+                  type empty;
+                }
+                leaf topologychange {
+                  type empty;
+                }
+              }
+              leaf bstun {
+                tailf:info "Enable SNMP BSTUN traps";
+                description
+                  "Enable SNMP BSTUN traps";
+                tailf:cli-full-command;
+                type empty;
+              }
+              container bulkstat {
+                tailf:info "Enable Data-Collection-MIB Collection notifications";
+                description
+                  "Enable Data-Collection-MIB Collection notifications";
+                tailf:cli-compact-syntax;
+                tailf:cli-delete-when-empty;
+                presence "true";
+                leaf collection {
+                  tailf:info "Enable Data-Collection-MIB Collection notifications";
+                  description
+                    "Enable Data-Collection-MIB Collection notifications";
+                  type empty;
+                }
+                leaf transfer {
+                  tailf:info "Enable Data-Collection-MIB Transfer notifications";
+                  description
+                    "Enable Data-Collection-MIB Transfer notifications";
+                  type empty;
+                }
+              }
+              container call-home {
+                tailf:info "Enable CISCO-CALLHOME-MIB traps";
+                description
+                  "Enable CISCO-CALLHOME-MIB traps";
+                tailf:cli-delete-when-empty;
+                presence "true";
+                leaf message-send-fail {
+                  type empty;
+                }
+                leaf server-fail {
+                  type empty;
+                }
+              }
+              leaf c2900 {
+                tailf:info "Enable SNMP c2900 traps";
+                description
+                  "Enable SNMP c2900 traps";
+                tailf:cli-full-command;
+                type empty;
+              }
+              container c6kxbar {
+                tailf:info "Enable SNMP CISCO-CAT6K-CROSSBAR-MIB traps";
+                description
+                  "Enable SNMP CISCO-CAT6K-CROSSBAR-MIB traps";
+                tailf:cli-delete-when-empty;
+                presence "true";
+                leaf intbus-crcexcd {
+                  tailf:info "Enable SNMP cc6kxbarIntBusCRCErrExcdNotif notification";
+                  description
+                    "Enable SNMP cc6kxbarIntBusCRCErrExcdNotif notification";
+                  type empty;
+                }
+                leaf intbus-crcrcvrd {
+                  tailf:info "Enable SNMP cc6kxbarIntBusCRCErrRcvrdNotif notification";
+                  description
+                    "Enable SNMP cc6kxbarIntBusCRCErrRcvrdNotif notification";
+                  type empty;
+                }
+                leaf swbus {
+                  tailf:info "Enable SNMP cc6kxbarSwBusStatusChangeNotif notification";
+                  description
+                    "Enable SNMP cc6kxbarSwBusStatusChangeNotif notification";
+                  type empty;
+                }
+              }
+              leaf casa {
+                tailf:info "Enable SNMP casa traps";
+                description
+                  "Enable SNMP casa traps";
+                tailf:cli-full-command;
+                type empty;
+              }
+              leaf ccme {
+                tailf:cli-full-command;
+                type empty;
+              }
+              container cef {
+                leaf resource-failure {
+                  type empty;
+                }
+                leaf peer-state-change {
+                  type empty;
+                }
+                leaf peer-fib-state-change {
+                  type empty;
+                }
+                leaf inconsistency {
+                  type empty;
+                }
+              }
+              leaf cluster {
+                tailf:info "Enable Cluster traps";
+                description
+                  "Enable Cluster traps";
+                type empty;
+              }
+              leaf channel {
+                tailf:info "Enable SNMP channel traps";
+                description
+                  "Enable SNMP channel traps";
+                tailf:cli-full-command;
+                type empty;
+              }
+              leaf chassis {
+                tailf:info "Enable SNMP chassis traps";
+                description
+                  "Enable SNMP chassis traps";
+                type empty;
+              }
+              leaf cnpd {
+                tailf:info "Enable NBAR Protocol Discovery traps";
+                description
+                  "Enable NBAR Protocol Discovery traps";
+                tailf:cli-full-command;
+                type empty;
+              }
+              leaf config {
+                tailf:info "Enable SNMP config traps";
+                description
+                  "Enable SNMP config traps";
+                tailf:cli-full-command;
+                type empty;
+              }
+              leaf copy-config {
+                tailf:info "Enable SNMP copy-config traps";
+                description
+                  "Enable SNMP copy-config traps";
+                tailf:cli-full-command;
+                type empty;
+              }
+              leaf config-copy {
+                tailf:info "Enable SNMP config-copy traps";
+                description
+                  "Enable SNMP config-copy traps";
+                tailf:cli-full-command;
+                type empty;
+              }
+              leaf config-ctid {
+                tailf:cli-full-command;
+                type empty;
+              }
+              container cpu {
+                tailf:info "Allow cpu related traps";
+                description
+                  "Allow cpu related traps";
+                tailf:cli-delete-when-empty;
+                presence "true";
+                leaf threshold {
+                  tailf:info "Allow CPU utilization threshold violation traps";
+                  description
+                    "Allow CPU utilization threshold violation traps";
+                  type empty;
+                }
+              }
+              leaf cpu_threshold {
+                tailf:info "Enables CPU threshold notifications";
+                description
+                  "Enables CPU threshold notifications";
+                tailf:cli-full-command;
+                type empty;
+              }
+              container csg {
+                tailf:info "Enable SNMP CSG traps";
+                description
+                  "Enable SNMP CSG traps";
+                tailf:cli-delete-when-empty;
+                presence "true";
+                leaf agent {
+                  tailf:info "Enable SNMP Agent Server traps";
+                  description
+                    "Enable SNMP Agent Server traps";
+                  type empty;
+                }
+                leaf database {
+                  tailf:info "Enable SNMP CSG database traps";
+                  description
+                    "Enable SNMP CSG database traps";
+                  type empty;
+                }
+                leaf quota-server {
+                  tailf:info "Enable SNMP Quota Server traps";
+                  description
+                    "Enable SNMP Quota Server traps";
+                  type empty;
+                }
+              }
+              leaf dial {
+                tailf:info "Enable SNMP dial control traps";
+                description
+                  "Enable SNMP dial control traps";
+                tailf:cli-full-command;
+                type empty;
+              }
+              leaf director {
+                tailf:info "Enable SNMP Distributed Director traps";
+                description
+                  "Enable SNMP Distributed Director traps";
+                tailf:cli-full-command;
+                type empty;
+              }
+              leaf dlsw {
+                tailf:info "Enable SNMP dlsw traps";
+                description
+                  "Enable SNMP dlsw traps";
+                tailf:cli-full-command;
+                type empty;
+              }
+              leaf deauthenticate {
+                tailf:info "Enable SNMP 802.11 Deauthentication Trap";
+                description
+                  "Enable SNMP 802.11 Deauthentication Trap";
+                tailf:cli-full-command;
+                type empty;
+              }
+              leaf disassociate {
+                tailf:info "Enable SNMP 802.11 Disassociation Trap";
+                description
+                  "Enable SNMP 802.11 Disassociation Trap";
+                tailf:cli-full-command;
+                type empty;
+              }
+              leaf dnis {
+                tailf:info "Enable SNMP DNIS traps";
+                description
+                  "Enable SNMP DNIS traps";
+                tailf:cli-full-command;
+                type empty;
+              }
+              leaf dot11-qos {
+                tailf:info "Enable SNMP 802.11 QoS Change Trap";
+                description
+                  "Enable SNMP 802.11 QoS Change Trap";
+                tailf:cli-full-command;
+                type empty;
+              }
+              container dot1x {
+                leaf auth-fail-vlan {
+                  type empty;
+                }
+                leaf guest-vlan {
+                  type empty;
+                }
+                leaf no-auth-fail-vlan {
+                  type empty;
+                }
+                leaf no-guest-vlan {
+                  type empty;
+                }
+              }
+              leaf ds0-busyout {
+                tailf:info "Enable ds0-busyout traps";
+                description
+                  "Enable ds0-busyout traps";
+                tailf:cli-full-command;
+                type empty;
+              }
+              leaf ds1 {
+                tailf:info "Enable SNMP DS1 traps";
+                description
+                  "Enable SNMP DS1 traps";
+                tailf:cli-full-command;
+                type empty;
+              }
+              leaf ds1-loopback {
+                tailf:info "Enable ds1-loopback traps";
+                description
+                  "Enable ds1-loopback traps";
+                tailf:cli-full-command;
+                type empty;
+              }
+              leaf ds3 {
+                tailf:info "Enable SNMP DS3 traps";
+                description
+                  "Enable SNMP DS3 traps";
+                tailf:cli-full-command;
+                type empty;
+              }
+              container dsp {
+                tailf:info "Enable SNMP dsp traps";
+                description
+                  "Enable SNMP dsp traps";
+                tailf:cli-delete-when-empty;
+                presence "true";
+                leaf card-status {
+                  tailf:info "Enable SNMP card status of dsp traps";
+                  description
+                    "Enable SNMP card status of dsp traps";
+                  type empty;
+                }
+                leaf oper-state {
+                  type empty;
+                }
+              }
+              leaf eigrp {
+                tailf:info "Enable SNMP EIGRP traps";
+                description
+                  "Enable SNMP EIGRP traps";
+                tailf:cli-full-command;
+                type empty;
+              }
+              container energywise {
+                tailf:cli-delete-when-empty;
+                presence "true";
+                leaf event-occured {
+                  type empty;
+                }
+                leaf level-change {
+                  type empty;
+                }
+                leaf neighbor-added {
+                  type empty;
+                }
+                leaf neighbor-deleted {
+                  type empty;
+                }
+              }
+              leaf entity {
+                tailf:info "Enable SNMP entity traps";
+                description
+                  "Enable SNMP entity traps";
+                tailf:cli-full-command;
+                type empty;
+              }
+              container entity-diag {
+                tailf:info "Enable SNMP CISCO-ENTITY-DIAG-MIB traps";
+                description
+                  "Enable SNMP CISCO-ENTITY-DIAG-MIB traps";
+                tailf:cli-delete-when-empty;
+                presence "true";
+                leaf boot-up-fail {
+                  tailf:info "Enable SNMP ceDiagBootUpFailedNotif traps";
+                  description
+                    "Enable SNMP ceDiagBootUpFailedNotif traps";
+                  type empty;
+                }
+                leaf hm-test-recover {
+                  tailf:info "Enable SNMP ceDiagHMTestRecoverNotif traps";
+                  description
+                    "Enable SNMP ceDiagHMTestRecoverNotif traps";
+                  type empty;
+                }
+                leaf hm-thresh-reached {
+                  tailf:info "Enable SNMP ceDiagHMThresholdReachedNotif traps";
+                  description
+                    "Enable SNMP ceDiagHMThresholdReachedNotif traps";
+                  type empty;
+                }
+                leaf scheduled-test-fail {
+                  tailf:info "Enable SNMP ceDiagScheduledTestFailedNotif traps";
+                  description
+                    "Enable SNMP ceDiagScheduledTestFailedNotif traps";
+                  type empty;
+                }
+              }
+              container envmon {
+                tailf:info "Enable SNMP environmental monitor traps";
+                description
+                  "Enable SNMP environmental monitor traps";
+                tailf:cli-delete-when-empty;
+                presence "true";
+                leaf fan {
+                  type empty;
+                }
+                leaf shutdown {
+                  type empty;
+                }
+                leaf supply {
+                  type empty;
+                }
+                leaf temperature {
+                  type empty;
+                }
+                leaf status {
+                  type empty;
+                }
+              }
+              container errdisable {
+                tailf:info "Enable SNMP errdisable notifications";
+                description
+                  "Enable SNMP errdisable notifications";
+                tailf:cli-delete-when-empty;
+                presence "true";
+                leaf notification-rate {
+                  tailf:info "Number of notifications per minute";
+                  description
+                    "Number of notifications per minute";
+                  type uint16 {
+                    tailf:info "<0-10000>;;Number of notificatios per minute";
+                    range "0..10000";
+                  }
+                }
+              }
+              leaf ether-oam {
+                tailf:cli-full-command;
+                type empty;
+              }
+              container ethernet {
+                container cfm {
+                  leaf alarm {
+                    tailf:info "Enable SNMP Ethernet CFM fault alarm trap";
+                    description
+                      "Enable SNMP Ethernet CFM fault alarm trap";
+                    type empty;
+                  }
+                  container cc {
+                    tailf:cli-delete-when-empty;
+                    presence "true";
+                    leaf config {
+                      type empty;
+                    }
+                    leaf cross-connect {
+                      type empty;
+                    }
+                    leaf loop {
+                      type empty;
+                    }
+                    leaf mep-down {
+                      type empty;
+                    }
+                    leaf mep-up {
+                      type empty;
+                    }
+                  }
+                  container crosscheck {
+                    tailf:cli-delete-when-empty;
+                    presence "true";
+                    leaf mep-missing {
+                      type empty;
+                    }
+                    leaf mep-unknown {
+                      type empty;
+                    }
+                    leaf service-up {
+                      type empty;
+                    }
+                  }
+                }
+                container evc {
+                  tailf:info "Enable SNMP Ethernet EVC traps";
+                  description
+                    "Enable SNMP Ethernet EVC traps";
+                  tailf:cli-delete-when-empty;
+                  presence "true";
+                  leaf create {
+                    tailf:info "Enable SNMP Ethernet EVC create traps";
+                    description
+                      "Enable SNMP Ethernet EVC create traps";
+                    type empty;
+                  }
+                  leaf delete {
+                    tailf:info "Enable SNMP Ethernet EVC delete traps";
+                    description
+                      "Enable SNMP Ethernet EVC delete traps";
+                    type empty;
+                  }
+                  leaf status {
+                    tailf:info "Enable SNMP Ethernet EVC status traps";
+                    description
+                      "Enable SNMP Ethernet EVC status traps";
+                    type empty;
+                  }
+                }
+              }
+              leaf event-manager {
+                tailf:info "Enable SNMP Embedded Event Manager traps";
+                description
+                  "Enable SNMP Embedded Event Manager traps";
+                tailf:cli-full-command;
+                type empty;
+              }
+              container firewall {
+                tailf:cli-delete-when-empty;
+                presence "true";
+                leaf serverstatus {
+                  type empty;
+                }
+              }
+              container flash {
+                tailf:info "Enable SNMP FLASH notifications";
+                description
+                  "Enable SNMP FLASH notifications";
+                tailf:cli-delete-when-empty;
+                presence "true";
+                leaf insertion {
+                  tailf:info "Enable SNMP Flash Insertion notifications";
+                  description
+                    "Enable SNMP Flash Insertion notifications";
+                  type empty;
+                }
+                leaf removal {
+                  tailf:info "Enable SNMP Flash Removal notifications";
+                  description
+                    "Enable SNMP Flash Removal notifications";
+                  type empty;
+                }
+              }
+              leaf flowmon {
+                tailf:info "Enabel SNMP flowmon notifications";
+                description
+                  "Enabel SNMP flowmon notifications";
+                type empty;
+              }
+              container flex-links {
+                tailf:info "Enable SNMP FLEX Links traps";
+                description
+                  "Enable SNMP FLEX Links traps";
+                tailf:cli-delete-when-empty;
+                presence "true";
+                leaf status {
+                  tailf:info "Enable SNMP FLEX Links status change traps";
+                  description
+                    "Enable SNMP FLEX Links status change traps";
+                  type empty;
+                }
+              }
+              container frame-relay {
+                tailf:info "Enable SNMP frame-relay traps";
+                description
+                  "Enable SNMP frame-relay traps";
+                tailf:cli-delete-when-empty;
+                presence "true";
+                container multilink {
+                  tailf:info "Enable MFR traps";
+                  description
+                    "Enable MFR traps";
+                  leaf bundle-mismatch {
+                    tailf:info "Enable MFR trap for inconsistent bundle event";
+                    description
+                      "Enable MFR trap for inconsistent bundle event";
+                    type empty;
+                  }
+                }
+                container subif {
+                  tailf:info "Enable SNMP frame-relay subinterface traps";
+                  description
+                    "Enable SNMP frame-relay subinterface traps";
+                  tailf:cli-delete-when-empty;
+                  presence "true";
+                }
+              }
+              leaf fru-ctrl {
+                tailf:info "Enable SNMP entity FRU control traps";
+                description
+                  "Enable SNMP entity FRU control traps";
+                tailf:cli-full-command;
+                type empty;
+              }
+              leaf gatekeeper {
+                tailf:info "Enable SNMP gatekeeper traps";
+                description
+                  "Enable SNMP gatekeeper traps";
+                tailf:cli-full-command;
+                type empty;
+              }
+              leaf hsrp {
+                tailf:info "Enable SNMP HSRP traps";
+                description
+                  "Enable SNMP HSRP traps";
+                tailf:cli-full-command;
+                type empty;
+              }
+              leaf icsudsu {
+                tailf:info "Enable SNMP ICSUDSU traps";
+                description
+                  "Enable SNMP ICSUDSU traps";
+                tailf:cli-full-command;
+                type empty;
+              }
+              leaf ima {
+                tailf:info "Enable SNMP ATM IMA traps";
+                description
+                  "Enable SNMP ATM IMA traps";
+                tailf:cli-full-command;
+                type empty;
+              }
+              leaf ipmobile {
+                tailf:info "Enable SNMP ipmobile traps";
+                description
+                  "Enable SNMP ipmobile traps";
+                tailf:cli-full-command;
+                type empty;
+              }
+              leaf ipmulticast {
+                tailf:info "Enable SNMP ipmulticast traps";
+                description
+                  "Enable SNMP ipmulticast traps";
+                tailf:cli-full-command;
+                type empty;
+              }
+              container ipsec {
+                tailf:info "Enable IPsec traps";
+                description
+                  "Enable IPsec traps";
+                container cryptomap {
+                  leaf add {
+                    tailf:info "Enable IPsec Cryptomap add trap";
+                    description
+                      "Enable IPsec Cryptomap add trap";
+                    tailf:cli-full-command;
+                    type empty;
+                  }
+                  leaf attach {
+                    tailf:info "Enable IPsec Cryptomap Attach trap";
+                    description
+                      "Enable IPsec Cryptomap Attach trap";
+                    tailf:cli-full-command;
+                    type empty;
+                  }
+                  leaf delete {
+                    tailf:info "Enable IPsec Cryptomap delete trap";
+                    description
+                      "Enable IPsec Cryptomap delete trap";
+                    tailf:cli-full-command;
+                    type empty;
+                  }
+                  leaf detach {
+                    tailf:info "Enable IPsec Cryptomap Detach trap";
+                    description
+                      "Enable IPsec Cryptomap Detach trap";
+                    tailf:cli-full-command;
+                    type empty;
+                  }
+                }
+                container tunnel {
+                  tailf:info "Enable IPsec Tunnel traps";
+                  description
+                    "Enable IPsec Tunnel traps";
+                  leaf start {
+                    tailf:info "Enable IPsec Tunnel Start trap";
+                    description
+                      "Enable IPsec Tunnel Start trap";
+                    tailf:cli-full-command;
+                    type empty;
+                  }
+                  leaf stop {
+                    tailf:info "Enable IPsec Tunnel Stop trap";
+                    description
+                      "Enable IPsec Tunnel Stop trap";
+                    tailf:cli-full-command;
+                    type empty;
+                  }
+                }
+                leaf too-many-sas {
+                  tailf:info "Enable IPsec Tunnel Start trap";
+                  description
+                    "Enable IPsec Tunnel Start trap";
+                  type empty;
+                }
+              }
+              container isakmp {
+                tailf:info "Enable ISAKMP traps traps";
+                description
+                  "Enable ISAKMP traps traps";
+                container policy {
+                  tailf:info "Enable ISAKMP traps";
+                  description
+                    "Enable ISAKMP traps";
+                  leaf add {
+                    tailf:info "Enable ISAKMP Policy add trap";
+                    description
+                      "Enable ISAKMP Policy add trap";
+                    type empty;
+                  }
+                  leaf delete {
+                    tailf:info "Enable ISAKMP Policy delete trap";
+                    description
+                      "Enable ISAKMP Policy delete trap";
+                    type empty;
+                  }
+                }
+                container tunnel {
+                  tailf:info "Enable ISAKMP Tunnel traps";
+                  description
+                    "Enable ISAKMP Tunnel traps";
+                  leaf start {
+                    tailf:info "Enable ISAKMP Tunnel start trap";
+                    description
+                      "Enable ISAKMP Tunnel start trap";
+                    type empty;
+                  }
+                  leaf stop {
+                    tailf:info "Enable ISAKMP Tunnel stop trap";
+                    description
+                      "Enable ISAKMP Tunnel stop trap";
+                    type empty;
+                  }
+                }
+              }
+              container isdn {
+                tailf:info "Enable SNMP isdn traps";
+                description
+                  "Enable SNMP isdn traps";
+                tailf:cli-delete-when-empty;
+                presence "true";
+                leaf call-information {
+                  tailf:info "Enable SNMP isdn call information traps";
+                  description
+                    "Enable SNMP isdn call information traps";
+                  type empty;
+                }
+                leaf chan-not-avail {
+                  tailf:info "Enable SNMP isdn channel not avail traps";
+                  description
+                    "Enable SNMP isdn channel not avail traps";
+                  type empty;
+                }
+                leaf ietf {
+                  tailf:info "Enable SNMP isdn ietf traps";
+                  description
+                    "Enable SNMP isdn ietf traps";
+                  type empty;
+                }
+                leaf layer2 {
+                  tailf:info "Enable SNMP isdn layer2 transition traps";
+                  description
+                    "Enable SNMP isdn layer2 transition traps";
+                  type empty;
+                }
+              }
+              leaf ipsla {
+                tailf:info "Enable IPSLA traps traps";
+                description
+                  "Enable IPSLA traps traps";
+                tailf:cli-full-command;
+                type empty;
+              }
+              leaf isis {
+                tailf:info "Enable ISIS traps traps";
+                description
+                  "Enable ISIS traps traps";
+                tailf:cli-full-command;
+                type empty;
+              }
+              container l2tc {
+                tailf:info "Enable SNMP L2 Tunnel Config traps";
+                description
+                  "Enable SNMP L2 Tunnel Config traps";
+                tailf:cli-delete-when-empty;
+                presence "true";
+                tailf:cli-compact-syntax;
+                leaf sys-threshold {
+                  tailf:info "Enable SNMP L2TC System threshold traps";
+                  description
+                    "Enable SNMP L2TC System threshold traps";
+                  type empty;
+                }
+                leaf threshold {
+                  tailf:info "Enable SNMP L2 Tunnel Config threshold traps";
+                  description
+                    "Enable SNMP L2 Tunnel Config threshold traps";
+                  type empty;
+                }
+              }
+              container l2tun {
+                tailf:info "Enable SNMP L2 tunnel protocol traps";
+                description
+                  "Enable SNMP L2 tunnel protocol traps";
+                leaf session {
+                  tailf:info "Enable SNMP l2tun session traps";
+                  description
+                    "Enable SNMP l2tun session traps";
+                  tailf:cli-full-command;
+                  type empty;
+                }
+                container pseudowire {
+                  leaf status {
+                    type empty;
+                  }
+                }
+              }
+              container license {
+                tailf:info "Enable license traps";
+                description
+                  "Enable license traps";
+                tailf:cli-compact-syntax;
+                leaf deploy {
+                  tailf:info "Enable license deployment traps";
+                  description
+                    "Enable license deployment traps";
+                  tailf:cli-show-no;
+                  type empty;
+                }
+                leaf error {
+                  tailf:info "Enable license error traps";
+                  description
+                    "Enable license error traps";
+                  type empty;
+                }
+                leaf usage {
+                  tailf:info "Enable license usage traps";
+                  description
+                    "Enable license usage traps";
+                  type empty;
+                }
+              }
+              container mac-notification {
+                tailf:info "Enable SNMP MAC Notification traps";
+                description
+                  "Enable SNMP MAC Notification traps";
+                tailf:cli-compact-syntax;
+                tailf:cli-delete-when-empty;
+                presence "true";
+                leaf change {
+                  tailf:info "Enable SNMP Change traps";
+                  description
+                    "Enable SNMP Change traps";
+                  type empty;
+                }
+                leaf move {
+                  tailf:info "Enable SNMP Move traps";
+                  description
+                    "Enable SNMP Move traps";
+                  type empty;
+                }
+                leaf threshold {
+                  tailf:info "Enable SNMP Threshold traps";
+                  description
+                    "Enable SNMP Threshold traps";
+                  type empty;
+                }
+              }
+              container mac-notification2 {
+                tailf:alt-name "MAC-Notification";
+                tailf:info "Enable SNMP MAC Notification traps";
+                description
+                  "Enable SNMP MAC Notification traps";
+                tailf:cli-delete-when-empty;
+                presence "true";
+                leaf change {
+                  tailf:info "Enable SNMP Change traps";
+                  description
+                    "Enable SNMP Change traps";
+                  type empty;
+                }
+                leaf move {
+                  tailf:info "Enable SNMP Move traps";
+                  description
+                    "Enable SNMP Move traps";
+                  type empty;
+                }
+                leaf threshold {
+                  tailf:info "Enable SNMP Threshold traps";
+                  description
+                    "Enable SNMP Threshold traps";
+                  type empty;
+                }
+              }
+              container memory {
+                tailf:info "Enable SNMP Memory traps";
+                description
+                  "Enable SNMP Memory traps";
+                presence "true";
+                leaf bufferpeak {
+                  tailf:info "Enable SNMP Memory Bufferpeak traps";
+                  description
+                    "Enable SNMP Memory Bufferpeak traps";
+                  tailf:cli-full-command;
+                  type empty;
+                }
+              }
+              leaf module {
+                tailf:info "Enable SNMP module traps";
+                description
+                  "Enable SNMP module traps";
+                type empty;
+              }
+              container mpls {
+                tailf:info "Enable SNMP MPLS traps";
+                description
+                  "Enable SNMP MPLS traps";
+                tailf:cli-delete-when-empty;
+                presence "true";
+                container traffic-eng {
+                  tailf:cli-delete-when-empty;
+                  presence "true";
+                }
+                container fast-reroute {
+                  tailf:cli-delete-when-empty;
+                  presence "true";
+                  leaf protected {
+                    type empty;
+                  }
+                }
+                container rfc {
+                  tailf:cli-delete-when-empty;
+                  presence "true";
+                  leaf ldp {
+                    type empty;
+                  }
+                }
+                container ldp {
+                  tailf:info "SNMP MPLS label distribution protocol traps";
+                  description
+                    "SNMP MPLS label distribution protocol traps";
+                  tailf:cli-delete-when-empty;
+                  presence "true";
+                  leaf pv-limit {
+                    tailf:info "Enable MPLS LDP path vector limit mismatch traps";
+                    description
+                      "Enable MPLS LDP path vector limit mismatch traps";
+                    type empty;
+                  }
+                  leaf session-down {
+                    tailf:info "Enable MPLS LDP session down traps";
+                    description
+                      "Enable MPLS LDP session down traps";
+                    type empty;
+                  }
+                  leaf session-up {
+                    tailf:info "Enable MPLS LDP session up traps";
+                    description
+                      "Enable MPLS LDP session up traps";
+                    type empty;
+                  }
+                  leaf threshold {
+                    tailf:info "Enable MPLS LDP threshold exceeded traps";
+                    description
+                      "Enable MPLS LDP threshold exceeded traps";
+                    type empty;
+                  }
+                }
+                leaf vpn {
+                  type empty;
+                }
+              }
+              leaf msdp {
+                tailf:info "Enable SNMP MSDP traps";
+                description
+                  "Enable SNMP MSDP traps";
+                tailf:cli-full-command;
+                type empty;
+              }
+              leaf mvpn {
+                tailf:info "Enable Multicast Virtual Private Networks traps";
+                description
+                  "Enable Multicast Virtual Private Networks traps";
+                tailf:cli-full-command;
+                type empty;
+              }
+              container nhrp {
+                tailf:cli-delete-when-empty;
+                presence "true";
+                container nhs {
+                  presence "true";
+                }
+                container nhc {
+                  presence "true";
+                }
+                container nhp {
+                  presence "true";
+                }
+                container quota-exceeded {
+                  presence "true";
+                }
+              }
+              container ospf {
+                tailf:info "Enable OSPF traps";
+                description
+                  "Enable OSPF traps";
+                container state-change {
+                  tailf:info "State change traps";
+                  description
+                    "State change traps";
+                  tailf:cli-delete-when-empty;
+                  presence "true";
+                  leaf if-state-change {
+                    tailf:info "Non-virtual interface state changes";
+                    description
+                      "Non-virtual interface state changes";
+                    type empty;
+                  }
+                  leaf neighbor-state-change {
+                    tailf:info "Non-virtual neighbor state changes";
+                    description
+                      "Non-virtual neighbor state changes";
+                    type empty;
+                  }
+                  leaf virtif-state-change {
+                    tailf:info "Virtual interface state changes";
+                    description
+                      "Virtual interface state changes";
+                    type empty;
+                  }
+                  leaf virtneighbor-state-change {
+                    tailf:info "Non-virtual neighbor state changes";
+                    description
+                      "Non-virtual neighbor state changes";
+                    type empty;
+                  }
+                }
+                container errors {
+                  tailf:info "Error traps";
+                  description
+                    "Error traps";
+                  tailf:cli-delete-when-empty;
+                  presence "true";
+                }
+                container retransmit {
+                  tailf:info "Packet retransmit traps";
+                  description
+                    "Packet retransmit traps";
+                  tailf:cli-delete-when-empty;
+                  presence "true";
+                  leaf packets {
+                    tailf:info "Packet retransmission on non-virtual interfaces";
+                    description
+                      "Packet retransmission on non-virtual interfaces";
+                    type empty;
+                  }
+                  leaf virt-packets {
+                    tailf:info "Packet retransmission on virtual interfaces";
+                    description
+                      "Packet retransmission on virtual interfaces";
+                    type empty;
+                  }
+                }
+                container lsa {
+                  tailf:info "Lsa related traps";
+                  description
+                    "Lsa related traps";
+                  tailf:cli-delete-when-empty;
+                  presence "true";
+                  leaf lsa-maxage {
+                    tailf:info "Lsa aged to maxage";
+                    description
+                      "Lsa aged to maxage";
+                    type empty;
+                  }
+                  leaf lsa-originate {
+                    tailf:info "New lsa originated";
+                    description
+                      "New lsa originated";
+                    type empty;
+                  }
+                }
+                container cisco-specific {
+                  tailf:info "Cisco specific traps";
+                  description
+                    "Cisco specific traps";
+                  tailf:cli-delete-when-empty;
+                  presence "true";
+                  container state-change {
+                    tailf:info "State change traps";
+                    description
+                      "State change traps";
+                    tailf:cli-delete-when-empty;
+                    presence "true";
+                    leaf nssa-trans-change {
+                      tailf:info "Nssa translator state changes";
+                      description
+                        "Nssa translator state changes";
+                      type empty;
+                    }
+                    container shamlink {
+                      tailf:info "Sham link state change traps";
+                      description
+                        "Sham link state change traps";
+                      tailf:cli-delete-when-empty;
+                      presence "true";
+                      leaf interface {
+                        tailf:info "Sham link interface state changes";
+                        description
+                          "Sham link interface state changes";
+                        type empty;
+                      }
+                      leaf interface-old {
+                        tailf:info "Sham link interface state changes (deprecated)";
+                        description
+                          "Sham link interface state changes (deprecated)";
+                        type empty;
+                      }
+                      leaf neighbor {
+                        tailf:info "Sham link neighbor state changes";
+                        description
+                          "Sham link neighbor state changes";
+                        type empty;
+                      }
+                    }
+                  }
+                  container errors {
+                    tailf:info "Error traps";
+                    description
+                      "Error traps";
+                    tailf:cli-delete-when-empty;
+                    presence "true";
+                  }
+                  container errdisable {
+                    tailf:info "Enable SNMP errdisable notifications";
+                    description
+                      "Enable SNMP errdisable notifications";
+                    tailf:cli-delete-when-empty;
+                    presence "true";
+                    leaf notification-rate {
+                      tailf:info "Number of notifications per minute";
+                      description
+                        "Number of notifications per minute";
+                      type uint16 {
+                        tailf:info "<0-10000>;;Number of notificatios per minute";
+                        range "0..10000";
+                      }
+                    }
+                  }
+                  container retransmit {
+                    tailf:info "Packet retransmit traps";
+                    description
+                      "Packet retransmit traps";
+                    tailf:cli-delete-when-empty;
+                    presence "true";
+                  }
+                  container lsa {
+                    tailf:info "Lsa related traps";
+                    description
+                      "Lsa related traps";
+                    tailf:cli-delete-when-empty;
+                    presence "true";
+                    leaf lsa-maxage {
+                      tailf:info "Lsa aged to maxage";
+                      description
+                        "Lsa aged to maxage";
+                      type empty;
+                    }
+                    leaf lsa-originate {
+                      tailf:info "New lsa originated";
+                      description
+                        "New lsa originated";
+                      type empty;
+                    }
+                  }
+                }
+              }
+              container pim {
+                tailf:info "Enable SNMP PIM traps";
+                description
+                  "Enable SNMP PIM traps";
+                tailf:cli-delete-when-empty;
+                presence "true";
+                leaf invalid-pim-message {
+                  tailf:info "Enable invalid pim message trap";
+                  description
+                    "Enable invalid pim message trap";
+                  type empty;
+                }
+                leaf neighbor-change {
+                  tailf:info "Enable neighbor change trap";
+                  description
+                    "Enable neighbor change trap";
+                  type empty;
+                }
+                leaf rp-mapping-change {
+                  tailf:info "Enable rp mapping change trap";
+                  description
+                    "Enable rp mapping change trap";
+                  type empty;
+                }
+              }
+              container plogd {
+                tailf:info "Enable SNMP plogd traps";
+                description
+                  "Enable SNMP plogd traps";
+                presence "true";
+              }
+              container port-security {
+                tailf:info "Enable SNMP port security traps";
+                description
+                  "Enable SNMP port security traps";
+                tailf:cli-delete-when-empty;
+                presence "true";
+                leaf trap-rate {
+                  tailf:info "Number of traps per second";
+                  description
+                    "Number of traps per second";
+                  type uint16 {
+                    tailf:info "<0-1000>;;Number of traps per second";
+                    range "0..1000";
+                  }
+                }
+              }
+              container power-ethernet {
+                tailf:info "Enable SNMP power ethernet traps";
+                description
+                  "Enable SNMP power ethernet traps";
+                leaf group {
+                  tailf:info "Enable SNMP inline power group based traps";
+                  description
+                    "Enable SNMP inline power group based traps";
+                  type string {
+                    tailf:info "WORD;;The group number or list";
+                  }
+                }
+                leaf police {
+                  tailf:info "Enable Policing Trap";
+                  description
+                    "Enable Policing Trap";
+                  type empty;
+                }
+              }
+              leaf pppoe {
+                tailf:info "Enable SNMP pppoe traps";
+                description
+                  "Enable SNMP pppoe traps";
+                tailf:cli-full-command;
+                type empty;
+              }
+              container pw {
+                tailf:cli-delete-when-empty;
+                presence "true";
+                leaf vc {
+                  type empty;
+                }
+              }
+              leaf rep {
+                tailf:cli-full-command;
+                type empty;
+              }
+              leaf resource-policy {
+                tailf:cli-full-command;
+                type empty;
+              }
+              leaf rf {
+                tailf:info "Enable all SNMP traps defined in CISCO-RF-MIB";
+                description
+                  "Enable all SNMP traps defined in CISCO-RF-MIB";
+                tailf:cli-full-command;
+                type empty;
+              }
+              leaf rogue-ap {
+                tailf:info "Enable SNMP 802.11 Rogue AP Trap";
+                description
+                  "Enable SNMP 802.11 Rogue AP Trap";
+                tailf:cli-full-command;
+                type empty;
+              }
+              leaf rsvp {
+                tailf:info "Enable RSVP flow change traps";
+                description
+                  "Enable RSVP flow change traps";
+                tailf:cli-full-command;
+                type empty;
+              }
+              leaf rtr {
+                tailf:info "Enable SNMP Response Time Reporter traps";
+                description
+                  "Enable SNMP Response Time Reporter traps";
+                tailf:cli-full-command;
+                type empty;
+              }
+              container slb {
+                tailf:info "Enable SNMP SLB traps";
+                description
+                  "Enable SNMP SLB traps";
+                tailf:cli-delete-when-empty;
+                presence "true";
+                leaf csrp {
+                  tailf:info "Enable SNMP SLB Fault Tolerance Replication Protocol traps";
+                  description
+                    "Enable SNMP SLB Fault Tolerance Replication Protocol traps";
+                  type empty;
+                }
+                leaf real {
+                  tailf:info "Enable SNMP SLB Real Server traps";
+                  description
+                    "Enable SNMP SLB Real Server traps";
+                  type empty;
+                }
+                leaf virtual {
+                  tailf:info "Enable SNMP SLB Virtual Server traps";
+                  description
+                    "Enable SNMP SLB Virtual Server traps";
+                  type empty;
+                }
+              }
+              container snmp {
+                tailf:info "Enable SNMP traps";
+                description
+                  "Enable SNMP traps";
+                tailf:cli-compact-syntax;
+                leaf authentication {
+                  tailf:info "Enable authentication trap";
+                  description
+                    "Enable authentication trap";
+                  type empty;
+                }
+                leaf coldstart {
+                  tailf:info "Enable coldStart trap";
+                  description
+                    "Enable coldStart trap";
+                  type empty;
+                }
+                leaf linkdown {
+                  tailf:info "Enable linkDown trap";
+                  description
+                    "Enable linkDown trap";
+                  type empty;
+                }
+                leaf linkup {
+                  tailf:info "Enable linkUp trap";
+                  description
+                    "Enable linkUp trap";
+                  type empty;
+                }
+                leaf warmstart {
+                  tailf:info "Enable warmStart trap";
+                  description
+                    "Enable warmStart trap";
+                  type empty;
+                }
+              }
+              leaf sonet {
+                tailf:info "Enable SNMP SONET traps";
+                description
+                  "Enable SNMP SONET traps";
+                type empty;
+              }
+              leaf srst {
+                tailf:cli-full-command;
+                type empty;
+              }
+              leaf srp {
+                tailf:info "Enable SRP protocol traps";
+                description
+                  "Enable SRP protocol traps";
+                tailf:cli-full-command;
+                type empty;
+              }
+              container stackwise {
+                tailf:info "Enable SNMP stackwise traps";
+                description
+                  "Enable SNMP stackwise traps";
+                tailf:cli-delete-when-empty;
+                presence "true";
+                leaf GLS {
+                  tailf:info "Enable STACKWISE stack power GLS trap";
+                  description
+                    "Enable STACKWISE stack power GLS trap";
+                  type empty;
+                }
+                leaf ILS {
+                  tailf:info "Enable STACKWISE stack power ILS trap";
+                  description
+                    "Enable STACKWISE stack power ILS trap";
+                  type empty;
+                }
+                leaf SRLS {
+                  tailf:info "Enable STACKWISE stack power SRLS trap";
+                  description
+                    "Enable STACKWISE stack power SRLS trap";
+                  type empty;
+                }
+                leaf insufficient-power {
+                  tailf:info "Enable STACKWISE stack power unbalanced power supplies trap";
+                  description
+                    "Enable STACKWISE stack power unbalanced power supplies trap";
+                  type empty;
+                }
+                leaf invalid-input-current {
+                  tailf:info "Enable STACKWISE stack power invalid input current trap";
+                  description
+                    "Enable STACKWISE stack power invalid input current trap";
+                  type empty;
+                }
+                leaf invalid-output-current {
+                  tailf:info "Enable STACKWISE stack power invalid output current trap";
+                  description
+                    "Enable STACKWISE stack power invalid output current trap";
+                  type empty;
+                }
+                leaf member-removed {
+                  tailf:info "Enable STACKWISE stack member removed trap";
+                  description
+                    "Enable STACKWISE stack member removed trap";
+                  type empty;
+                }
+                leaf member-upgrade-notification {
+                  tailf:info "Enable STACKWISE member to be reloaded for upgrade trap";
+                  description
+                    "Enable STACKWISE member to be reloaded for upgrade trap";
+                  type empty;
+                }
+                leaf new-master {
+                  tailf:info "Enable STACKWISE new master trap";
+                  description
+                    "Enable STACKWISE new master trap";
+                  type empty;
+                }
+                leaf new-member {
+                  tailf:info "Enable STACKWISE stack new member trap";
+                  description
+                    "Enable STACKWISE stack new member trap";
+                  type empty;
+                }
+                leaf port-change {
+                  tailf:info "Enable STACKWISE port change trap";
+                  description
+                    "Enable STACKWISE port change trap";
+                  type empty;
+                }
+                leaf power-budget-warning {
+                  tailf:info "Enable STACKWISE stack power budget warning trap";
+                  description
+                    "Enable STACKWISE stack power budget warning trap";
+                  type empty;
+                }
+                leaf power-invalid-topology {
+                  tailf:info "Enable STACKWISE stack power invalid topology trap";
+                  description
+                    "Enable STACKWISE stack power invalid topology trap";
+                  type empty;
+                }
+                leaf power-link-status-changed {
+                  tailf:info "Enable STACKWISE stack power link status changed trap";
+                  description
+                    "Enable STACKWISE stack power link status changed trap";
+                  type empty;
+                }
+                leaf power-oper-status-changed {
+                  tailf:info "Enable STACKWISE stack power port oper status changed trap";
+                  description
+                    "Enable STACKWISE stack power port oper status changed trap";
+                  type empty;
+                }
+                leaf power-priority-conflict {
+                  tailf:info "Enable STACKWISE stack power priority conflict trap";
+                  description
+                    "Enable STACKWISE stack power priority conflict trap";
+                  type empty;
+                }
+                leaf power-version-mismatch {
+                  tailf:info "Enable STACKWISE stack power version mismatch discovered trap";
+                  description
+                    "Enable STACKWISE stack power version mismatch discovered trap";
+                  type empty;
+                }
+                leaf ring-redundant {
+                  tailf:info "Enable STACKWISE stack ring redundant trap";
+                  description
+                    "Enable STACKWISE stack ring redundant trap";
+                  type empty;
+                }
+                leaf stack-mismatch {
+                  tailf:info "Enable STACKWISE stack mismatch trap";
+                  description
+                    "Enable STACKWISE stack mismatch trap";
+                  type empty;
+                }
+                leaf unbalanced-power-supplies {
+                  tailf:info "Enable STACKWISE stack power unbalanced power supplies trap";
+                  description
+                    "Enable STACKWISE stack power unbalanced power supplies trap";
+                  type empty;
+                }
+                leaf under-budget {
+                  tailf:info "Enable STACKWISE stack power under budget trap";
+                  description
+                    "Enable STACKWISE stack power under budget trap";
+                  type empty;
+                }
+                leaf under-voltage {
+                  tailf:info "Enable STACKWISE stack power under voltage trap";
+                  description
+                    "Enable STACKWISE stack power under voltage trap";
+                  type empty;
+                }
+              }
+              container stpx {
+                tailf:cli-delete-when-empty;
+                presence "true";
+                leaf inconsistency {
+                  type empty;
+                }
+                leaf root-inconsistency {
+                  type empty;
+                }
+                leaf loop-inconsistency {
+                  type empty;
+                }
+              }
+              leaf stun {
+                tailf:info "Enable SNMP STUN traps";
+                description
+                  "Enable SNMP STUN traps";
+                tailf:cli-full-command;
+                type empty;
+              }
+              leaf switch-over {
+                tailf:info "Enable SNMP 802.11 Standby Switch-over Trap";
+                description
+                  "Enable SNMP 802.11 Standby Switch-over Trap";
+                tailf:cli-full-command;
+                type empty;
+              }
+              leaf syslog {
+                tailf:info "Enable SNMP syslog traps";
+                description
+                  "Enable SNMP syslog traps";
+                tailf:cli-full-command;
+                type empty;
+              }
+              container transceiver {
+                leaf all {
+                  type empty;
+                }
+              }
+              leaf tty {
+                tailf:info "Enable TCP connection traps";
+                description
+                  "Enable TCP connection traps";
+                tailf:cli-full-command;
+                type empty;
+              }
+              container udld {
+                tailf:info "Enable SNMP CISCO-UDLDP-MIB traps";
+                description
+                  "Enable SNMP CISCO-UDLDP-MIB traps";
+                tailf:cli-compact-syntax;
+                tailf:cli-delete-when-empty;
+                presence "true";
+                leaf link-fail-rpt {
+                  tailf:info "Enable SNMP cudldpFastHelloLinkFailRptNotification traps";
+                  description
+                    "Enable SNMP cudldpFastHelloLinkFailRptNotification traps";
+                  type empty;
+                }
+                leaf status-change {
+                  tailf:info "Enable SNMP cudldpFastHelloStatusChangeNotification traps";
+                  description
+                    "Enable SNMP cudldpFastHelloStatusChangeNotification traps";
+                  type empty;
+                }
+              }
+              leaf vlancreate {
+                tailf:cli-full-command;
+                type empty;
+              }
+              leaf vlandelete {
+                tailf:cli-full-command;
+                type empty;
+              }
+              leaf vlan-mac-limit {
+                tailf:info "Enable SNMP L2 Control VLAN MAC Limit notifications";
+                description
+                  "Enable SNMP L2 Control VLAN MAC Limit notifications";
+                type empty;
+              }
+              leaf vlan-membership {
+                tailf:cli-full-command;
+                type empty;
+              }
+              leaf voice {
+                tailf:info "Enable SNMP voice traps";
+                description
+                  "Enable SNMP voice traps";
+                tailf:cli-full-command;
+                type empty;
+              }
+              container vrfmib {
+                leaf vrf-up {
+                  type empty;
+                }
+                leaf vrf-down {
+                  type empty;
+                }
+                leaf vnet-trunk-up {
+                  type empty;
+                }
+                leaf vnet-trunk-down {
+                  type empty;
+                }
+              }
+              leaf vrrp {
+                tailf:info "Enable SNMP vrrp traps";
+                description
+                  "Enable SNMP vrrp traps";
+                tailf:cli-full-command;
+                type empty;
+              }
+              leaf vsimaster {
+                tailf:info "Allow SNMP vsimaster traps";
+                description
+                  "Allow SNMP vsimaster traps";
+                tailf:cli-full-command;
+                type empty;
+              }
+              container vstack {
+                tailf:info "Enable SNMP Smart Install traps";
+                description
+                  "Enable SNMP Smart Install traps";
+                tailf:cli-delete-when-empty;
+                presence "true";
+                tailf:cli-compact-syntax;
+                leaf addition {
+                  tailf:info "Enable client added trap";
+                  description
+                    "Enable client added trap";
+                  type empty;
+                }
+                leaf failure {
+                  tailf:info "Enable file upload/download failure trap";
+                  description
+                    "Enable file upload/download failure trap";
+                  type empty;
+                }
+                leaf lost {
+                  tailf:info "Enable client lost trap";
+                  description
+                    "Enable client lost trap";
+                  type empty;
+                }
+                leaf operation {
+                  tailf:info "Enable operation mode change trap";
+                  description
+                    "Enable operation mode change trap";
+                  type empty;
+                }
+              }
+              leaf vtp {
+                tailf:cli-full-command;
+                type empty;
+              }
+              leaf wlan-wep {
+                tailf:info "Enable SNMP 802.11 WLAN WEP Trap";
+                description
+                  "Enable SNMP 802.11 WLAN WEP Trap";
+                tailf:cli-full-command;
+                type empty;
+              }
+              leaf xgcp {
+                tailf:info "Enable XGCP protocol traps";
+                description
+                  "Enable XGCP protocol traps";
+                tailf:cli-full-command;
+                type empty;
+              }
+            }
+          }
+        }
+      }
+      container engineID {
+        tailf:info "Configure a local or remote SNMPv3 engineID";
+        description
+          "Configure a local or remote SNMPv3 engineID";
+        leaf local {
+          tailf:info "engineID of the local agent";
+          description
+            "engineID of the local agent";
+          type string {
+            tailf:info "WORD;;engine ID octet string";
+            length "1..24";
+          }
+        }
+        container remote {
+          tailf:info "engineID of the remote agent";
+        }
+      }
+      list group {
+        tailf:info "Define a User Security Model group";
+        description
+          "Define a User Security Model group";
+        tailf:cli-suppress-mode;
+        tailf:cli-delete-when-empty;
+        tailf:cli-compact-syntax;
+        tailf:cli-sequence-commands;
+        key "id";
+        leaf id {
+          type string {
+            tailf:info "WORD;;Name of the group";
+          }
+        }
+        choice security-model {
+          container v1 {
+            tailf:info "group using the v1 security model";
+          }
+          container v2c {
+            tailf:info "group using the v2c security model";
+          }
+          container v3 {
+            tailf:info "group using the User Security Model (SNMPv3)";
+            description
+              "group using the User Security Model (SNMPv3)";
+            tailf:cli-compact-syntax;
+            tailf:cli-sequence-commands {
+              tailf:cli-reset-siblings;
+            }
+            leaf security-level {
+              tailf:cli-drop-node-name;
+              type enumeration {
+                enum "auth" {
+                  tailf:info "group using the authNoPriv Security Level";
+                }
+                enum "noauth" {
+                  tailf:info "group using the noAuthNoPriv Security Level";
+                }
+                enum "priv" {
+                  tailf:info "group using SNMPv3 authPriv security level";
+                }
+              }
+            }
+            leaf context {
+              tailf:cli-optional-in-sequence;
+              tailf:info "specify a context to associate these views for the group";
+              description
+                "specify a context to associate these views for the group";
+              type string {
+                tailf:info "WORD;;context name";
+              }
+            }
+            leaf match {
+              tailf:cli-optional-in-sequence;
+              tailf:info "context name match criteria";
+              description
+                "context name match criteria";
+              type enumeration {
+                enum "exact" {
+                  tailf:info "match the exact context";
+                }
+                enum "prefix" {
+                  tailf:info "only match the context prefix";
+                }
+              }
+            }
+            leaf read {
+              tailf:cli-optional-in-sequence;
+              tailf:info "specify a read view for the group";
+              description
+                "specify a read view for the group";
+              type string {
+                tailf:info "WORD;;read view name";
+              }
+            }
+            leaf write {
+              tailf:cli-optional-in-sequence;
+              tailf:info "specify a write view for the group";
+              description
+                "specify a write view for the group";
+              type string {
+                tailf:info "WORD;;write view name";
+              }
+            }
+            leaf notify {
+              tailf:cli-optional-in-sequence;
+              tailf:info "specify a notify view for the group";
+              description
+                "specify a notify view for the group";
+              type string {
+                tailf:info "WORD;;notify view name";
+              }
+            }
+            leaf access {
+              tailf:info "specify an access-list associated with this group";
+              description
+                "specify an access-list associated with this group";
+              type union {
+                type uint8 {
+                  tailf:info "<1-99>;;Std IP accesslist allowing access with this group";
+                  range "1..99";
+                }
+                type string {
+                  tailf:info "WORD;;Access-list name";
+                }
+              }
+            }
+          }
+        }
+      }
+      list host {
+        tailf:info "Specify hosts to receive SNMP notifications";
+        description
+          "Specify hosts to receive SNMP notifications";
+        tailf:cli-suppress-mode;
+        tailf:cli-delete-when-empty;
+        tailf:cli-sequence-commands;
+        tailf:cli-compact-syntax;
+        tailf:cli-incomplete-command;
+        key "ip-address";
+        leaf ip-address {
+          type host-type {
+            tailf:info "WORD;;Hostname or IP/IPv6 address of SNMP notification host";
+          }
+        }
+        leaf vrf {
+          tailf:info "VPN Routing instance for this host";
+          description
+            "VPN Routing instance for this host";
+          tailf:cli-optional-in-sequence;
+          tailf:cli-incomplete-command;
+          tailf:cli-diff-dependency "/ios:native/ip/vrf";
+          tailf:cli-diff-dependency "/ios:native/vrf/definition";
+          type string;
+        }
+        choice informs-traps-choice {
+          leaf informs {
+            tailf:info "Send Inform messages to this host";
+            description
+              "Send Inform messages to this host";
+            tailf:cli-optional-in-sequence;
+            tailf:cli-incomplete-command;
+            type empty;
+          }
+          leaf traps {
+            tailf:info "Send Trap messages to this host";
+            description
+              "Send Trap messages to this host";
+            tailf:cli-optional-in-sequence;
+            tailf:cli-incomplete-command;
+            type empty;
+          }
+          default "traps";
+        }
+        container version {
+          tailf:info "SNMP version to use for notification messages";
+          description
+            "SNMP version to use for notification messages";
+          tailf:cli-optional-in-sequence;
+          tailf:cli-flatten-container;
+          tailf:cli-incomplete-command;
+          leaf version {
+            tailf:cli-drop-node-name;
+            type enumeration {
+              enum "1" {
+                tailf:info "Use SNMPv1";
+              }
+              enum "2c" {
+                tailf:info "Use SNMPv2c";
+              }
+              enum "3" {
+                tailf:info "Use SNMPv3";
+              }
+            }
+          }
+          leaf security-level {
+            tailf:cli-drop-node-name;
+            when "../version = '3'";
+            type enumeration {
+              enum "auth" {
+                tailf:info "Use the SNMPv3 authNoPriv Security Level";
+              }
+              enum "noauth" {
+                tailf:info "Use the SNMPv3 noAuthNoPriv Security Level";
+              }
+              enum "priv" {
+                tailf:info "Use the SNMPv3 authPriv Security Level";
+              }
+            }
+          }
+        }
+        list community-string {
+          tailf:cli-drop-node-name;
+          tailf:cli-suppress-mode;
+          tailf:cli-compact-syntax;
+          tailf:cli-delete-when-empty;
+          key "name";
+          leaf name {
+            type string {
+              tailf:info "WORD;;SNMPv1/v2c community string or SNMPv3 user name";
+            }
+          }
+          leaf aaa_server {
+            tailf:info "Allow SNMP AAA traps";
+            description
+              "Allow SNMP AAA traps";
+            type empty;
+          }
+          leaf alarms {
+            tailf:info "Allow SNMP alarms traps";
+            description
+              "Allow SNMP alarms traps";
+            type empty;
+          }
+          leaf atm {
+            tailf:info "Allow SNMP atm traps";
+            description
+              "Allow SNMP atm traps";
+            type empty;
+          }
+          leaf bfd {
+            tailf:info "Allow SNMP BFD traps";
+            description
+              "Allow SNMP BFD traps";
+            type empty;
+          }
+          leaf bgp {
+            tailf:info "Allow BGP state change traps";
+            description
+              "Allow BGP state change traps";
+            type empty;
+          }
+          leaf bstun {
+            tailf:info "Allow bstun event traps";
+            description
+              "Allow bstun event traps";
+            type empty;
+          }
+          leaf bulkstat {
+            tailf:info "Allow Data-Collection-MIB traps";
+            description
+              "Allow Data-Collection-MIB traps";
+            type empty;
+          }
+          leaf call-home {
+            tailf:info "Allow SNMP CISCO-CALLHOME-MIB traps";
+            description
+              "Allow SNMP CISCO-CALLHOME-MIB traps";
+            type empty;
+          }
+          leaf casa {
+            tailf:info "Allow casa event traps";
+            description
+              "Allow casa event traps";
+            type empty;
+          }
+          leaf cef {
+            tailf:info "Allows cef traps";
+            description
+              "Allows cef traps";
+            type empty;
+          }
+          leaf cnpd {
+            tailf:info "Allow NBAR Protocol Discovery traps";
+            description
+              "Allow NBAR Protocol Discovery traps";
+            type empty;
+          }
+          leaf config {
+            tailf:info "Allow SNMP config traps";
+            description
+              "Allow SNMP config traps";
+            type empty;
+          }
+          leaf config-copy {
+            tailf:info "Allow SNMP config-copy traps";
+            description
+              "Allow SNMP config-copy traps";
+            type empty;
+          }
+          leaf config-ctid {
+            tailf:info "Allow SNMP config-ctid traps";
+            description
+              "Allow SNMP config-ctid traps";
+            type empty;
+          }
+          leaf cpu {
+            tailf:info "Allow cpu related traps";
+            description
+              "Allow cpu related traps";
+            type empty;
+          }
+          leaf dhcp {
+            tailf:info "Allow dhcp traps";
+            description
+              "Allow dhcp traps";
+            type empty;
+          }
+          leaf dlsw {
+            tailf:info "Allow dlsw traps";
+            description
+              "Allow dlsw traps";
+            type empty;
+          }
+          leaf ds1 {
+            tailf:info "Allow SNMP ds1 traps";
+            description
+              "Allow SNMP ds1 traps";
+            type empty;
+          }
+          leaf dsp {
+            tailf:info "Allow SNMP DSP traps";
+            description
+              "Allow SNMP DSP traps";
+            type empty;
+          }
+          leaf dspu {
+            tailf:info "Allow dspu event traps";
+            description
+              "Allow dspu event traps";
+            type empty;
+          }
+          leaf eigrp {
+            tailf:info "Allow SNMP EIGRP traps";
+            description
+              "Allow SNMP EIGRP traps";
+            type empty;
+          }
+          leaf entity {
+            tailf:info "Allow SNMP entity traps";
+            description
+              "Allow SNMP entity traps";
+            type empty;
+          }
+          leaf entity-diag {
+            tailf:info "Allow SNMP CISCO-ENTITY-DIAG-MIB traps";
+            description
+              "Allow SNMP CISCO-ENTITY-DIAG-MIB traps";
+            type empty;
+          }
+          leaf entity-qfp {
+            tailf:info "Allow SNMP CISCO-ENTITY-QFP-MIB traps";
+            description
+              "Allow SNMP CISCO-ENTITY-QFP-MIB traps";
+            type empty;
+          }
+          leaf entity-state {
+            tailf:info "Allow ENTITY-STATE-MIB traps";
+            description
+              "Allow ENTITY-STATE-MIB traps";
+            type empty;
+          }
+          leaf ethernet-cfm {
+            tailf:info "Allow SNMP Ethernet CFM traps";
+            description
+              "Allow SNMP Ethernet CFM traps";
+            type empty;
+          }
+          leaf evc {
+            tailf:info "Allow SNMP EVC traps";
+            description
+              "Allow SNMP EVC traps";
+            type empty;
+          }
+          leaf event-manager {
+            tailf:info "Allow SNMP Embedded Event Manager traps";
+            description
+              "Allow SNMP Embedded Event Manager traps";
+            type empty;
+          }
+          leaf firewall {
+            tailf:info "Allow SNMP Firewall traps";
+            description
+              "Allow SNMP Firewall traps";
+            type empty;
+          }
+          leaf flash {
+            tailf:info "Allow SNMP FLASH traps";
+            description
+              "Allow SNMP FLASH traps";
+            type empty;
+          }
+          leaf flowmon {
+            tailf:info "Allow SNMP flow monitor notifications";
+            description
+              "Allow SNMP flow monitor notifications";
+            type empty;
+          }
+          leaf frame-relay {
+            tailf:info "Allow SNMP frame-relay traps";
+            description
+              "Allow SNMP frame-relay traps";
+            type empty;
+          }
+          leaf fru-ctrl {
+            tailf:info "Allow entity FRU control traps";
+            description
+              "Allow entity FRU control traps";
+            type empty;
+          }
+          leaf gdoi {
+            tailf:info "Allows gdoi traps";
+            description
+              "Allows gdoi traps";
+            type empty;
+          }
+          leaf hsrp {
+            tailf:info "Allow SNMP HSRP traps";
+            description
+              "Allow SNMP HSRP traps";
+            type empty;
+          }
+          leaf iplocalpool {
+            tailf:info "Allow SNMP IP Local Pool traps";
+            description
+              "Allow SNMP IP Local Pool traps";
+            type empty;
+          }
+          leaf ipmulticast {
+            tailf:info "Allow SNMP ipmulticast traps";
+            description
+              "Allow SNMP ipmulticast traps";
+            type empty;
+          }
+          leaf ipsec {
+            tailf:info "Allow SNMP IPsec traps";
+            description
+              "Allow SNMP IPsec traps";
+            type empty;
+          }
+          leaf ipsla {
+            tailf:info "Allow SNMP Host IP SLA traps";
+            description
+              "Allow SNMP Host IP SLA traps";
+            type empty;
+          }
+          leaf isakmp {
+            tailf:info "Allow SNMP ISAKMP traps";
+            description
+              "Allow SNMP ISAKMP traps";
+            type empty;
+          }
+          leaf isg-mib {
+            tailf:info "Allow SNMP isgmib traps";
+            description
+              "Allow SNMP isgmib traps";
+            type empty;
+          }
+          leaf isis {
+            tailf:info "Allow IS-IS traps";
+            description
+              "Allow IS-IS traps";
+            type empty;
+          }
+          leaf l2tun-pseudowire-status {
+            tailf:info "Allow SNMP L2 pseudowire status traps";
+            description
+              "Allow SNMP L2 pseudowire status traps";
+            type empty;
+          }
+          leaf l2tun-session {
+            tailf:info "Allow SNMP L2 session traps";
+            description
+              "Allow SNMP L2 session traps";
+            type empty;
+          }
+          leaf license {
+            tailf:info "Allow license traps";
+            description
+              "Allow license traps";
+            type empty;
+          }
+          leaf memory {
+            tailf:info "Allow SNMP Mempool traps";
+            description
+              "Allow SNMP Mempool traps";
+            type empty;
+          }
+          leaf mpls-fast-reroute {
+            tailf:info "Allow SNMP MPLS traffic engineering fast reroute traps";
+            description
+              "Allow SNMP MPLS traffic engineering fast reroute traps";
+            type empty;
+          }
+          leaf mpls-ldp {
+            tailf:info "Allow SNMP MPLS label distribution protocol traps";
+            description
+              "Allow SNMP MPLS label distribution protocol traps";
+            type empty;
+          }
+          leaf mpls-traffic-eng {
+            tailf:info "Allow SNMP MPLS traffic engineering traps";
+            description
+              "Allow SNMP MPLS traffic engineering traps";
+            type empty;
+          }
+          leaf mpls-vpn {
+            tailf:info "Allow SNMP MPLS Virtual Private Network traps";
+            description
+              "Allow SNMP MPLS Virtual Private Network traps";
+            type empty;
+          }
+          leaf msdp {
+            tailf:info "Allow SNMP MSDP traps";
+            description
+              "Allow SNMP MSDP traps";
+            type empty;
+          }
+          leaf mvpn {
+            tailf:info "Allow Multicast Virtual Private Network traps";
+            description
+              "Allow Multicast Virtual Private Network traps";
+            type empty;
+          }
+          leaf nhrp {
+            tailf:info "Allow SNMP NHRP traps";
+            description
+              "Allow SNMP NHRP traps";
+            type empty;
+          }
+          leaf ospf {
+            tailf:info "Allow OSPF traps";
+            description
+              "Allow OSPF traps";
+            type empty;
+          }
+          leaf ospfv3 {
+            tailf:info "Allow OSPFv3 traps";
+            description
+              "Allow OSPFv3 traps";
+            type empty;
+          }
+          leaf pfr {
+            tailf:info "Allow SNMP PfR traps";
+            description
+              "Allow SNMP PfR traps";
+            type empty;
+          }
+          leaf pim {
+            tailf:info "Allow SNMP PIM traps";
+            description
+              "Allow SNMP PIM traps";
+            type empty;
+          }
+          leaf pw-vc {
+            tailf:info "Allow SNMP Pseudowire VC traps";
+            description
+              "Allow SNMP Pseudowire VC traps";
+            type empty;
+          }
+          leaf resource-policy {
+            tailf:info "Enable CISCO-ERM-MIB notifications";
+            description
+              "Enable CISCO-ERM-MIB notifications";
+            type empty;
+          }
+          leaf rf {
+            tailf:info "Allow all SNMP traps defined in CISCO-RF-MIB";
+            description
+              "Allow all SNMP traps defined in CISCO-RF-MIB";
+            type empty;
+          }
+          leaf rsrb {
+            tailf:info "Allow rsrb event traps";
+            description
+              "Allow rsrb event traps";
+            type empty;
+          }
+          leaf rsvp {
+            tailf:info "Allow RSVP flow change traps";
+            description
+              "Allow RSVP flow change traps";
+            type empty;
+          }
+          leaf sdlc {
+            tailf:info "Allow sdlc event traps";
+            description
+              "Allow sdlc event traps";
+            type empty;
+          }
+          leaf sdllc {
+            tailf:info "Allow sdllc event traps";
+            description
+              "Allow sdllc event traps";
+            type empty;
+          }
+          leaf snmp {
+            tailf:info "Allow SNMP-type notifications";
+            description
+              "Allow SNMP-type notifications";
+            type empty;
+          }
+          leaf sonet {
+            tailf:info "Allow SNMP SONET traps";
+            description
+              "Allow SNMP SONET traps";
+            type empty;
+          }
+          leaf srp {
+            tailf:info "Allow SRP protocol traps";
+            description
+              "Allow SRP protocol traps";
+            type empty;
+          }
+          leaf stun {
+            tailf:info "Allow stun event traps";
+            description
+              "Allow stun event traps";
+            type empty;
+          }
+          leaf syslog {
+            tailf:info "Allow SNMP syslog traps";
+            description
+              "Allow SNMP syslog traps";
+            type empty;
+          }
+          leaf trustsec-sxp {
+            tailf:info "Allow SNMP CISCO-TRUSTSEC-SXP-MIB traps";
+            description
+              "Allow SNMP CISCO-TRUSTSEC-SXP-MIB traps";
+            type empty;
+          }
+          leaf tty {
+            tailf:info "Allow TCP connection traps";
+            description
+              "Allow TCP connection traps";
+            type empty;
+          }
+          leaf udp-port {
+            tailf:info "The notification host's UDP port number (default port 162)";
+            description
+              "The notification host's UDP port number (default port 162)";
+            type uint16 {
+              tailf:info "<0-65535>;;The notification host's UDP port number";
+            }
+          }
+          leaf voice {
+            tailf:info "Allow SNMP Voice traps";
+            description
+              "Allow SNMP Voice traps";
+            type empty;
+          }
+          leaf vrfmib {
+            tailf:info "Allow SNMP vrfmib traps";
+            description
+              "Allow SNMP vrfmib traps";
+            type empty;
+          }
+          leaf vrrp {
+            tailf:info "Allow SNMP vrrp traps";
+            description
+              "Allow SNMP vrrp traps";
+            type empty;
+          }
+          leaf x25 {
+            tailf:info "Allow x25 event traps";
+            description
+              "Allow x25 event traps";
+            type empty;
+          }
+        }
+      }
+      container ip {
+        tailf:info "IP ToS configuration for SNMP traffic";
+        description
+          "IP ToS configuration for SNMP traffic";
+        leaf dscp {
+          tailf:info "IP DSCP value for SNMP traffic";
+          description
+            "IP DSCP value for SNMP traffic";
+          type uint8 {
+            tailf:info "<0-63>;;ip dscp value (default value 0 )";
+            range "0..63";
+          }
+        }
+        leaf precedence {
+          tailf:info "IP Precedence value for SNMP traffic";
+          description
+            "IP Precedence value for SNMP traffic";
+          tailf:cli-full-command;
+          type uint8 {
+            tailf:info "<0-7>;;ip precedence value (default value 0)";
+            range "0..7";
+          }
+        }
+      }
+      container ifindex {
+        tailf:info "Enable ifindex persistence";
+        description
+          "Enable ifindex persistence";
+        leaf persist {
+          tailf:info "Persist interface indices";
+          description
+            "Persist interface indices";
+          type empty;
+        }
+      }
+      leaf location {
+        tailf:info "Text for mib object sysLocation";
+        description
+          "Text for mib object sysLocation";
+        tailf:cli-multi-value;
+        type string {
+          tailf:info "LINE;;The physical location of this node";
+        }
+      }
+      container manager {
+        tailf:info "Modify SNMP manager parameters";
+        description
+          "Modify SNMP manager parameters";
+        tailf:cli-display-separated;
+        presence "true";
+        leaf session-timeout {
+          tailf:info "Timeout value for destroying sessions";
+          description
+            "Timeout value for destroying sessions";
+          type uint32 {
+            tailf:info "<10-2147483>;;seconds";
+            range "10..2147483";
+          }
+        }
+      }
+      leaf packetsize {
+        tailf:info "Largest SNMP packet size";
+        description
+          "Largest SNMP packet size";
+        tailf:cli-full-command;
+        type uint32 {
+          tailf:info "<484-17924>;;Packet size";
+          range "484..17924";
+        }
+      }
+      leaf queue-length {
+        tailf:info "Message queue length for each TRAP host";
+        description
+          "Message queue length for each TRAP host";
+        type uint16 {
+          tailf:info "<1-5000>;;Queue length (default 10)";
+          range "1..5000";
+        }
+      }
+      container source-interface {
+        tailf:info "Assign an source interface";
+        description
+          "Assign an source interface";
+        container informs {
+          tailf:info "source interface for informs";
+          description
+            "source interface for informs";
+          tailf:cli-diff-dependency "/ios:native/interface";
+          uses interface-grouping;
+        }
+        container traps {
+          tailf:info "source interface for traps";
+          description
+            "source interface for traps";
+          tailf:cli-diff-dependency "/ios:native/interface";
+          uses interface-grouping;
+        }
+      }
+      leaf system-shutdown {
+        tailf:info "Enable use of the SNMP reload command";
+        description
+          "Enable use of the SNMP reload command";
+        tailf:cli-full-command;
+        type empty;
+      }
+      leaf tftp-server-list {
+        tailf:info "Limit TFTP servers used via SNMP";
+        description
+          "Limit TFTP servers used via SNMP";
+        type union {
+          type uint8 {
+            tailf:info "<1-99>;;IP standard access list";
+            range "1..99";
+          }
+          type string {
+            tailf:info "WORD;;Access-list name";
+          }
+        }
+      }
+      container trap {
+        tailf:info "SNMP trap options";
+        description
+          "SNMP trap options";
+        container link {
+          tailf:info "Assign/Enable SNMP link traps";
+          description
+            "Assign/Enable SNMP link traps";
+          leaf ietf {
+            tailf:info "Use IETF standard for SNMP traps";
+            description
+              "Use IETF standard for SNMP traps";
+            tailf:cli-full-command;
+            type empty;
+          }
+          leaf switchover {
+            tailf:info "Enable link up/down traps during switchover";
+            description
+              "Enable link up/down traps during switchover";
+            tailf:cli-full-command;
+            type empty;
+          }
+        }
+        leaf timeout {
+          tailf:info "Set timeout for TRAP message retransmissions";
+          description
+            "Set timeout for TRAP message retransmissions";
+          type uint16 {
+            tailf:info "<1-1000>;;Timeout (default 30 seconds)";
+            range "1..1000";
+          }
+        }
+      }
+      container trap-source {
+        tailf:info "Assign an interface for the source address of all traps";
+        description
+          "Assign an interface for the source address of all traps";
+        tailf:cli-diff-dependency "/ios:native/interface";
+        uses interface-grouping;
+      }
+      list view {
+        tailf:info "Define an SNMPv2 MIB view";
+        description
+          "Define an SNMPv2 MIB view";
+        tailf:cli-suppress-mode;
+        tailf:cli-delete-when-empty;
+        tailf:cli-compact-syntax;
+        key "name mib";
+        leaf name {
+          type string {
+            tailf:info "WORD;;Name of the view";
+          }
+        }
+        leaf mib {
+          type string {
+            tailf:info "WORD;;MIB view family name";
+          }
+        }
+        leaf inc-exl {
+          tailf:cli-drop-node-name;
+          type enumeration {
+            enum "excluded" {
+              tailf:info "MIB family is excluded from the view";
+            }
+            enum "included" {
+              tailf:info "MIB family is included in the view";
+            }
+          }
+        }
+      }
+    }
+    container dot11 {
+      tailf:info "IEEE 802.11 config commands";
+      description
+        "IEEE 802.11 config commands";
+      leaf syslog {
+        tailf:info "Enable syslog";
+        description
+          "Enable syslog";
+        tailf:cli-full-command;
+        type empty;
+      }
+    }
+    container license {
+      tailf:info "Configure license features";
+      description
+        "Configure license features";
+      container udi {
+        tailf:cli-compact-syntax;
+        tailf:cli-sequence-commands;
+        tailf:cli-reset-container;
+        leaf pid {
+          type string;
+        }
+        leaf sn {
+          type string;
+        }
+      }
+      container feature {
+        tailf:info "License features";
+        description
+          "License features";
+        leaf name {
+          tailf:cli-drop-node-name;
+          tailf:cli-disallow-value "port";
+          type string {
+            tailf:info "License feature name";
+          }
+        }
+        container port {
+          tailf:info "Enable Ports for IM";
+          description
+            "Enable Ports for IM";
+          leaf bulk {
+            tailf:info "Enable Bulk port licenes";
+            description
+              "Enable Bulk port licenes";
+            tailf:cli-full-command;
+            type empty;
+          }
+          leaf onegig {
+            tailf:info "Enable 1G port bundles";
+            description
+              "Enable 1G port bundles";
+            type uint8 {
+              tailf:info "<1-2>;;port bundle count ex:count=1 will enable 6 ports";
+              range "1..2";
+            }
+          }
+          leaf b-6xonegig {
+            tailf:info "Enable 6x1G port bundles";
+            description
+              "Enable 6x1G port bundles";
+            tailf:alt-name "6xonegig";
+            type uint8 {
+              tailf:info "<1-2>;;port bundle count ex:count=1 will enable 6 ports";
+              range "1..2";
+            }
+          }
+          leaf tengig {
+            tailf:info "Enable 10G port bundles";
+            description
+              "Enable 10G port bundles";
+            type uint8 {
+              tailf:info "<1-2>;;port bundle count, each count will enable/disable 2 ports- disable in reverse order";
+              range "1..2";
+            }
+          }
+        }
+      }
+      container accept {
+        tailf:cli-compact-syntax;
+        tailf:cli-sequence-commands {
+          tailf:cli-reset-all-siblings;
+        }
+        leaf end {
+          type empty;
+        }
+        leaf user {
+          type empty;
+        }
+        leaf agreement {
+          type empty;
+        }
+      }
+      container boot {
+        tailf:info "license boot config commands";
+        description
+          "license boot config commands";
+        container level {
+          tailf:info "which level to boot";
+          description
+            "which level to boot";
+          container ipbase {
+            tailf:info "ipbase level";
+            description
+              "ipbase level";
+            tailf:cli-display-separated;
+            presence "true";
+            leaf switch {
+              tailf:info "Switch license information";
+              description
+                "Switch license information";
+              type uint8;
+            }
+          }
+          container ipservices {
+            tailf:info "ipservices level";
+            description
+              "ipservices level";
+            tailf:cli-display-separated;
+            presence "true";
+            leaf switch {
+              tailf:info "Switch license information";
+              description
+                "Switch license information";
+              type empty;
+            }
+          }
+          container ipservicesk9 {
+            tailf:info "ipservicesk9 level";
+            description
+              "ipservicesk9 level";
+            tailf:cli-display-separated;
+            presence "true";
+            leaf switch {
+              tailf:info "Switch license information";
+              description
+                "Switch license information";
+              type empty;
+            }
+          }
+          container lanbase {
+            tailf:info "lanbase level";
+            description
+              "lanbase level";
+            tailf:cli-display-separated;
+            presence "true";
+            leaf switch {
+              tailf:info "Switch license information";
+              description
+                "Switch license information";
+              type empty;
+            }
+          }
+          container lite {
+            tailf:info "lite level";
+            description
+              "lite level";
+            tailf:cli-display-separated;
+            presence "true";
+            leaf switch {
+              tailf:info "Switch license information";
+              description
+                "Switch license information";
+              type empty;
+            }
+          }
+          container metroaggrservices {
+            tailf:info "metroaggrservices level";
+            description
+              "metroaggrservices level";
+            tailf:cli-display-separated;
+            presence "true";
+            leaf switch {
+              tailf:info "Switch license information";
+              description
+                "Switch license information";
+              type empty;
+            }
+          }
+          container advancedmetroipaccess {
+            tailf:info "Advanced Metro IP Access License Level";
+            description
+              "Advanced Metro IP Access License Level";
+            presence "true";
+          }
+          container metroaccess {
+            tailf:info "Metro Access License Level";
+            description
+              "Metro Access License Level";
+            presence "true";
+          }
+          container metroipaccess {
+            tailf:info "Metro IP Access License Level";
+            description
+              "Metro IP Access License Level";
+            presence "true";
+          }
+          container entservices {
+            tailf:info "Entservices License Level";
+            description
+              "Entservices License Level";
+            presence "true";
+          }
+          container adventerprise {
+            tailf:info "Adventerprise License Level";
+            description
+              "Adventerprise License Level";
+            presence "true";
+          }
+          container appxk9 {
+            tailf:info "Appxk9 License Level";
+            description
+              "Appxk9 License Level";
+            presence "true";
+          }
+          container securityk9 {
+            tailf:info "Securityk9 License Level";
+            description
+              "Securityk9 License Level";
+            presence "true";
+          }
+          container uck9 {
+            tailf:info "Uck9 License Level";
+            description
+              "Uck9 License Level";
+            presence "true";
+            leaf disable {
+              type empty;
+            }
+          }
+        }
+        container boot-module {
+          tailf:cli-drop-node-name;
+          tailf:cli-compact-syntax;
+          tailf:cli-sequence-commands;
+          leaf module {
+            type enumeration {
+              enum "c2900";
+            }
+          }
+          container technology-package {
+            leaf securityk9 {
+              tailf:cli-full-command;
+              type empty;
+            }
+            leaf uck9 {
+              tailf:cli-full-command;
+              type empty;
+            }
+            leaf datak9 {
+              tailf:cli-full-command;
+              type empty;
+            }
+          }
+        }
+      }
+      leaf smart {
+        type enumeration {
+          enum "enable";
+        }
+      }
+    }
+    container cdp {
+      tailf:info "Global CDP configuration subcommands";
+      description
+        "Global CDP configuration subcommands";
+      leaf run {
+        tailf:info "Enable CDP";
+        description
+          "Enable CDP";
+        type empty;
+      }
+    }
+    container voice {
+      tailf:info "Global voice configuration";
+      description
+        "Global voice configuration";
+      list service {
+        tailf:info "Global packet telephony service commands";
+        description
+          "Global packet telephony service commands";
+        tailf:cli-mode-name "conf-voi-serv";
+        key "type";
+        leaf type {
+          type enumeration {
+            enum "pots" {
+              tailf:info "Telephony";
+            }
+            enum "saf" {
+              tailf:info "Define voice service saf commands";
+            }
+            enum "voatm" {
+              tailf:info "Voice over ATM";
+            }
+            enum "vofr" {
+              tailf:info "Voice over Frame Relay";
+            }
+            enum "voip" {
+              tailf:info "Voice over IP";
+            }
+          }
+        }
+        container fax {
+          tailf:info "Global fax commands";
+          description
+            "Global fax commands";
+          tailf:cli-compact-syntax;
+          leaf protocol {
+            tailf:info "The system-wide fax protocol type";
+            description
+              "The system-wide fax protocol type";
+            type enumeration {
+              enum "cisco" {
+                tailf:info "Use Cisco proprietary protocol";
+              }
+              enum "none" {
+                tailf:info "Disable fax transport";
+              }
+              enum "pass-through" {
+                tailf:info "Use an audio codec for fax transport";
+              }
+              enum "t38" {
+                tailf:info "Use T.38 protocol";
+              }
+            }
+          }
+          leaf fallback {
+            when "../protocol = 't38'";
+            tailf:info "fax transport to use if T.38 unsupported on far end";
+            description
+              "fax transport to use if T.38 unsupported on far end";
+            type enumeration {
+              enum "cisco" {
+                tailf:info "Use Cisco proprietary protocol";
+              }
+              enum "none" {
+                tailf:info "No fallback";
+              }
+              enum "pass-through" {
+                tailf:info "Use an audio codec for fax transport";
+              }
+            }
+          }
+          leaf codec {
+            tailf:cli-drop-node-name;
+            when "../protocol = 'pass-through' or ../fallback = 'pass-through'";
+            type enumeration {
+              enum "g711alaw" {
+                tailf:info " G.711 A Law 64000 bps (for E1)";
+              }
+              enum "g711ulaw" {
+                tailf:info " G.711 u Law 64000 bps (for T1)";
+              }
+            }
+          }
+          leaf ls-redundancy {
+            when "../protocol = 't38'";
+            tailf:info "t38 low speed redundancy";
+            description
+              "t38 low speed redundancy";
+            type uint8 {
+              tailf:info "<0-5>;;redundancy level, 0 and <cr> no redundancy";
+              range "0..5";
+            }
+          }
+          leaf hs-redundancy {
+            when "../protocol = 't38'";
+            tailf:info "t38 high speed redundancy";
+            description
+              "t38 high speed redundancy";
+            type uint8 {
+              tailf:info "<0-2>;;redundancy level, 0 and <cr> no redundancy";
+              range "0..2";
+            }
+          }
+          leaf version {
+            when "../protocol = 't38'";
+            tailf:info "t38 fax version";
+            description
+              "t38 fax version";
+            type enumeration {
+              enum "0" {
+                tailf:info "version 0";
+              }
+              enum "3" {
+                tailf:info "version 3";
+              }
+            }
+          }
+        }
+      }
+    }
+    list voice-card {
+      tailf:info "Configure a specific voice-card";
+      description
+        "Configure a specific voice-card";
+      tailf:cli-mode-name "config-voicecard";
+      key "slot";
+      leaf slot {
+        type uint8 {
+          tailf:info "<0-2>;;Voice interface slot #";
+          range "0..2";
+        }
+      }
+    }
+    container card {
+      tailf:cli-reset-container;
+      tailf:cli-compact-syntax;
+      tailf:cli-sequence-commands;
+      leaf type {
+        tailf:cli-incomplete-command;
+        tailf:cli-remove-before-change;
+        type enumeration {
+          enum "t1";
+          enum "e1";
+        }
+      }
+      leaf slot {
+        tailf:cli-drop-node-name;
+        type uint32;
+      }
+      leaf bay {
+        tailf:cli-drop-node-name;
+        type uint32;
+      }
+    }
+    container event {
+      tailf:info "Event related configuration commands";
+      description
+        "Event related configuration commands";
+      container manager {
+        tailf:info "Event Manager configuration commands";
+        description
+          "Event Manager configuration commands";
+        list environment {
+          tailf:info "Set an Embedded Event Manager global environment variable";
+          description
+            "Set an Embedded Event Manager global environment variable";
+          tailf:cli-suppress-mode;
+          tailf:cli-delete-when-empty;
+          key "name";
+          leaf name {
+            type string {
+              tailf:info "WORD;;Name of the global environment variable";
+            }
+          }
+          leaf value {
+            tailf:cli-drop-node-name;
+            type string {
+              tailf:info "LINE;;Value of the global environment variable";
+            }
+          }
+        }
+        container directory {
+          tailf:info "Set Embedded Event Manager directory information";
+          description
+            "Set Embedded Event Manager directory information";
+          container user {
+            tailf:info "Set Embedded Event Manager user directory information";
+            description
+              "Set Embedded Event Manager user directory information";
+            leaf policy {
+              tailf:info "Set Embedded Event Manager user policy directory";
+              description
+                "Set Embedded Event Manager user policy directory";
+              type string {
+                tailf:info "WORD;;Path of the Embedded Event Manager user policy directory";
+              }
+            }
+          }
+        }
+        list applet {
+          tailf:info "Register an Event Manager applet";
+          description
+            "Register an Event Manager applet";
+          tailf:cli-mode-name "config-applet";
+          tailf:cli-exit-command "exit" {
+            tailf:info "Exit from Event Manager applet configuration submode";
+          }
+          key "name";
+          leaf name {
+            type string {
+              tailf:info "WORD;;Name of the Event Manager applet";
+            }
+          }
+          leaf authorization {
+            tailf:info "Specify an authorization type for the applet";
+            description
+              "Specify an authorization type for the applet";
+            tailf:cli-hide-in-submode;
+            type enumeration {
+              enum "bypass" {
+                tailf:info "EEM aaa authorization type bypass";
+              }
+            }
+          }
+          leaf class {
+            tailf:info "Specify a class for the applet";
+            description
+              "Specify a class for the applet";
+            tailf:cli-hide-in-submode;
+            type string {
+              tailf:info "Class A-Z | default - default class";
+              pattern "[A-Z]|default";
+            }
+          }
+          leaf trap {
+            tailf:info "Generate an SNMP trap when applet is triggered.";
+            description
+              "Generate an SNMP trap when applet is triggered.";
+            tailf:cli-hide-in-submode;
+            type empty;
+          }
+          container event {
+            tailf:info "Add or modify event information";
+            description
+              "Add or modify event information";
+            container snmp-notification {
+              tailf:info "SNMP Notification Event";
+              description
+                "SNMP Notification Event";
+              tailf:cli-compact-syntax;
+              tailf:cli-reset-container;
+              leaf oid {
+                tailf:info "Object ID of data element";
+                description
+                  "Object ID of data element";
+                type string {
+                  tailf:info "WORD;;OID string";
+                }
+              }
+              leaf oid-val {
+                tailf:info "Comparison value";
+                description
+                  "Comparison value";
+                type string {
+                  tailf:info "WORD;;Comparision value";
+                }
+              }
+              leaf op {
+                tailf:info "Operator";
+                description
+                  "Operator";
+                type operator-type;
+              }
+              leaf src-ip-address {
+                tailf:info "Source ip address";
+                description
+                  "Source ip address";
+                type union {
+                  type inet:ipv4-address {
+                    tailf:info "A.B.C.D;;Source ip address value";
+                  }
+                  type inet:ipv6-address {
+                    tailf:info "X:X:X:X::X;;Source ip address value";
+                  }
+                }
+              }
+              leaf dest-ip-address {
+                tailf:info "Destination ip address";
+                description
+                  "Destination ip address";
+                type union {
+                  type inet:ipv4-address {
+                    tailf:info "A.B.C.D;;Destination ip address value";
+                  }
+                  type inet:ipv6-address {
+                    tailf:info "X:X:X:X::X;;Destination ip address value";
+                  }
+                }
+              }
+            }
+            container syslog {
+              tailf:info "Syslog event";
+              description
+                "Syslog event";
+              leaf pattern {
+                tailf:info "Pattern match string for the entire message";
+                description
+                  "Pattern match string for the entire message";
+                type string {
+                  tailf:info "WORD;;Pattern match string for the entire message";
+                }
+              }
+            }
+          }
+          list action {
+            tailf:info "Add or modify an action statement";
+            description
+              "Add or modify an action statement";
+            tailf:cli-suppress-mode;
+            tailf:cli-delete-when-empty;
+            tailf:cli-incomplete-command;
+            tailf:cli-compact-syntax;
+            tailf:cli-reset-container;
+            ordered-by user;
+            key "name";
+            leaf name {
+              type string {
+                tailf:info "WORD;;Label";
+              }
+            }
+            container if {
+              tailf:info "if conditional";
+              description
+                "if conditional";
+              tailf:cli-compact-syntax;
+              tailf:cli-sequence-commands;
+              tailf:cli-reset-container;
+              leaf string-op-1 {
+                tailf:cli-drop-node-name;
+                tailf:cli-incomplete-command;
+                type string {
+                  tailf:info "WORD;;first operand";
+                }
+              }
+              leaf keyword {
+                tailf:cli-drop-node-name;
+                tailf:cli-incomplete-command;
+                type operator-type;
+              }
+              leaf string-op-2 {
+                tailf:cli-drop-node-name;
+                type string {
+                  tailf:info "WORD;;second operand";
+                }
+              }
+              leaf goto {
+                tailf:info "goto label";
+                description
+                  "goto label";
+                type string {
+                  tailf:info "WORD;;label";
+                }
+              }
+            }
+            container info {
+              tailf:info "Obtain system specific information";
+              description
+                "Obtain system specific information";
+              container type {
+                tailf:info "Type of information to obtain";
+                description
+                  "Type of information to obtain";
+                tailf:cli-full-no;
+                container snmp {
+                  tailf:info "SNMP information";
+                  description
+                    "SNMP information";
+                  container var {
+                    tailf:info "Trap variable";
+                    description
+                      "Trap variable";
+                    tailf:cli-compact-syntax;
+                    tailf:cli-sequence-commands;
+                    tailf:cli-reset-container;
+                    leaf variable-name {
+                      tailf:cli-drop-node-name;
+                      tailf:cli-incomplete-command;
+                      type string {
+                        tailf:info "WORD;;Trap variable name";
+                      }
+                    }
+                    leaf oid {
+                      tailf:info "SNMP object id";
+                      description
+                        "SNMP object id";
+                      tailf:cli-incomplete-command;
+                      type string {
+                        tailf:info "WORD;;oid string";
+                      }
+                    }
+                    leaf oid-type {
+                      tailf:cli-drop-node-name;
+                      tailf:cli-incomplete-command;
+                      type enumeration {
+                        enum "counter" {
+                          tailf:info "Counter value";
+                        }
+                        enum "gauge" {
+                          tailf:info "Gauge value";
+                        }
+                        enum "int" {
+                          tailf:info "Integer value";
+                        }
+                        enum "ipv4" {
+                          tailf:info "IPv4 address";
+                        }
+                        enum "octet" {
+                          tailf:info "Octet value";
+                        }
+                        enum "string" {
+                          tailf:info "String value";
+                        }
+                        enum "uint" {
+                          tailf:info "Unsigned integer value";
+                        }
+                      }
+                    }
+                    leaf oid-type-value {
+                      tailf:cli-drop-node-name;
+                      type string;
+                    }
+                  }
+                  container trap {
+                    tailf:info "SNMP trap";
+                    description
+                      "SNMP trap";
+                    tailf:cli-compact-syntax;
+                    tailf:cli-sequence-commands;
+                    tailf:cli-reset-container;
+                    leaf enterprise-oid {
+                      tailf:info "Enterprise oid";
+                      description
+                        "Enterprise oid";
+                      tailf:cli-incomplete-command;
+                      type string {
+                        tailf:info "WORD;;Enterprise oid string";
+                      }
+                    }
+                    leaf generic-trapnum {
+                      tailf:info "Generic trap number";
+                      description
+                        "Generic trap number";
+                      tailf:cli-incomplete-command;
+                      type uint32 {
+                        tailf:info "<0-4294967295>;;Generic trap number";
+                      }
+                    }
+                    leaf specific-trapnum {
+                      tailf:info "Specific trap number";
+                      description
+                        "Specific trap number";
+                      tailf:cli-incomplete-command;
+                      type uint32 {
+                        tailf:info "<0-4294967295>;;Specific trap number";
+                      }
+                    }
+                    leaf trap-oid {
+                      tailf:info "Trap oid";
+                      description
+                        "Trap oid";
+                      tailf:cli-incomplete-command;
+                      type string {
+                        tailf:info "WORD;;oid string";
+                      }
+                    }
+                    leaf trap-var {
+                      tailf:info "Trap variable";
+                      description
+                        "Trap variable";
+                      type string {
+                        tailf:info "WORD;;Trap variable name";
+                      }
+                    }
+                  }
+                }
+              }
+            }
+            leaf end {
+              tailf:info "end conditional block";
+              description
+                "end conditional block";
+              type empty;
+            }
+            container regexp {
+              tailf:info "regular expression match";
+              description
+                "regular expression match";
+              tailf:cli-compact-syntax;
+              tailf:cli-sequence-commands;
+              tailf:cli-reset-container;
+              leaf string-pattern {
+                tailf:cli-drop-node-name;
+                tailf:cli-incomplete-command;
+                type string {
+                  tailf:info "WORD;;regular expression pattern";
+                }
+              }
+              leaf string-input {
+                tailf:cli-drop-node-name;
+                type string {
+                  tailf:info "WORD;;input string";
+                }
+              }
+              leaf string-match {
+                tailf:cli-drop-node-name;
+                type string {
+                  tailf:info "WORD;;match variable";
+                }
+              }
+              leaf string-submatch1 {
+                tailf:cli-drop-node-name;
+                type string {
+                  tailf:info "WORD;;submatch variable";
+                }
+              }
+              leaf string-submatch2 {
+                tailf:cli-drop-node-name;
+                type string {
+                  tailf:info "WORD;;submatch variable";
+                }
+              }
+              leaf string-submatch3 {
+                tailf:cli-drop-node-name;
+                type string {
+                  tailf:info "WORD;;submatch variable";
+                }
+              }
+            }
+            container snmp-trap {
+              tailf:info "Send an SNMP trap";
+              description
+                "Send an SNMP trap";
+              tailf:cli-compact-syntax;
+              tailf:cli-delete-when-empty;
+              presence "true";
+              leaf intdata1 {
+                tailf:info "SNMP integer data1";
+                description
+                  "SNMP integer data1";
+                type int32 {
+                  tailf:info "<-2147483648 - 2147483647>;;SNMP trap integer value1";
+                }
+              }
+              leaf intdata2 {
+                tailf:info "SNMP integer data2";
+                description
+                  "SNMP integer data2";
+                type int32 {
+                  tailf:info "<-2147483648 - 2147483647>;;SNMP trap integer value2";
+                }
+              }
+              leaf strdata {
+                tailf:info "SNMP trap string";
+                description
+                  "SNMP trap string";
+                type string {
+                  tailf:info "WORD  SNMP trap string value";
+                }
+              }
+            }
+            container string {
+              tailf:info "string commands";
+              description
+                "string commands";
+              leaf trim {
+                tailf:info "trim characters from both ends of string";
+                description
+                  "trim characters from both ends of string";
+                type string;
+              }
+            }
+            container syslog {
+              tailf:info "Log a syslog message";
+              description
+                "Log a syslog message";
+              tailf:cli-compact-syntax;
+              leaf facility {
+                tailf:info "Facility string";
+                description
+                  "Facility string";
+                type string {
+                  tailf:info "WORD;;facility string";
+                }
+              }
+              leaf msg {
+                tailf:info "Syslog message";
+                description
+                  "Syslog message";
+                type string {
+                  tailf:info "WORD;;message string";
+                }
+              }
+              leaf priority {
+                tailf:info "Priority of syslog message";
+                description
+                  "Priority of syslog message";
+                type logging-level-type;
+              }
+            }
+          }
+          leaf description {
+            tailf:info "Add or modify an applet description";
+            description
+              "Add or modify an applet description";
+            tailf:cli-full-command;
+            tailf:cli-multi-value;
+            type string {
+              tailf:info "LINE;;description";
+            }
+          }
+          container trigger {
+            tailf:info "Enter applet trigger configuration submode";
+            description
+              "Enter applet trigger configuration submode";
+            tailf:cli-add-mode;
+            tailf:cli-mode-name "config-applet-trigger";
+          }
+        }
+      }
+    }
+    leaf disable-eadi {
+      tailf:cli-full-command;
+      type empty;
+    }
+    container memory-size {
+      tailf:info "Adjust memory size by percentage";
+      description
+        "Adjust memory size by percentage";
+      leaf iomem {
+        tailf:info "I/O memory";
+        description
+          "I/O memory";
+        type uint8 {
+          tailf:info "<5-25>;;percentage of DRAM to use for I/O memory: 5, 10, 15, 20, 25";
+          range "5..25" {
+            tailf:step "5";
+          }
+        }
+      }
+    }
+    container transceiver {
+      tailf:info "Select from transceiver configuration commands";
+      description
+        "Select from transceiver configuration commands";
+      container type {
+        tailf:info "type keyword";
+        description
+          "type keyword";
+        container all {
+          tailf:cli-add-mode;
+          tailf:cli-mode-name "config-xcvr-type";
+          tailf:cli-full-command;
+          container monitoring {
+            tailf:info "Enable/disable monitoring";
+            description
+              "Enable/disable monitoring";
+            presence "true";
+            leaf interval {
+              tailf:info "Set interval for monitoring";
+              description
+                "Set interval for monitoring";
+              type uint16 {
+                tailf:info "<300-3600>;;Time interval for monitoring transceiver in seconds";
+                range "300..3600";
+              }
+            }
+          }
+        }
+      }
+    }
+    container onep {
+      tailf:info "ONEP functionality";
+      description
+        "ONEP functionality";
+      tailf:cli-add-mode;
+      tailf:cli-mode-name "config-onep";
+      tailf:cli-full-command;
+      container service {
+        tailf:info "ONEP service set";
+        description
+          "ONEP service set";
+        leaf set {
+          tailf:info "ONEP service set";
+          description
+            "ONEP service set";
+          type enumeration {
+            enum "vty" {
+              tailf:info "vty service set";
+            }
+            enum "advancedrouting" {
+              tailf:info "advancedrouting service set";
+            }
+            enum "mediatrace" {
+              tailf:info "mediatrace service set";
+            }
+            enum "onefw" {
+              tailf:info "onefw service set";
+            }
+          }
+        }
+      }
+      container tls {
+        tailf:info "TLS transport";
+        description
+          "TLS transport";
+        tailf:cli-add-mode;
+        tailf:cli-mode-name "config-onep-tls";
+        container trustpoint {
+          tailf:info "Trustpoint configuration";
+          description
+            "Trustpoint configuration";
+          leaf client-verification {
+            tailf:info "Client trustpoint";
+            description
+              "Client trustpoint";
+            type string {
+              tailf:info "WORD;;Trustpoint name";
+            }
+          }
+          leaf server-identity {
+            tailf:info "Server trustpoint";
+            description
+              "Server trustpoint";
+            type string {
+              tailf:info "WORD;;Trustpoint name";
+            }
+          }
+        }
+      }
+    }
+    container service-insertion {
+      tailf:info "Service Insertion mode";
+      description
+        "Service Insertion mode";
+      leaf acg-reload-delay {
+        tailf:info "Reload delay timer for ACG";
+        description
+          "Reload delay timer for ACG";
+        type uint16 {
+          tailf:info "<120-450>;;ACG reload delay timer value in seconds";
+          range "120..450";
+        }
+      }
+      list appnav-controller-group {
+        tailf:info "AppNav Controller Group";
+        description
+          "AppNav Controller Group";
+        tailf:cli-mode-name "config-service-insertion-acg";
+        key "group-name";
+        leaf group-name {
+          type string {
+            tailf:info "WORD;;AppNav Controller Group Name";
+          }
+        }
+        leaf-list appnav-controller {
+          tailf:info "AppNav controller";
+          description
+            "AppNav controller";
+          tailf:cli-list-syntax;
+          type inet:ipv4-address {
+            tailf:info "A.B.C.D;;AppNav controller IP address";
+          }
+        }
+        leaf description {
+          tailf:info "ACG description";
+          description
+            "ACG description";
+          type string;
+        }
+      }
+      container service-context {
+        tailf:info "Service Context";
+        description
+          "Service Context";
+        list waas {
+          tailf:info "Service controller waas";
+          description
+            "Service controller waas";
+          tailf:cli-allow-join-with-key {
+            tailf:cli-display-joined;
+          }
+          tailf:cli-mode-name "config-service-insertion-context";
+          tailf:cli-suppress-key-abbreviation;
+          key "name";
+          leaf name {
+            type string {
+              tailf:info "/<1-32>;;/Service Context ID";
+            }
+          }
+          leaf appnav-controller-group {
+            tailf:info "AppNav Controller Group";
+            description
+              "AppNav Controller Group";
+            type string {
+              tailf:info "WORD;;AppNav Controller Group";
+            }
+          }
+          container authentication {
+            tailf:info "Authentication key";
+            description
+              "Authentication key";
+            tailf:cli-sequence-commands;
+            tailf:cli-compact-syntax;
+            leaf sha1 {
+              tailf:info "Authentication type";
+              description
+                "Authentication type";
+              type empty;
+            }
+            leaf key {
+              tailf:info "Authentication Key";
+              description
+                "Authentication Key";
+              type empty;
+            }
+            leaf encrypt {
+              tailf:cli-drop-node-name;
+              tailf:cli-break-sequence-commands;
+              type enumeration {
+                enum "0" {
+                  tailf:info "Specifies an UNENCRYPTED secret will follow";
+                }
+                enum "7" {
+                  tailf:info "Specifies a HIDDEN secret will follow";
+                }
+              }
+            }
+            leaf string {
+              tailf:cli-drop-node-name;
+              type string {
+                tailf:info "WORD;;Key string (64 chars max)";
+              }
+            }
+          }
+          leaf enable {
+            tailf:info "service context enable";
+            description
+              "service context enable";
+            type empty;
+          }
+          leaf service-node-group {
+            tailf:info "service node Group";
+            description
+              "service node Group";
+            type string {
+              tailf:info "WORD;;service node Group";
+            }
+          }
+          leaf service-policy {
+            tailf:info "Specify a service policy for the service context";
+            description
+              "Specify a service policy for the service context";
+            type string {
+              tailf:info "WORD;;Name of the preconfigured service policy";
+            }
+          }
+          container vrf {
+            tailf:info "VRF";
+            description
+              "VRF";
+            leaf default {
+              tailf:info "default";
+              description
+                "default";
+              type empty;
+            }
+            leaf global {
+              tailf:info "global";
+              description
+                "global";
+              type empty;
+            }
+            leaf name {
+              tailf:info "vrf name";
+              description
+                "vrf name";
+              type string {
+                tailf:info "WORD;;vrf name";
+              }
+            }
+          }
+        }
+      }
+      list service-node-group {
+        tailf:info "service node Group";
+        description
+          "service node Group";
+        tailf:cli-mode-name "config-service-insertion-sng";
+        key "name";
+        leaf name {
+          type string {
+            tailf:info "WORD;;service node Group Name";
+          }
+        }
+        leaf description {
+          tailf:info "Group Description";
+          description
+            "Group Description";
+          type string {
+            tailf:info "WORD;;Group Description";
+          }
+        }
+        leaf node-discovery {
+          tailf:info "service node auto discovery";
+          description
+            "service node auto discovery";
+          type enumeration {
+            enum "enable" {
+              tailf:info "service context enable";
+            }
+          }
+        }
+        leaf-list service-node {
+          tailf:info "service node";
+          description
+            "service node";
+          tailf:cli-list-syntax;
+          type inet:ipv4-address {
+            tailf:info "A.B.C.D;;service node IP ADDRESS";
+          }
+        }
+      }
+      container swap {
+        tailf:info "Swap src-ip";
+        description
+          "Swap src-ip";
+        leaf src-ip {
+          tailf:info "Swap source-ip of service-insertion packets";
+          description
+            "Swap source-ip of service-insertion packets";
+          type empty;
+        }
+      }
+    }
+    container udld {
+      tailf:info "Configure global UDLD setting";
+      description
+        "Configure global UDLD setting";
+      leaf aggressive {
+        tailf:info "Enable UDLD protocol in aggressive mode on fiber ports exceptwhere locally configured";
+        description
+          "Enable UDLD protocol in aggressive mode on fiber ports exceptwhere locally configured";
+        type empty;
+      }
+      leaf enable {
+        tailf:info "Enable UDLD protocol on fiber ports except where locally configured";
+        description
+          "Enable UDLD protocol on fiber ports except where locally configured";
+        type empty;
+      }
+      container message {
+        tailf:info "Set UDLD message parameters";
+        description
+          "Set UDLD message parameters";
+        leaf time {
+          tailf:info "Set UDLD message time period";
+          description
+            "Set UDLD message time period";
+          type uint8 {
+            tailf:info "<1-90>;;Time in seconds between sending of messages in steady state";
+            range "1..90";
+          }
+        }
+      }
+    }
+  }
+}