junos-ex-conf-protocols

Junos protocols configuration module

  • Version: 2019-01-01

    junos-ex-conf-protocols@2019-01-01


    
      module junos-ex-conf-protocols {
    
        yang-version 1;
    
        namespace
          "http://yang.juniper.net/junos-ex/conf/protocols";
    
        prefix jc-protocols;
    
        import junos-common-ddl-extensions {
          prefix junos;
          revision-date "2019-01-01";
        }
        import junos-common-types {
          prefix jt;
          revision-date "2019-01-01";
        }
        import junos-ex-conf-root {
          prefix jc;
          revision-date "2019-01-01";
        }
    
        organization "Juniper Networks, Inc.";
    
        contact "yang-support@juniper.net";
    
        description
          "Junos protocols configuration module";
    
        revision "2019-01-01" {
          description "Junos: 21.3R1.9";
        }
    
    
        augment /jc:configuration {
          uses protocols-group;
        }
    
        augment /jc:configuration/jc:groups {
          uses protocols-group;
        }
    
        grouping protocols-group {
          container protocols {
            description
              "Routing protocol configuration";
            uses juniper-protocols;
          }  // container protocols
        }  // grouping protocols-group
    
        grouping juniper-protocols {
          uses apply-advanced;
    
          container router-advertisement {
            description
              "IPv6 router advertisement options";
            uses apply-advanced;
    
            container traceoptions {
              description
                "Trace options for router advertisement";
              uses apply-advanced;
    
              container file {
                description "Trace file options";
                leaf filename {
                  type string {
                    junos:posix-pattern "![/ %]";
                    junos:pattern-message "Must not contain '/', % or a space";
                    length "1 .. 1024";
                  }
                  description
                    "Name of file in which to write trace information";
                }
    
                leaf replace {
                  type empty;
                  status deprecated;
                  description
                    "Replace trace file rather than appending to it";
                }
    
                leaf size {
                  type string;
                  description
                    "Maximum trace file size";
                }
    
                leaf files {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "2 .. 1000";
                    }
                  }
                  default "10";
                  description
                    "Maximum number of trace files";
                }
    
                leaf no-stamp {
                  type empty;
                  status deprecated;
                  description
                    "Do not timestamp trace file";
                }
    
                choice world-readable-choice {
                  leaf world-readable {
                    type empty;
                    description
                      "Allow any user to read the log file";
                  }
                  leaf no-world-readable {
                    type empty;
                    description
                      "Don't allow any user to read the log file";
                  }
                }  // choice world-readable-choice
              }  // container file
    
              list flag {
                key "name";
                ordered-by user;
                description "Tracing parameters";
                leaf name {
                  type enumeration {
                    enum "route" {
                      value 0;
                      description
                        "Trace routing information";
                    }
                    enum "normal" {
                      value 1;
                      description
                        "Trace normal events";
                    }
                    enum "general" {
                      value 2;
                      description
                        "Trace general events";
                    }
                    enum "state" {
                      value 3;
                      description
                        "Trace state transitions";
                    }
                    enum "policy" {
                      value 4;
                      description
                        "Trace policy processing";
                    }
                    enum "task" {
                      value 5;
                      description
                        "Trace routing protocol task processing";
                    }
                    enum "timer" {
                      value 6;
                      description
                        "Trace routing protocol timer processing";
                    }
                    enum "all" {
                      value 7;
                      description
                        "Trace everything";
                    }
                  }
                }
              }  // list flag
            }  // container traceoptions
    
            list interface {
              key "name";
              ordered-by user;
              description
                "Interfaces on which to configure router advertisement";
              leaf name {
                type string;
              }
    
              uses apply-advanced;
    
              leaf preference {
                type enumeration {
                  enum "medium" {
                    value 0;
                    description
                      "Medium / (Default)";
                  }
                  enum "high" {
                    value 1;
                    description "High";
                  }
                  enum "low" {
                    value 2;
                    description "Low";
                  }
                }
                description
                  "Set the Preference for Router Selection";
              }
    
              leaf max-advertisement-interval {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "4 .. 1800";
                  }
                }
                units "seconds";
                description
                  "Maximum advertisement interval";
              }
    
              leaf min-advertisement-interval {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "3 .. 1350";
                  }
                }
                units "seconds";
                description
                  "Minimum advertisement interval";
              }
    
              choice managed-configuration-choice {
                leaf managed-configuration {
                  type empty;
                  description
                    "Set managed address configuration";
                }
                leaf no-managed-configuration {
                  type empty;
                  description
                    "Don't set managed address configuration";
                }
              }  // choice managed-configuration-choice
    
              choice other-stateful-configuration-choice {
                leaf other-stateful-configuration {
                  type empty;
                  description
                    "Set other stateful configuration";
                }
                leaf no-other-stateful-configuration {
                  type empty;
                  description
                    "Don't set other stateful configuration";
                }
              }  // choice other-stateful-configuration-choice
    
              choice link-mtu-choice {
                leaf link-mtu {
                  type empty;
                  description "Link MTU";
                }
                leaf no-link-mtu {
                  type empty;
                  description "Don't link MTU";
                }
              }  // choice link-mtu-choice
    
              leaf solicit-router-advertisement-unicast {
                type empty;
                description
                  "Enbale solicited router advertisement as unicast";
              }
    
              leaf reachable-time {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "0 .. 3600000";
                  }
                }
                units "milliseconds";
                description "Reachable time";
              }
    
              leaf retransmit-timer {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "0 .. 4294967295";
                  }
                }
                units "milliseconds";
                description "Retransmit timer";
              }
    
              leaf virtual-router-only {
                type empty;
                description
                  "Send advertisemnets only for vrrp-inet6-group";
              }
    
              leaf current-hop-limit {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "0 .. 255";
                  }
                }
                description "Current hop limit";
              }
    
              leaf default-lifetime {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "0 .. 9000";
                  }
                }
                units "seconds";
                description "Router lifetime";
              }
    
              list dns-server-address {
                key "name";
                max-elements 3;
                ordered-by user;
                description
                  "Recursive DNS address configuration";
                leaf name {
                  type string;
                  description
                    "DNS address to be advertised";
                }
    
                uses apply-advanced;
    
                leaf lifetime {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "0 .. 4294967295";
                    }
                  }
                  units "seconds";
                  default "1800";
                  description
                    "DNS address lifetime";
                }
              }  // list dns-server-address
    
              list prefix {
                key "name";
                ordered-by user;
                description
                  "Prefix configuration";
                leaf name {
                  type jt:ipv6prefix;
                  description
                    "Prefix to be advertised";
                }
    
                uses apply-advanced;
    
                leaf valid-lifetime {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "0 .. 4294967295";
                    }
                  }
                  units "seconds";
                  description
                    "Valid lifetime (fixed)";
                }
    
                choice on-link-choice {
                  leaf on-link {
                    type empty;
                    description
                      "Set on-link flag";
                  }
                  leaf no-on-link {
                    type empty;
                    description
                      "Don't set on-link flag";
                  }
                }  // choice on-link-choice
    
                leaf preferred-lifetime {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "0 .. 4294967295";
                    }
                  }
                  units "seconds";
                  description
                    "Preferred lifetime (fixed)";
                }
    
                choice autonomous-choice {
                  leaf autonomous {
                    type empty;
                    description
                      "Set autonomous flag";
                  }
                  leaf no-autonomous {
                    type empty;
                    description
                      "Don't set autonomous flag";
                  }
                }  // choice autonomous-choice
              }  // list prefix
    
              list dns-search-list {
                key "name";
                ordered-by user;
                description
                  "DNS search list configuration";
                leaf name {
                  type string;
                  description
                    "DNS search list name";
                }
    
                uses apply-advanced;
    
                leaf lifetime {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "0 .. 4294967295";
                    }
                  }
                  units "seconds";
                  default "5400";
                  description
                    "DNS search list lifetime";
                }
              }  // list dns-search-list
    
              list rio-prefix {
                key "name";
                ordered-by user;
                description
                  "Route information option configuration";
                leaf name {
                  type jt:ipv6prefix;
                  description
                    "Prefix to be advertised";
                }
    
                uses apply-advanced;
    
                leaf rio-lifetime {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "0 .. 4294967295";
                    }
                  }
                  units "seconds";
                  description
                    "Route information lifetime";
                }
    
                leaf rio-preference {
                  type enumeration {
                    enum "medium" {
                      value 0;
                      description
                        "Medium / Default";
                    }
                    enum "high" {
                      value 1;
                      description "High";
                    }
                    enum "low" {
                      value 2;
                      description "Low";
                    }
                  }
                  description
                    "Set the preference for route information";
                }
              }  // list rio-prefix
            }  // list interface
    
            container ra-secure {
              description
                "Protect box against rogue incoming RA messages";
              uses apply-advanced;
    
              leaf accept-current-hop-limit-min {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "1 .. 255";
                  }
                }
                units "uint";
                description
                  "Current hop limit acceptable min for incoming RA";
              }
    
              leaf accept-current-hop-limit-max {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "1 .. 255";
                  }
                }
                units "uint";
                description
                  "Current hop acceptable min for incoming RA";
              }
    
              leaf accept-reachable-time-min {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "1000 .. 3600000";
                  }
                }
                units "milliseconds";
                description
                  "Reachable Time acceptable min for incoming RA";
              }
    
              leaf accept-reachable-time-max {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "1000 .. 3600000";
                  }
                }
                units "milliseconds";
                description
                  "Reachable Time acceptable max for incoming RA";
              }
    
              leaf accept-retransmit-time-min {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "1000 .. 3600000";
                  }
                }
                units "milliseconds";
                description
                  "Retransmit Time acceptable min for incoming RA";
              }
    
              leaf accept-retransmit-time-max {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "1000 .. 3600000";
                  }
                }
                units "milliseconds";
                description
                  "Retransmit Time acceptable min for incoming RA";
              }
            }  // container ra-secure
          }  // container router-advertisement
    
          container neighbor-discovery {
            presence "enable neighbor-discovery";
            description
              "IPv6 neighbor discovery";
            uses apply-advanced;
    
            leaf onlink-subnet-only {
              type empty;
              description
                "Onlink subnet only knob";
            }
    
            leaf no-dad-on-state-change {
              type empty;
              description
                "Disable DAD on interface state change";
            }
    
            container ndp-proxy {
              description
                "Configure NDP PROXY behaviour";
              uses apply-advanced;
    
              leaf no-proxy-on-resolve {
                type empty;
                description
                  "Disable proxy on unresolved address";
              }
            }  // container ndp-proxy
    
            container dad-proxy {
              description
                "Configure DAD PROXY behaviour";
              uses apply-advanced;
    
              leaf no-proxy-on-resolve {
                type empty;
                description
                  "Disable proxy on unresolved address";
              }
            }  // container dad-proxy
          }  // container neighbor-discovery
    
          container iccp {
            description "ICCP options";
            uses apply-advanced;
    
            leaf local-ip-addr {
              type jt:ipv4addr;
              description
                "Local IP address to use by default for all peers";
            }
    
            leaf session-establishment-hold-time {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "45 .. 600";
                }
              }
              units "seconds";
              default "300";
              description
                "Time within which connection must succeed with peers";
            }
    
            leaf authentication-key {
              type string {
                length "1 .. 126";
              }
              description
                "MD5 authentication key for all peers";
            }
    
            list peer {
              key "name";
              max-elements 1;
              description
                "Redundancy Group Configuration";
              uses peer-group;
            }  // list peer
    
            container traceoptions {
              description
                "Trace options for ICCP";
              uses apply-advanced;
    
              leaf no-remote-trace {
                junos:must "("system tracing")";
                junos:must-message "'no-remote-trace' is valid only when [system tracing] is configured";
                type empty;
                description
                  "Disable remote tracing";
              }
    
              container file {
                description
                  "Trace file information";
                leaf filename {
                  type string {
                    junos:posix-pattern "![/ %]";
                    junos:pattern-message "Must not contain '/', % or a space";
                    length "1 .. 1024";
                  }
                  description
                    "Name of file in which to write trace information";
                }
    
                leaf size {
                  type string;
                  description
                    "Maximum trace file size";
                }
    
                leaf files {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "2 .. 1000";
                    }
                  }
                  default "3";
                  description
                    "Maximum number of trace files";
                }
    
                choice world-readable-choice {
                  leaf world-readable {
                    type empty;
                    description
                      "Allow any user to read the log file";
                  }
                  leaf no-world-readable {
                    type empty;
                    description
                      "Don't allow any user to read the log file";
                  }
                }  // choice world-readable-choice
    
                leaf match {
                  type jt:regular-expression;
                  description
                    "Regular expression for lines to be logged";
                }
              }  // container file
    
              list flag {
                key "name";
                ordered-by user;
                description
                  "Trace flag information";
                leaf name {
                  type enumeration {
                    enum "error" {
                      value 0;
                      description
                        "Trace all errors";
                    }
                    enum "event" {
                      value 1;
                      description
                        "Trace all events";
                    }
                    enum "packet" {
                      value 2;
                      description
                        "Trace all packets";
                    }
                    enum "pipe" {
                      value 3;
                      description
                        "Trace pipe messages";
                    }
                    enum "pipe-detail" {
                      value 4;
                      description
                        "Trace pipe messages in detail";
                    }
                    enum "all" {
                      value 5;
                      description
                        "Trace everything";
                    }
                  }
                }
              }  // list flag
            }  // container traceoptions
          }  // container iccp
    
          container ilmi {
            description
              "Interim Local Management Interface Protocol configuration";
            uses apply-advanced;
    
            container traceoptions {
              description "ILMI trace options";
              uses apply-advanced;
    
              leaf no-remote-trace {
                junos:must "("system tracing")";
                junos:must-message "'no-remote-trace' is valid only when [system tracing] is configured";
                type empty;
                description
                  "Disable remote tracing";
              }
    
              container file {
                description
                  "Trace file information";
                leaf filename {
                  type string {
                    junos:posix-pattern "![/ %]";
                    junos:pattern-message "Must not contain '/', % or a space";
                    length "1 .. 1024";
                  }
                  description
                    "Name of file in which to write trace information";
                }
    
                leaf size {
                  type string;
                  description
                    "Maximum trace file size";
                }
    
                leaf files {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "2 .. 1000";
                    }
                  }
                  default "3";
                  description
                    "Maximum number of trace files";
                }
    
                choice world-readable-choice {
                  leaf world-readable {
                    type empty;
                    description
                      "Allow any user to read the log file";
                  }
                  leaf no-world-readable {
                    type empty;
                    description
                      "Don't allow any user to read the log file";
                  }
                }  // choice world-readable-choice
    
                leaf match {
                  type jt:regular-expression;
                  description
                    "Regular expression for lines to be logged";
                }
              }  // container file
    
              list flag {
                key "name";
                ordered-by user;
                description "Tracing parameters";
                leaf name {
                  type enumeration {
                    enum "database" {
                      value 0;
                      description
                        "Trace database events";
                    }
                    enum "routing-socket" {
                      value 1;
                      description
                        "Trace Routing socket events";
                    }
                    enum "state" {
                      value 2;
                      description
                        "Trace state change events";
                    }
                    enum "debug" {
                      value 3;
                      description
                        "Trace debug messages";
                    }
                    enum "event" {
                      value 4;
                      description
                        "Trace event handler events";
                    }
                    enum "packet" {
                      value 5;
                      description
                        "Trace packet events";
                    }
                    enum "all" {
                      value 6;
                      description
                        "Trace all areas of code";
                    }
                  }
                }
              }  // list flag
            }  // container traceoptions
          }  // container ilmi
    
          container lacp {
            description
              "Link Aggregation Control Protocol configuration";
            uses apply-advanced;
    
            container traceoptions {
              description "LACP trace options";
              uses apply-advanced;
    
              leaf no-remote-trace {
                junos:must "("system tracing")";
                junos:must-message "'no-remote-trace' is valid only when [system tracing] is configured";
                type empty;
                description
                  "Disable remote tracing";
              }
    
              container file {
                description
                  "Trace file information";
                leaf filename {
                  type string {
                    junos:posix-pattern "![/ %]";
                    junos:pattern-message "Must not contain '/', % or a space";
                    length "1 .. 1024";
                  }
                  description
                    "Name of file in which to write trace information";
                }
    
                leaf size {
                  type string;
                  description
                    "Maximum trace file size";
                }
    
                leaf files {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "2 .. 1000";
                    }
                  }
                  default "3";
                  description
                    "Maximum number of trace files";
                }
    
                choice world-readable-choice {
                  leaf world-readable {
                    type empty;
                    description
                      "Allow any user to read the log file";
                  }
                  leaf no-world-readable {
                    type empty;
                    description
                      "Don't allow any user to read the log file";
                  }
                }  // choice world-readable-choice
    
                leaf match {
                  type jt:regular-expression;
                  description
                    "Regular expression for lines to be logged";
                }
              }  // container file
    
              list flag {
                key "name";
                ordered-by user;
                description
                  "Events and packet types to include in the trace";
                leaf name {
                  type enumeration {
                    enum "configuration" {
                      value 0;
                      description
                        "Configuration events";
                    }
                    enum "routing-socket" {
                      value 1;
                      description
                        "Routing socket events";
                    }
                    enum "process" {
                      value 2;
                      description
                        "Process events";
                    }
                    enum "startup" {
                      value 3;
                      description
                        "Process startup events";
                    }
                    enum "protocol" {
                      value 4;
                      description
                        "Protocol events";
                    }
                    enum "packet" {
                      value 5;
                      description "LACP packets";
                    }
                    enum "ppm" {
                      value 6;
                      description
                        "LACP PPM messages";
                    }
                    enum "bfd" {
                      value 7;
                      description
                        "LACP BFD events";
                    }
                    enum "mc-ae" {
                      value 8;
                      description
                        "Multi-chassis AE messages";
                    }
                    enum "all" {
                      value 9;
                      description
                        "All events and packets";
                    }
                  }
                }
              }  // list flag
            }  // container traceoptions
    
            leaf ppm {
              type enumeration {
                enum "centralized" {
                  value 0;
                  description
                    "Centralized PPM processing";
                }
                enum "inline" {
                  value 1;
                  description
                    "Distributed inline PPM processing";
                }
              }
              description "Force PPM processing";
            }
          }  // container lacp
    
          container oam {
            description
              "Operation, Administration, and Management configuration";
            uses apply-advanced;
    
            container ethernet {
              description
                "OAM configuration for Ethernet";
              uses apply-advanced;
    
              container link-fault-management {
                description
                  "802.3ah Ethernet OAM configuration";
                uses apply-advanced;
    
                container traceoptions {
                  description
                    "Trace options for link-fault management";
                  uses apply-advanced;
    
                  leaf no-remote-trace {
                    junos:must "("system tracing")";
                    junos:must-message "'no-remote-trace' is valid only when [system tracing] is configured";
                    type empty;
                    description
                      "Disable remote tracing";
                  }
    
                  container file {
                    description
                      "Trace file information";
                    leaf filename {
                      type string {
                        junos:posix-pattern "![/ %]";
                        junos:pattern-message "Must not contain '/', % or a space";
                        length "1 .. 1024";
                      }
                      description
                        "Name of file in which to write trace information";
                    }
    
                    leaf size {
                      type string;
                      description
                        "Maximum trace file size";
                    }
    
                    leaf files {
                      type union {
                        type string {
                          pattern "<.*>|$.*";
                        }
                        type uint32 {
                          range "2 .. 1000";
                        }
                      }
                      default "3";
                      description
                        "Maximum number of trace files";
                    }
    
                    choice world-readable-choice {
                      leaf world-readable {
                        type empty;
                        description
                          "Allow any user to read the log file";
                      }
                      leaf no-world-readable {
                        type empty;
                        description
                          "Don't allow any user to read the log file";
                      }
                    }  // choice world-readable-choice
    
                    leaf match {
                      type jt:regular-expression;
                      description
                        "Regular expression for lines to be logged";
                    }
                  }  // container file
    
                  list flag {
                    key "name";
                    ordered-by user;
                    description
                      "Tracing parameters";
                    leaf name {
                      type enumeration {
                        enum "configuration" {
                          value 0;
                          description
                            "Trace configuration events";
                        }
                        enum "routing-socket" {
                          value 1;
                          description
                            "Trace routing socket events";
                        }
                        enum "protocol" {
                          value 2;
                          description
                            "Trace protocol processing events";
                        }
                        enum "action-profile" {
                          value 3;
                          description
                            "Trace action profile invocation events";
                        }
                        enum "all" {
                          value 4;
                          description
                            "Trace everything";
                        }
                      }
                    }
                  }  // list flag
                }  // container traceoptions
    
                list action-profile {
                  key "name";
                  ordered-by user;
                  description
                    "Define an action profile";
                  leaf name {
                    type string {
                      length "1 .. 32";
                    }
                    description
                      "Name of action profile";
                  }
    
                  uses apply-advanced;
    
                  container event {
                    description
                      "Events this action profile will check";
                    uses apply-advanced;
    
                    leaf link-adjacency-loss {
                      type empty;
                      description
                        "Loss of adjacency with OAM peer";
                    }
    
                    leaf protocol-down {
                      type empty;
                      description
                        "Upper layer indication on protocol down";
                    }
    
                    container link-event-rate {
                      uses apply-advanced;
    
                      leaf symbol-period {
                        type union {
                          type string {
                            pattern "<.*>|$.*";
                          }
                          type int32 {
                            range "1 .. 100";
                          }
                        }
                        units
                          "error(s) per 100 symbol";
                        description
                          "Rate of receiving symbol period events";
                      }
    
                      leaf frame-error {
                        type union {
                          type string {
                            pattern "<.*>|$.*";
                          }
                          type int32 {
                            range "1 .. 1000";
                          }
                        }
                        units
                          "error(s) per 100 milli-second";
                        description
                          "Rate of receiving frame error events";
                      }
    
                      leaf frame-period {
                        type union {
                          type string {
                            pattern "<.*>|$.*";
                          }
                          type int32 {
                            range "1 .. 100";
                          }
                        }
                        units
                          "error(s) per 100 frames";
                        description
                          "Rate of receiving frame period events";
                      }
    
                      leaf frame-period-summary {
                        type union {
                          type string {
                            pattern "<.*>|$.*";
                          }
                          type int32 {
                            range "1 .. 1000";
                          }
                        }
                        units
                          "error(s) per second";
                        description
                          "Rate of receiving frame period summary events";
                      }
                    }  // container link-event-rate
                  }  // container event
    
                  container action {
                    description
                      "Action to take on specified events";
                    uses apply-advanced;
    
                    leaf syslog {
                      type empty;
                      description
                        "Generate syslog message";
                    }
    
                    leaf link-down {
                      type empty;
                      description
                        "Mark the interface down for transit traffic";
                    }
    
                    leaf send-critical-event {
                      junos:must "(".. .. event protocol-down")";
                      junos:must-message "send-critical-event action can be configured only with protocol-down event";
                      type empty;
                      description
                        "Start sending OAM PDUs with critical event bit set";
                    }
                  }  // container action
                }  // list action-profile
    
                list interface {
                  key "name";
                  ordered-by user;
                  description
                    "Interface on which to set Ethernet OAM parameters";
                  leaf name {
                    type union {
                      type jt:interface-device;
                      type string {
                        pattern "<.*>|$.*";
                      }
                    }
                    description "Interface name";
                  }
    
                  uses apply-advanced;
    
                  leaf-list apply-action-profile {
                    type string;
                    ordered-by user;
                    description
                      "Apply the specified action profile on the interface";
                  }
    
                  leaf pdu-interval {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type int32 {
                        range "100 .. 1000";
                      }
                    }
                    units "milliseconds";
                    default "1000";
                    description
                      "Periodic OAM protocol data unit interval";
                  }
    
                  leaf loopback-tracking {
                    type empty;
                    description
                      "Enable link down on loopback detection";
                  }
    
                  leaf detect-loc {
                    type empty;
                    description
                      "Detects initial lack of adjacency formation";
                  }
    
                  leaf link-discovery {
                    type enumeration {
                      enum "active" {
                        value 0;
                      }
                      enum "passive" {
                        value 1;
                      }
                    }
                    default "active";
                    description
                      "Mode of discovery";
                  }
    
                  leaf pdu-threshold {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type int32;
                    }
                    default "3";
                    description
                      "Number of PDUs missed before declaring peer lost";
                  }
    
                  leaf remote-loopback {
                    junos:must "(!(".. link-discovery passive"))";
                    junos:must-message "remote-loopback request not allowed in passive mode";
                    type empty;
                    description
                      "Put remote DTE into remote-loopback mode";
                  }
    
                  container negotiation-options {
                    description
                      "802.3ah features supported on the interface";
                    uses apply-advanced;
    
                    leaf no-allow-link-events {
                      type empty;
                      description
                        "Do not emit periodic PDUs detailing framing and symbol errors";
                    }
    
                    leaf allow-remote-loopback {
                      type empty;
                      description
                        "Allow local port to be put into loopback mode";
                    }
                  }  // container negotiation-options
    
                  container event-thresholds {
                    junos:must "(!(".. negotiation-options no-allow-link-events"))";
                    junos:must-message "'event-thresholds' statement cannot be included along with 'no-allow-link-events' statement";
                    description
                      "Thresholds for sending 802.3ah events";
                    uses apply-advanced;
    
                    leaf symbol-period {
                      type union {
                        type string {
                          pattern "<.*>|$.*";
                        }
                        type int32 {
                          range "0 .. 100";
                        }
                      }
                      default "1";
                      description
                        "Threshold for sending symbol period events";
                    }
    
                    leaf frame-error {
                      type union {
                        type string {
                          pattern "<.*>|$.*";
                        }
                        type int32 {
                          range "0 .. 100";
                        }
                      }
                      default "1";
                      description
                        "Threshold for sending frame error events";
                    }
    
                    leaf frame-period {
                      type union {
                        type string {
                          pattern "<.*>|$.*";
                        }
                        type int32 {
                          range "0 .. 100";
                        }
                      }
                      default "1";
                      description
                        "Threshold for sending frame period error events";
                    }
    
                    leaf frame-period-summary {
                      type union {
                        type string {
                          pattern "<.*>|$.*";
                        }
                        type int32 {
                          range "0 .. 100";
                        }
                      }
                      default "1";
                      description
                        "Threshold for sending frame period summary error events";
                    }
                  }  // container event-thresholds
                }  // list interface
              }  // container link-fault-management
    
              container connectivity-fault-management {
                description
                  "Configurations related to 802.1ag ethernet oam";
                uses apply-advanced;
    
                container performance-monitoring {
                  description
                    "Configurations related to ethernet performance monitoring";
                  uses apply-advanced;
    
                  leaf hardware-assisted-timestamping {
                    type empty;
                    description
                      "Enable timestamping feature in hardware";
                  }
    
                  leaf delegate-server-processing {
                    type empty;
                    description
                      "Delegate performance measurement request handling to PFE";
                  }
    
                  leaf hardware-assisted-keepalives {
                    type enumeration {
                      enum "enable" {
                        value 0;
                        description
                          "Enable delegate keepalives handling to Hardware";
                      }
                      enum "disable" {
                        value 1;
                        description
                          "Disable delegate keepalives handling to Hardware (default)";
                      }
                    }
                    description
                      "Enable/Disable delegating keepalives to hardware";
                  }
    
                  leaf hardware-assisted-pm {
                    junos:must "("protocols oam ethernet connectivity-fault-management enhanced-cfm-mode")";
                    junos:must-message "enhanced-cfm-mode needs to be configured for inline pm support";
                    type empty;
                    description
                      "Enable inline support for performance monitoring";
                  }
    
                  leaf enhanced-sla-iterator {
                    type empty;
                    description
                      "Enable Enhanced SLA Iterator Cycle-time";
                  }
    
                  leaf measurement-interval {
                    junos:must "(".. enhanced-sla-iterator")";
                    junos:must-message "enhanced-sla-iterator needs to be configured for MEF36 mode";
                    type enumeration {
                      enum "2" {
                        value 0;
                        description
                          "2 minutes measurement interval";
                      }
                      enum "5" {
                        value 1;
                        description
                          "5 minutes measurement interval";
                      }
                      enum "15" {
                        value 2;
                        description
                          "15 minutes measurement interval";
                      }
                      enum "30" {
                        value 3;
                        description
                          "30 minutes measurement interval";
                      }
                      enum "60" {
                        value 4;
                        description
                          "1 hour measurement interval";
                      }
                    }
                    units "minutes";
                    description
                      "Enables measurement-interval based PM (MEF 36 mode). Default 15 min in enhanced-cfm-mode";
                  }
    
                  leaf legacy-pm-display {
                    junos:must "((".. measurement-interval" || ".. .. enhanced-cfm-mode"))";
                    junos:must-message "measurement-interval or enhanced-cfm-mode needs to be configured for legacy PM output in MEF mode.";
                    type empty;
                    description
                      "Display Legacy PM output (for DM) in MEF mode.";
                  }
    
                  list sla-iterator-profiles {
                    key "name";
                    ordered-by user;
                    description
                      "Configuration related to an sla monitoring iterator";
                    leaf name {
                      type string;
                    }
    
                    uses apply-advanced;
    
                    leaf disable {
                      type empty;
                      description
                        "Disable the iterator profile";
                    }
    
                    leaf measurement-type {
                      type enumeration {
                        enum "two-way-delay" {
                          junos:must "(!("routing-options ppm no-delegate-processing"))";
                          junos:must-message "Iterator two-way-delay measurement is not supported with ppm no-delegate-processing";
                          value 0;
                          description
                            "Y.1731 2-way DM frames are sent for this profile";
                        }
                        enum "loss" {
                          value 1;
                          description
                            "Y.1731 LM frames are sent for this profile";
                        }
                        enum "slm" {
                          value 2;
                          description
                            "Y.1731 SLM frames are sent for this profile";
                        }
                        enum
                          "statistical-frame-loss" {
                          junos:must "(!("routing-options ppm no-delegate-processing"))";
                          junos:must-message "Iterator statistical-frame-loss measurement is not supported with ppm no-delegate-processing";
                          value 3;
                          description
                            "Y.1731 2-way DM frames for statistical frame loss are sent for this profile";
                        }
                      }
                      description
                        "Choice of the type of Y.1731(SLA measurement) frame to be sent";
                    }
    
                    leaf flap-trap-monitor {
                      type union {
                        type string {
                          pattern "<.*>|$.*";
                        }
                        type uint32 {
                          range "1 .. 360";
                        }
                      }
                      units "seconds";
                      description
                        "Configurable timer value 1-360";
                    }
    
                    leaf cycle-time {
                      type union {
                        type string {
                          pattern "<.*>|$.*";
                        }
                        type uint32;
                      }
                      units "milliseconds";
                      default "1000";
                      description
                        "Time period of an iterator profile";
                    }
    
                    leaf iteration-period {
                      type union {
                        type string {
                          pattern "<.*>|$.*";
                        }
                        type uint32 {
                          range "1 .. 2000";
                        }
                      }
                      units "connections";
                      default "2000";
                      description
                        "Maximum services under this iterator profile";
                    }
    
                    container calculation-weight {
                      junos:must "(".. measurement-type two-way-delay")";
                      junos:must-message "The measurement type must be two-way-delay";
                      presence
                        "enable calculation-weight";
                      description
                        "Configure delay and delay variation calculation weight";
                      uses apply-advanced;
    
                      leaf delay {
                        type union {
                          type string {
                            pattern "<.*>|$.*";
                          }
                          type uint32 {
                            range "1 .. 65535";
                          }
                        }
                        default "1";
                        description
                          "Weight used in delay calculation";
                      }
    
                      leaf delay-variation {
                        type union {
                          type string {
                            pattern "<.*>|$.*";
                          }
                          type uint32 {
                            range "1 .. 65535";
                          }
                        }
                        default "1";
                        description
                          "Weight used in delay-variation calculation";
                      }
                    }  // container calculation-weight
    
                    container avg-flr-forward-threshold {
                      junos:must "((".. measurement-type loss" || " .. measurement-type slm"))";
                      junos:must-message " The measurement type must be either loss or slm";
                      presence
                        "enable avg-flr-forward-threshold";
                      description
                        "Avg forward flr threshold";
                      uses apply-advanced;
    
                      leaf avg-flr-forward {
                        type union {
                          type string {
                            pattern "<.*>|$.*";
                          }
                          type uint32 {
                            range "1 .. 100000";
                          }
                        }
                        description
                          "Avg forward flr threshold value in mili-percent";
                      }
    
                      leaf flap-trap-monitor {
                        type union {
                          type string {
                            pattern "<.*>|$.*";
                          }
                          type uint32 {
                            range "1 .. 360";
                          }
                        }
                        units "seconds";
                        description
                          "Configurable timer value 1-360";
                      }
                    }  // container avg-flr-forward-threshold
    
                    container avg-flr-backward-threshold {
                      junos:must "((".. measurement-type loss" || " .. measurement-type slm"))";
                      junos:must-message " The measurement type must be either loss or slm";
                      presence
                        "enable avg-flr-backward-threshold";
                      description
                        "Avg backward flr threshold";
                      uses apply-advanced;
    
                      leaf avg-flr-backward {
                        type union {
                          type string {
                            pattern "<.*>|$.*";
                          }
                          type uint32 {
                            range "1 .. 100000";
                          }
                        }
                        description
                          "Avg backward flr threshold value in mili-percent";
                      }
    
                      leaf flap-trap-monitor {
                        type union {
                          type string {
                            pattern "<.*>|$.*";
                          }
                          type uint32 {
                            range "1 .. 360";
                          }
                        }
                        units "seconds";
                        description
                          "Configurable timer value 1-360";
                      }
                    }  // container avg-flr-backward-threshold
    
                    container avg-fd-twoway-threshold {
                      junos:must "(".. measurement-type two-way-delay")";
                      junos:must-message " The measurement type must be two-way-delay";
                      presence
                        "enable avg-fd-twoway-threshold";
                      description
                        "Avg frame delay threshold value";
                      uses apply-advanced;
    
                      leaf avg-fd-twoway {
                        type union {
                          type string {
                            pattern "<.*>|$.*";
                          }
                          type uint32 {
                            range
                              "1 .. 4294967295";
                          }
                        }
                        units "microseconds";
                        description
                          "Avg frame delay threshold value in mili-percent";
                      }
    
                      leaf flap-trap-monitor {
                        type union {
                          type string {
                            pattern "<.*>|$.*";
                          }
                          type uint32 {
                            range "1 .. 360";
                          }
                        }
                        units "seconds";
                        description
                          "Configurable timer value 1-360";
                      }
                    }  // container avg-fd-twoway-threshold
    
                    container avg-fdv-twoway-threshold {
                      junos:must "(".. measurement-type two-way-delay")";
                      junos:must-message " The measurement type must be two-way-delay";
                      presence
                        "enable avg-fdv-twoway-threshold";
                      description
                        "Avg frame delay variance threshold";
                      uses apply-advanced;
    
                      leaf avg-fdv-twoway {
                        type union {
                          type string {
                            pattern "<.*>|$.*";
                          }
                          type uint32 {
                            range
                              "1 .. 4294967295";
                          }
                        }
                        units "microseconds";
                        description
                          "Avg frame delay variance threshold value in mili-percent";
                      }
    
                      leaf flap-trap-monitor {
                        type union {
                          type string {
                            pattern "<.*>|$.*";
                          }
                          type uint32 {
                            range "1 .. 360";
                          }
                        }
                        units "seconds";
                        description
                          "Configurable timer value 1-360";
                      }
                    }  // container avg-fdv-twoway-threshold
    
                    container frame-delay {
                      description
                        "Bin configuration for frame delay";
                      uses apply-advanced;
    
                      leaf num-bins {
                        type union {
                          type string {
                            pattern "<.*>|$.*";
                          }
                          type uint32 {
                            range "2 .. 5";
                          }
                        }
                        description
                          "Max number of bins";
                      }
    
                      container two-way {
                        presence
                          "enable two-way";
                        description
                          "Bin configuration for 2way frame delay";
                        uses apply-advanced;
    
                        leaf-list lower-threshold-bin {
                          type union {
                            type string {
                              pattern "<.*>|$.*";
                            }
                            type uint32 {
                              range
                                "1 .. 4294967294";
                            }
                          }
                          description
                            "Lower threshold bin configuration in ascending order";
                        }
                      }  // container two-way
    
                      container forward {
                        presence
                          "enable forward";
                        description
                          "Bin configuration for forward frame delay";
                        uses apply-advanced;
    
                        leaf-list lower-threshold-bin {
                          type union {
                            type string {
                              pattern "<.*>|$.*";
                            }
                            type uint32 {
                              range
                                "1 .. 4294967294";
                            }
                          }
                          description
                            "Lower threshold bin configuration in ascending order";
                        }
                      }  // container forward
    
                      container backward {
                        presence
                          "enable backward";
                        description
                          "Bin configuration for backward frame delay";
                        uses apply-advanced;
    
                        leaf-list lower-threshold-bin {
                          type union {
                            type string {
                              pattern "<.*>|$.*";
                            }
                            type uint32 {
                              range
                                "1 .. 4294967294";
                            }
                          }
                          description
                            "Lower threshold bin configuration in ascending order";
                        }
                      }  // container backward
                    }  // container frame-delay
    
                    container frame-delay-range {
                      description
                        "Bin configuration for frame delay range";
                      uses apply-advanced;
    
                      leaf num-bins {
                        type union {
                          type string {
                            pattern "<.*>|$.*";
                          }
                          type uint32 {
                            range "2 .. 5";
                          }
                        }
                        description
                          "Max number of bins";
                      }
    
                      container two-way {
                        presence
                          "enable two-way";
                        description
                          "Bin configuration for 2way frame delay range";
                        uses apply-advanced;
    
                        leaf-list lower-threshold-bin {
                          type union {
                            type string {
                              pattern "<.*>|$.*";
                            }
                            type uint32 {
                              range
                                "1 .. 4294967294";
                            }
                          }
                          description
                            "Lower threshold bin configuration in ascending order";
                        }
                      }  // container two-way
    
                      container forward {
                        presence
                          "enable forward";
                        description
                          "Bin configuration for forward frame delay range";
                        uses apply-advanced;
    
                        leaf-list lower-threshold-bin {
                          type union {
                            type string {
                              pattern "<.*>|$.*";
                            }
                            type uint32 {
                              range
                                "1 .. 4294967294";
                            }
                          }
                          description
                            "Lower threshold bin configuration in ascending order";
                        }
                      }  // container forward
    
                      container backward {
                        presence
                          "enable backward";
                        description
                          "Bin configuration for backward frame delay range";
                        uses apply-advanced;
    
                        leaf-list lower-threshold-bin {
                          type union {
                            type string {
                              pattern "<.*>|$.*";
                            }
                            type uint32 {
                              range
                                "1 .. 4294967294";
                            }
                          }
                          description
                            "Lower threshold bin configuration in ascending order";
                        }
                      }  // container backward
                    }  // container frame-delay-range
    
                    container ifdv {
                      description
                        "Bin configuration for IFDV";
                      uses apply-advanced;
    
                      leaf num-bins {
                        type union {
                          type string {
                            pattern "<.*>|$.*";
                          }
                          type uint32 {
                            range "2 .. 5";
                          }
                        }
                        description
                          "Max number of bins";
                      }
    
                      container two-way {
                        presence
                          "enable two-way";
                        description
                          "Bin configuration for 2way IFDV";
                        uses apply-advanced;
    
                        leaf-list lower-threshold-bin {
                          type union {
                            type string {
                              pattern "<.*>|$.*";
                            }
                            type uint32 {
                              range
                                "1 .. 4294967294";
                            }
                          }
                          description
                            "Lower threshold bin configuration in ascending order";
                        }
                      }  // container two-way
    
                      container forward {
                        presence
                          "enable forward";
                        description
                          "Bin configuration for forward IFDV";
                        uses apply-advanced;
    
                        leaf-list lower-threshold-bin {
                          type union {
                            type string {
                              pattern "<.*>|$.*";
                            }
                            type uint32 {
                              range
                                "1 .. 4294967294";
                            }
                          }
                          description
                            "Lower threshold bin configuration in ascending order";
                        }
                      }  // container forward
    
                      container backward {
                        presence
                          "enable backward";
                        description
                          "Bin configuration for backward IFDV";
                        uses apply-advanced;
    
                        leaf-list lower-threshold-bin {
                          type union {
                            type string {
                              pattern "<.*>|$.*";
                            }
                            type uint32 {
                              range
                                "1 .. 4294967294";
                            }
                          }
                          description
                            "Lower threshold bin configuration in ascending order";
                        }
                      }  // container backward
                    }  // container ifdv
                  }  // list sla-iterator-profiles
    
                  list interface {
                    key "name";
                    ordered-by user;
                    description
                      "Name of interface for the performance monitoring";
                    leaf name {
                      type union {
                        type jt:interface-unit;
                        type string {
                          pattern "<.*>|$.*";
                        }
                      }
                      description
                        "Interface name";
                    }
    
                    leaf enable-multiclass-loss-measurement {
                      junos:must "((!(".. code-point-based-lm-accounting") && !(".. priority-based-lm-accounting")))";
                      junos:must-message "loss measurement modes are exclusive with each other";
                      type empty;
                      description
                        "Disable multiclass loss measurement in hardware";
                    }
    
                    leaf code-point-based-lm-accounting {
                      junos:must "((!(".. enable-multiclass-loss-measurement") && (!(".. colorless-loss-measurement") && !(".. priority-based-lm-accounting"))))";
                      junos:must-message "loss measurement modes are exclusive with each other";
                      type empty;
                      description
                        "Enable code point based loss measurement in hardware";
                    }
    
                    leaf priority-based-lm-accounting {
                      junos:must "((!(".. enable-multiclass-loss-measurement") && (!(".. colorless-loss-measurement") && !(".. code-point-based-lm-accounting"))))";
                      junos:must-message "loss measurement modes are exclusive with each other";
                      type empty;
                      description
                        "Enable priority based loss measurement in hardware";
                    }
                  }  // list interface
    
                  leaf enable-multiclass-loss-measurement {
                    junos:must "((!(".. code-point-based-lm-accounting") && !(".. priority-based-lm-accounting")))";
                    junos:must-message "loss measurement modes are exclusive with each other";
                    type empty;
                    description
                      "Disable multiclass loss measurement in hardware";
                  }
    
                  leaf code-point-based-lm-accounting {
                    junos:must "((!(".. enable-multiclass-loss-measurement") && (!(".. colorless-loss-measurement") && !(".. priority-based-lm-accounting"))))";
                    junos:must-message "loss measurement modes are exclusive with each other";
                    type empty;
                    description
                      "Enable code point based loss measurement in hardware";
                  }
    
                  leaf priority-based-lm-accounting {
                    junos:must "((!(".. enable-multiclass-loss-measurement") && (!(".. colorless-loss-measurement") && !(".. code-point-based-lm-accounting"))))";
                    junos:must-message "loss measurement modes are exclusive with each other";
                    type empty;
                    description
                      "Enable priority based loss measurement in hardware";
                  }
    
                  leaf colorless-loss-measurement {
                    junos:must "((!(".. code-point-based-lm-accounting") && !(".. priority-based-lm-accounting")))";
                    junos:must-message "loss measurement modes are exclusive with each other";
                    type empty;
                    description
                      "Enable colorless loss measurement in hardware";
                  }
                }  // container performance-monitoring
    
                leaf no-aggregate-delegate-processing {
                  type empty;
                  description
                    "Do not distribute aggregate session to pfe";
                }
    
                leaf enhanced-cfm-mode {
                  type empty;
                  description
                    "Enables Enhanced CFM Mode";
                }
    
                container traceoptions {
                  presence "enable traceoptions";
                  description
                    "Trace options for connectivity fault management";
                  uses cfm-traceoptions;
                }  // container traceoptions
    
                list action-profile {
                  key "name";
                  ordered-by user;
                  description
                    "Action profiles to use when one or more remote maintenance association endpoints are down";
                  leaf name {
                    type string;
                    description
                      "Name of action profile";
                  }
    
                  uses apply-advanced;
    
                  container event {
                    junos:must "(".. action")";
                    junos:must-message "Cannot configure event without action";
                    description
                      "Events that need to be monitored";
                    uses apply-advanced;
    
                    leaf-list interface-status-tlv {
                      type enumeration {
                        enum "down" {
                          value 0;
                          description
                            "Interface is administratively down";
                        }
                        enum "lower-layer-down" {
                          value 1;
                          description
                            "Interface is physically down";
                        }
                      }
                      ordered-by user;
                      description
                        "Values that need to be monitored in interface status TLV";
                    }
    
                    leaf-list port-status-tlv {
                      type enumeration {
                        enum "blocked" {
                          value 0;
                          description
                            "Port is blocked";
                        }
                      }
                      ordered-by user;
                      description
                        "Values that need to be monitored in port status TLV";
                    }
    
                    leaf adjacency-loss {
                      type empty;
                      description
                        "Connectivity is lost";
                    }
    
                    leaf rdi {
                      type empty;
                      description
                        "RDI received from some MEP";
                    }
    
                    leaf connection-protection-tlv {
                      type enumeration {
                        enum
                          "using-working-path" {
                          value 0;
                          description
                            "Service traffic is using working path";
                        }
                        enum
                          "using-protection-path" {
                          value 1;
                          description
                            "Service traffic is using protection path";
                        }
                      }
                      description
                        "Values that need to be monitored in connection protection TLV";
                    }
                  }  // container event
    
                  container action {
                    junos:must "(".. event")";
                    junos:must-message "Cannot configure action without event";
                    uses apply-advanced;
    
                    leaf interface-down {
                      type empty;
                      description
                        "Mark the interface as down";
                    }
    
                    leaf revertive-interface-down {
                      junos:must "(!(".. non-revertive-interface-down"))";
                      junos:must-message "Cannot configure action along with revertive-interface-down";
                      type empty;
                      description
                        "Wait for CC loss-threshold to bring back the interface up";
                    }
    
                    leaf non-revertive-interface-down {
                      junos:must "(!(".. revertive-interface-down"))";
                      junos:must-message "Cannot configure action along with non-revertive-interface-down";
                      type empty;
                      description
                        "Interface will not be brought up when CC is received";
                    }
    
                    leaf propagate-remote-mac-flush {
                      type empty;
                      description
                        "Remote mac-flush";
                    }
    
                    leaf interface-group-down {
                      junos:must "((!(".. .. event interface-status-tlv") && (!(".. .. event port-status-tlv") && (!(".. .. event connection-protection-tlv") && (!(".. .. event server-mep-defects") && !(".. .. event ais-trigger-condition"))))))";
                      junos:must-message "Cannot configure events other that adjacency-loss or rdi with this action";
                      junos:must "((!(".. interface-down") && (!(".. revertive-interface-down") && !(".. non-revertive-interface-down"))))";
                      junos:must-message "Cannot configure action along with other interface down actions";
                      type empty;
                      description
                        "Mark the interface group as down";
                    }
    
                    leaf asynchronous-notification {
                      junos:must "((!(".. .. event port-status-tlv") && (!(".. .. event rdi") && (!(".. .. event connection-protection-tlv") && (!(".. .. event server-mep-defects") && !(".. .. event ais-trigger-condition"))))))";
                      junos:must-message "Cannot configure events other that adjacency-loss or interface-status-tlv with this action";
                      junos:must "((!(".. interface-down") && (!(".. revertive-interface-down") && (!(".. non-revertive-interface-down") && !(".. interface-group-down")))))";
                      junos:must-message "Cannot configure action along with other interface down actions";
                      type empty;
                      description
                        "Generate asynchronous notification (Laser-off for optical phys)";
                    }
    
                    container log-and-generate-ais {
                      uses apply-advanced;
    
                      leaf-list level {
                        type union {
                          type string {
                            pattern "<.*>|$.*";
                          }
                          type uint32 {
                            range "1 .. 7";
                          }
                        }
                        description
                          "Server maintenance domain levels range";
                      }
    
                      leaf interval {
                        type enumeration {
                          enum "1s" {
                            value 0;
                          }
                          enum "1m" {
                            value 1;
                          }
                        }
                        default "1s";
                        description
                          "Interval between AIS messages";
                      }
    
                      leaf priority {
                        type union {
                          type string {
                            pattern "<.*>|$.*";
                          }
                          type uint32 {
                            range "0 .. 7";
                          }
                        }
                        default "0";
                        description
                          "802.1p priority of AIS packet";
                      }
                    }  // container log-and-generate-ais
                  }  // container action
    
                  container clear-action {
                    junos:must "(".. event")";
                    junos:must-message "Cannot configure action without event";
                    uses apply-advanced;
    
                    container interface-down {
                      description
                        "Mark the interface as down";
                      leaf peer-interface {
                        type empty;
                        description
                          "Mark the interface as down";
                      }
                    }  // container interface-down
    
                    leaf propagate-remote-mac-flush {
                      type empty;
                      description
                        "Remote  mac flush";
                    }
                  }  // container clear-action
    
                  container default-actions {
                    junos:must "(!(".. event"))";
                    junos:must-message "Cannot configure default-actions if event is set";
                    description
                      "Action that needs to be taken";
                    uses apply-advanced;
    
                    leaf interface-down {
                      type empty;
                      description
                        "Bring the interface down";
                    }
                  }  // container default-actions
                }  // list action-profile
    
                container policer {
                  description
                    "Rate limit Ethernet OAM packets for all sessions";
                  uses apply-advanced;
    
                  leaf continuity-check {
                    junos:must "("firewall policer $$")";
                    junos:must-message "referenced policer must be defined";
                    type string;
                    description
                      "Policer to rate limit Continuity Check Ethernet OAM messages";
                  }
    
                  leaf other {
                    junos:must "("firewall policer $$")";
                    junos:must-message "referenced policer must be defined";
                    type string;
                    description
                      "Policer to rate limit non Continuity Check Ethernet OAM messages";
                  }
    
                  leaf all {
                    junos:must "("firewall policer $$")";
                    junos:must-message "referenced policer must be defined";
                    type string;
                    description
                      "Policer to rate limit all Ethernet OAM messages";
                  }
                }  // container policer
    
                container linktrace {
                  presence "enable linktrace";
                  description
                    "Linktrace protocol global options";
                  uses apply-advanced;
    
                  leaf path-database-size {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint32 {
                        range "1 .. 255";
                      }
                    }
                    default "100";
                    description
                      "Number of linktrace reply entries to be stored per linktrace request";
                  }
    
                  leaf age {
                    type enumeration {
                      enum "10s" {
                        value 0;
                      }
                      enum "30s" {
                        value 1;
                      }
                      enum "1m" {
                        value 2;
                      }
                      enum "10m" {
                        value 3;
                      }
                      enum "30m" {
                        value 4;
                      }
                    }
                    default "10m";
                    description
                      "Time after which a stale request-response entry is deleted";
                  }
                }  // container linktrace
    
                list maintenance-domain {
                  key "name";
                  ordered-by user;
                  description
                    "Maintenance domain configuration";
                  leaf name {
                    type string;
                  }
    
                  uses apply-advanced;
    
                  list bridge-domain {
                    key "name";
                    ordered-by user;
                    description
                      "Bridge-domain information for the default maintenance domain";
                    leaf name {
                      type string;
                      description
                        "Bridge domain name";
                    }
    
                    leaf-list vlan-id {
                      type string;
                      ordered-by user;
                      description "VLAN id";
                    }
                  }  // list bridge-domain
    
                  list virtual-switch {
                    key "name";
                    ordered-by user;
                    description
                      "Virtual switch Bridge-domain information for the default maintenance domain";
                    leaf name {
                      type string;
                      description
                        "Routing instance of type virtual switch";
                    }
    
                    uses apply-advanced;
    
                    list bridge-domain {
                      key "name";
                      ordered-by user;
                      leaf name {
                        type string;
                        description
                          "Bridge domain name";
                      }
    
                      leaf-list vlan-id {
                        type string;
                        ordered-by user;
                        description "VLAN id";
                      }
                    }  // list bridge-domain
                  }  // list virtual-switch
    
                  list instance {
                    key "name";
                    ordered-by user;
                    description
                      "VPLS instance name for the default maintenance domain";
                    leaf name {
                      junos:must "(!("routing-instances $$ vlan-id inner-all"))";
                      junos:must-message "MIPs are not allowed for VPLS with vlan-id inner-all";
                      junos:must "(!("routing-instances $$ vlan-id all"))";
                      junos:must-message "MIPs are not allowed for VPLS with vlan-id all";
                      junos:must "(("routing-instances $$ vlan-id" || "routing-instances $$ vlan-tags"))";
                      junos:must-message "MIPs are allowed only for VPLS with vlan-id/vlan-tags";
                      junos:must "("routing-instances $$ instance-type vpls")";
                      junos:must-message "Only VPLS routing-instances are allowed under default maintenance-domains";
                      type string;
                      description
                        "VPLS routing instance name";
                    }
                  }  // list instance
    
                  list interface {
                    key "name";
                    ordered-by user;
                    description
                      "Name of interface for the default maintenance domain";
                    leaf name {
                      junos:must "(!("protocols loop-detect enhanced interface $$"))";
                      junos:must-message "Connectivtiy and loop-detect protocols cannot be enabled on same interface";
                      junos:must "(!("protocols oam ethernet link-fault-management interface $$"))";
                      junos:must-message "Connectivtiy and link fault management protocols cannot be enabled on same interface";
                      junos:must "((!(any "interfaces $$ unit <*> vlan-id 0") && !(any "logical-systems <*> interfaces $$ unit <*> vlan-id 0")))";
                      junos:must-message "Default maintenance domain cannot be configured with a physical interface which has a logical interface configured with vlan-id 0";
                      type union {
                        type jt:interface-unit;
                        type string {
                          pattern "<.*>|$.*";
                        }
                      }
                      description
                        "Interface name";
                    }
                  }  // list interface
    
                  leaf level {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint8 {
                        range "0 .. 7";
                      }
                    }
                    description
                      "Level value for maintenance domain";
                  }
    
                  leaf name-format {
                    type enumeration {
                      enum "none" {
                        value 0;
                        description
                          "No format specified";
                      }
                      enum "dns" {
                        value 1;
                        description
                          "Character string similar to Domain Name System name";
                      }
                      enum "mac+2oct" {
                        value 2;
                        description
                          "MAC address with 2 octet integer (xx:xx:xx:xx:xx:xx.Y format)";
                      }
                      enum "character-string" {
                        value 3;
                        description
                          "Character string";
                      }
                    }
                    description
                      "Format of maintenance domain name";
                  }
    
                  leaf mip-half-function {
                    type enumeration {
                      enum "none" {
                        value 0;
                        description
                          "No MHFs should be created";
                      }
                      enum "default" {
                        value 1;
                        description
                          "Create MHF as per IEEE 802.1ag specifications for defMHFDefault";
                      }
                      enum "explicit" {
                        value 2;
                        description
                          "Create MHF as per IEEE 802.1ag specifications for defMHFExplicit";
                      }
                    }
                    default "none";
                    description
                      "Half function to be implemented by MIP";
                  }
    
                  list maintenance-association {
                    key "name";
                    ordered-by user;
                    description
                      "Maintenance association configuration";
                    leaf name {
                      type string {
                        length "1 .. 45";
                      }
                      description
                        "Name of maintenance association in IEEE compliant format";
                    }
    
                    uses apply-advanced;
    
                    leaf debug-session {
                      type empty;
                      description
                        "Debug the CFM session";
                    }
    
                    leaf short-name-format {
                      type enumeration {
                        enum "2octet" {
                          value 0;
                          description
                            "An integer in the range 0..65535";
                        }
                        enum "rfc-2685-vpn-id" {
                          value 1;
                          description
                            "VPN identifier that complies with RFC 2685";
                        }
                        enum "vlan" {
                          value 2;
                          description
                            "Primary VLAN identifier";
                        }
                        enum "character-string" {
                          value 3;
                          description
                            "Character string";
                        }
                        enum "icc" {
                          value 4;
                          description
                            "ITU Carrier Code";
                        }
                      }
                      description
                        "Format of Maintenance Association Name";
                    }
    
                    leaf primary-vid {
                      type string;
                      description "VLAN id";
                    }
    
                    container continuity-check {
                      presence
                        "enable continuity-check";
                      description
                        "Continuity check configuration";
                      uses apply-advanced;
    
                      leaf interval {
                        type enumeration {
                          enum "10ms" {
                            junos:must "(!("routing-options ppm no-delegate-processing"))";
                            junos:must-message "10ms interval for continuity-check is not supported with no-delegate-processing";
                            value 0;
                          }
                          enum "100ms" {
                            value 1;
                          }
                          enum "1s" {
                            value 2;
                          }
                          enum "10s" {
                            value 3;
                          }
                          enum "1m" {
                            value 4;
                          }
                          enum "10m" {
                            value 5;
                          }
                          enum "3.3ms" {
                            value 6;
                          }
                        }
                        default "1m";
                        description
                          "Interval between continuity-check messages";
                      }
    
                      leaf loss-threshold {
                        type union {
                          type string {
                            pattern "<.*>|$.*";
                          }
                          type uint32 {
                            range "3 .. 256";
                          }
                        }
                        default "3";
                        description
                          "Number of continuity-check messages lost before marking endpoint as down";
                      }
    
                      leaf hold-interval {
                        type union {
                          type string {
                            pattern "<.*>|$.*";
                          }
                          type uint32 {
                            range "1 .. 30240";
                          }
                        }
                        units "minutes";
                        default "10";
                        description
                          "Time before flushing MEP database if no updates occur";
                      }
    
                      leaf port-status-tlv {
                        type empty;
                        description
                          "Include port status TLV in CCM";
                      }
    
                      leaf interface-status-tlv {
                        type empty;
                        description
                          "Include interface status TLV in CCM";
                      }
    
                      leaf connection-protection-tlv {
                        type empty;
                        description
                          "Include connection protection OUI TLV in CCM";
                      }
    
                      leaf convey-loss-threshold {
                        type empty;
                        description
                          "Include Loss Threshold OUI TLV in CCM";
                      }
    
                      leaf interface-status-send-rdi {
                        type empty;
                        description
                          "Send RDI on interface operation status down in CCM";
                      }
    
                      container sendid-tlv {
                        description
                          "Include sendid-tlv in CCM/LBM/LTM";
                        uses apply-advanced;
    
                        leaf send-chassis-tlv {
                          type empty;
                          description
                            "Attach Chassis ID & Mgmt Addr to CCM/LBM/LTM";
                        }
                      }  // container sendid-tlv
                    }  // container continuity-check
    
                    leaf mip-half-function {
                      type enumeration {
                        enum "none" {
                          value 0;
                          description
                            "No MHFs should be created";
                        }
                        enum "default" {
                          value 1;
                          description
                            "Create MHF as per IEEE 802.1ag specifications for defMHFDefault";
                        }
                        enum "explicit" {
                          value 2;
                          description
                            "Create MHF as per IEEE 802.1ag specifications for defMHFExplicit";
                        }
                        enum "defer" {
                          value 3;
                          description
                            "Create MHF as per IEEE 802.1ag specifications for defMHFDefer";
                        }
                      }
                      default "defer";
                      description
                        "Half function to be implemented by MIP";
                    }
    
                    list mep {
                      key "name";
                      ordered-by user;
                      description
                        "Maintenance association endpoint configuration";
                      leaf name {
                        type union {
                          type string {
                            pattern "<.*>|$.*";
                          }
                          type uint16 {
                            range "1 .. 8191";
                          }
                        }
                        description
                          "Identifier for maintenance association endpoint";
                      }
    
                      uses apply-advanced;
    
                      container interface {
                        presence
                          "enable interface";
                        description
                          "Name of interface";
                        leaf interface-name {
                          junos:must "(!("protocols oam ethernet link-fault-management interface $$"))";
                          junos:must-message "Connectivtiy and link fault management protocols cannot be enabled on same interface";
                          junos:must "((!(any "interfaces $$ unit <*> vlan-id 0") && !(any "logical-systems <*> interfaces $$ unit <*> vlan-id 0")))";
                          junos:must-message "Cannot create a MEP on a physical interface which has a logical interface configured with vlan-id 0";
                          junos:must "(!(any "interfaces $$ unit 0 family inet address <*>"))";
                          junos:must-message "CFM interface cannot be configured with an INET address";
                          type union {
                            type jt:interface-unit;
                            type string {
                              pattern "<.*>|$.*";
                            }
                          }
                        }
    
                        leaf vlan {
                          type union {
                            type string {
                              pattern "<.*>|$.*";
                            }
                            type uint32 {
                              range "1 .. 4094";
                            }
                          }
                          description
                            "Trunk port interface VLAN identifier";
                        }
    
                        choice connection-type {
                          leaf working {
                            type empty;
                            description
                              "Monitory the primary path";
                          }
                          leaf protect {
                            type empty;
                            description
                              "Monitory the protect path";
                          }
                        }  // choice connection-type
                      }  // container interface
    
                      leaf direction {
                        type enumeration {
                          enum "up" {
                            value 0;
                          }
                          enum "down" {
                            junos:must "(!(".. .. mip-half-function"))";
                            junos:must-message "Cannot specify MA MHF with down MEP";
                            junos:must "(!(".. .. .. mip-half-function"))";
                            junos:must-message "Cannot specify MD MHF with down MEP";
                            value 1;
                          }
                        }
                        default "down";
                        description
                          "Direction of maintenance endpoint";
                      }
    
                      leaf priority {
                        type union {
                          type string {
                            pattern "<.*>|$.*";
                          }
                          type uint32 {
                            range "0 .. 7";
                          }
                        }
                        default "0";
                        description
                          "802.1p priority of continuity-check and link-trace packet";
                      }
    
                      leaf auto-discovery {
                        type empty;
                        description
                          "Accept continuity-check messages from all remote MEPs";
                      }
    
                      leaf action-profile {
                        junos:must "(!("protocols oam ethernet connectivity-fault-management action-profile $$ action asynchronous-notification"))";
                        junos:must-message "Action asynchronous-notificaiton can not be configured at mep level";
                        junos:must "("protocols oam ethernet connectivity-fault-management action-profile $$")";
                        junos:must-message "Action profile not configured";
                        type string;
                        description
                          "Name of the action profile";
                      }
    
                      list remote-mep {
                        key "name";
                        ordered-by user;
                        description
                          "Remote maintenance association endpoint configuration";
                        leaf name {
                          type union {
                            type string {
                              pattern "<.*>|$.*";
                            }
                            type uint16 {
                              range "1 .. 8191";
                            }
                          }
                          description
                            "Identifier for remote maintenance association endpoint";
                        }
    
                        uses apply-advanced;
    
                        leaf action-profile {
                          junos:must "("protocols oam ethernet connectivity-fault-management action-profile $$")";
                          junos:must-message "Action profile not configured";
                          type string;
                          description
                            "Name of the action profile";
                        }
    
                        container interface-group {
                          presence
                            "enable interface-group";
                          description
                            "Mark this interface group down Profile configured with action interface-group-down";
                          uses apply-advanced;
    
                          leaf interface-device-name {
                            type union {
                              type jt:interface-device;
                              type string {
                                pattern
                                  "<.*>|$.*";
                              }
                            }
                            description
                              "Interface device name";
                          }
    
                          leaf-list unit-list {
                            type jt:range;
                            description
                              "One or more logical interface unit numbers";
                          }
                        }  // container interface-group
    
                        list sla-iterator-profile {
                          key "name";
                          ordered-by user;
                          description
                            "Name of the iterator profile";
                          leaf name {
                            junos:must "((!(".. .. .. no-delegate-processing") || ("protocols oam ethernet connectivity-fault-management performance-monitoring sla-iterator-profiles ${sla-iterator-profile} measurement-type loss" || "protocols oam ethernet connectivity-fault-management performance-monitoring sla-iterator-profiles ${sla-iterator-profile} measurement-type slm")))";
                            junos:must-message "Iterator two-way-delay or statistical-frame-loss measurement is not supported with mep level no-delegate-processing";
                            junos:must "("protocols oam ethernet connectivity-fault-management performance-monitoring sla-iterator-profiles $$")";
                            junos:must-message "The SLA iterator profile must be configured";
                            type string;
                          }
    
                          uses apply-advanced;
    
                          leaf iteration-count {
                            junos:must "(!("protocols oam ethernet connectivity-fault-management performance-monitoring measurement-interval"))";
                            junos:must-message "Iteration-count not supported with measurement-interval";
                            type union {
                              type string {
                                pattern
                                  "<.*>|$.*";
                              }
                              type uint32 {
                                range
                                  "1 .. 65535";
                              }
                            }
                            units "frames";
                            description
                              "Iterations to partake for acquiring SLA measurements";
                          }
    
                          leaf priority {
                            type union {
                              type string {
                                pattern
                                  "<.*>|$.*";
                              }
                              type uint32 {
                                range "0 .. 7";
                              }
                            }
                            description
                              "The vlan pcp value to be sent in the Y.1731 frame";
                          }
    
                          leaf data-tlv-size {
                            junos:must "(("protocols oam ethernet connectivity-fault-management performance-monitoring sla-iterator-profiles ${sla-iterator-profile} measurement-type two-way-delay" || ("protocols oam ethernet connectivity-fault-management performance-monitoring sla-iterator-profiles ${sla-iterator-profile} measurement-type statistical-frame-loss" || "protocols oam ethernet connectivity-fault-management performance-monitoring sla-iterator-profiles ${sla-iterator-profile} measurement-type slm")))";
                            junos:must-message "The measurement type must be two-way-delay or statistical-frame-loss or slm";
                            type union {
                              type string {
                                pattern
                                  "<.*>|$.*";
                              }
                              type uint32 {
                                range
                                  "1 .. 1400";
                              }
                            }
                            units "bytes";
                            description
                              "Size of the data-tlv portion of Y.1731 frame";
                          }
                        }  // list sla-iterator-profile
    
                        leaf detect-loc {
                          type empty;
                          description
                            "Detects initial loss of connectivity with remote mep";
                        }
                      }  // list remote-mep
    
                      leaf lowest-priority-defect {
                        type enumeration {
                          enum "all-defects" {
                            value 0;
                            description
                              "Allows all defects";
                          }
                          enum
                            "mac-rem-err-xcon" {
                            value 1;
                            description
                              "Allows only MAC, not receiving CCM, erroneous CCM and cross connect defects";
                          }
                          enum "rem-err-xcon" {
                            value 2;
                            description
                              "Allows only not receiving CCM, erroneous CCM and cross connect CCM defects";
                          }
                          enum "err-xcon" {
                            value 3;
                            description
                              "Allows only erroneous CCM and cross connect CCM defects";
                          }
                          enum "xcon" {
                            value 4;
                            description
                              "Allows only cross connect CCM defect";
                          }
                          enum "no-defect" {
                            value 5;
                            description
                              "Allows no defect";
                          }
                        }
                        description
                          "Lowest priority defect that is allowed to generate a fault alarm";
                      }
                    }  // list mep
    
                    container policer {
                      description
                        "Rate limit Ethernet OAM packets for this session";
                      uses apply-advanced;
    
                      leaf continuity-check {
                        junos:must "("firewall policer $$")";
                        junos:must-message "referenced policer must be defined";
                        type string;
                        description
                          "Policer to rate limit Continuity Check Ethernet OAM messages";
                      }
    
                      leaf other {
                        junos:must "("firewall policer $$")";
                        junos:must-message "referenced policer must be defined";
                        type string;
                        description
                          "Policer to rate limit non Continuity Check Ethernet OAM messages";
                      }
    
                      leaf all {
                        junos:must "("firewall policer $$")";
                        junos:must-message "referenced policer must be defined";
                        type string;
                        description
                          "Policer to rate limit all Ethernet OAM messages";
                      }
                    }  // container policer
                  }  // list maintenance-association
                }  // list maintenance-domain
    
                container sendid-tlv {
                  description
                    "Include sendid-tlv in CCM/LBM/LTM";
                  uses apply-advanced;
    
                  leaf send-chassis-tlv {
                    type empty;
                    description
                      "Attach Chassis ID & Mgmt Addr to CCM/LBM/LTM";
                  }
                }  // container sendid-tlv
              }  // container connectivity-fault-management
    
              list evcs {
                key "name";
                description
                  "Ethernet virtual circuits configuration";
                leaf name {
                  type string {
                    junos:posix-pattern "!^((__.*__)|(.{100,})|(.*[+].*))$";
                    junos:pattern-message "Must be a non-reserved string of 100 characters or less";
                    length "1 .. 100";
                  }
                  description "EVC id";
                }
    
                uses apply-advanced;
    
                container evc-protocol {
                  description
                    "Signaling protocol to monitor EVC status";
                  choice protocol {
                    container cfm {
                      presence "enable cfm";
                      description
                        "Connectivity fault management";
                      leaf maintenance-domain {
                        junos:must "("protocols oam ethernet connectivity-fault-management maintenance-domain $$")";
                        junos:must-message "referenced maintenance-domain must be defined";
                        type string;
                        description
                          "Maintenance domain name";
                      }
    
                      leaf maintenance-association {
                        junos:must "(any "protocols oam ethernet connectivity-fault-management maintenance-domain <*> maintenance-association $$")";
                        junos:must-message "referenced maintenance-association must be defined";
                        type string;
                        description
                          "Maintenance association name";
                      }
    
                      leaf mep {
                        junos:must "(any "protocols oam ethernet connectivity-fault-management maintenance-domain <*> maintenance-association <*> mep $$")";
                        junos:must-message "referenced maintenance association endpoint must be defined";
                        type union {
                          type string {
                            pattern "<.*>|$.*";
                          }
                          type uint16 {
                            range "1 .. 8191";
                          }
                        }
                        description
                          "Identifier for maintenance association endpoint";
                      }
                    }  // container cfm
                    container vpls {
                      presence "enable vpls";
                      description
                        "Virtual private LAN service (BGP/LDP)";
                      leaf routing-instance {
                        junos:must "(("routing-instances $$ instance-type vpls" || ("routing-instances $$ instance-type virtual-switch" && "routing-instances $$ protocols vpls")))";
                        junos:must-message "referenced routing-instnace must be of instance-type vpls or instance-type virtual-swicth with protocols vpls configured";
                        junos:must "(("routing-instances $$" || any "tenants <*> routing-instances $$"))";
                        junos:must-message "referenced routing-instance must be defined";
                        type string;
                        description
                          "Routing instance name";
                      }
                    }  // container vpls
    
                    case case_3 {
                    }  // case case_3
    
                    case case_4 {
                    }  // case case_4
                  }  // choice protocol
                }  // container evc-protocol
    
                leaf remote-uni-count {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint8 {
                      range "1 .. 255";
                    }
                  }
                  default "1";
                  description
                    "Number of remote UNIs in the EVC";
                }
    
                leaf multipoint-to-multipoint {
                  type empty;
                  description
                    "Multipoint to Multipoint EVC";
                }
              }  // list evcs
    
              container lmi {
                presence "enable lmi";
                description
                  "Ethernet local management interface configuration";
                uses apply-advanced;
    
                container traceoptions {
                  description
                    "Trace options for ethernet local management interface";
                  uses apply-advanced;
    
                  leaf no-remote-trace {
                    junos:must "("system tracing")";
                    junos:must-message "'no-remote-trace' is valid only when [system tracing] is configured";
                    type empty;
                    description
                      "Disable remote tracing";
                  }
    
                  container file {
                    description
                      "Trace file information";
                    leaf filename {
                      type string {
                        junos:posix-pattern "![/ %]";
                        junos:pattern-message "Must not contain '/', % or a space";
                        length "1 .. 1024";
                      }
                      description
                        "Name of file in which to write trace information";
                    }
    
                    leaf size {
                      type string;
                      description
                        "Maximum trace file size";
                    }
    
                    leaf files {
                      type union {
                        type string {
                          pattern "<.*>|$.*";
                        }
                        type uint32 {
                          range "2 .. 1000";
                        }
                      }
                      default "3";
                      description
                        "Maximum number of trace files";
                    }
    
                    choice world-readable-choice {
                      leaf world-readable {
                        type empty;
                        description
                          "Allow any user to read the log file";
                      }
                      leaf no-world-readable {
                        type empty;
                        description
                          "Don't allow any user to read the log file";
                      }
                    }  // choice world-readable-choice
    
                    leaf match {
                      type jt:regular-expression;
                      description
                        "Regular expression for lines to be logged";
                    }
                  }  // container file
    
                  list flag {
                    key "name";
                    ordered-by user;
                    description
                      "Tracing parameters";
                    leaf name {
                      type enumeration {
                        enum "configuration" {
                          value 0;
                          description
                            "Trace configuration events";
                        }
                        enum "routing-socket" {
                          value 1;
                          description
                            "Trace routing socket events";
                        }
                        enum "protocol" {
                          value 2;
                          description
                            "Trace protocol processing events";
                        }
                        enum "init" {
                          value 3;
                          description
                            "Trace events related to protocol daemon start-up";
                        }
                        enum "error" {
                          value 4;
                          description
                            "Trace events related to catestrophic errors in daemon";
                        }
                        enum "packet" {
                          value 5;
                          description
                            "Trace events related to packet flow";
                        }
                        enum "all" {
                          value 6;
                          description
                            "Trace everything";
                        }
                      }
                    }
                  }  // list flag
                }  // container traceoptions
    
                leaf status-counter {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint8 {
                      range "2 .. 10";
                    }
                  }
                  default "4";
                  description
                    "E-LMI status counter (N393)";
                }
    
                leaf polling-verification-timer {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint8 {
                      range "5 .. 30";
                    }
                  }
                  units "seconds";
                  default "15";
                  description
                    "Polling verification timer (T392)";
                }
    
                list interface {
                  key "name";
                  description
                    "Interface options";
                  leaf name {
                    type union {
                      type jt:interface-device;
                      type string {
                        pattern "<.*>|$.*";
                      }
                    }
                  }
    
                  uses apply-advanced;
    
                  leaf uni-id {
                    type string {
                      length "1 .. 64";
                    }
                    description "UNI identifier";
                  }
    
                  leaf status-counter {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint8 {
                        range "2 .. 10";
                      }
                    }
                    default "4";
                    description
                      "E-LMI status counter (N393)";
                  }
    
                  leaf polling-verification-timer {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint8 {
                        range "5 .. 30";
                      }
                    }
                    units "seconds";
                    default "15";
                    description
                      "Polling verification timer (T392)";
                  }
    
                  leaf evc-map-type {
                    type enumeration {
                      enum "all-to-one-bundling" {
                        value 0;
                        description
                          "All to one bundling";
                      }
                      enum
                        "service-multiplexing" {
                        value 1;
                        description
                          "Service multiplexing with no bundling";
                      }
                      enum "bundling" {
                        value 2;
                        description
                          "Bundling with service multiplexing";
                      }
                    }
                    default "bundling";
                    description
                      "CE-VLAN ID/EVC map type";
                  }
    
                  list evc {
                    key "name";
                    description
                      "EVC configuration";
                    leaf name {
                      junos:must "("protocols oam ethernet evcs $$")";
                      junos:must-message "referenced evc must be defined";
                      type string {
                        length "1 .. 100";
                      }
                      description
                        "EVC identifier";
                    }
    
                    uses apply-advanced;
    
                    leaf default-evc {
                      type empty;
                      description "Default EVC";
                    }
    
                    leaf-list vlan-list {
                      type jt:vlan-range;
                      description
                        "Vlans mapped to this EVC";
                    }
                  }  // list evc
                }  // list interface
              }  // container lmi
    
              container fnp {
                presence "enable fnp";
                description
                  "Failure notification protocol configuration";
                uses apply-advanced;
    
                container traceoptions {
                  description
                    "Tracing options for FNP";
                  uses apply-advanced;
    
                  container file {
                    description
                      "Trace file options";
                    leaf filename {
                      type string {
                        junos:posix-pattern "![/ %]";
                        junos:pattern-message "Must not contain '/', % or a space";
                        length "1 .. 1024";
                      }
                      description
                        "Name of file in which to write trace information";
                    }
    
                    leaf replace {
                      type empty;
                      status deprecated;
                      description
                        "Replace trace file rather than appending to it";
                    }
    
                    leaf size {
                      type string;
                      description
                        "Maximum trace file size";
                    }
    
                    leaf files {
                      type union {
                        type string {
                          pattern "<.*>|$.*";
                        }
                        type uint32 {
                          range "2 .. 1000";
                        }
                      }
                      default "10";
                      description
                        "Maximum number of trace files";
                    }
    
                    leaf no-stamp {
                      type empty;
                      status deprecated;
                      description
                        "Do not timestamp trace file";
                    }
    
                    choice world-readable-choice {
                      leaf world-readable {
                        type empty;
                        description
                          "Allow any user to read the log file";
                      }
                      leaf no-world-readable {
                        type empty;
                        description
                          "Don't allow any user to read the log file";
                      }
                    }  // choice world-readable-choice
                  }  // container file
    
                  list flag {
                    key "name";
                    ordered-by user;
                    description
                      "Tracing parameters";
                    leaf name {
                      type enumeration {
                        enum "events" {
                          value 0;
                          description
                            "Trace protocol events";
                        }
                        enum "pdu" {
                          value 1;
                          description
                            "Trace PDU reception and transmission";
                        }
                        enum "timers" {
                          value 2;
                          description
                            "Trace protocol timers";
                        }
                        enum "error" {
                          value 3;
                          description
                            "Trace all failure conditions";
                        }
                        enum "all" {
                          value 4;
                          description
                            "Trace all";
                        }
                      }
                    }
                  }  // list flag
                }  // container traceoptions
    
                leaf interval {
                  type enumeration {
                    enum "100ms" {
                      value 0;
                    }
                    enum "1s" {
                      value 1;
                    }
                    enum "10s" {
                      value 2;
                    }
                    enum "1m" {
                      value 3;
                    }
                    enum "10m" {
                      value 4;
                    }
                  }
                  default "1s";
                  description
                    "Interval between FNP messages";
                }
    
                leaf loss-threshold {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint8 {
                      range "3 .. 255";
                    }
                  }
                  default "4";
                  description
                    "Number of FNP messages lost before clearing FNP state";
                }
    
                list interface {
                  key "name";
                  ordered-by user;
                  description
                    "Interface configuration";
                  leaf name {
                    junos:must "("interfaces $$ encapsulation vlan-vpls")";
                    junos:must-message "FNP is allowed on interfaces with vlan-vpls encapsulation only.";
                    type union {
                      type jt:interface-name;
                      type string {
                        pattern "<.*>|$.*";
                      }
                    }
                  }
    
                  uses apply-advanced;
    
                  leaf domain-id {
                    type union {
                      type uint32;
                      type string {
                        pattern "<.*>|$.*";
                      }
                    }
                    default "0";
                    description
                      "Ethernet domain identifier";
                  }
                }  // list interface
              }  // container fnp
            }  // container ethernet
          }  // container oam
    
          container ancp {
            description
              "Access Node Control Protocol options";
            uses juniper-protocols-ancp;
          }  // container ancp
    
          container bfd {
            description
              "Bidirectional Forwarding Detection (BFD) options";
            uses apply-advanced;
    
            container traceoptions {
              description
                "Trace options for BFD";
              uses apply-advanced;
    
              leaf no-remote-trace {
                junos:must "("system tracing")";
                junos:must-message "'no-remote-trace' is valid only when [system tracing] is configured";
                type empty;
                description
                  "Disable remote tracing";
              }
    
              container file {
                description
                  "Trace file information";
                leaf filename {
                  type string {
                    junos:posix-pattern "![/ %]";
                    junos:pattern-message "Must not contain '/', % or a space";
                    length "1 .. 1024";
                  }
                  description
                    "Name of file in which to write trace information";
                }
    
                leaf size {
                  type string;
                  description
                    "Maximum trace file size";
                }
    
                leaf files {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "2 .. 1000";
                    }
                  }
                  default "3";
                  description
                    "Maximum number of trace files";
                }
    
                choice world-readable-choice {
                  leaf world-readable {
                    type empty;
                    description
                      "Allow any user to read the log file";
                  }
                  leaf no-world-readable {
                    type empty;
                    description
                      "Don't allow any user to read the log file";
                  }
                }  // choice world-readable-choice
    
                leaf match {
                  type jt:regular-expression;
                  description
                    "Regular expression for lines to be logged";
                }
              }  // container file
    
              list flag {
                key "name";
                ordered-by user;
                description
                  "Trace flag information";
                leaf name {
                  type enumeration {
                    enum "adjacency" {
                      value 0;
                      description
                        "Trace adjacency messages";
                    }
                    enum "event" {
                      value 1;
                      description
                        "Trace all events";
                    }
                    enum "error" {
                      value 2;
                      description
                        "Trace all errors";
                    }
                    enum "rtsock" {
                      value 3;
                      description
                        "Trace all rtscok messages";
                    }
                    enum "packet" {
                      value 4;
                      description
                        "Trace all packets";
                    }
                    enum "ppm-packet" {
                      value 5;
                      description
                        "Trace packet activity by periodic packet management";
                    }
                    enum "pipe" {
                      value 6;
                      description
                        "Trace pipe messages";
                    }
                    enum "pipe-detail" {
                      value 7;
                      description
                        "Trace pipe messages in detail";
                    }
                    enum "state" {
                      value 8;
                      description
                        "Trace state transitions";
                    }
                    enum "timer" {
                      value 9;
                      description
                        "Trace timer processing";
                    }
                    enum "nsr-synchronization" {
                      value 10;
                      description
                        "Trace NSR synchronization events";
                    }
                    enum "nsr-packet" {
                      value 11;
                      description
                        "Trace packet activity of NSR";
                    }
                    enum "issu" {
                      value 12;
                      description
                        "Trace ISSU packet activity";
                    }
                    enum "slow-start" {
                      value 13;
                      description
                        "Trace slow-start activity";
                    }
                    enum "session" {
                      value 14;
                      description
                        "Per session activity";
                    }
                    enum "all" {
                      value 15;
                      description
                        "Trace everything";
                    }
                  }
                }
              }  // list flag
            }  // container traceoptions
    
            leaf no-issu-timer-negotiation {
              type empty;
              description
                "Disable ISSU timer negotiation";
            }
    
            container sbfd {
              description
                "Seamless BFD parameters";
              uses apply-advanced;
    
              leaf-list pool {
                type union {
                  type uint32;
                  type string {
                    pattern "<.*>|$.*";
                  }
                }
                description
                  "List of seamless BFD endpoints";
              }
    
              list local-discriminator {
                key "name";
                ordered-by user;
                description
                  "Local discriminator for seamless BFD responder";
                leaf name {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "1 .. 4294967295";
                    }
                  }
                  description
                    "Local discriminator for seamless BFD responder";
                }
    
                uses apply-advanced;
    
                leaf minimum-receive-interval {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "10 .. 255000";
                    }
                  }
                  units "milliseconds";
                  description
                    "Minimum receive interval for seamless BFD responder";
                }
    
                leaf local-ip-address {
                  type jt:ipv4addr;
                  description
                    "IPv4 source address";
                }
              }  // list local-discriminator
            }  // container sbfd
          }  // container bfd
    
          container ptp {
            description
              "Precision Time Protocol v2 options";
            uses apply-advanced;
    
            leaf clock-mode {
              type enumeration {
                enum "ordinary" {
                  value 0;
                  description
                    "PTP Ordinary clock";
                }
                enum "boundary" {
                  value 1;
                  description
                    "PTP Boundary clock";
                }
              }
              description "Clock mode";
            }
    
            leaf priority1 {
              junos:must "("protocols ptp clock-mode")";
              junos:must-message "Must configure 'protocols ptp clock-mode'";
              junos:must "(!(("protocols ptp profile-type $$={g.8275.1}" || ("protocols ptp profile-type $$={g.8275.1.enh}" || ("protocols ptp profile-type $$={g.8275.2}" || "protocols ptp profile-type $$={g.8275.2.enh}")))))";
              junos:must-message "Attribute not supported with profile-type
    g.8275.1, g.8275.1 Enhanced, g.8275.2 or g.8275.2 Enhanced";
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type int32 {
                  range "0 .. 255";
                }
              }
              description
                "Used in selecting best master clock";
            }
    
            leaf priority2 {
              junos:must "("protocols ptp clock-mode")";
              junos:must-message "Must configure 'protocols ptp clock-mode'";
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type int32 {
                  range "0 .. 255";
                }
              }
              description
                "Tie-breaker in selecting best master clock";
            }
    
            leaf local-priority {
              junos:must "(("protocols ptp profile-type" && ("protocols ptp profile-type $$={g.8275.1}" || ("protocols ptp profile-type $$={g.8275.1.enh}" || "protocols ptp profile-type $$={g.8275.2.enh}"))))";
              junos:must-message "Attribute only supported with profile-type
    g.8275.1, g.8275.1 Enhanced or g.8275.2 Enhanced";
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "1 .. 255";
                }
              }
              description
                "Priority assigned to the local clock";
            }
    
            leaf domain {
              junos:must "("protocols ptp clock-mode")";
              junos:must-message "Must configure 'protocols ptp clock-mode'";
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type int32 {
                  range "0 .. 127";
                }
              }
              description "PTP domain number";
            }
    
            leaf path-trace {
              junos:must "("protocols ptp clock-mode")";
              junos:must-message "Must configure 'protocols ptp clock-mode'";
              junos:must "(!(("protocols ptp profile-type $$={g.8275.1}" || "protocols ptp profile-type $$={g.8275.1.enh}")))";
              junos:must-message "Attribute not supported with profile-type
    g.8275.1 or g.8275.1 Enhanced";
              type empty;
              description "Enable path tracing";
            }
    
            leaf unicast-negotiation {
              junos:must "("protocols ptp clock-mode")";
              junos:must-message "Must configure 'protocols ptp clock-mode'";
              junos:must "(!(("protocols ptp profile-type $$={g.8275.1}" || ("protocols ptp profile-type $$={g.8275.1.enh}" || "protocols ptp profile-type $$={g.8275.2}"))))";
              junos:must-message "Attribute not supported with profile-type
    g.8275.1 or g.8275.1 Enhanced or g.8275.2 ";
              type empty;
              description
                "Enable unicast negotiation";
            }
    
            container slave {
              junos:must "("protocols ptp clock-mode")";
              junos:must-message "Must configure 'protocols ptp clock-mode'";
              description "PTP Slave parameters";
              uses apply-advanced;
    
              leaf frequency-only {
                type empty;
                description
                  "Only for frequency syntonization";
              }
    
              leaf delay-request {
                junos:must "(!("protocols ptp profile-type $$={g.8275.1}"))";
                junos:must-message "Attribute not supported with 'profile-type g.8275.1'";
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type int32 {
                    range "-7 .. 7";
                  }
                }
                description
                  "Log mean interval between delay requests";
              }
    
              leaf announce-timeout {
                junos:must "(!("protocols ptp profile-type $$={g.8275.1}"))";
                junos:must-message "Attribute not supported with 'profile-type g.8275.1'";
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "2 .. 10";
                  }
                }
                description
                  "Timeout period for announce messages";
              }
    
              list interface {
                junos:must "(!((("protocols ptp profile-type $$={g.8275.1}" || "protocols ptp profile-type $$={g.8275.1.enh}") && "protocols ptp stateful interface")))";
                junos:must-message "Attribute not supported with profile-type g.8275.1
    or g.8275.1 Enhanced when stateful ifl is configured";
                key "name";
                description
                  "Interface on which to respond to upstream PTP master";
                leaf name {
                  junos:must "(!("interfaces $$-IFD gigether-options 802.3ad"))";
                  junos:must-message "PTP not allowed on member links of AE interface";
                  type union {
                    type jt:interface-name;
                    type string {
                      pattern "<.*>|$.*";
                    }
                  }
                  description "Interface name";
                }
    
                uses apply-advanced;
    
                container unicast-mode {
                  junos:must "(!("protocols ptp profile-type $$={g.8275.1}"))";
                  junos:must-message "Attribute not supported with 'profile-type g.8275.1'";
                  description
                    "Configure upstream unicast PTP master clock sources";
                  uses apply-advanced;
    
                  leaf transport {
                    type enumeration {
                      enum "ipv4" {
                        value 0;
                        description
                          "Use IPv4 as transport";
                      }
                      enum "ipv6" {
                        value 1;
                        description
                          "Use IPv6 as transport";
                      }
                    }
                    description
                      "Encapsulation for PTP packet transport";
                  }
    
                  leaf local-priority {
                    junos:must "(("protocols ptp profile-type" && ("protocols ptp profile-type g.8275.1" || ("protocols ptp profile-type g.8275.1.enh" || ("protocols ptp profile-type g.8275.2" || "protocols ptp profile-type g.8275.2.enh")))))";
                    junos:must-message "Attribute only supported with profile-type g.8275.1,
      g.8275.1 Enhanced, g.8275.2 or g.8275.2 Enhanced";
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint32 {
                        range "1 .. 255";
                      }
                    }
                    description
                      "Priority assigned to the port";
                  }
    
                  list clock-source {
                    key "ip-address local-ip-address";
                    description
                      "Configure PTP master parameters";
                    leaf ip-address {
                      type jt:ipaddr;
                      description
                        "IP address of PTP master";
                    }
    
                    leaf local-ip-address {
                      type jt:ipaddr;
                      description
                        "Must be IP address on local interface";
                    }
    
                    uses apply-advanced;
    
                    leaf asymmetry {
                      type union {
                        type string {
                          pattern "<.*>|$.*";
                        }
                        type int32 {
                          range
                            "-100000000 .. 100000000";
                        }
                      }
                      description
                        "Adjust the slave-to-master delay by value specified in nanoseconds";
                    }
                  }  // list clock-source
                }  // container unicast-mode
              }  // list interface
            }  // container slave
    
            container master {
              junos:must "("protocols ptp clock-mode")";
              junos:must-message "Must configure 'protocols ptp clock-mode'";
              description
                "PTP Master parameters";
              uses apply-advanced;
    
              leaf announce-interval {
                junos:must "(!("protocols ptp profile-type $$={g.8275.2}"))";
                junos:must-message "Attribute not supported with 'profile-type g.8275.2'";
                junos:must "(!("protocols ptp profile-type $$={g.8275.1}"))";
                junos:must-message "Attribute not supported with 'profile-type g.8275.1'";
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type int32 {
                    range "-3 .. 4";
                  }
                }
                description
                  "Log mean interval between announce messages";
              }
    
              leaf sync-interval {
                junos:must "(!("protocols ptp profile-type $$={g.8275.2}"))";
                junos:must-message "Attribute not supported with 'profile-type g.8275.2'";
                junos:must "(!("protocols ptp profile-type $$={g.8275.1}"))";
                junos:must-message "Attribute not supported with 'profile-type g.8275.1'";
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type int32 {
                    range "-7 .. 7";
                  }
                }
                description
                  "Log mean interval between sync messages";
              }
    
              list interface {
                key "name";
                description
                  "Interface on which to respond to downstream PTP slaves";
                leaf name {
                  junos:must "(!("interfaces $$-IFD gigether-options 802.3ad"))";
                  junos:must-message "PTP not allowed on member links of AE interface";
                  type union {
                    type jt:interface-name;
                    type string {
                      pattern "<.*>|$.*";
                    }
                  }
                  description "Interface name";
                }
    
                uses apply-advanced;
    
                container unicast-mode {
                  junos:must "(!("protocols ptp profile-type $$={g.8275.1}"))";
                  junos:must-message "Attribute not supported with 'profile-type g.8275.1'";
                  description
                    "Configure downstream PTP clock slaves";
                  uses apply-advanced;
    
                  leaf transport {
                    type enumeration {
                      enum "ipv4" {
                        value 0;
                        description
                          "Use IPv4 as transport";
                      }
                      enum "ipv6" {
                        value 1;
                        description
                          "Use IPv6 as transport";
                      }
                    }
                    description
                      "Encapsulation for PTP packet transport";
                  }
    
                  list clock-client {
                    key "ip-address local-ip-address";
                    description
                      "Configure PTP master parameters";
                    leaf ip-address {
                      type jt:ipprefix;
                      description
                        "IP address or subnet of remote PTP slave";
                    }
    
                    leaf local-ip-address {
                      type jt:ipaddr;
                      description
                        "IP address of local PTP master interface";
                    }
    
                    uses apply-advanced;
    
                    leaf manual {
                      junos:must "(!(("protocols ptp unicast-negotiation" && "protocols ptp profile-type $$={g.8275.2.enh}")))";
                      junos:must-message "Attribute not supported when unicast-negotiation
         is configured with profile-type g.8275.2.enh";
                      type empty;
                      description
                        "This slave does not use unicast negotiation";
                    }
    
                    container l2-ifl {
                      uses apply-advanced;
                    }  // container l2-ifl
                  }  // list clock-client
                }  // container unicast-mode
              }  // list interface
            }  // container master
          }  // container ptp
    
          container dot1x {
            description "802.1X options";
            uses juniper-protocols-dot1x;
          }  // container dot1x
    
          container ppp-service {
            description "Configure PPP service";
            uses apply-advanced;
    
            container traceoptions {
              description
                "Trace options for PPP service";
              uses apply-advanced;
    
              leaf no-remote-trace {
                junos:must "("system tracing")";
                junos:must-message "'no-remote-trace' is valid only when [system tracing] is configured";
                type empty;
                description
                  "Disable remote tracing";
              }
    
              container file {
                description
                  "Trace file information";
                leaf filename {
                  type string {
                    junos:posix-pattern "![/ %]";
                    junos:pattern-message "Must not contain '/', % or a space";
                    length "1 .. 1024";
                  }
                  description
                    "Name of file in which to write trace information";
                }
    
                leaf size {
                  type string;
                  description
                    "Maximum trace file size";
                }
    
                leaf files {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "2 .. 1000";
                    }
                  }
                  default "3";
                  description
                    "Maximum number of trace files";
                }
    
                choice world-readable-choice {
                  leaf world-readable {
                    type empty;
                    description
                      "Allow any user to read the log file";
                  }
                  leaf no-world-readable {
                    type empty;
                    description
                      "Don't allow any user to read the log file";
                  }
                }  // choice world-readable-choice
    
                leaf match {
                  type jt:regular-expression;
                  description
                    "Regular expression for lines to be logged";
                }
              }  // container file
    
              leaf level {
                type enumeration {
                  enum "error" {
                    value 0;
                    description
                      "Match error conditions";
                  }
                  enum "warning" {
                    value 1;
                    description
                      "Match warning messages";
                  }
                  enum "notice" {
                    value 2;
                    description
                      "Match conditions that should be handled specially";
                  }
                  enum "info" {
                    value 3;
                    description
                      "Match informational messages";
                  }
                  enum "verbose" {
                    value 4;
                    description
                      "Match verbose messages";
                  }
                  enum "all" {
                    value 5;
                    description
                      "Match all levels";
                  }
                }
                default "error";
                description
                  "Level of debugging output";
              }
    
              list flag {
                key "name";
                ordered-by user;
                description
                  "Area of PPP service to enable debugging output";
                leaf name {
                  type enumeration {
                    enum "accounting-statistics" {
                      value 0;
                      description
                        "Trace accounting statistics events";
                    }
                    enum "authentication" {
                      value 1;
                      description
                        "Trace authentication code";
                    }
                    enum "chap" {
                      value 2;
                      description
                        "Trace CHAP code";
                    }
                    enum "events" {
                      value 3;
                      description
                        "Trace interface events";
                    }
                    enum "gres" {
                      value 4;
                      description
                        "Trace GRES events";
                    }
                    enum "init" {
                      value 5;
                      description
                        "Trace daemon initialization";
                    }
                    enum "interface-db" {
                      value 6;
                      description
                        "Trace interface database code";
                    }
                    enum "lcp" {
                      value 7;
                      description
                        "Trace LCP state machine code";
                    }
                    enum "memory" {
                      value 8;
                      description
                        "Trace memory management code";
                    }
                    enum "ncp" {
                      value 9;
                      description
                        "Trace NCP state machine code";
                    }
                    enum "packet-error" {
                      value 10;
                      description
                        "Trace Packet error events";
                    }
                    enum "pap" {
                      value 11;
                      description
                        "Trace PAP code";
                    }
                    enum "parse" {
                      value 12;
                      description
                        "Trace parsing events";
                    }
                    enum "profile" {
                      value 13;
                      description
                        "Trace libdynamic-profile events";
                    }
                    enum "receive-packets" {
                      value 14;
                      description
                        "Trace received PPP packets";
                    }
                    enum "routing-process" {
                      value 15;
                      description
                        "Trace routing process interactions";
                    }
                    enum "rtp" {
                      value 16;
                      description
                        "Trace RealTimePriority code";
                    }
                    enum "rtsock" {
                      value 17;
                      description
                        "Trace routing socket code";
                    }
                    enum "session-db" {
                      value 18;
                      description
                        "Trace session database interactions";
                    }
                    enum "smi-services-sentry" {
                      value 19;
                      description
                        "Trace SMI services requests/retries";
                    }
                    enum "states" {
                      value 20;
                      description
                        "Trace state machine events";
                    }
                    enum "transmit-packets" {
                      value 21;
                      description
                        "Trace tranmitted PPP packets";
                    }
                    enum "tunnel" {
                      value 22;
                      description
                        "Trace l2tp tunneling";
                    }
                    enum "all" {
                      value 23;
                      description
                        "Trace all areas of code";
                    }
                  }
                }
              }  // list flag
    
              container filter {
                presence "enable filter";
                description "Trace filtering";
                uses apply-advanced;
    
                leaf aci {
                  type string {
                    junos:posix-pattern "^[*]*.[^*]*[*]*$";
                    junos:pattern-message "Must be a non-reserved string";
                    length "1 .. 64";
                  }
                  description
                    "Regular expression to match ACI";
                }
    
                leaf ari {
                  type string {
                    junos:posix-pattern "^[*]*.[^*]*[*]*$";
                    junos:pattern-message "Must be a non-reserved string";
                    length "1 .. 64";
                  }
                  description
                    "Regular expression to match ARI";
                }
    
                leaf service-name {
                  type string {
                    junos:posix-pattern "^([[:alnum:]][[:alnum:]_-]*)|([*][[:alnum:]_-]{1,})[*]?$";
                    junos:pattern-message "Must be a non-reserved string";
                    length "1 .. 64";
                  }
                  description "Service name";
                }
    
                leaf underlying-interface {
                  junos:must "(("interfaces $$-IFL encapsulation ppp-over-ether" || ("interfaces $$-IFL encapsulation ppp-over-ether-over-atm-llc" || "interfaces $$-IFL family pppoe")))";
                  junos:must-message "Underlying interface must be configured";
                  type string;
                  description
                    "Underlying interface name";
                }
              }  // container filter
            }  // container traceoptions
    
            leaf on-demand-ip-address {
              type empty;
              description
                "Enable On-Demand IPv4 address allocation and de-allocation";
            }
    
            leaf reject-unauthorized-ipv6cp {
              type empty;
              description
                "Reject IPv6 NCP if no appropriate IPv6 address or prefix is authorized";
            }
    
            container required-address {
              presence "enable required-address";
              description
                "Session address requirement";
              uses apply-advanced;
    
              leaf ip {
                type empty;
                description
                  "Terminate session if no appropriate IP address is authorized";
              }
            }  // container required-address
    
            leaf pppoe-lcp-options-strict {
              type empty;
              description
                "Enforce RFC 2516 MUST requirements for FCS, ACFC and ACCM";
            }
    
            leaf source-interface-set-at-login {
              type enumeration {
                enum "svlan" {
                  value 0;
                  description
                    "Compose interface-set name from physical IFD and outer VLAN tag";
                }
              }
              description
                "Generate interface-set name for use during login";
            }
          }  // container ppp-service
    
          container overlay {
            description "Overlay protocol";
            uses juniper-protocols-overlayd;
          }  // container overlay
    
          container vrrp {
            description "VRRP options";
            uses apply-advanced;
    
            container traceoptions {
              description
                "Trace options for VRRP";
              uses apply-advanced;
    
              leaf no-remote-trace {
                junos:must "("system tracing")";
                junos:must-message "'no-remote-trace' is valid only when [system tracing] is configured";
                type empty;
                description
                  "Disable remote tracing";
              }
    
              container file {
                description
                  "Trace file information";
                leaf filename {
                  type string {
                    junos:posix-pattern "![/ %]";
                    junos:pattern-message "Must not contain '/', % or a space";
                    length "1 .. 1024";
                  }
                  description
                    "Name of file in which to write trace information";
                }
    
                leaf size {
                  type string;
                  description
                    "Maximum trace file size";
                }
    
                leaf files {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "0 .. 4294967295";
                    }
                  }
                  default "3";
                  description
                    "Maximum number of trace files";
                }
    
                choice world-readable-choice {
                  leaf world-readable {
                    type empty;
                    description
                      "Allow any user to read the log file";
                  }
                  leaf no-world-readable {
                    type empty;
                    description
                      "Don't allow any user to read the log file";
                  }
                }  // choice world-readable-choice
    
                leaf match {
                  type jt:regular-expression;
                  description
                    "Regular expression for lines to be logged";
                }
    
                leaf microsecond-stamp {
                  type empty;
                  description
                    "Timestamp with microsecond granularity";
                }
              }  // container file
    
              list flag {
                key "name";
                ordered-by user;
                description "Tracing parameters";
                leaf name {
                  type enumeration {
                    enum "database" {
                      value 0;
                      description
                        "Trace database";
                    }
                    enum "general" {
                      value 1;
                      description
                        "Trace general events";
                    }
                    enum "interfaces" {
                      value 2;
                      description
                        "Trace interface messages";
                    }
                    enum "normal" {
                      value 3;
                      description
                        "Trace normal events";
                    }
                    enum "packets" {
                      value 4;
                      description
                        "Trace packets";
                    }
                    enum "state" {
                      value 5;
                      description
                        "Trace state transitions";
                    }
                    enum "timer" {
                      value 6;
                      description
                        "Trace timer events";
                    }
                    enum "ppm" {
                      value 7;
                      description
                        "VRRP PPM related messages";
                    }
                    enum "all" {
                      value 8;
                      description
                        "Trace all events";
                    }
                  }
                }
              }  // list flag
            }  // container traceoptions
    
            leaf failover-delay {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "50 .. 100000";
                }
              }
              units "milliseconds";
              description
                "Additional failover delay timer";
            }
    
            leaf startup-silent-period {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "1 .. 2000";
                }
              }
              units "seconds";
              description
                "Period for ignoring master down timer at device startup";
            }
    
            leaf asymmetric-hold-time {
              type empty;
              description
                "Priority hold time asymmetric behaviour";
            }
    
            container delegate-processing {
              presence
                "enable delegate-processing";
              description
                "Switch to distributed PPMD";
              uses apply-advanced;
            }  // container delegate-processing
    
            leaf skew-timer-disable {
              type empty;
              description
                "Disable the skew timer";
            }
    
            leaf global-advertisements-threshold {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "1 .. 15";
                }
              }
              default "3";
              description
                "Number of vrrp advertisements missed before declaring master down";
            }
    
            leaf inherit-advertisement-interval {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "5 .. 120";
                }
              }
              default "120";
              description
                "Advertisement interval for inherit sessions";
            }
    
            leaf version-3 {
              type empty;
              description "VRRPv3 conformance";
            }
          }  // container vrrp
    
          container pgm {
            presence "enable pgm";
            status deprecated;
            description "PGM options";
            uses juniper-protocols-pgm;
          }  // container pgm
    
          container amt {
            description "AMT configuration";
            uses juniper-protocols-amt;
          }  // container amt
    
          container bgp {
            description "BGP options";
            uses juniper-protocols-bgp;
          }  // container bgp
    
          container bgpmcast {
            presence "enable bgpmcast";
            description "BGP multicast options";
            uses juniper-protocols-bgpmcast;
          }  // container bgpmcast
    
          container connections {
            description
              "Circuit cross-connect configuration";
            uses apply-advanced;
    
            list interface-switch {
              key "name";
              ordered-by user;
              description
                "Bidirectional switch between interfaces";
              leaf name {
                type string {
                  junos:posix-pattern "^.{1,128}$";
                  junos:pattern-message "Must be a string of 128 characters or less";
                }
                description
                  "Name of interface switch";
              }
    
              uses apply-advanced;
    
              list interface {
                key "name";
                ordered-by user;
                description
                  "Interface to be switched";
                leaf name {
                  junos:must "(!(any "protocols l2circuit neighbor <*> interface $$"))";
                  junos:must-message "interface cannot be specified in another l2circuit";
                  junos:must "(!(any "routing-instances <*> interface $$"))";
                  junos:must-message "interface cannot be specified in another routing instance";
                  type union {
                    type jt:interface-name;
                    type string {
                      pattern "<.*>|$.*";
                    }
                  }
                  description "Interface name";
                }
    
                uses apply-advanced;
              }  // list interface
            }  // list interface-switch
    
            list remote-interface-switch {
              key "name";
              ordered-by user;
              description
                "Bidirectional switch between a local and a remote interface";
              leaf name {
                type string {
                  junos:posix-pattern "^.{1,128}$";
                  junos:pattern-message "Must be a string of 128 characters or less";
                }
                description
                  "Name of remote interface switch";
              }
    
              uses apply-advanced;
    
              leaf interface {
                junos:must "(!(any "protocols l2circuit neighbor <*> interface $$"))";
                junos:must-message "interface cannot be specified in another l2circuit";
                junos:must "(!(any "routing-instances <*> interface $$"))";
                junos:must-message "interface cannot be specified in another routing instance";
                type union {
                  type jt:interface-name;
                  type string {
                    pattern "<.*>|$.*";
                  }
                }
                description
                  "Local interface name";
              }
    
              leaf transmit-lsp {
                junos:must "(!(".. .. .. mpls label-switched-path $$ ultimate-hop-popping"))";
                junos:must-message "Circuit cross-connect cannot use referenced ultimate-hop-poping ingress LSP";
                junos:must "(!(".. .. .. mpls ultimate-hop-popping"))";
                junos:must-message "Circuit cross-connect cannot use any ultimate-hop-popping ingress LSP";
                type string;
                description
                  "Name of outgoing label-switched path";
              }
    
              leaf receive-lsp {
                type string;
                description
                  "Name of incoming label-switched path";
              }
            }  // list remote-interface-switch
    
            list lsp-switch {
              key "name";
              ordered-by user;
              description
                "Unidirectional switch between two label-switched paths";
              leaf name {
                type string {
                  junos:posix-pattern "^.{1,128}$";
                  junos:pattern-message "Must be a string of 128 characters or less";
                }
                description
                  "Name of label-switched path switch";
              }
    
              uses apply-advanced;
    
              leaf transmit-lsp {
                junos:must "(!(".. .. .. mpls label-switched-path $$ ultimate-hop-popping"))";
                junos:must-message "Circuit cross-connect cannot use referenced ultimate-hop-poping ingress LSP";
                junos:must "(!(".. .. .. mpls ultimate-hop-popping"))";
                junos:must-message "Circuit cross-connect cannot use any ultimate-hop-popping ingress LSP";
                type string;
                description
                  "Name of outgoing label-switched path";
              }
    
              leaf receive-lsp {
                type string;
                description
                  "Name of incoming label-switched path";
              }
            }  // list lsp-switch
    
            list p2mp-transmit-switch {
              key "name";
              ordered-by user;
              description
                "Local interface to point-to-multipoint LSP switch";
              leaf name {
                type string {
                  junos:posix-pattern "^.{1,128}$";
                  junos:pattern-message "Must be a string of 128 characters or less";
                }
                description
                  "Point-to-multipoint switch name on which to transmit";
              }
    
              uses apply-advanced;
    
              leaf input-interface {
                junos:must "(!(any "protocols l2circuit neighbor <*> interface $$"))";
                junos:must-message "interface cannot be specified in another l2circuit";
                junos:must "(!(any "routing-instances <*> interface $$"))";
                junos:must-message "interface cannot be specified in another routing instance";
                type union {
                  type jt:interface-name;
                  type string {
                    pattern "<.*>|$.*";
                  }
                }
                description
                  "Input interface name";
              }
    
              leaf transmit-p2mp-lsp {
                type string;
                description
                  "Point-to-multipoint LSP name on which to transmit";
              }
    
              leaf-list output-interface {
                type union {
                  type jt:interface-name;
                  type string {
                    pattern "<.*>|$.*";
                  }
                }
                max-elements 16;
                ordered-by user;
                description
                  "Outgoing interface name";
              }
            }  // list p2mp-transmit-switch
    
            list p2mp-receive-switch {
              key "name";
              ordered-by user;
              description
                "Point-to-multipoint LSP to local interfaces switch";
              leaf name {
                type string {
                  junos:posix-pattern "^.{1,128}$";
                  junos:pattern-message "Must be a string of 128 characters or less";
                }
                description
                  "Point-to-multipoint switch name on which to receive";
              }
    
              uses apply-advanced;
    
              leaf receive-p2mp-lsp {
                type string;
                description
                  "Point-to-multipoint LSP name on which to receive";
              }
    
              leaf-list output-interface {
                type union {
                  type jt:interface-name;
                  type string {
                    pattern "<.*>|$.*";
                  }
                }
                ordered-by user;
                description
                  "Next outgoing interface name";
              }
            }  // list p2mp-receive-switch
          }  // container connections
    
          container dvmrp {
            presence "enable dvmrp";
            status deprecated;
            description "DVMRP options";
            uses apply-advanced;
    
            choice enable-disable {
              leaf disable {
                type empty;
                description "Disable DVMRP";
              }
            }  // choice enable-disable
    
            container traceoptions {
              description
                "Trace options for DVMRP";
              uses apply-advanced;
    
              container file {
                description "Trace file options";
                leaf filename {
                  type string {
                    junos:posix-pattern "![/ %]";
                    junos:pattern-message "Must not contain '/', % or a space";
                    length "1 .. 1024";
                  }
                  description
                    "Name of file in which to write trace information";
                }
    
                leaf replace {
                  type empty;
                  status deprecated;
                  description
                    "Replace trace file rather than appending to it";
                }
    
                leaf size {
                  type string;
                  description
                    "Maximum trace file size";
                }
    
                leaf files {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "2 .. 1000";
                    }
                  }
                  default "10";
                  description
                    "Maximum number of trace files";
                }
    
                leaf no-stamp {
                  type empty;
                  status deprecated;
                  description
                    "Do not timestamp trace file";
                }
    
                choice world-readable-choice {
                  leaf world-readable {
                    type empty;
                    description
                      "Allow any user to read the log file";
                  }
                  leaf no-world-readable {
                    type empty;
                    description
                      "Don't allow any user to read the log file";
                  }
                }  // choice world-readable-choice
              }  // container file
    
              list flag {
                key "name";
                ordered-by user;
                description "Tracing parameters";
                leaf name {
                  type enumeration {
                    enum "route" {
                      value 0;
                      description
                        "Trace routing information";
                    }
                    enum "poison" {
                      value 1;
                      description
                        "Trace poison-route-reverse packets";
                    }
                    enum "packets" {
                      value 2;
                      description
                        "Trace all DVMRP packets";
                    }
                    enum "probe" {
                      value 3;
                      description
                        "Trace probe packets";
                    }
                    enum "report" {
                      value 4;
                      description
                        "Trace DVMRP route report packets";
                    }
                    enum "neighbor" {
                      value 5;
                      description
                        "Trace neighbor probe packets";
                    }
                    enum "prune" {
                      value 6;
                      description
                        "Trace prune messages";
                    }
                    enum "graft" {
                      value 7;
                      description
                        "Trace graft messages";
                    }
                    enum "normal" {
                      value 8;
                      description
                        "Trace normal events";
                    }
                    enum "general" {
                      value 9;
                      description
                        "Trace general events";
                    }
                    enum "state" {
                      value 10;
                      description
                        "Trace state transitions";
                    }
                    enum "policy" {
                      value 11;
                      description
                        "Trace policy processing";
                    }
                    enum "task" {
                      value 12;
                      description
                        "Trace routing protocol task processing";
                    }
                    enum "timer" {
                      value 13;
                      description
                        "Trace routing protocol timer processing";
                    }
                    enum "all" {
                      value 14;
                      description
                        "Trace everything";
                    }
                  }
                }
    
                leaf send {
                  type empty;
                  description
                    "Trace transmitted packets";
                }
    
                leaf receive {
                  type empty;
                  description
                    "Trace received packets";
                }
    
                leaf detail {
                  type empty;
                  description
                    "Trace detailed information";
                }
    
                leaf disable {
                  type empty;
                  description
                    "Disable this trace flag";
                }
              }  // list flag
            }  // container traceoptions
    
            container rib-group {
              description "Routing table group";
              uses rib_group_inet_type;
            }  // container rib-group
    
            leaf-list import {
              type jt:policy-algebra;
              ordered-by user;
              description "Import policy";
            }
    
            leaf-list export {
              type jt:policy-algebra;
              ordered-by user;
              description "Export policy";
            }
    
            list interface {
              key "name";
              ordered-by user;
              description
                "DVMRP interface options";
              leaf name {
                type union {
                  type jt:interface-name;
                  type string {
                    pattern "<.*>|$.*";
                  }
                }
                description "Interface name";
              }
    
              uses apply-advanced;
    
              choice enable-disable {
                leaf disable {
                  type empty;
                  description
                    "Disable DVMRP on this interface";
                }
              }  // choice enable-disable
    
              leaf mode {
                type enumeration {
                  enum "forwarding" {
                    junos:must "(("protocols pim interface ${interface} disable" || (!(("protocols pim interface ${interface}" || ("protocols pim interface ${interface} enable" || ("protocols pim interface all" || "protocols pim interface all enable")))) || ("protocols pim interface all disable" && (!("protocols pim interface ${interface}") && !("protocols pim interface ${interface} enable"))))))";
                    junos:must-message "Cannot enable PIM and DVMRP in forwarding mode at the same time";
                    value 0;
                    description
                      "Use DVMRP for multicast forwarding";
                  }
                  enum "unicast-routing" {
                    value 1;
                    description
                      "Use DVMRP for unicast routing only";
                  }
                }
                description "Mode of interface";
              }
    
              leaf metric {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "1 .. 32";
                  }
                }
                description "DVMRP metric value";
              }
    
              leaf hold-time {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "1 .. 255";
                  }
                }
                units "seconds";
                description
                  "When neighbors think the interface is down";
              }
            }  // list interface
          }  // container dvmrp
    
          container esis {
            description
              "End system-intermediate system options";
            uses juniper-protocols-esis;
          }  // container esis
    
          container evpn {
            description
              "Configuration EVPN default routing instance";
            uses apply-advanced;
    
            container traceoptions {
              description
                "Trace options for Layer 2 VPNs";
              uses apply-advanced;
    
              container file {
                description "Trace file options";
                leaf filename {
                  type string {
                    junos:posix-pattern "![/ %]";
                    junos:pattern-message "Must not contain '/', % or a space";
                    length "1 .. 1024";
                  }
                  description
                    "Name of file in which to write trace information";
                }
    
                leaf replace {
                  type empty;
                  status deprecated;
                  description
                    "Replace trace file rather than appending to it";
                }
    
                leaf size {
                  type string;
                  description
                    "Maximum trace file size";
                }
    
                leaf files {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "2 .. 1000";
                    }
                  }
                  default "10";
                  description
                    "Maximum number of trace files";
                }
    
                leaf no-stamp {
                  type empty;
                  status deprecated;
                  description
                    "Do not timestamp trace file";
                }
    
                choice world-readable-choice {
                  leaf world-readable {
                    type empty;
                    description
                      "Allow any user to read the log file";
                  }
                  leaf no-world-readable {
                    type empty;
                    description
                      "Don't allow any user to read the log file";
                  }
                }  // choice world-readable-choice
              }  // container file
    
              list flag {
                key "name";
                ordered-by user;
                description "Tracing parameters";
                leaf name {
                  type enumeration {
                    enum "error" {
                      value 0;
                      description "Trace errors";
                    }
                    enum "topology" {
                      value 1;
                      description
                        "Trace Layer 2 VPN, VPLS and EVPN topology changes";
                    }
                    enum "nlri" {
                      value 2;
                      description
                        "Trace Layer 2 VPN, VPLS and EVPN remote site advertisements";
                    }
                    enum "connections" {
                      value 3;
                      description
                        "Trace Layer 2 VPN and VPLS connections";
                    }
                    enum "automatic-site" {
                      value 4;
                      description
                        "Trace VPLS automatic site state";
                    }
                    enum "oam" {
                      value 5;
                      description
                        "Trace OAM messages";
                    }
                    enum "mac-database" {
                      value 6;
                      description
                        "Trace MAC route database in a EVPN instance";
                    }
                    enum "nsr" {
                      value 7;
                      description
                        "Trace NSR in a EVPN instance";
                    }
                    enum "egress-protection" {
                      value 8;
                      description
                        "Trace Edge Protection messages";
                    }
                    enum "instance" {
                      value 9;
                      description
                        "Evpn instance related messages";
                    }
                    enum "interface" {
                      value 10;
                      description
                        "Interface related messages";
                    }
                    enum "l2aldsync" {
                      value 11;
                      description
                        "Messages related to EVPN-L2ALD communication";
                    }
                    enum "p2mp" {
                      value 12;
                      description
                        "P2MP messages";
                    }
                    enum "esi" {
                      value 13;
                      description
                        "Evpn ethernet segment related messages";
                    }
                    enum "mcsn" {
                      value 14;
                      description
                        "Evpn multicast snooping related messages";
                    }
                    enum "vpws" {
                      value 15;
                      description
                        "VPWS messages";
                    }
                    enum "irb" {
                      value 16;
                      description
                        "Integrated routing bridging messages";
                    }
                    enum "ar" {
                      value 17;
                      description
                        "Assisted-replication messages";
                    }
                    enum "etree" {
                      value 18;
                      description
                        "Evpn etree messages";
                    }
                    enum "kernel" {
                      value 19;
                      description
                        "Messages related to rpd-kernel communication";
                    }
                    enum "bd" {
                      value 20;
                      description
                        "Evpn bridge domain messages";
                    }
                    enum "pbb" {
                      value 21;
                      description
                        "Evpn provider backbone bridging messages";
                    }
                    enum "infra" {
                      value 22;
                      description
                        "Messages related to infrastructure in evpn";
                    }
                    enum "pfxdb" {
                      value 23;
                      description
                        "Type-5 related messages";
                    }
                    enum "route" {
                      value 24;
                      description
                        "Trace routing information";
                    }
                    enum "normal" {
                      value 25;
                      description
                        "Trace normal events";
                    }
                    enum "general" {
                      value 26;
                      description
                        "Trace general events";
                    }
                    enum "state" {
                      value 27;
                      description
                        "Trace state transitions";
                    }
                    enum "policy" {
                      value 28;
                      description
                        "Trace policy processing";
                    }
                    enum "task" {
                      value 29;
                      description
                        "Trace routing protocol task processing";
                    }
                    enum "timer" {
                      value 30;
                      description
                        "Trace routing protocol timer processing";
                    }
                    enum "all" {
                      value 31;
                      description
                        "Trace everything";
                    }
                  }
                }
    
                leaf send {
                  type empty;
                  description
                    "Trace transmitted packets";
                }
    
                leaf receive {
                  type empty;
                  description
                    "Trace received packets";
                }
    
                leaf detail {
                  type empty;
                  description
                    "Trace detailed information";
                }
    
                leaf disable {
                  type empty;
                  description
                    "Disable this trace flag";
                }
              }  // list flag
            }  // container traceoptions
    
            leaf mac-history {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint16 {
                  range "0 .. 255";
                }
              }
              description
                "Number of history entries to be maitained per mac";
            }
    
            list mac-list {
              key "name";
              description "Configure MAC lists";
              leaf name {
                type string {
                  length "1 .. 128";
                }
                description "List name";
              }
    
              uses apply-advanced;
    
              leaf-list mac-address {
                type jt:mac-addr;
                description "MAC address";
              }
            }  // list mac-list
    
            container mac-mobility {
              description
                "MAC mobility settings";
              uses apply-advanced;
    
              leaf no-sequence-numbers {
                type empty;
                description
                  "Don't use sequence numbers for MAC mobility";
              }
            }  // container mac-mobility
    
            leaf no-core-isolation {
              type empty;
              description
                "Disable EVPN Core isolation";
            }
    
            leaf leave-sync-route-oldstyle {
              type empty;
              description
                "Originate leave sync route oldstyle";
            }
    
            leaf es-import-oldstyle {
              type empty;
              description
                "Enable noncompliant ES import route-target computation";
            }
    
            leaf es-label-oldstyle {
              type empty;
              description
                "Enable noncompliant ESI 24 bit label";
            }
    
            leaf encapsulation {
              junos:must "((((".. .. .. instance-type virtual-switch" || (".. .. ..  instance-type evpn" || (".. .. .. instance-type mac-vrf" || ".. .. .. instance-type evpn-vpws"))) && !(".. .. .. switch-options route-distinguisher")) || ".. .. .. switch-options route-distinguisher"))";
              junos:must-message "Encapsulation can only be configured for an EVPN instance";
              type enumeration {
                enum "mpls" {
                  value 0;
                  description
                    "MPLS encapsulation";
                }
                enum "vxlan" {
                  value 1;
                  description
                    "VXLAN encapsulation";
                }
                enum "mpls-inet6" {
                  value 2;
                  description
                    "MPLS over IPv6 encapsulation";
                }
              }
              default "mpls";
              description
                "Encapsulation type for EVPN";
            }
    
            container assisted-replication {
              junos:must "(!("forwarding-options multicast-replication evpn irb local-only"))";
              junos:must-message "Assisted Replication is not valid with forwarding-options multicast-replication evpn irb local-only";
              junos:must "(".. encapsulation vxlan")";
              junos:must-message "Assisted Replication is supported only with encapsulation vxlan option";
              description
                "Option to enable Assisted Replication";
              uses apply-advanced;
    
              choice AR {
                container leaf {
                  presence "enable leaf";
                  description
                    "Assisted Replicator Leaf";
                  uses apply-advanced;
    
                  leaf replicator-activation-delay {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint32 {
                        range "0 .. 180";
                      }
                    }
                    units "seconds";
                    default "10";
                    description
                      "Dealy interval in starting replication";
                  }
                }  // container leaf
    
                case case_2 {
                }  // case case_2
              }  // choice AR
            }  // container assisted-replication
    
            leaf designated-forwarder-election-hold-time {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "1 .. 1800";
                }
              }
              units "seconds";
              description
                "Time to wait before electing a DF(seconds)";
            }
    
            container remote-ip-host-routes {
              junos:must "(!(".. .. .. instance-type vrf"))";
              junos:must-message "remote-ip-host-routes knob is for virtual-switch, EVPN or default instance";
              presence
                "enable remote-ip-host-routes";
              description
                "Virtual machine traffic optimization(VMTO) for EVPN";
              uses apply-advanced;
    
              leaf-list import {
                type jt:policy-algebra;
                ordered-by user;
                description
                  "Policy to control the creation of remote IP host routes";
              }
    
              leaf no-advertise-community {
                type empty;
                description
                  "Don't advertise Type 2 route's community";
              }
            }  // container remote-ip-host-routes
    
            leaf pmsi-tunnel-endpoint {
              junos:must "(!(".. pbb-evpn-core"))";
              junos:must-message "Not Supported for PBB EVPN";
              junos:must "(!(".. encapsulation vxlan"))";
              junos:must-message "Not Supported for EVPN-VXLAN encapsulation";
              junos:must "(!(".. .. .. provider-tunnel"))";
              junos:must-message "Not Applicable for P2MP Tunnels";
              junos:must "(!(".. .. .. instance-type evpn-vpws"))";
              junos:must-message "Not Applicable for instance-type EVPN-VPWS";
              type jt:ipv4addr;
              description
                "IM IR PMSI tunnel Endpoint for remote PE";
            }
    
            leaf label-allocation {
              type enumeration {
                enum "per-bridge-domain" {
                  value 0;
                  description
                    "Allocate one label for each bridge-domain";
                }
              }
              description
                "Label allocation policy";
            }
    
            leaf esi-resolution-per-bridge-domain {
              type empty;
              description
                "Enable ESI Resolution Per BD";
            }
    
            leaf riot-loopback {
              type empty;
              description
                "Track loopback irb interface state on RIOT platform";
            }
    
            container interconnect {
              junos:must "((".. .. .. switch-options vrf-target" || ".. .. .. switch-options vrf-export"))";
              junos:must-message "Switch-options vrf-target or vrf-export must be configured";
              junos:must "(".. .. .. switch-options route-distinguisher")";
              junos:must-message "Switch-options route-distinguisher must be configured";
              description "Interconnect";
              uses juniper-protocols-evpn-interconnect;
            }  // container interconnect
    
            leaf multicast-mode {
              junos:must "(".. encapsulation vxlan")";
              junos:must-message "multicast-mode can only be configured with encapsulation vxlan";
              junos:must "((((".. .. .. instance-type virtual-switch" || ".. .. .. instance-type mac-vrf") && !(".. .. .. switch-options route-distinguisher")) || ".. .. .. switch-options route-distinguisher"))";
              junos:must-message "multicast-mode can only be configured in a virtual switch instance";
              type enumeration {
                enum "ingress-replication" {
                  value 0;
                  description
                    "Ingress Replication";
                }
              }
              default "ingress-replication";
              description
                "Multicast mode for EVPN";
            }
    
            container vni-options {
              junos:must "((".. .. .. switch-options vrf-target" || ".. .. .. switch-options vrf-export"))";
              junos:must-message "Switch-options vrf-target or vrf-export must be configured";
              junos:must "(".. .. .. switch-options route-distinguisher")";
              junos:must-message "Switch-options route-distinguisher must be configured";
              junos:must "(".. extended-vni-list")";
              junos:must-message "Extended-vni-list must be configured";
              description "Vni options";
              uses juniper-protocols-vni-options;
            }  // container vni-options
          }  // container evpn
    
          container express-segments {
            description
              "Configuration for Express Segments";
            uses apply-advanced;
    
            list segment-template {
              key "name";
              max-elements 64;
              ordered-by user;
              description
                "Express Segments Template Definition";
              leaf name {
                type string {
                  junos:posix-pattern "^.{1,64}$";
                  junos:pattern-message "Must be a string of 64 characters or less";
                }
                description
                  "Express Segment Template Name";
              }
    
              uses apply-advanced;
    
              leaf-list admin-group {
                type string;
                max-elements 16;
                ordered-by user;
                description
                  "Administrative groups";
              }
    
              leaf-list admin-group-extended {
                type string;
                max-elements 16;
                ordered-by user;
                description
                  "Extended administrative groups";
              }
    
              leaf-list srlg {
                type string;
                max-elements 16;
                ordered-by user;
                description "SRLG Name";
              }
    
              container metric {
                description
                  "Metric values for Express Segment Template";
                uses apply-advanced;
    
                leaf te {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "1 .. 4294967295";
                    }
                  }
                  description "TE metric value";
                }
    
                leaf igp {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "1 .. 16777215";
                    }
                  }
                  description "IGP metric value";
                }
              }  // container metric
            }  // list segment-template
    
            list segment-set {
              key "name";
              max-elements 64;
              ordered-by user;
              description
                "Express Segments Set Definition";
              leaf name {
                type string {
                  junos:posix-pattern "^.{1,64}$";
                  junos:pattern-message "Must be a string of 64 characters or less";
                }
                description
                  "Express Segment Set Name";
              }
    
              uses apply-advanced;
    
              leaf-list membership-policy {
                type jt:policy-algebra;
                ordered-by user;
                description
                  "Policy for matching specific LSPs to this express segment";
              }
    
              container template {
                description
                  "Template for Express Segment Attribute Selection";
                uses apply-advanced;
    
                leaf template-name {
                  junos:must "("protocols express-segments segment-template  $$")";
                  junos:must-message "Referenced Express Segment template does not exist";
                  type string {
                    junos:posix-pattern "^.{1,64}$";
                    junos:pattern-message "Must be a string of 64 characters or less";
                  }
                  description
                    "Name of Express Segment template";
                }
              }  // container template
            }  // list segment-set
    
            container traffic-engineering {
              presence
                "enable traffic-engineering";
              description
                "Enable Import of all Express Segments into TED";
              uses apply-advanced;
            }  // container traffic-engineering
    
            container traceoptions {
              description
                "Trace options for Express Segment";
              uses apply-advanced;
    
              container file {
                description "Trace file options";
                leaf filename {
                  type string {
                    junos:posix-pattern "![/ %]";
                    junos:pattern-message "Must not contain '/', % or a space";
                    length "1 .. 1024";
                  }
                  description
                    "Name of file in which to write trace information";
                }
    
                leaf replace {
                  type empty;
                  status deprecated;
                  description
                    "Replace trace file rather than appending to it";
                }
    
                leaf size {
                  type string;
                  description
                    "Maximum trace file size";
                }
    
                leaf files {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "2 .. 1000";
                    }
                  }
                  default "10";
                  description
                    "Maximum number of trace files";
                }
    
                leaf no-stamp {
                  type empty;
                  status deprecated;
                  description
                    "Do not timestamp trace file";
                }
    
                choice world-readable-choice {
                  leaf world-readable {
                    type empty;
                    description
                      "Allow any user to read the log file";
                  }
                  leaf no-world-readable {
                    type empty;
                    description
                      "Don't allow any user to read the log file";
                  }
                }  // choice world-readable-choice
              }  // container file
    
              list flag {
                key "name";
                ordered-by user;
                description "Tracing parameters";
                leaf name {
                  type enumeration {
                    enum "all" {
                      value 0;
                      description
                        "Trace everything";
                    }
                    enum "error" {
                      value 1;
                      description "Trace errors";
                    }
                    enum "route" {
                      value 2;
                      description
                        "Trace route-related changes";
                    }
                    enum "state" {
                      value 3;
                      description
                        "Trace state transitions";
                    }
                  }
                }
    
                leaf send {
                  type empty;
                  description
                    "Trace transmitted packets";
                }
    
                leaf receive {
                  type empty;
                  description
                    "Trace received packets";
                }
    
                leaf detail {
                  type empty;
                  description
                    "Trace detailed information";
                }
    
                leaf disable {
                  type empty;
                  description
                    "Disable this trace flag";
                }
              }  // list flag
            }  // container traceoptions
          }  // container express-segments
    
          container igmp {
            presence "enable igmp";
            description "IGMP options";
            uses apply-advanced;
    
            container traceoptions {
              description
                "Trace options for IGMP";
              uses apply-advanced;
    
              container file {
                description "Trace file options";
                leaf filename {
                  type string {
                    junos:posix-pattern "![/ %]";
                    junos:pattern-message "Must not contain '/', % or a space";
                    length "1 .. 1024";
                  }
                  description
                    "Name of file in which to write trace information";
                }
    
                leaf replace {
                  type empty;
                  status deprecated;
                  description
                    "Replace trace file rather than appending to it";
                }
    
                leaf size {
                  type string;
                  description
                    "Maximum trace file size";
                }
    
                leaf files {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "2 .. 1000";
                    }
                  }
                  default "10";
                  description
                    "Maximum number of trace files";
                }
    
                leaf no-stamp {
                  type empty;
                  status deprecated;
                  description
                    "Do not timestamp trace file";
                }
    
                choice world-readable-choice {
                  leaf world-readable {
                    type empty;
                    description
                      "Allow any user to read the log file";
                  }
                  leaf no-world-readable {
                    type empty;
                    description
                      "Don't allow any user to read the log file";
                  }
                }  // choice world-readable-choice
              }  // container file
    
              list flag {
                key "name";
                ordered-by user;
                description "Tracing parameters";
                leaf name {
                  type enumeration {
                    enum "packets" {
                      value 0;
                      description
                        "Trace all IGMP packets";
                    }
                    enum "query" {
                      value 1;
                      description
                        "Trace IGMP membership query messages";
                    }
                    enum "report" {
                      value 2;
                      description
                        "Trace membership report messages";
                    }
                    enum "leave" {
                      value 3;
                      description
                        "Trace leave group messages (IGMPv2 only)";
                    }
                    enum "mtrace" {
                      value 4;
                      description
                        "Trace mtrace packets";
                    }
                    enum "group" {
                      value 5;
                      description
                        "Trace group operations";
                    }
                    enum "client-notification" {
                      value 6;
                      description
                        "Trace notifications";
                    }
                    enum "host-notification" {
                      value 7;
                      description
                        "Trace host notifications";
                    }
                    enum "route" {
                      value 8;
                      description
                        "Trace routing information";
                    }
                    enum "normal" {
                      value 9;
                      description
                        "Trace normal events";
                    }
                    enum "general" {
                      value 10;
                      description
                        "Trace general events";
                    }
                    enum "state" {
                      value 11;
                      description
                        "Trace state transitions";
                    }
                    enum "policy" {
                      value 12;
                      description
                        "Trace policy processing";
                    }
                    enum "task" {
                      value 13;
                      description
                        "Trace routing protocol task processing";
                    }
                    enum "timer" {
                      value 14;
                      description
                        "Trace routing protocol timer processing";
                    }
                    enum "all" {
                      value 15;
                      description
                        "Trace everything";
                    }
                  }
                }
    
                leaf send {
                  type empty;
                  description
                    "Trace transmitted packets";
                }
    
                leaf receive {
                  type empty;
                  description
                    "Trace received packets";
                }
    
                leaf detail {
                  type empty;
                  description
                    "Trace detailed information";
                }
    
                leaf disable {
                  type empty;
                  description
                    "Disable this trace flag";
                }
              }  // list flag
            }  // container traceoptions
    
            leaf query-interval {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "1 .. 1024";
                }
              }
              units "seconds";
              description
                "When to send host query messages";
            }
    
            leaf query-response-interval {
              type string {
                junos:posix-pattern "^[0-9]{1,4}(.[0-9])?$";
                junos:pattern-message "Up to 1 digit to right of decimal point";
              }
              units "seconds";
              description
                "How long to wait for a host query response";
            }
    
            leaf query-last-member-interval {
              type string {
                junos:posix-pattern "^[0-9]{1,4}(.[0-9])?$";
                junos:pattern-message "Up to 1 digit to right of decimal point";
              }
              units "seconds";
              description
                "When to send group query messages";
            }
    
            leaf robust-count {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "2 .. 10";
                }
              }
              description
                "Expected packet loss on a subnet";
            }
    
            leaf maximum-transmit-rate {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "1 .. 10000";
                }
              }
              description
                "Maximum transmission rate (packets per second)";
            }
    
            leaf accounting {
              type empty;
              description
                "Enable join and leave event notification";
            }
    
            list interface {
              key "name";
              ordered-by user;
              description
                "Interface options for IGMP";
              leaf name {
                type string;
              }
    
              uses apply-advanced;
    
              choice enable-disable {
                leaf disable {
                  type empty;
                  description
                    "Disable IGMP on this interface";
                }
              }  // choice enable-disable
    
              leaf version {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint8 {
                    range "1 .. 3";
                  }
                }
                description
                  "Set IGMP version number on this interface";
              }
    
              container static {
                description
                  "Static group or source membership";
                uses apply-advanced;
    
                list group {
                  key "name";
                  ordered-by user;
                  description
                    "IP multicast group address";
                  leaf name {
                    type jt:ipv4addr;
                    description
                      "IP multicast group address";
                  }
    
                  uses apply-advanced;
    
                  leaf group-increment {
                    type jt:ipv4addr;
                    description
                      "Mask for the incrementing group IP address";
                  }
    
                  leaf group-count {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint32 {
                        range "1 .. 512";
                      }
                    }
                    description
                      "Number of groups";
                  }
    
                  leaf exclude {
                    type empty;
                    description
                      "Exclude sources";
                  }
    
                  list source {
                    key "name";
                    ordered-by user;
                    description
                      "IP multicast source address";
                    leaf name {
                      type jt:ipv4addr;
                      description
                        "Source address of IP multicast data";
                    }
    
                    uses apply-advanced;
    
                    leaf source-increment {
                      type jt:ipv4addr;
                      description
                        "Mask for the incrementing source IP address";
                    }
    
                    leaf source-count {
                      type union {
                        type string {
                          pattern "<.*>|$.*";
                        }
                        type uint32 {
                          range "1 .. 1024";
                        }
                      }
                      description
                        "Number of sources";
                    }
                  }  // list source
                }  // list group
              }  // container static
    
              leaf ssm-map {
                type string;
                description
                  "Map for SSM translation of IGMPv1 or IGMPv2 messages";
              }
    
              leaf-list ssm-map-policy {
                type jt:policy-algebra;
                ordered-by user;
                description
                  "SSM map policy name";
              }
    
              leaf immediate-leave {
                type empty;
                description
                  "Group removed immediately, last membership query not sent";
              }
    
              leaf promiscuous-mode {
                type empty;
                description
                  "Accept igmp messages coming from different subnet";
              }
    
              choice accounting-choice {
                leaf accounting {
                  type empty;
                  description
                    "Enable join and leave event notification";
                }
                leaf no-accounting {
                  type empty;
                  description
                    "Don't enable join and leave event notification";
                }
              }  // choice accounting-choice
    
              leaf-list group-policy {
                type jt:policy-algebra;
                ordered-by user;
                description
                  "Group filter applied to incoming IGMP report messages";
              }
    
              leaf group-limit {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint16 {
                    range "1 .. 32767";
                  }
                }
                description
                  "Maximum number of (source,group) per interface";
              }
    
              leaf group-threshold {
                junos:must "(" .. group-limit")";
                junos:must-message "To configure group-threshold, group-limit must be set";
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "1 .. 100";
                  }
                }
                description
                  "Percentage of limit at which to generate warnings";
              }
    
              leaf log-interval {
                junos:must "(" .. group-limit")";
                junos:must-message "To configure log-interval, group-limit must be set";
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "6 .. 32767";
                  }
                }
                description
                  "Time between consecutive log messages";
              }
    
              container passive {
                presence "enable passive";
                description
                  "Suppress sending and receiving IGMP messages";
                leaf allow-receive {
                  type empty;
                  description
                    "Allow receiving IGMP messages";
                }
    
                leaf send-general-query {
                  type empty;
                  description
                    "Send IGMP general query messages";
                }
    
                leaf send-group-query {
                  type empty;
                  description
                    "Send IGMP group query messages";
                }
              }  // container passive
    
              leaf-list oif-map {
                type jt:policy-algebra;
                ordered-by user;
                description
                  "Output interface map";
              }
    
              leaf distributed {
                junos:must "("chassis network-services enhanced-ip")";
                junos:must-message "distributed is supported only in enhanced-ip mode";
                type empty;
                description
                  "Distributed IGMP interface";
              }
            }  // list interface
    
            container amt {
              description
                "Automatic Multicast Tunnel options for IGMP";
              uses apply-advanced;
    
              container relay {
                description
                  "AMT relay options for IGMP";
                uses apply-advanced;
    
                container defaults {
                  presence "enable defaults";
                  description
                    "Default AMT relay options for IGMP";
                  uses apply-advanced;
    
                  leaf version {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint8 {
                        range "1 .. 3";
                      }
                    }
                    description
                      "Set IGMP version number on AMT interfaces";
                  }
    
                  leaf ssm-map {
                    type string;
                    description
                      "Map for SSM translation of IGMPv1 or IGMPv2 messages";
                  }
    
                  leaf-list ssm-map-policy {
                    type jt:policy-algebra;
                    ordered-by user;
                    description
                      "SSM map policy name";
                  }
    
                  choice accounting-choice {
                    leaf accounting {
                      type empty;
                      description
                        "Enable join and leave event notification";
                    }
                    leaf no-accounting {
                      type empty;
                      description
                        "Don't enable join and leave event notification";
                    }
                  }  // choice accounting-choice
    
                  leaf-list group-policy {
                    type jt:policy-algebra;
                    ordered-by user;
                    description
                      "Group filter applied to incoming IGMP report messages";
                  }
    
                  leaf group-limit {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint16 {
                        range "1 .. 32767";
                      }
                    }
                    description
                      "Maximum number of (source,group) per interface";
                  }
    
                  leaf group-threshold {
                    junos:must "(" .. group-limit")";
                    junos:must-message "To configure group-threshold, group-limit must be set";
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint32 {
                        range "1 .. 100";
                      }
                    }
                    description
                      "Percentage of limit at which to generate warnings";
                  }
    
                  leaf log-interval {
                    junos:must "(" .. group-limit")";
                    junos:must-message "To configure log-interval, group-limit must be set";
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint32 {
                        range "6 .. 32767";
                      }
                    }
                    description
                      "Time between consecutive log messages";
                  }
    
                  leaf robust-count {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint32 {
                        range "2 .. 10";
                      }
                    }
                    description
                      "Expected packet loss on a subnet";
                  }
    
                  leaf query-interval {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint32 {
                        range "1 .. 1024";
                      }
                    }
                    units "seconds";
                    description
                      "When to send host query messages";
                  }
    
                  leaf query-response-interval {
                    type string {
                      junos:posix-pattern "^[0-9]{1,4}(.[0-9])?$";
                      junos:pattern-message "Up to 1 digit to right of decimal point";
                    }
                    units "seconds";
                    description
                      "How long to wait for a host query response";
                  }
                }  // container defaults
              }  // container relay
            }  // container amt
          }  // container igmp
    
          container router-discovery {
            description
              "ICMP router discovery options";
            uses juniper-protocols-router-discovery;
          }  // container router-discovery
    
          container isis {
            description "IS-IS options";
            uses juniper-protocols-isis;
          }  // container isis
    
          list isis-instance {
            key "name";
            ordered-by user;
            description
              "Multi-instance IS-IS configuration";
            leaf name {
              type string;
              description "IS-IS instance name";
            }
    
            uses apply-advanced;
    
            list interface {
              key "name";
              description
                "Interface configuration";
              leaf name {
                type union {
                  type jt:interface-name;
                  type string {
                    pattern "<.*>|$.*";
                  }
                }
                description "Interface name";
              }
    
              uses apply-advanced;
    
              container ldp-synchronization {
                presence
                  "enable ldp-synchronization";
                description
                  "Advertise maximum metric until LDP is operational";
                uses ldp-sync-obj;
              }  // container ldp-synchronization
    
              list level {
                key "name";
                ordered-by user;
                description
                  "Configure levels on this interface";
                leaf name {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "1 .. 2";
                    }
                  }
                  description
                    "IS-IS level number";
                }
    
                uses apply-advanced;
    
                leaf te-metric {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "0 .. 16777215";
                    }
                  }
                  description
                    "Traffic engineering metric";
                }
    
                leaf no-advertise-adjacency-segment {
                  type empty;
                  description
                    "Do not advertise an adjacency segment for this level";
                }
    
                container ipv4-adjacency-segment {
                  junos:must "(!(".. no-advertise-adjacency-segment"))";
                  junos:must-message "ipv4-adjacency-segment can't be configured if no-advertise-adjacency-segment is configured in the level";
                  junos:must "(!(".. .. no-advertise-adjacency-segment"))";
                  junos:must-message "ipv4-adjacency-segment can't be configured if no-advertise-adjacency-segment is configured in the same interface";
                  description
                    "Configure ipv4 adjacency segment";
                  uses apply-advanced;
    
                  container protected {
                    description
                      "Adjacency SID is eligible for protection";
                    choice adjsid-type {
                      container index {
                        description
                          "Adjacency SID indexed from SRGB";
                        leaf index-number {
                          type union {
                            type string {
                              pattern "<.*>|$.*";
                            }
                            type uint32 {
                              range
                                "0 .. 199999";
                            }
                          }
                        }
                      }  // container index
                      leaf label {
                        type union {
                          type string {
                            pattern "<.*>|$.*";
                          }
                          type uint32 {
                            range
                              "16 .. 1048575";
                          }
                        }
                        description
                          "Adjacency SID from static label pool";
                      }
                      leaf dynamic {
                        type empty;
                        description
                          "Dynamically allocate an adjacency segment";
                      }
                    }  // choice adjsid-type
                  }  // container protected
    
                  container unprotected {
                    description
                      "Adjacency SID uneligible for protection";
                    choice adjsid-type {
                      container index {
                        description
                          "Adjacency SID indexed from SRGB";
                        leaf index-number {
                          type union {
                            type string {
                              pattern "<.*>|$.*";
                            }
                            type uint32 {
                              range
                                "0 .. 199999";
                            }
                          }
                        }
                      }  // container index
                      leaf label {
                        type union {
                          type string {
                            pattern "<.*>|$.*";
                          }
                          type uint32 {
                            range
                              "16 .. 1048575";
                          }
                        }
                        description
                          "Adjacency SID from static label pool";
                      }
                      leaf dynamic {
                        type empty;
                        description
                          "Dynamically allocate an adjacency segment";
                      }
                    }  // choice adjsid-type
                  }  // container unprotected
                }  // container ipv4-adjacency-segment
    
                container ipv6-adjacency-segment {
                  junos:must "(!(".. no-advertise-adjacency-segment"))";
                  junos:must-message "ipv6-adjacency-segment can't be configured if no-advertise-adjacency-segment is configured in the same level";
                  junos:must "(!(".. .. no-advertise-adjacency-segment"))";
                  junos:must-message "ipv6-adjacency-segment can't be configured if no-advertise-adjacency-segment is configured in the same interface";
                  description
                    "Configure ipv6 adjacency segment";
                  uses apply-advanced;
    
                  container protected {
                    description
                      "Adjacency SID is eligible for protection";
                    choice adjsid-type {
                      container index {
                        description
                          "Adjacency SID indexed from SRGB";
                        leaf index-number {
                          type union {
                            type string {
                              pattern "<.*>|$.*";
                            }
                            type uint32 {
                              range
                                "0 .. 199999";
                            }
                          }
                        }
                      }  // container index
                      leaf label {
                        type union {
                          type string {
                            pattern "<.*>|$.*";
                          }
                          type uint32 {
                            range
                              "16 .. 1048575";
                          }
                        }
                        description
                          "Adjacency SID from static label pool";
                      }
                      leaf dynamic {
                        type empty;
                        description
                          "Dynamically allocate an adjacency segment";
                      }
                    }  // choice adjsid-type
                  }  // container protected
    
                  container unprotected {
                    description
                      "Adjacency SID uneligible for protection";
                    choice adjsid-type {
                      container index {
                        description
                          "Adjacency SID indexed from SRGB";
                        leaf index-number {
                          type union {
                            type string {
                              pattern "<.*>|$.*";
                            }
                            type uint32 {
                              range
                                "0 .. 199999";
                            }
                          }
                        }
                      }  // container index
                      leaf label {
                        type union {
                          type string {
                            pattern "<.*>|$.*";
                          }
                          type uint32 {
                            range
                              "16 .. 1048575";
                          }
                        }
                        description
                          "Adjacency SID from static label pool";
                      }
                      leaf dynamic {
                        type empty;
                        description
                          "Dynamically allocate an adjacency segment";
                      }
                    }  // choice adjsid-type
                  }  // container unprotected
                }  // container ipv6-adjacency-segment
    
                container srm6-adjacency-segment {
                  description
                    "Configure srm6 adjacency segment";
                  uses apply-advanced;
    
                  container unprotected {
                    description
                      "Adjacency SID uneligible for protection";
                    leaf sid {
                      type union {
                        type string {
                          pattern "<.*>|$.*";
                        }
                        type uint32 {
                          range "1 .. 65535";
                        }
                      }
                      description
                        "Set Adjacency SID Value";
                    }
                  }  // container unprotected
                }  // container srm6-adjacency-segment
    
                container srv6-adjacency-segment {
                  description
                    "Configure srv6 adjacency segment";
                  uses apply-advanced;
    
                  container protected {
                    presence "enable protected";
                    description
                      "SRv6 Adjacency segment is eligible for protection";
                    uses apply-advanced;
    
                    list locator {
                      key "name";
                      ordered-by user;
                      description
                        "Locator to bind SRv6 adjacency segment";
                      leaf name {
                        junos:must "("routing-options source-packet-routing srv6 locator $$")";
                        junos:must-message "Referenced source-packet-routing srv6 must be defined";
                        type string;
                        description
                          "Locator name";
                      }
    
                      uses apply-advanced;
    
                      list end-x-sid {
                        key "name";
                        ordered-by user;
                        description
                          "Endpoint 128 bit address";
                        leaf name {
                          type jt:ipv6addr;
                        }
    
                        uses apply-advanced;
    
                        container flavor {
                          presence
                            "enable flavor";
                          uses apply-advanced;
    
                          leaf psp {
                            type empty;
                            description
                              "Penultimate segment pop of the SRH";
                          }
    
                          leaf usp {
                            type empty;
                            description
                              "Ultimate segment pop of the SRH";
                          }
    
                          leaf usd {
                            type empty;
                            description
                              "Ultimate segment decapsulation";
                          }
                        }  // container flavor
                      }  // list end-x-sid
                    }  // list locator
                  }  // container protected
    
                  container unprotected {
                    presence
                      "enable unprotected";
                    description
                      "SRv6 Adjacency segment is uneligible for protection";
                    uses apply-advanced;
    
                    list locator {
                      key "name";
                      ordered-by user;
                      description
                        "Locator to bind SRv6 adjacency segment";
                      leaf name {
                        junos:must "("routing-options source-packet-routing srv6 locator $$")";
                        junos:must-message "Referenced source-packet-routing srv6 must be defined";
                        type string;
                        description
                          "Locator name";
                      }
    
                      uses apply-advanced;
    
                      list end-x-sid {
                        key "name";
                        ordered-by user;
                        description
                          "Endpoint 128 bit address";
                        leaf name {
                          type jt:ipv6addr;
                        }
    
                        uses apply-advanced;
    
                        container flavor {
                          presence
                            "enable flavor";
                          uses apply-advanced;
    
                          leaf psp {
                            type empty;
                            description
                              "Penultimate segment pop of the SRH";
                          }
    
                          leaf usp {
                            type empty;
                            description
                              "Ultimate segment pop of the SRH";
                          }
    
                          leaf usd {
                            type empty;
                            description
                              "Ultimate segment decapsulation";
                          }
                        }  // container flavor
                      }  // list end-x-sid
                    }  // list locator
                  }  // container unprotected
                }  // container srv6-adjacency-segment
    
                list lan-neighbor {
                  junos:must "(!(".. ipv6-adjacency-segment"))";
                  junos:must-message "lan-neighbor can't be configured if ipv6-adjacency-segment is configured in the same interface";
                  junos:must "(!(".. ipv4-adjacency-segment"))";
                  junos:must-message "lan-neighbor can't be configured if ipv4-adjacency-segment is configured in the same interface";
                  junos:must "(!(".. no-advertise-adjacency-segment"))";
                  junos:must-message "lan-neighbor can't be configured if no-advertise-adjacency-segment is configured in the same level";
                  junos:must "(!(".. .. no-advertise-adjacency-segment"))";
                  junos:must-message "lan-neighbor can't be configured if  no-advertise-adjacency-segment is configured in the same interface";
                  junos:must "(!(".. .. point-to-point"))";
                  junos:must-message "lan-neighbor can't be configured for point-to-point interfaces";
                  key "name";
                  ordered-by user;
                  description
                    "Configuration specific to a LAN neighbor";
                  leaf name {
                    type jt:sysid;
                    description
                      "Neighbor's sysid";
                  }
    
                  uses apply-advanced;
    
                  container ipv4-adjacency-segment {
                    junos:must "(!(".. no-advertise-adjacency-segment"))";
                    junos:must-message "ipv4-adjacency-segment can't be configured if no-advertise-adjacency-segment is configured in the level";
                    junos:must "(!(".. .. no-advertise-adjacency-segment"))";
                    junos:must-message "ipv4-adjacency-segment can't be configured if no-advertise-adjacency-segment is configured in the same interface";
                    description
                      "Configure ipv4 adjacency segment";
                    uses apply-advanced;
    
                    container protected {
                      description
                        "Adjacency SID is eligible for protection";
                      choice adjsid-type {
                        container index {
                          description
                            "Adjacency SID indexed from SRGB";
                          leaf index-number {
                            type union {
                              type string {
                                pattern
                                  "<.*>|$.*";
                              }
                              type uint32 {
                                range
                                  "0 .. 199999";
                              }
                            }
                          }
                        }  // container index
                        leaf label {
                          type union {
                            type string {
                              pattern "<.*>|$.*";
                            }
                            type uint32 {
                              range
                                "16 .. 1048575";
                            }
                          }
                          description
                            "Adjacency SID from static label pool";
                        }
                        leaf dynamic {
                          type empty;
                          description
                            "Dynamically allocate an adjacency segment";
                        }
                      }  // choice adjsid-type
                    }  // container protected
    
                    container unprotected {
                      description
                        "Adjacency SID uneligible for protection";
                      choice adjsid-type {
                        container index {
                          description
                            "Adjacency SID indexed from SRGB";
                          leaf index-number {
                            type union {
                              type string {
                                pattern
                                  "<.*>|$.*";
                              }
                              type uint32 {
                                range
                                  "0 .. 199999";
                              }
                            }
                          }
                        }  // container index
                        leaf label {
                          type union {
                            type string {
                              pattern "<.*>|$.*";
                            }
                            type uint32 {
                              range
                                "16 .. 1048575";
                            }
                          }
                          description
                            "Adjacency SID from static label pool";
                        }
                        leaf dynamic {
                          type empty;
                          description
                            "Dynamically allocate an adjacency segment";
                        }
                      }  // choice adjsid-type
                    }  // container unprotected
                  }  // container ipv4-adjacency-segment
    
                  container ipv6-adjacency-segment {
                    junos:must "(!(".. no-advertise-adjacency-segment"))";
                    junos:must-message "ipv6-adjacency-segment can't be configured if no-advertise-adjacency-segment is configured in the same level";
                    junos:must "(!(".. .. no-advertise-adjacency-segment"))";
                    junos:must-message "ipv6-adjacency-segment can't be configured if no-advertise-adjacency-segment is configured in the same interface";
                    description
                      "Configure ipv6 adjacency segment";
                    uses apply-advanced;
    
                    container protected {
                      description
                        "Adjacency SID is eligible for protection";
                      choice adjsid-type {
                        container index {
                          description
                            "Adjacency SID indexed from SRGB";
                          leaf index-number {
                            type union {
                              type string {
                                pattern
                                  "<.*>|$.*";
                              }
                              type uint32 {
                                range
                                  "0 .. 199999";
                              }
                            }
                          }
                        }  // container index
                        leaf label {
                          type union {
                            type string {
                              pattern "<.*>|$.*";
                            }
                            type uint32 {
                              range
                                "16 .. 1048575";
                            }
                          }
                          description
                            "Adjacency SID from static label pool";
                        }
                        leaf dynamic {
                          type empty;
                          description
                            "Dynamically allocate an adjacency segment";
                        }
                      }  // choice adjsid-type
                    }  // container protected
    
                    container unprotected {
                      description
                        "Adjacency SID uneligible for protection";
                      choice adjsid-type {
                        container index {
                          description
                            "Adjacency SID indexed from SRGB";
                          leaf index-number {
                            type union {
                              type string {
                                pattern
                                  "<.*>|$.*";
                              }
                              type uint32 {
                                range
                                  "0 .. 199999";
                              }
                            }
                          }
                        }  // container index
                        leaf label {
                          type union {
                            type string {
                              pattern "<.*>|$.*";
                            }
                            type uint32 {
                              range
                                "16 .. 1048575";
                            }
                          }
                          description
                            "Adjacency SID from static label pool";
                        }
                        leaf dynamic {
                          type empty;
                          description
                            "Dynamically allocate an adjacency segment";
                        }
                      }  // choice adjsid-type
                    }  // container unprotected
                  }  // container ipv6-adjacency-segment
    
                  container srm6-adjacency-segment {
                    description
                      "Configure srm6 adjacency segment";
                    uses apply-advanced;
    
                    container unprotected {
                      description
                        "Adjacency SID uneligible for protection";
                      leaf sid {
                        type union {
                          type string {
                            pattern "<.*>|$.*";
                          }
                          type uint32 {
                            range "1 .. 65535";
                          }
                        }
                        description
                          "Set Adjacency SID Value";
                      }
                    }  // container unprotected
                  }  // container srm6-adjacency-segment
    
                  container srv6-adjacency-segment {
                    description
                      "Configure srv6 adjacency segment";
                    uses apply-advanced;
    
                    container protected {
                      presence
                        "enable protected";
                      description
                        "SRv6 Adjacency segment is eligible for protection";
                      uses apply-advanced;
    
                      list locator {
                        key "name";
                        ordered-by user;
                        description
                          "Locator to bind SRv6 adjacency segment";
                        leaf name {
                          junos:must "("routing-options source-packet-routing srv6 locator $$")";
                          junos:must-message "Referenced source-packet-routing srv6 must be defined";
                          type string;
                          description
                            "Locator name";
                        }
    
                        uses apply-advanced;
    
                        list end-x-sid {
                          key "name";
                          ordered-by user;
                          description
                            "Endpoint 128 bit address";
                          leaf name {
                            type jt:ipv6addr;
                          }
    
                          uses apply-advanced;
    
                          container flavor {
                            presence
                              "enable flavor";
                            uses apply-advanced;
    
                            leaf psp {
                              type empty;
                              description
                                "Penultimate segment pop of the SRH";
                            }
    
                            leaf usp {
                              type empty;
                              description
                                "Ultimate segment pop of the SRH";
                            }
    
                            leaf usd {
                              type empty;
                              description
                                "Ultimate segment decapsulation";
                            }
                          }  // container flavor
                        }  // list end-x-sid
                      }  // list locator
                    }  // container protected
    
                    container unprotected {
                      presence
                        "enable unprotected";
                      description
                        "SRv6 Adjacency segment is uneligible for protection";
                      uses apply-advanced;
    
                      list locator {
                        key "name";
                        ordered-by user;
                        description
                          "Locator to bind SRv6 adjacency segment";
                        leaf name {
                          junos:must "("routing-options source-packet-routing srv6 locator $$")";
                          junos:must-message "Referenced source-packet-routing srv6 must be defined";
                          type string;
                          description
                            "Locator name";
                        }
    
                        uses apply-advanced;
    
                        list end-x-sid {
                          key "name";
                          ordered-by user;
                          description
                            "Endpoint 128 bit address";
                          leaf name {
                            type jt:ipv6addr;
                          }
    
                          uses apply-advanced;
    
                          container flavor {
                            presence
                              "enable flavor";
                            uses apply-advanced;
    
                            leaf psp {
                              type empty;
                              description
                                "Penultimate segment pop of the SRH";
                            }
    
                            leaf usp {
                              type empty;
                              description
                                "Ultimate segment pop of the SRH";
                            }
    
                            leaf usd {
                              type empty;
                              description
                                "Ultimate segment decapsulation";
                            }
                          }  // container flavor
                        }  // list end-x-sid
                      }  // list locator
                    }  // container unprotected
                  }  // container srv6-adjacency-segment
                }  // list lan-neighbor
    
                container post-convergence-lfa {
                  junos:must "(".. .. .. backup-spf-options use-post-convergence-lfa")";
                  junos:must-message "Not allowed without 'protocols isis backup-spf-options use-post-convergence-lfa'";
                  presence
                    "enable post-convergence-lfa";
                  description
                    "Configure backup along post convergence on this interface";
                  uses apply-advanced;
    
                  container node-protection {
                    presence
                      "enable node-protection";
                    description
                      "Enable node protection";
                    uses apply-advanced;
    
                    leaf cost {
                      type union {
                        type string {
                          pattern "<.*>|$.*";
                        }
                        type uint32 {
                          range "0 .. 16777215";
                        }
                      }
                      description
                        "Cost for node protection";
                    }
                  }  // container node-protection
    
                  leaf srlg-protection {
                    type empty;
                    description
                      "Enable srlg protection";
                  }
    
                  leaf fate-sharing-protection {
                    type empty;
                    description
                      "Enable fate-sharing protection";
                  }
                }  // container post-convergence-lfa
    
                container application-specific {
                  description
                    "Advertise application-specific TE attributes";
                  uses apply-advanced;
    
                  list attribute-group {
                    key "name";
                    max-elements 1;
                    ordered-by user;
                    description
                      "Link attribute group name";
                    leaf name {
                      type string;
                      description
                        "Link attribute group name";
                    }
    
                    uses apply-advanced;
    
                    leaf te-metric {
                      junos:must "(".. application")";
                      junos:must-message "Atleast one application is must";
                      type union {
                        type string {
                          pattern "<.*>|$.*";
                        }
                        type uint32 {
                          range "0 .. 16777215";
                        }
                      }
                      description
                        "Traffic engineering metric for this attribute group";
                    }
    
                    leaf-list admin-group {
                      type string;
                      max-elements 16;
                      ordered-by user;
                      description
                        "Administrative groups for this attribute-group";
                    }
    
                    container application {
                      junos:must "((".. delay-metric" || (".. admin-group" || (".. te-metric" || (".. admin-groups" || (".. legacy" || ".. advertise-delay-metric"))))))";
                      junos:must-message "Atleast one attribute must be configured";
                      description
                        "Standard Applications part of this attribute-group";
                      uses apply-advanced;
    
                      leaf flex-algorithm {
                        type empty;
                        description
                          "Set X flag in standard application bit mask";
                      }
                    }  // container application
                  }  // list attribute-group
                }  // container application-specific
    
                choice enable-disable {
                  leaf disable {
                    type empty;
                    description
                      "Disable IS-IS for this level";
                  }
                }  // choice enable-disable
    
                leaf metric {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "0 .. 16777215";
                    }
                  }
                  description
                    "Metric for this level";
                }
    
                leaf ipv4-multicast-metric {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "0 .. 16777215";
                    }
                  }
                  description
                    "IPv4 multicast metric for this level";
                }
    
                leaf ipv6-unicast-metric {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "0 .. 16777215";
                    }
                  }
                  description
                    "IPv6 unicast metric for this level";
                }
    
                leaf ipv6-multicast-metric {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "0 .. 16777215";
                    }
                  }
                  description
                    "IPv6 multicast metric for this level";
                }
    
                list topology {
                  key "name";
                  ordered-by user;
                  description
                    "Topology specific attributes";
                  leaf name {
                    type enumeration {
                      enum "default" {
                        value 0;
                        description
                          "Default topology";
                      }
                      enum "ipv4-multicast" {
                        value 1;
                        description
                          "IPv4 multicast topology";
                      }
                      enum "ipv6-unicast" {
                        value 2;
                        description
                          "IPv6 unicast topology";
                      }
                      enum "ipv6-multicast" {
                        value 3;
                        description
                          "IPv6 multicast topology";
                      }
                    }
                    description "Topology name";
                  }
    
                  uses apply-advanced;
    
                  leaf metric {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint32 {
                        range "0 .. 16777215";
                      }
                    }
                    description
                      "Topology metric";
                  }
    
                  container bandwidth-based-metrics {
                    junos:must "(".. metric")";
                    junos:must-message "Metric must be configured";
                    description
                      "Configure bandwidth based metrics";
                    uses apply-advanced;
    
                    list bandwidth {
                      key "name";
                      description
                        "Bandwidth threshold";
                      leaf name {
                        type string;
                      }
    
                      leaf metric {
                        type union {
                          type string {
                            pattern "<.*>|$.*";
                          }
                          type uint32 {
                            range
                              "0 .. 16777215";
                          }
                        }
                        description
                          "Metric associated with specified bandwidth";
                      }
                    }  // list bandwidth
                  }  // container bandwidth-based-metrics
                }  // list topology
    
                leaf authentication-key {
                  type jt:unreadable;
                  status deprecated;
                  description
                    "Authentication key (password)";
                }
    
                leaf authentication-type {
                  type enumeration {
                    enum "md5" {
                      value 0;
                      status deprecated;
                      description
                        "MD5 authentication";
                    }
                    enum "simple" {
                      value 1;
                      status deprecated;
                      description
                        "Simple password authentication";
                    }
                  }
                  status deprecated;
                  description
                    "Authentication type";
                }
    
                leaf hello-authentication-key {
                  type jt:unreadable;
                  description
                    "Authentication key (password) for hello packets";
                }
    
                leaf hello-authentication-type {
                  type enumeration {
                    enum "md5" {
                      value 0;
                      description
                        "MD5 authentication";
                    }
                    enum "simple" {
                      value 1;
                      description
                        "Simple password authentication";
                    }
                  }
                  description
                    "Authentication type for hello packets";
                }
    
                leaf hello-authentication-key-chain {
                  junos:must "(!(".. hello-authentication-type"))";
                  junos:must-message "May not be configured with hello-authentication-type";
                  junos:must "(!(".. hello-authentication-key"))";
                  junos:must-message "May not be configured with hello-authentication-key";
                  junos:must "(!(".. authentication-key"))";
                  junos:must-message "May not be configured with authentication-key";
                  junos:must "("security authentication-key-chains key-chain $$")";
                  junos:must-message "Referenced key-chain must be defined";
                  type string {
                    junos:posix-pattern "[A-za-z]$";
                    junos:pattern-message "Keychain name must not end with number.";
                    length "1 .. 128";
                  }
                  description "Key chain name";
                }
    
                leaf hello-interval {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "1 .. 21845";
                    }
                  }
                  units "seconds";
                  description
                    "Interval between hello packet transmissions";
                }
    
                leaf hold-time {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "1 .. 65535";
                    }
                  }
                  units "seconds";
                  description
                    "Time after which neighbors think the interface is down";
                }
    
                leaf priority {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "0 .. 127";
                    }
                  }
                  description
                    "Designated router election priority";
                }
    
                container flood-reflector {
                  junos:must "(".. .. level 1 disable")";
                  junos:must-message "flood-reflector cannot be enabled on level 1 interface";
                  junos:must "(("protocols isis level 2 flood-reflector" && !(".. .. level 1 flood-reflector")))";
                  junos:must-message "flood-reflector is only supported on level 2 interfaces";
                  presence
                    "enable flood-reflector";
                  description
                    "Configure interface as flood-reflector";
                  uses apply-advanced;
    
                  leaf cluster-id {
                    junos:must "("protocols isis level 2 flood-reflector client")";
                    junos:must-message "flood-reflector client is not configured at isis level";
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint32 {
                        range "1 .. 4294967295";
                      }
                    }
                    description "Cluster-ID";
                  }
                }  // container flood-reflector
    
                container passive {
                  presence "enable passive";
                  description
                    "Do not run IS-IS at this level, but advertise it";
                  uses apply-advanced;
    
                  leaf remote-node-iso {
                    junos:must "(".. remote-node-id")";
                    junos:must-message "remote-node-id must be configured";
                    type jt:sysid;
                    description
                      "ISO System-ID of the remote node";
                  }
    
                  leaf remote-node-id {
                    junos:must "(".. remote-node-iso")";
                    junos:must-message "remote-node-iso must be configured";
                    type jt:ipv4addr;
                    description
                      "Remote address of the link";
                  }
                }  // container passive
              }  // list level
    
              leaf delay-metric {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "0 .. 16777215";
                  }
                }
                units "microseconds";
                description "Delay metric";
              }
    
              container delay-measurement {
                presence
                  "enable delay-measurement";
                description
                  "Enable delay measurement";
                uses apply-advanced;
    
                leaf probe-interval {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "1 .. 255";
                    }
                  }
                  units "seconds";
                  description "Probe interval";
                }
    
                leaf probe-count {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "1 .. 15";
                    }
                  }
                  units "seconds";
                  description "Probe count";
                }
    
                container advertisement {
                  description
                    "Delay advertisement";
                  uses apply-advanced;
    
                  container periodic {
                    description
                      "Periodic advertisement parameters";
                    uses apply-advanced;
    
                    leaf threshold {
                      type union {
                        type string {
                          pattern "<.*>|$.*";
                        }
                        type uint32 {
                          range "0 .. 100";
                        }
                      }
                      units "percentage";
                      description "Threshold";
                    }
    
                    leaf interval {
                      type union {
                        type string {
                          pattern "<.*>|$.*";
                        }
                        type uint32 {
                          range "30 .. 3600";
                        }
                      }
                      units "seconds";
                      description "Interval";
                    }
                  }  // container periodic
    
                  container accelerated {
                    presence
                      "enable accelerated";
                    description
                      "Accelerated advertisement parameters";
                    uses apply-advanced;
    
                    leaf threshold {
                      type union {
                        type string {
                          pattern "<.*>|$.*";
                        }
                        type uint32 {
                          range "0 .. 100";
                        }
                      }
                      units "percentage";
                      description "Threshold";
                    }
                  }  // container accelerated
                }  // container advertisement
              }  // container delay-measurement
    
              leaf no-advertise-adjacency-segment {
                type empty;
                description
                  "Do not advertise an adjacency segment for this interface";
              }
    
              container auto-bandwidth {
                description
                  "Auto bandwidth configuration";
                uses apply-advanced;
    
                leaf template-name {
                  junos:must "("protocols isis source-packet-routing traffic-statistics statistics-granularity per-interface")";
                  junos:must-message "Config protocols isis source-packet-routing traffic-statistics statistics-granularity per-interface is must";
                  junos:must "("routing-options auto-bandwidth template $$")";
                  junos:must-message "Referenced auto-bandwidth template must be defined";
                  type string;
                  description
                    "Auto bandwidth template name";
                }
    
                choice enable-disable {
                  leaf disable {
                    type empty;
                    description
                      "Disable Auto bandwidth on this interface";
                  }
                }  // choice enable-disable
              }  // container auto-bandwidth
    
              choice protection-type {
                leaf link-protection {
                  type empty;
                  description
                    "Protect interface from link faults only";
                }
                leaf node-link-protection {
                  type empty;
                  description
                    "Protect interface from both link and node faults";
                }
              }  // choice protection-type
    
              leaf no-eligible-backup {
                type empty;
                description
                  "Not eligible for backup traffic from protected interfaces";
              }
    
              leaf no-eligible-remote-backup {
                type empty;
                description
                  "Not eligible for Remote-LFA backup traffic from protected interfaces";
              }
    
              container link-degradation-threshold {
                presence
                  "enable link-degradation-threshold";
                description
                  "Link up and down thresholds (in %) for proactive link protection";
                leaf link-down {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "0 .. 100";
                    }
                  }
                  description
                    "Signal degradation threshold above which link marked down";
                }
    
                leaf link-up {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "0 .. 100";
                    }
                  }
                  description
                    "Signal degradation threshold below which link is marked up.";
                }
              }  // container link-degradation-threshold
    
              choice enable-disable {
                leaf disable {
                  type empty;
                  description
                    "Disable IS-IS on this interface";
                }
              }  // choice enable-disable
    
              leaf authentication-key {
                type jt:unreadable;
                status deprecated;
                description
                  "Authentication key (password)";
              }
    
              leaf authentication-type {
                type enumeration {
                  enum "md5" {
                    value 0;
                    status deprecated;
                    description
                      "MD5 authentication";
                  }
                  enum "simple" {
                    value 1;
                    status deprecated;
                    description
                      "Simple password authentication";
                  }
                }
                status deprecated;
                description
                  "Authentication type";
              }
    
              leaf flood-group {
                type string {
                  junos:posix-pattern "^[[:xdigit:]]{2}.(([[:xdigit:]]){2}){1,2}((.(([[:xdigit:]]){2}){1,2}){0,1}){0,5}$";
                  junos:pattern-message "At max 26 hexa decimal digits, standard ISO area ID format";
                }
                description
                  "ISO Area that this interface should send LSPs to";
              }
    
              leaf hello-authentication-key {
                type jt:unreadable;
                status deprecated;
                description
                  "Authentication key (password) for hello packets";
              }
    
              leaf hello-authentication-type {
                type enumeration {
                  enum "md5" {
                    value 0;
                    status deprecated;
                    description
                      "MD5 authentication";
                  }
                  enum "simple" {
                    value 1;
                    status deprecated;
                    description
                      "Simple password authentication";
                  }
                }
                status deprecated;
                description
                  "Authentication type for hello packets";
              }
    
              leaf hello-padding-type {
                type enumeration {
                  enum "strict" {
                    value 0;
                    description
                      "Padding for all adjacency states";
                  }
                  enum "adaptive" {
                    value 1;
                    description
                      "Padding until state of neighbor adjacency is 'up'";
                  }
                  enum "loose" {
                    value 2;
                    description
                      "Padding until state of adjacency is 'initializing'";
                  }
                  enum "disable" {
                    value 3;
                    description
                      "Do not add any padding for hello packets";
                  }
                }
                default "loose";
                description
                  "Type of padding for hello packets";
              }
    
              leaf interface-group-holddown-delay {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "0 .. 60";
                  }
                }
                units "seconds";
                description
                  "Time to wait before including in BBM calculation";
              }
    
              choice layer2-map-choice {
                leaf layer2-map {
                  type empty;
                  description
                    "Kernel ARP/ND creation for nexthops";
                }
                leaf no-layer2-map {
                  type empty;
                  description
                    "Don't kernel ARP/ND creation for nexthops";
                }
              }  // choice layer2-map-choice
    
              leaf max-hello-size {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "512 .. 16000";
                  }
                }
                description
                  "Maximum size allowed for ISIS Hello PDUs";
              }
    
              leaf lsp-interval {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "1 .. 1000";
                  }
                }
                units "milliseconds";
                default "100";
                description
                  "Interval between LSP transmissions";
              }
    
              container csnp-interval {
                description
                  "Rate of CSN packets (for LAN interfaces only)";
                choice csnp_interval_option {
                  leaf csnp-interval-number {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint32 {
                        range "1 .. 65535";
                      }
                    }
                    units "seconds";
                    description
                      "Interval between CSN packets";
                  }
                  leaf disable {
                    type empty;
                    description
                      "Do not send CSN packets on this interface";
                  }
                }  // choice csnp_interval_option
              }  // container csnp-interval
    
              container strict-dual-isis {
                junos:must "(!(".. .. topologies"))";
                junos:must-message "strict-dual-isis is not allowed with multi-topologies";
                presence
                  "enable strict-dual-isis";
                description
                  "Ensure both ipv4 and ipv6 connectivity for adjacencies on this interface";
                uses apply-advanced;
    
                leaf holdown {
                  type union {
                    type uint32;
                    type string {
                      pattern "<.*>|$.*";
                    }
                  }
                  default "12";
                  description
                    "Set the holddown timer for strict spf computation";
                }
              }  // container strict-dual-isis
    
              container mesh-group {
                description
                  "Add the interface to a mesh group";
                choice mesh_group_option {
                  leaf mesh-group-number {
                    type union {
                      type uint32;
                      type string {
                        pattern "<.*>|$.*";
                      }
                    }
                    description
                      "Mesh group number for this interface";
                  }
                  leaf blocked {
                    type empty;
                    description
                      "Do not flood new LSPs on this interface";
                  }
                }  // choice mesh_group_option
              }  // container mesh-group
    
              leaf point-to-point {
                type empty;
                description
                  "Treat interface as point to point";
              }
    
              container passive {
                presence "enable passive";
                description
                  "Do not run IS-IS, but advertise it";
                uses apply-advanced;
    
                leaf remote-node-iso {
                  junos:must "(".. remote-node-id")";
                  junos:must-message "remote-node-id must be configured";
                  type jt:sysid;
                  description
                    "ISO System-ID of the remote node";
                }
    
                leaf remote-node-id {
                  junos:must "(".. remote-node-iso")";
                  junos:must-message "remote-node-iso must be configured";
                  type jt:ipv4addr;
                  description
                    "Remote address of the link";
                }
              }  // container passive
    
              leaf checksum {
                type empty;
                description
                  "Enable checksum for packets on this interface";
              }
    
              leaf no-unicast-topology {
                type empty;
                description
                  "Do not include this interface in the unicast topology";
              }
    
              leaf no-ipv4-multicast {
                type empty;
                description
                  "Do not include this interface in the IPv4 multicast topology";
              }
    
              leaf no-ipv6-unicast {
                type empty;
                description
                  "Do not include this interface in the IPv6 unicast topology";
              }
    
              leaf no-ipv6-multicast {
                type empty;
                description
                  "Do not include this interface in the IPv6 multicast topology";
              }
    
              leaf no-adjacency-down-notification {
                type empty;
                description
                  "Do not inform other protocols about adjacency down events";
              }
    
              container bfd-liveness-detection {
                junos:must "(!(".. family inet bfd-liveness-detection"))";
                junos:must-message "To configure bfd-liveness-detection, 'family inet bfd-liveness-detection' must not be configured";
                status deprecated;
                description
                  "Bidirectional Forwarding Detection options";
                uses apply-advanced;
    
                leaf version {
                  type enumeration {
                    enum "0" {
                      value 0;
                      description
                        "BFD version 0 (deprecated)";
                    }
                    enum "1" {
                      value 1;
                      description
                        "BFD version 1";
                    }
                    enum "automatic" {
                      value 2;
                      description
                        "Choose BFD version automatically";
                    }
                  }
                  default "automatic";
                  description
                    "BFD protocol version number";
                }
    
                leaf minimum-interval {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "1 .. 255000";
                    }
                  }
                  units "milliseconds";
                  description
                    "Minimum transmit and receive interval";
                }
    
                leaf minimum-transmit-interval {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "1 .. 255000";
                    }
                  }
                  units "milliseconds";
                  status deprecated;
                  description
                    "Minimum transmit interval";
                }
    
                leaf minimum-receive-interval {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "1 .. 255000";
                    }
                  }
                  units "milliseconds";
                  description
                    "Minimum receive interval";
                }
    
                leaf multiplier {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "1 .. 255";
                    }
                  }
                  default "3";
                  description
                    "Detection time multiplier";
                }
    
                choice adaptation-choice {
                  leaf no-adaptation {
                    type empty;
                    description
                      "Disable adaptation";
                  }
                }  // choice adaptation-choice
    
                container transmit-interval {
                  description
                    "Transmit-interval options";
                  uses apply-advanced;
    
                  leaf minimum-interval {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint32 {
                        range "1 .. 255000";
                      }
                    }
                    units "milliseconds";
                    description
                      "Minimum transmit interval";
                  }
    
                  leaf threshold {
                    type union {
                      type uint32;
                      type string {
                        pattern "<.*>|$.*";
                      }
                    }
                    units "milliseconds";
                    description
                      "High transmit interval triggering a trap";
                  }
                }  // container transmit-interval
    
                container detection-time {
                  description
                    "Detection-time options";
                  uses apply-advanced;
    
                  leaf threshold {
                    type union {
                      type uint32;
                      type string {
                        pattern "<.*>|$.*";
                      }
                    }
                    units "milliseconds";
                    description
                      "High detection-time triggering a trap";
                  }
                }  // container detection-time
    
                container authentication {
                  description
                    "Authentication options";
                  uses apply-advanced;
    
                  leaf key-chain {
                    junos:must "(".. algorithm")";
                    junos:must-message "May not be configured without algorithm";
                    junos:must "("security authentication-key-chains key-chain $$")";
                    junos:must-message "Referenced key-chain must be defined";
                    type string;
                    description "Key chain name";
                  }
    
                  leaf algorithm {
                    junos:must "(".. key-chain")";
                    junos:must-message "May not be configured without key-chain";
                    type enumeration {
                      enum "simple-password" {
                        value 0;
                        description
                          "Simple password";
                      }
                      enum "keyed-md5" {
                        value 1;
                        description
                          "Keyed message Digest 5";
                      }
                      enum
                        "meticulous-keyed-md5" {
                        value 2;
                        description
                          "Meticulous keyed message Digest 5";
                      }
                      enum "keyed-sha-1" {
                        value 3;
                        description
                          "Keyed secure hash algorithm (SHA1) ";
                      }
                      enum
                        "meticulous-keyed-sha-1" {
                        value 4;
                        description
                          "Meticulous keyed secure hash algorithm (SHA1) ";
                      }
                    }
                    description "Algorithm name";
                  }
    
                  leaf loose-check {
                    type empty;
                    description
                      "Verify authentication only if authentication is negotiated";
                  }
                }  // container authentication
              }  // container bfd-liveness-detection
    
              list family {
                key "name";
                ordered-by user;
                description
                  "Address family specific interface attributes";
                leaf name {
                  type enumeration {
                    enum "inet" {
                      value 0;
                      description "IPv4 family";
                    }
                    enum "inet6" {
                      value 1;
                      description "IPv6 family";
                    }
                  }
                }
    
                uses apply-advanced;
    
                container bfd-liveness-detection {
                  junos:must "(!((".. .. bfd-liveness-detection" && ".. .. family inet bfd-liveness-detection")))";
                  junos:must-message "bfd-liveness-detection and 'family inet bfd-liveness-detection' cannot be configured at the same time";
                  description
                    "Bidirectional Forwarding Detection options";
                  uses apply-advanced;
    
                  leaf version {
                    type enumeration {
                      enum "0" {
                        value 0;
                        description
                          "BFD version 0 (deprecated)";
                      }
                      enum "1" {
                        value 1;
                        description
                          "BFD version 1";
                      }
                      enum "automatic" {
                        value 2;
                        description
                          "Choose BFD version automatically";
                      }
                    }
                    default "automatic";
                    description
                      "BFD protocol version number";
                  }
    
                  leaf minimum-interval {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint32 {
                        range "1 .. 255000";
                      }
                    }
                    units "milliseconds";
                    description
                      "Minimum transmit and receive interval";
                  }
    
                  leaf minimum-transmit-interval {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint32 {
                        range "1 .. 255000";
                      }
                    }
                    units "milliseconds";
                    status deprecated;
                    description
                      "Minimum transmit interval";
                  }
    
                  leaf minimum-receive-interval {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint32 {
                        range "1 .. 255000";
                      }
                    }
                    units "milliseconds";
                    description
                      "Minimum receive interval";
                  }
    
                  leaf multiplier {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint32 {
                        range "1 .. 255";
                      }
                    }
                    default "3";
                    description
                      "Detection time multiplier";
                  }
    
                  choice adaptation-choice {
                    leaf no-adaptation {
                      type empty;
                      description
                        "Disable adaptation";
                    }
                  }  // choice adaptation-choice
    
                  container transmit-interval {
                    description
                      "Transmit-interval options";
                    uses apply-advanced;
    
                    leaf minimum-interval {
                      type union {
                        type string {
                          pattern "<.*>|$.*";
                        }
                        type uint32 {
                          range "1 .. 255000";
                        }
                      }
                      units "milliseconds";
                      description
                        "Minimum transmit interval";
                    }
    
                    leaf threshold {
                      type union {
                        type uint32;
                        type string {
                          pattern "<.*>|$.*";
                        }
                      }
                      units "milliseconds";
                      description
                        "High transmit interval triggering a trap";
                    }
                  }  // container transmit-interval
    
                  container detection-time {
                    description
                      "Detection-time options";
                    uses apply-advanced;
    
                    leaf threshold {
                      type union {
                        type uint32;
                        type string {
                          pattern "<.*>|$.*";
                        }
                      }
                      units "milliseconds";
                      description
                        "High detection-time triggering a trap";
                    }
                  }  // container detection-time
    
                  container authentication {
                    description
                      "Authentication options";
                    uses apply-advanced;
    
                    leaf key-chain {
                      junos:must "(".. algorithm")";
                      junos:must-message "May not be configured without algorithm";
                      junos:must "("security authentication-key-chains key-chain $$")";
                      junos:must-message "Referenced key-chain must be defined";
                      type string;
                      description
                        "Key chain name";
                    }
    
                    leaf algorithm {
                      junos:must "(".. key-chain")";
                      junos:must-message "May not be configured without key-chain";
                      type enumeration {
                        enum "simple-password" {
                          value 0;
                          description
                            "Simple password";
                        }
                        enum "keyed-md5" {
                          value 1;
                          description
                            "Keyed message Digest 5";
                        }
                        enum
                          "meticulous-keyed-md5" {
                          value 2;
                          description
                            "Meticulous keyed message Digest 5";
                        }
                        enum "keyed-sha-1" {
                          value 3;
                          description
                            "Keyed secure hash algorithm (SHA1) ";
                        }
                        enum
                          "meticulous-keyed-sha-1" {
                          value 4;
                          description
                            "Meticulous keyed secure hash algorithm (SHA1) ";
                        }
                      }
                      description
                        "Algorithm name";
                    }
    
                    leaf loose-check {
                      type empty;
                      description
                        "Verify authentication only if authentication is negotiated";
                    }
                  }  // container authentication
                }  // container bfd-liveness-detection
              }  // list family
            }  // list interface
    
            container source-packet-routing {
              junos:must "(!(".. srm6"))";
              junos:must-message "must not have 'protocols isis srm6' configured";
              presence
                "enable source-packet-routing";
              description
                "Enable Source Packet Routing (SPRING)";
              uses apply-advanced;
    
              container adjacency-segment {
                junos:must "(!(".. .. .. .. protocols mpls disable"))";
                junos:must-message "SPRING configuration is not allowed with 'protocols mpls disable'";
                description
                  "Configure attributes for Adjacency Segments in SPRING";
                uses apply-advanced;
    
                leaf hold-time {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "180000 .. 900000";
                    }
                  }
                  description
                    "Duration(ms) for which adjacency segments will be retained after isolating from an interface";
                }
              }  // container adjacency-segment
    
              container udp-tunneling {
                junos:must "(!(".. .. .. .. protocols mpls disable"))";
                junos:must-message "SPRING configuration is not allowed with 'protocols mpls disable'";
                description
                  "Enable SR over UDP feature";
                uses apply-advanced;
    
                leaf encapsulation {
                  type empty;
                  description
                    "Enable UDP Tunnel Encapsulation";
                }
    
                leaf decapsulation {
                  type empty;
                  description
                    "Enable UDP Tunnel decapsulation";
                }
              }  // container udp-tunneling
    
              container srgb {
                junos:must "(!(".. node-segment index-range"))";
                junos:must-message "May not be confiugred with node-segment index-range";
                junos:must "(!(".. .. .. .. protocols mpls disable"))";
                junos:must-message "SPRING configuration is not allowed with 'protocols mpls disable'";
                description
                  "Set the SRGB global block in SPRING";
                leaf start-label {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32;
                  }
                  description
                    "Start range for SRGB label block";
                }
    
                leaf index-range {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32;
                  }
                  description
                    "Index to the SRGB start label block";
                }
              }  // container srgb
    
              container node-segment {
                junos:must "(!(".. .. .. .. protocols mpls disable"))";
                junos:must-message "SPRING configuration is not allowed with 'protocols mpls disable'";
                description
                  "Enable support for Node segments in SPRING";
                uses apply-advanced;
    
                leaf ipv4-index {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "0 .. 199999";
                    }
                  }
                  description
                    "Set IPv4 Node Segment index";
                }
    
                leaf ipv6-index {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "0 .. 199999";
                    }
                  }
                  description
                    "Set IPv6 Node Segment index";
                }
    
                leaf index-range {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "32 .. 16385";
                    }
                  }
                  description
                    "Set Range of Node Segment indices allowed";
                }
              }  // container node-segment
    
              leaf-list flex-algorithm {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "128 .. 255";
                  }
                }
                max-elements 16;
                description
                  "Flex-algorithms we would like to participate in";
              }
    
              leaf use-flex-algorithm-metric-always {
                type empty;
                description
                  "Use flex-algo prefix metric whenever available";
              }
    
              leaf strict-asla-based-flex-algorithm {
                type empty;
                description
                  "Flex-Algorithm to ignore links not having ASLA sub-TLVs";
              }
    
              leaf new-capability-subtlv {
                junos:must "(!(".. .. .. .. protocols mpls disable"))";
                junos:must-message "SPRING configuration is not allowed with 'protocols mpls disable'";
                type empty;
                description
                  "Advertise all ranges in single spring capability subtlv";
              }
    
              leaf explicit-null {
                junos:must "(!(".. .. .. .. protocols mpls disable"))";
                junos:must-message "SPRING configuration is not allowed with 'protocols mpls disable'";
                type empty;
                description
                  "Set E and P bits in all Prefix SID advertisements";
              }
    
              leaf mapping-server {
                junos:must "(!(".. .. .. .. protocols mpls disable"))";
                junos:must-message "SPRING configuration is not allowed with 'protocols mpls disable'";
                junos:must "("routing-options source-packet-routing mapping-server-entry $$")";
                junos:must-message "Referenced source-packet-routing mapping-server-entry must be defined";
                type string;
                description
                  "Mapping server name";
              }
    
              leaf no-strict-spf {
                type empty;
                description
                  " Disable strict spf algo 1 advertisement";
              }
    
              leaf ldp-stitching {
                junos:must "(!(".. .. .. .. protocols mpls disable"))";
                junos:must-message "SPRING configuration is not allowed with 'protocols mpls disable'";
                type empty;
                description
                  "Enable SR to LDP stitching";
              }
    
              container srv6 {
                presence "enable srv6";
                description
                  "Enable IPv6 Segment Routing (SRv6)";
                uses apply-advanced;
    
                list locator {
                  key "name";
                  ordered-by user;
                  description "SRv6 Locator";
                  leaf name {
                    junos:must "("routing-options source-packet-routing srv6 locator $$")";
                    junos:must-message "Referenced source-packet-routing srv6 must be defined";
                    type string;
                    description "Locator name";
                  }
    
                  uses apply-advanced;
    
                  list end-sid {
                    key "name";
                    ordered-by user;
                    leaf name {
                      type jt:ipv6addr;
                    }
    
                    uses apply-advanced;
    
                    container flavor {
                      presence "enable flavor";
                      uses apply-advanced;
    
                      leaf psp {
                        type empty;
                        description
                          "Penultimate segment pop of the SRH";
                      }
    
                      leaf usp {
                        type empty;
                        description
                          "Ultimate segment pop of the SRH";
                      }
    
                      leaf usd {
                        type empty;
                        description
                          "Ultimate segment decapsulation";
                      }
                    }  // container flavor
                  }  // list end-sid
                }  // list locator
              }  // container srv6
    
              container sensor-based-stats {
                junos:must "(!(".. .. .. .. protocols mpls disable"))";
                junos:must-message "SPRING configuration is not allowed with 'protocols mpls disable'";
                description
                  "Configure sensor based stats in SPRING";
                uses apply-advanced;
    
                container per-interface-per-member-link {
                  description
                    "Configure sensor based stats per nexthop";
                  leaf ingress {
                    type empty;
                    description
                      "Enable sensor based stats on ingress interface";
                  }
    
                  leaf egress {
                    type empty;
                    description
                      "Enable sensor based stats on egress interface";
                  }
                }  // container per-interface-per-member-link
    
                container per-sid {
                  description
                    "Configure sensor based stats per spring route";
                  leaf ingress {
                    type empty;
                    description
                      "Enable sensor based stats for per-sid ingress accounting";
                  }
    
                  leaf egress {
                    type empty;
                    description
                      "Enable sensor based stats for IP-MPLS egress accounting";
                  }
                }  // container per-sid
              }  // container sensor-based-stats
    
              container traffic-statistics {
                junos:must "(!(".. .. .. .. protocols mpls disable"))";
                junos:must-message "SPRING configuration is not allowed with 'protocols mpls disable'";
                description
                  "Enable support for traffic statistics in SPRING";
                uses apply-advanced;
    
                container statistics-granularity {
                  description
                    "Granularity for traffic statistics in SPRING";
                  uses apply-advanced;
    
                  leaf per-interface {
                    type empty;
                    description
                      "Interface Based traffic statistics in SPRING";
                  }
                }  // container statistics-granularity
    
                leaf auto-bandwidth {
                  junos:must "("protocols isis source-packet-routing traffic-statistics statistics-granularity per-interface")";
                  junos:must-message "Config protocols isis source-packet-routing traffic-statistics statistics-granularity per-interface is must";
                  junos:must "("routing-options auto-bandwidth template $$")";
                  junos:must-message "Referenced auto-bandwidth template must be defined";
                  type string;
                  description
                    "Auto bandwidth name";
                }
              }  // container traffic-statistics
            }  // container source-packet-routing
    
            container srm6 {
              junos:must "(!(".. source-packet-routing"))";
              junos:must-message "must not have 'protocols isis source-packet-routing' configured";
              presence "enable srm6";
              description "Enable SRm6";
              uses apply-advanced;
    
              container sid {
                description
                  "Configure attributes for SID in srm6";
                uses apply-advanced;
    
                leaf node-sid {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "1 .. 65535";
                    }
                  }
                  description
                    "Set Node SID Value";
                }
    
                leaf address {
                  type jt:ipv6addr;
                  description
                    "IPv6 address corresponding to SID";
                }
              }  // container sid
            }  // container srm6
    
            list level {
              key "name";
              ordered-by user;
              description
                "Configure global level attributes";
              leaf name {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "1 .. 2";
                  }
                }
                description "IS-IS level number";
              }
    
              uses apply-advanced;
    
              leaf labeled-preference {
                junos:must "(".. .. source-packet-routing")";
                junos:must-message "labeled-preference cannot be specified without 'protocols isis source-packet-routing'";
                type union {
                  type uint32;
                  type string {
                    pattern "<.*>|$.*";
                  }
                }
                description
                  "Preference of labeled IS-IS routes";
              }
    
              leaf srv6-preference {
                junos:must "(".. .. source-packet-routing")";
                junos:must-message "srv6-preference cannot be specified without 'protocols isis source-packet-routing'";
                type union {
                  type uint32;
                  type string {
                    pattern "<.*>|$.*";
                  }
                }
                description
                  "Preference of SRV6 IS-IS routes";
              }
    
              leaf flex-algorithm-preference {
                junos:must "(".. .. source-packet-routing")";
                junos:must-message "flex-algorithm-preference cannot be specified without 'protocols isis source-packet-routing'";
                type union {
                  type uint32;
                  type string {
                    pattern "<.*>|$.*";
                  }
                }
                description
                  "Preference of flex-algorithm L-ISIS routes";
              }
    
              container source-packet-routing {
                presence
                  "enable source-packet-routing";
                description
                  "Enable Source Packet Routing (SPRING)";
                uses apply-advanced;
    
                choice enable-disable {
                  leaf disable {
                    type empty;
                    description
                      "Disable Source Packet Routing on this level";
                  }
                }  // choice enable-disable
    
                leaf srms-preference {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "0 .. 255";
                    }
                  }
                  description
                    "Set SRMS preference value";
                }
              }  // container source-packet-routing
    
              choice enable-disable {
                leaf disable {
                  type empty;
                  description
                    "Disable IS-IS on this level";
                }
              }  // choice enable-disable
    
              leaf authentication-key {
                type jt:unreadable;
                description
                  "Authentication key (password)";
              }
    
              leaf authentication-type {
                type enumeration {
                  enum "md5" {
                    value 0;
                    description
                      "MD5 authentication";
                  }
                  enum "simple" {
                    value 1;
                    description
                      "Simple password authentication";
                  }
                }
                description
                  "Authentication type";
              }
    
              leaf purge-originator {
                type enumeration {
                  enum "self" {
                    value 0;
                    description
                      "Add POI only for self-originated purge LSPs";
                  }
                  enum "empty" {
                    value 1;
                    description
                      "Add POI for purge LSPs who do not have POI information";
                  }
                }
                description
                  "Add Purge Originator information";
              }
    
              leaf no-hello-authentication {
                type empty;
                description
                  "Disable authentication for hello packets";
              }
    
              leaf no-csnp-authentication {
                type empty;
                description
                  "Disable authentication for CSN packets";
              }
    
              leaf no-psnp-authentication {
                type empty;
                description
                  "Disable authentication for PSN packets";
              }
    
              leaf authentication-key-chain {
                junos:must "(!(".. authentication-type"))";
                junos:must-message "May not be configured with authentication-type";
                junos:must "(!(".. authentication-key"))";
                junos:must-message "May not be configured with authentication-key";
                junos:must "("security authentication-key-chains key-chain $$")";
                junos:must-message "Referenced key-chain must be defined";
                type string {
                  junos:posix-pattern "[A-za-z]$";
                  junos:pattern-message "Keychain name must not end with number.";
                  length "1 .. 128";
                }
                description "Key chain name";
              }
    
              leaf wide-metrics-only {
                junos:must "(!(".. .. clns-routing"))";
                junos:must-message "wide-metrics-only cannot be specified with clns-routing";
                type empty;
                description
                  "Generate wide metrics only";
              }
    
              leaf preference {
                type union {
                  type uint32;
                  type string {
                    pattern "<.*>|$.*";
                  }
                }
                description
                  "Preference of internal routes";
              }
    
              leaf external-preference {
                type union {
                  type uint32;
                  type string {
                    pattern "<.*>|$.*";
                  }
                }
                description
                  "Preference of external routes";
              }
    
              leaf prefix-export-limit {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "0 .. 4294967295";
                  }
                }
                description
                  "Maximum number of external prefixes that can be exported";
              }
    
              container flood-reflector {
                junos:must "(!(".. .. level 1 flood-reflector"))";
                junos:must-message "Flood-reflector is supported only in level 2";
                description
                  "Enable flood-reflector";
                uses apply-advanced;
    
                container reflector {
                  junos:must "(!(".. client"))";
                  junos:must-message "flood-reflector and client can't be configured together";
                  description
                    "Configure this as a flood-reflector";
                  uses apply-advanced;
    
                  leaf cluster-id {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint32 {
                        range "1 .. 4294967295";
                      }
                    }
                    description "Cluster-ID";
                  }
                }  // container reflector
    
                leaf client {
                  type empty;
                  description
                    "Configure interface as flood-reflector client";
                }
              }  // container flood-reflector
            }  // list level
    
            list interface-group {
              key "name";
              description
                "Interface grouping configuration";
              leaf name {
                type string;
                description
                  "Interface group name";
              }
    
              uses apply-advanced;
    
              list level {
                key "name";
                ordered-by user;
                description
                  "Configure levels on this interface-group";
                leaf name {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "1 .. 2";
                    }
                  }
                  description
                    "IS-IS level number";
                }
    
                uses apply-advanced;
    
                container ipv4-adjacency-segment {
                  junos:must "(!(".. no-advertise-adjacency-segment"))";
                  junos:must-message "ipv4-adjacency-segment can't be configured if no-advertise-adjacency-segment is configured in the level";
                  junos:must "(!(".. .. no-advertise-adjacency-segment"))";
                  junos:must-message "ipv4-adjacency-segment can't be configured if no-advertise-adjacency-segment is configured in the same interface";
                  description
                    "Configure ipv4 adjacency segment";
                  uses apply-advanced;
    
                  container protected {
                    description
                      "Adjacency SID is eligible for protection";
                    choice adjsid-type {
                      container index {
                        description
                          "Adjacency SID indexed from SRGB";
                        leaf index-number {
                          type union {
                            type string {
                              pattern "<.*>|$.*";
                            }
                            type uint32 {
                              range
                                "0 .. 199999";
                            }
                          }
                        }
                      }  // container index
                      leaf label {
                        type union {
                          type string {
                            pattern "<.*>|$.*";
                          }
                          type uint32 {
                            range
                              "16 .. 1048575";
                          }
                        }
                        description
                          "Adjacency SID from static label pool";
                      }
                      leaf dynamic {
                        type empty;
                        description
                          "Dynamically allocate an adjacency segment";
                      }
                    }  // choice adjsid-type
                  }  // container protected
    
                  container unprotected {
                    description
                      "Adjacency SID uneligible for protection";
                    choice adjsid-type {
                      container index {
                        description
                          "Adjacency SID indexed from SRGB";
                        leaf index-number {
                          type union {
                            type string {
                              pattern "<.*>|$.*";
                            }
                            type uint32 {
                              range
                                "0 .. 199999";
                            }
                          }
                        }
                      }  // container index
                      leaf label {
                        type union {
                          type string {
                            pattern "<.*>|$.*";
                          }
                          type uint32 {
                            range
                              "16 .. 1048575";
                          }
                        }
                        description
                          "Adjacency SID from static label pool";
                      }
                      leaf dynamic {
                        type empty;
                        description
                          "Dynamically allocate an adjacency segment";
                      }
                    }  // choice adjsid-type
                  }  // container unprotected
                }  // container ipv4-adjacency-segment
    
                container ipv6-adjacency-segment {
                  junos:must "(!(".. no-advertise-adjacency-segment"))";
                  junos:must-message "ipv6-adjacency-segment can't be configured if no-advertise-adjacency-segment is configured in the same level";
                  junos:must "(!(".. .. no-advertise-adjacency-segment"))";
                  junos:must-message "ipv6-adjacency-segment can't be configured if no-advertise-adjacency-segment is configured in the same interface";
                  description
                    "Configure ipv6 adjacency segment";
                  uses apply-advanced;
    
                  container protected {
                    description
                      "Adjacency SID is eligible for protection";
                    choice adjsid-type {
                      container index {
                        description
                          "Adjacency SID indexed from SRGB";
                        leaf index-number {
                          type union {
                            type string {
                              pattern "<.*>|$.*";
                            }
                            type uint32 {
                              range
                                "0 .. 199999";
                            }
                          }
                        }
                      }  // container index
                      leaf label {
                        type union {
                          type string {
                            pattern "<.*>|$.*";
                          }
                          type uint32 {
                            range
                              "16 .. 1048575";
                          }
                        }
                        description
                          "Adjacency SID from static label pool";
                      }
                      leaf dynamic {
                        type empty;
                        description
                          "Dynamically allocate an adjacency segment";
                      }
                    }  // choice adjsid-type
                  }  // container protected
    
                  container unprotected {
                    description
                      "Adjacency SID uneligible for protection";
                    choice adjsid-type {
                      container index {
                        description
                          "Adjacency SID indexed from SRGB";
                        leaf index-number {
                          type union {
                            type string {
                              pattern "<.*>|$.*";
                            }
                            type uint32 {
                              range
                                "0 .. 199999";
                            }
                          }
                        }
                      }  // container index
                      leaf label {
                        type union {
                          type string {
                            pattern "<.*>|$.*";
                          }
                          type uint32 {
                            range
                              "16 .. 1048575";
                          }
                        }
                        description
                          "Adjacency SID from static label pool";
                      }
                      leaf dynamic {
                        type empty;
                        description
                          "Dynamically allocate an adjacency segment";
                      }
                    }  // choice adjsid-type
                  }  // container unprotected
                }  // container ipv6-adjacency-segment
    
                container srm6-adjacency-segment {
                  description
                    "Configure srm6 adjacency segment";
                  uses apply-advanced;
    
                  container unprotected {
                    description
                      "Adjacency SID uneligible for protection";
                    leaf sid {
                      type union {
                        type string {
                          pattern "<.*>|$.*";
                        }
                        type uint32 {
                          range "1 .. 65535";
                        }
                      }
                      description
                        "Set Adjacency SID Value";
                    }
                  }  // container unprotected
                }  // container srm6-adjacency-segment
    
                list topology {
                  key "name";
                  ordered-by user;
                  description
                    "Topology specific attributes";
                  leaf name {
                    type enumeration {
                      enum "default" {
                        value 0;
                        description
                          "Default topology";
                      }
                      enum "ipv4-multicast" {
                        value 1;
                        description
                          "IPv4 multicast topology";
                      }
                      enum "ipv6-unicast" {
                        value 2;
                        description
                          "IPv6 unicast topology";
                      }
                      enum "ipv6-multicast" {
                        value 3;
                        description
                          "IPv6 multicast topology";
                      }
                    }
                    description "Topology name";
                  }
    
                  uses apply-advanced;
    
                  leaf metric {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint32 {
                        range "0 .. 16777215";
                      }
                    }
                    description
                      "Topology metric";
                  }
    
                  container bandwidth-based-metrics {
                    junos:must "(".. metric")";
                    junos:must-message "Metric must be configured";
                    description
                      "Configure bandwidth based metrics";
                    uses apply-advanced;
    
                    list bandwidth {
                      key "name";
                      description
                        "Bandwidth threshold";
                      leaf name {
                        type string;
                      }
    
                      leaf metric {
                        type union {
                          type string {
                            pattern "<.*>|$.*";
                          }
                          type uint32 {
                            range
                              "0 .. 16777215";
                          }
                        }
                        description
                          "Metric associated with specified bandwidth";
                      }
                    }  // list bandwidth
                  }  // container bandwidth-based-metrics
                }  // list topology
              }  // list level
    
              container link-group-protection {
                junos:must "(!(".. .. backup-spf-options"))";
                junos:must-message "Backup SPF options can't be configured";
                description
                  "Configure link group protection";
                uses apply-advanced;
    
                leaf minimum-bandwidth {
                  type string;
                  description
                    "Minimum bandwidth to carry traffic";
                }
    
                leaf revert-bandwidth {
                  type string;
                  description
                    "Revert bandwidth to carry traffic";
                }
              }  // container link-group-protection
    
              list interface {
                key "name";
                description
                  "List interfaces for this group";
                leaf name {
                  type union {
                    type jt:interface-name;
                    type string {
                      pattern "<.*>|$.*";
                    }
                  }
                  description "Interface name";
                }
    
                uses apply-advanced;
    
                leaf weight {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "1 .. 255";
                    }
                  }
                  description
                    "Interface weight for adjacency set";
                }
              }  // list interface
            }  // list interface-group
    
            container spf-options {
              description
                "Configure SPF attributes";
              uses apply-advanced;
    
              container microloop-avoidance {
                description
                  "Configure microloop avoidance mechanisms";
                uses apply-advanced;
    
                container post-convergence-path {
                  junos:must "(!(".. use-route-convergence-delay"))";
                  junos:must-message "use-route-convergence-delay is not allowed with post-convergence-path";
                  presence
                    "enable post-convergence-path";
                  description
                    "Temporarily install post-convergence path for routes potentially affected by microloops";
                  uses apply-advanced;
    
                  leaf delay {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint32 {
                        range "500 .. 60000";
                      }
                    }
                    units "milliseconds";
                    description
                      "Time after which temporary post-convergence paths are removed";
                  }
    
                  leaf maximum-labels {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint32 {
                        range "2 .. 8";
                      }
                    }
                    description
                      "Set maximum number of label supported for Micro-Loop-Avoidance calculations";
                  }
    
                  leaf maximum-srv6-sids {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint32 {
                        range "2 .. 6";
                      }
                    }
                    description
                      "Set maximum number of SRV6 SIDs supported for Micro-Loop-Avoidance calculations";
                  }
                }  // container post-convergence-path
              }  // container microloop-avoidance
    
              leaf delay {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "50 .. 1000";
                  }
                }
                units "milliseconds";
                description
                  "Time to wait before running an SPF";
              }
    
              leaf holddown {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "2000 .. 10000";
                  }
                }
                units "milliseconds";
                description
                  "Time to hold down before running an SPF";
              }
    
              leaf rapid-runs {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "1 .. 5";
                  }
                }
                description
                  "Number of rapid SPF runs before SPF holddown";
              }
    
              container multipath {
                description
                  "Configure multipath options";
                uses apply-advanced;
    
                container weighted {
                  description
                    "Weighted multipath options";
                  uses apply-advanced;
    
                  leaf one-hop {
                    type empty;
                    description
                      "Enable load balancing on onehop multipath based on interface bandwidth";
                  }
                }  // container weighted
              }  // container multipath
            }  // container spf-options
    
            container traceoptions {
              description
                "Trace options for IS-IS";
              uses apply-advanced;
    
              list flag {
                key "name";
                ordered-by user;
                description "Tracing parameters";
                leaf name {
                  type enumeration {
                    enum "traffic-statistics" {
                      value 0;
                      description
                        "Trace traffic-statistics related events";
                    }
                    enum "post-convergence-lfa" {
                      value 1;
                      description
                        "Trace post-convergence-lfa related events";
                    }
                    enum "error" {
                      value 2;
                      description
                        "Trace errored packets";
                    }
                    enum "spf" {
                      value 3;
                      description
                        "Trace SPF events";
                    }
                    enum "packets" {
                      value 4;
                      description
                        "Trace IS-IS packets";
                    }
                    enum "hello" {
                      value 5;
                      description
                        "Trace hello packets";
                    }
                    enum "lsp" {
                      value 6;
                      description
                        "Trace link-state packets";
                    }
                    enum "psn" {
                      value 7;
                      description
                        "Trace partial sequence number (PSN) packets";
                    }
                    enum "csn" {
                      value 8;
                      description
                        "Trace complete sequence number (CSN) packets";
                    }
                    enum "layer2-map" {
                      value 9;
                      description
                        "Trace ARP/ND kernel state manipulation";
                    }
                    enum "lsp-generation" {
                      value 10;
                      description
                        "Trace LSP generation";
                    }
                    enum "graceful-restart" {
                      value 11;
                      description
                        "Trace graceful restart events";
                    }
                    enum "ldp-synchronization" {
                      value 12;
                      description
                        "Trace synchronization between IS-IS and LDP";
                    }
                    enum "nsr-synchronization" {
                      value 13;
                      description
                        "Trace NSR synchronization events";
                    }
                    enum "spring" {
                      value 14;
                      description
                        "Trace source packet routing";
                    }
                    enum "prefix-sid" {
                      value 15;
                      description
                        "Trace source packet routing, prefix-sids";
                    }
                    enum "flex-algorithm" {
                      value 16;
                      description
                        "Trace flex-algorithm related events";
                    }
                    enum "adj-sid" {
                      value 17;
                      description
                        "Trace adj-sid related events";
                    }
                    enum "route" {
                      value 18;
                      description
                        "Trace routing information";
                    }
                    enum "normal" {
                      value 19;
                      description
                        "Trace normal events";
                    }
                    enum "general" {
                      value 20;
                      description
                        "Trace general events";
                    }
                    enum "state" {
                      value 21;
                      description
                        "Trace state transitions";
                    }
                    enum "policy" {
                      value 22;
                      description
                        "Trace policy processing";
                    }
                    enum "task" {
                      value 23;
                      description
                        "Trace routing protocol task processing";
                    }
                    enum "timer" {
                      value 24;
                      description
                        "Trace routing protocol timer processing";
                    }
                    enum "srv6" {
                      value 25;
                      description
                        "Trace srv6 related events";
                    }
                    enum "rmopd" {
                      value 26;
                      description
                        "Trace rmopd interactions";
                    }
                    enum "all" {
                      value 27;
                      description
                        "Trace everything";
                    }
                  }
                }
    
                leaf send {
                  type empty;
                  description
                    "Trace transmitted packets";
                }
    
                leaf receive {
                  type empty;
                  description
                    "Trace received packets";
                }
    
                leaf detail {
                  type empty;
                  description
                    "Trace detailed information";
                }
    
                leaf disable {
                  type empty;
                  description
                    "Disable this trace flag";
                }
              }  // list flag
    
              container file {
                description "Trace file options";
                leaf filename {
                  type string {
                    junos:posix-pattern "![/ %]";
                    junos:pattern-message "Must not contain '/', % or a space";
                    length "1 .. 1024";
                  }
                  description
                    "Name of file in which to write trace information";
                }
    
                leaf replace {
                  type empty;
                  status deprecated;
                  description
                    "Replace trace file rather than appending to it";
                }
    
                leaf size {
                  type string;
                  description
                    "Maximum trace file size";
                }
    
                leaf files {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "2 .. 1000";
                    }
                  }
                  default "10";
                  description
                    "Maximum number of trace files";
                }
    
                leaf no-stamp {
                  type empty;
                  status deprecated;
                  description
                    "Do not timestamp trace file";
                }
    
                choice world-readable-choice {
                  leaf world-readable {
                    type empty;
                    description
                      "Allow any user to read the log file";
                  }
                  leaf no-world-readable {
                    type empty;
                    description
                      "Don't allow any user to read the log file";
                  }
                }  // choice world-readable-choice
              }  // container file
            }  // container traceoptions
    
            container backup-spf-options {
              description
                "Configure backup SPF attributes";
              uses apply-advanced;
    
              container remote-backup-calculation {
                junos:must "(!(".. .. backup-spf-options use-post-convergence-lfa"))";
                junos:must-message "Not allowed with 'protocols isis backup-spf-options use-post-convergence-lfa'";
                presence
                  "enable remote-backup-calculation";
                description
                  "Calculate Remote LFA backup nexthops";
                uses apply-advanced;
              }  // container remote-backup-calculation
    
              container use-post-convergence-lfa {
                junos:must "(".. .. source-packet-routing")";
                junos:must-message "Configuration of 'protocols isis source-packet-routing' is must";
                presence
                  "enable use-post-convergence-lfa";
                description
                  "Calculate Post Convergence Backup Nexthops";
                uses apply-advanced;
    
                leaf maximum-labels {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "2 .. 8";
                    }
                  }
                  description
                    "Set maximum number of label supported for post convergence path calculations";
                }
    
                leaf maximum-srv6-sids {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "2 .. 6";
                    }
                  }
                  description
                    "Set maximum number of SRV6 SIDs for post convergence path calculations";
                }
    
                leaf maximum-backup-paths {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "1 .. 8";
                    }
                  }
                  description
                    "Set maximum equal cost backup post convergence paths";
                }
              }  // container use-post-convergence-lfa
    
              container use-source-packet-routing {
                junos:must "(".. .. source-packet-routing")";
                junos:must-message "Use of SPRING paths as backup can't be configured without configuring 'protocols isis source-packet-routing'";
                presence
                  "enable use-source-packet-routing";
                description
                  "Use SPRING routed paths for protection";
                uses apply-advanced;
              }  // container use-source-packet-routing
    
              leaf per-prefix-calculation {
                type empty;
                description
                  "Calculate backup nexthops for non-best prefix originators";
              }
    
              leaf node-link-degradation {
                junos:must "(!(".. .. backup-spf-options use-post-convergence-lfa"))";
                junos:must-message "Not allowed with 'protocols isis backup-spf-options use-post-convergence-lfa'";
                type empty;
                description
                  "Degrade to link protection when nodelink protection not available";
              }
            }  // container backup-spf-options
    
            list context-identifier {
              key "name";
              ordered-by user;
              description
                "Configuration for advertisement of a context-identifier ";
              leaf name {
                type jt:ipprefix;
                description
                  "Context identifier range";
              }
    
              uses apply-advanced;
    
              list level {
                key "name";
                ordered-by user;
                description
                  "Configure global level attributes";
                leaf name {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "1 .. 2";
                    }
                  }
                  description
                    "IS-IS level number";
                }
    
                uses apply-advanced;
    
                choice enable-disable {
                  leaf disable {
                    type empty;
                    description
                      "Disable advertisements to this level";
                  }
                }  // choice enable-disable
              }  // list level
            }  // list context-identifier
    
            container traffic-engineering {
              description
                "Configure traffic engineering attributes";
              uses apply-advanced;
    
              choice enable-disable {
                leaf disable {
                  type empty;
                  description
                    "Disable traffic engineering";
                }
              }  // choice enable-disable
    
              leaf l3-unicast-topology {
                type empty;
                description
                  "Download IGP topology into TED";
              }
    
              leaf ipv6 {
                type empty;
                description "Enable TEDv6";
              }
    
              leaf credibility-protocol-preference {
                type empty;
                description
                  "Follow IGP protocol preference for TED protocol credibility";
              }
    
              leaf ipv4-multicast-rpf-routes {
                junos:must "(!(".. .. topologies ipv4-multicast"))";
                junos:must-message "ipv4-multicast-rpf-routes cannot be used with the ipv4-multicast topology";
                junos:must "(!(".. .. multicast-topology"))";
                junos:must-message "ipv4-multicast-rpf-routes cannot be used with multicast-topology";
                junos:must "(".. shortcuts")";
                junos:must-message "ipv4-multicast-rpf-routes cannot be used without shortcuts";
                type empty;
                status deprecated;
                description
                  "Install IPv4 routes for multicast RPF checks into inet.2";
              }
    
              leaf ignore-lsp-metrics {
                type empty;
                description
                  "Ignore label-switched path metrics when doing shortcuts";
              }
    
              container tunnel-source-protocol {
                description
                  "Protocols from which to pick label-switched paths";
                uses apply-advanced;
    
                container rsvp {
                  presence "enable rsvp";
                  description
                    "Pick label-switched paths from rsvp";
                  uses apply-advanced;
    
                  leaf preference {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint32 {
                        range "1 .. 255";
                      }
                    }
                    description
                      "Preference for label-switched paths from this protocol";
                  }
                }  // container rsvp
    
                container spring-te {
                  presence "enable spring-te";
                  description
                    "Pick label-switched paths from spring-te";
                  uses apply-advanced;
    
                  leaf preference {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint32 {
                        range "1 .. 255";
                      }
                    }
                    description
                      "Preference for label-switched paths from this protocol";
                  }
                }  // container spring-te
              }  // container tunnel-source-protocol
    
              list family {
                key "name";
                ordered-by user;
                description
                  "Address family specific traffic-engineering attributes";
                leaf name {
                  type enumeration {
                    enum "inet" {
                      value 0;
                      description "IPv4 family";
                    }
                    enum "inet6" {
                      value 1;
                      description "IPv6 family";
                    }
                    enum "inet-mpls" {
                      value 2;
                      description
                        "IPv4-MPLS family";
                    }
                    enum "inet6-mpls" {
                      value 3;
                      description
                        "IPv6-MPLS family";
                    }
                  }
                }
    
                uses apply-advanced;
    
                container shortcuts {
                  junos:must "(!(".. .. no-ldp-shortcuts"))";
                  junos:must-message "Shortcuts configuration cannot be used with no-ldp-shortcuts";
                  junos:must "(!(".. .. shortcuts"))";
                  junos:must-message "per-family shortcuts configuration cannot be used with global shortcuts enabled";
                  junos:must "(!(".. .. disable"))";
                  junos:must-message "shortcuts cannot be used without traffic-engineering enabled";
                  presence "enable shortcuts";
                  description
                    "Use label-switched paths as next hops, if possible";
                  uses apply-advanced;
    
                  leaf multicast-rpf-routes {
                    junos:must "(!(".. .. .. .. multicast-topology"))";
                    junos:must-message "ipv4 multicast-rpf-routes cannot be used with the multicast-topology";
                    junos:must "(!(".. .. .. .. topologies ipv4-multicast"))";
                    junos:must-message "ipv4 multicast-rpf-routes cannot be used with the ipv4-multicast topology";
                    type empty;
                    description
                      "Install routes for multicast RPF checks into multicast RIB";
                  }
    
                  leaf-list import {
                    type jt:policy-algebra;
                    ordered-by user;
                    description
                      "Import policy for shortcut";
                  }
                }  // container shortcuts
              }  // list family
    
              container shortcuts {
                presence "enable shortcuts";
                status deprecated;
                description
                  "Use label-switched paths as next hops, if possible";
                uses apply-advanced;
    
                leaf ignore-lsp-metrics {
                  type empty;
                  status deprecated;
                  description
                    "Ignore label-switched path metrics when doing shortcuts";
                }
              }  // container shortcuts
    
              container multipath {
                description
                  "Configure label-switched-path multipath behavior";
                uses apply-advanced;
    
                leaf lsp-equal-cost {
                  junos:must "((".. .. shortcuts" || (".. .. family $$={inet} shortcuts" || (".. .. family $$={inet6} shortcuts" || ".. .. family $$={iso} shortcuts"))))";
                  junos:must-message "Traffic engineering shortcuts for inet, inet6 or iso family must be configured.";
                  type empty;
                  description
                    "Include equal cost label-switched-paths";
                }
              }  // container multipath
    
              container advertisement {
                description
                  "Configure traffic engineering attribute advertisements";
                uses apply-advanced;
    
                leaf always {
                  type empty;
                  description
                    "Advertise applicable legacy TE attributes always";
                }
    
                container application-specific {
                  description
                    "Advertise application-specific TE attributes";
                  uses apply-advanced;
    
                  container all-applications {
                    presence
                      "enable all-applications";
                    description
                      "Advertise common application-specific link attributes";
                    uses apply-advanced;
    
                    leaf legacy {
                      type empty;
                      description
                        "Use legacy TE attributes for this application";
                    }
                  }  // container all-applications
                }  // container application-specific
              }  // container advertisement
            }  // container traffic-engineering
    
            list label-switched-path {
              junos:must "(!(".. traffic-engineering ipv4-multicast-rpf-routes"))";
              junos:must-message "cannot advertise LSPs when using ipv4-multicast-rpf-routes";
              key "name";
              ordered-by user;
              description
                "Configuration for advertisement of a label-switched path";
              leaf name {
                type string {
                  length "1 .. 64";
                }
                description
                  "Name of label-switched path to be advertised";
              }
    
              uses apply-advanced;
    
              list level {
                key "name";
                ordered-by user;
                description
                  "Configure global level attributes";
                leaf name {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "1 .. 2";
                    }
                  }
                  description
                    "IS-IS level number";
                }
    
                uses apply-advanced;
    
                choice enable-disable {
                  leaf disable {
                    type empty;
                    description
                      "Disable advertisements to this level";
                  }
                }  // choice enable-disable
    
                leaf metric {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "0 .. 16777215";
                    }
                  }
                  description
                    "SPF metric for this level";
                }
              }  // list level
            }  // list label-switched-path
    
            choice enable-disable {
              leaf disable {
                type empty;
                description "Disable IS-IS";
              }
            }  // choice enable-disable
    
            leaf-list export {
              type jt:policy-algebra;
              ordered-by user;
              description "Export policy";
            }
    
            leaf-list import {
              type jt:policy-algebra;
              ordered-by user;
              description "Import policy";
            }
    
            leaf reference-bandwidth {
              type string;
              description
                "Bandwidth for calculating metric defaults";
            }
    
            choice layer2-map-choice {
              leaf layer2-map {
                type empty;
                description
                  "Kernel ARP/ND creation for nexthops";
              }
              leaf no-layer2-map {
                type empty;
                description
                  "Don't kernel ARP/ND creation for nexthops";
              }
            }  // choice layer2-map-choice
    
            leaf job-stats {
              type empty;
              description
                "Collect job statistics";
            }
    
            leaf lsp-lifetime {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "350 .. 65535";
                }
              }
              units "seconds";
              description "Lifetime of LSPs";
            }
    
            leaf max-lsp-size {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "512 .. 1492";
                }
              }
              default "1492";
              description
                "Maximum size allowed for LSPs";
            }
    
            leaf max-hello-size {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "512 .. 16000";
                }
              }
              default "1492";
              description
                "Maximum size allowed for ISIS Hello PDUs";
            }
    
            leaf max-snp-size {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "512 .. 1400";
                }
              }
              default "1400";
              description
                "Maximum size allowed for Sequence Number (Complete/Partial) PDUs";
            }
    
            leaf spf-delay {
              junos:must "(!(".. spf-options delay"))";
              junos:must-message "You can only configure either spf-delay or delay under spf-options";
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "50 .. 120000";
                }
              }
              units "milliseconds";
              status deprecated;
              description
                "Time to wait before running an SPF";
            }
    
            leaf authentication-key {
              type jt:unreadable;
              status deprecated;
              description
                "Authentication key (password)";
            }
    
            leaf authentication-type {
              type enumeration {
                enum "md5" {
                  value 0;
                  status deprecated;
                  description
                    "MD5 authentication";
                }
                enum "simple" {
                  value 1;
                  status deprecated;
                  description
                    "Simple password authentication";
                }
              }
              status deprecated;
              description "Authentication type";
            }
    
            leaf loose-authentication-check {
              type empty;
              description
                "Verify authentication only if PDU has authentication TLV";
            }
    
            leaf max-areas {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "3 .. 36";
                }
              }
              default "3";
              description
                "Maximum number of advertised Areas";
            }
    
            leaf no-authentication-check {
              type empty;
              description
                "Disable authentication checking";
            }
    
            leaf no-ipv4-routing {
              type empty;
              description "Disable IPv4 routing";
            }
    
            leaf no-ipv6-routing {
              type empty;
              description "Disable IPv6 routing";
            }
    
            leaf no-adjacency-holddown {
              type empty;
              description
                "Disable adjacency hold down";
            }
    
            leaf multicast-topology {
              type empty;
              status deprecated;
              description
                "Enable multicast topology";
            }
    
            leaf ignore-attached-bit {
              type empty;
              description
                "Ignore the attached bit in Level 1 LSPs";
            }
    
            container rib-group {
              description
                "Routing table group for importing IS-IS routes";
              uses rib_group_type;
            }  // container rib-group
    
            container strict-dual-isis {
              junos:must "(!(".. topologies"))";
              junos:must-message "strict-dual-isis is not allowed with multi-topologies";
              presence "enable strict-dual-isis";
              description
                "Ensure both ipv4 and ipv6 connectivity for all adjacencies";
              uses apply-advanced;
    
              leaf holdown {
                type union {
                  type uint32;
                  type string {
                    pattern "<.*>|$.*";
                  }
                }
                default "12";
                description
                  "Set the holddown timer for strict spf computation";
              }
            }  // container strict-dual-isis
    
            container topologies {
              description "Enable topologies";
              uses apply-advanced;
    
              leaf ipv4-multicast {
                type empty;
                description
                  "Enable IPv4-multicast topology";
              }
    
              leaf ipv6-unicast {
                type empty;
                description
                  "Enable IPv6-unicast topology";
              }
    
              leaf ipv6-multicast {
                type empty;
                description
                  "Enable IPv6-multicast topology";
              }
            }  // container topologies
    
            container overload {
              presence "enable overload";
              description
                "Set the overload bit (no transit traffic)";
              uses apply-advanced;
    
              leaf timeout {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "60 .. 3600";
                  }
                }
                units "seconds";
                description
                  "Time after which overload bit is reset";
              }
    
              leaf advertise-high-metrics {
                type empty;
                description
                  "Advertise high metrics instead of setting the overload bit";
              }
    
              leaf allow-route-leaking {
                type empty;
                description
                  "Allow routes to be leaked when overload is configured";
              }
    
              leaf internal-prefixes {
                type empty;
                description
                  "Allow internal prefixes to be advertised with high metric";
              }
    
              leaf external-prefixes {
                type empty;
                description
                  "Allow external prefixes to be advertised with high metric";
              }
            }  // container overload
    
            container graceful-restart {
              description
                "IS-IS graceful restart options";
              choice enable-disable {
                leaf disable {
                  type empty;
                  description
                    "Disable graceful restart";
                }
              }  // choice enable-disable
    
              leaf helper-disable {
                type empty;
                description
                  "Disable graceful restart helper capability";
              }
    
              leaf restart-duration {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "30 .. 300";
                  }
                }
                units "seconds";
                description
                  "Maximum time for graceful restart to finish";
              }
            }  // container graceful-restart
          }  // list isis-instance
    
          container l2iw {
            presence "enable l2iw";
            description
              "Configuration for Layer 2 interworking";
            uses apply-advanced;
    
            container traceoptions {
              description
                "Trace options for Layer 2 circuits";
              uses apply-advanced;
    
              container file {
                description "Trace file options";
                leaf filename {
                  type string {
                    junos:posix-pattern "![/ %]";
                    junos:pattern-message "Must not contain '/', % or a space";
                    length "1 .. 1024";
                  }
                  description
                    "Name of file in which to write trace information";
                }
    
                leaf replace {
                  type empty;
                  status deprecated;
                  description
                    "Replace trace file rather than appending to it";
                }
    
                leaf size {
                  type string;
                  description
                    "Maximum trace file size";
                }
    
                leaf files {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "2 .. 1000";
                    }
                  }
                  default "10";
                  description
                    "Maximum number of trace files";
                }
    
                leaf no-stamp {
                  type empty;
                  status deprecated;
                  description
                    "Do not timestamp trace file";
                }
    
                choice world-readable-choice {
                  leaf world-readable {
                    type empty;
                    description
                      "Allow any user to read the log file";
                  }
                  leaf no-world-readable {
                    type empty;
                    description
                      "Don't allow any user to read the log file";
                  }
                }  // choice world-readable-choice
              }  // container file
    
              list flag {
                key "name";
                ordered-by user;
                description "Tracing parameters";
                leaf name {
                  type enumeration {
                    enum "error" {
                      value 0;
                      description "Trace errors";
                    }
                    enum "route" {
                      value 1;
                      description
                        "Trace routing information";
                    }
                    enum "normal" {
                      value 2;
                      description
                        "Trace normal events";
                    }
                    enum "general" {
                      value 3;
                      description
                        "Trace general events";
                    }
                    enum "state" {
                      value 4;
                      description
                        "Trace state transitions";
                    }
                    enum "policy" {
                      value 5;
                      description
                        "Trace policy processing";
                    }
                    enum "task" {
                      value 6;
                      description
                        "Trace routing protocol task processing";
                    }
                    enum "timer" {
                      value 7;
                      description
                        "Trace routing protocol timer processing";
                    }
                    enum "all" {
                      value 8;
                      description
                        "Trace everything";
                    }
                  }
                }
    
                leaf send {
                  type empty;
                  description
                    "Trace transmitted packets";
                }
    
                leaf receive {
                  type empty;
                  description
                    "Trace received packets";
                }
    
                leaf detail {
                  type empty;
                  description
                    "Trace detailed information";
                }
    
                leaf disable {
                  type empty;
                  description
                    "Disable this trace flag";
                }
              }  // list flag
            }  // container traceoptions
          }  // container l2iw
    
          container l2circuit {
            description
              "Configuration for Layer 2 circuits over MPLS";
            uses apply-advanced;
    
            container traceoptions {
              description
                "Trace options for Layer 2 circuits";
              uses apply-advanced;
    
              container file {
                description "Trace file options";
                leaf filename {
                  type string {
                    junos:posix-pattern "![/ %]";
                    junos:pattern-message "Must not contain '/', % or a space";
                    length "1 .. 1024";
                  }
                  description
                    "Name of file in which to write trace information";
                }
    
                leaf replace {
                  type empty;
                  status deprecated;
                  description
                    "Replace trace file rather than appending to it";
                }
    
                leaf size {
                  type string;
                  description
                    "Maximum trace file size";
                }
    
                leaf files {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "2 .. 1000";
                    }
                  }
                  default "10";
                  description
                    "Maximum number of trace files";
                }
    
                leaf no-stamp {
                  type empty;
                  status deprecated;
                  description
                    "Do not timestamp trace file";
                }
    
                choice world-readable-choice {
                  leaf world-readable {
                    type empty;
                    description
                      "Allow any user to read the log file";
                  }
                  leaf no-world-readable {
                    type empty;
                    description
                      "Don't allow any user to read the log file";
                  }
                }  // choice world-readable-choice
              }  // container file
    
              list flag {
                key "name";
                ordered-by user;
                description "Tracing parameters";
                leaf name {
                  type enumeration {
                    enum "error" {
                      value 0;
                      description "Trace errors";
                    }
                    enum "topology" {
                      value 1;
                      description
                        "Trace Layer 2 circuit topology changes";
                    }
                    enum "fec" {
                      value 2;
                      description
                        "Trace Layer 2 circuit VC FEC advertisements";
                    }
                    enum "connections" {
                      value 3;
                      description
                        "Trace Layer 2 circuit connections";
                    }
                    enum "oam" {
                      value 4;
                      description
                        "Trace Layer 2 circuit OAM messages";
                    }
                    enum "egress-protection" {
                      value 5;
                      description
                        "Trace Layer 2 circuit egress protection messages";
                    }
                    enum "auto-sensing" {
                      value 6;
                      description
                        "Trace Layer 2 circuit PW auto-sensing";
                    }
                    enum "sdb" {
                      value 7;
                      description "Trace SDB";
                    }
                    enum "route" {
                      value 8;
                      description
                        "Trace routing information";
                    }
                    enum "normal" {
                      value 9;
                      description
                        "Trace normal events";
                    }
                    enum "general" {
                      value 10;
                      description
                        "Trace general events";
                    }
                    enum "state" {
                      value 11;
                      description
                        "Trace state transitions";
                    }
                    enum "policy" {
                      value 12;
                      description
                        "Trace policy processing";
                    }
                    enum "task" {
                      value 13;
                      description
                        "Trace routing protocol task processing";
                    }
                    enum "timer" {
                      value 14;
                      description
                        "Trace routing protocol timer processing";
                    }
                    enum "all" {
                      value 15;
                      description
                        "Trace everything";
                    }
                  }
                }
    
                leaf send {
                  type empty;
                  description
                    "Trace transmitted packets";
                }
    
                leaf receive {
                  type empty;
                  description
                    "Trace received packets";
                }
    
                leaf detail {
                  type empty;
                  description
                    "Trace detailed information";
                }
    
                leaf disable {
                  type empty;
                  description
                    "Disable this trace flag";
                }
              }  // list flag
            }  // container traceoptions
    
            list neighbor {
              key "name";
              ordered-by user;
              description
                "List of Layer 2 circuits to this neighbor";
              leaf name {
                type jt:ipv4addr;
                description "Neighbor ID";
              }
    
              uses apply-advanced;
    
              list interface {
                key "name";
                ordered-by user;
                description
                  "Interface forming the Layer 2 circuit";
                leaf name {
                  type union {
                    type jt:interface-name;
                    type string {
                      pattern "<.*>|$.*";
                    }
                  }
                  description "Interface name";
                }
    
                uses apply-advanced;
    
                container static {
                  junos:must "((!(".. backup-neighbor") || all ".. backup-neighbor <*> static"))";
                  junos:must-message "Backup neighbor should be static";
                  presence "enable static";
                  description
                    "Configuration of static Pseudowire";
                  uses apply-advanced;
    
                  leaf incoming-label {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint32 {
                        range "16 .. 1048575";
                      }
                    }
                    description
                      "Layer 2 circuit incoming static label";
                  }
    
                  leaf outgoing-label {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint32 {
                        range "16 .. 1048575";
                      }
                    }
                    description
                      "Layer 2 circuit outgoing static label";
                  }
    
                  leaf send-oam {
                    type empty;
                    description
                      "Turn on sending of l2ckt ping";
                  }
                }  // container static
    
                leaf psn-tunnel-endpoint {
                  type jt:ipv4addr;
                  description
                    "Endpoint of the transport tunnel on the remote PE";
                }
    
                leaf protect-interface {
                  type union {
                    type jt:interface-name;
                    type string {
                      pattern "<.*>|$.*";
                    }
                  }
                  description
                    "Name of protect interface";
                }
    
                leaf virtual-circuit-id {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "1 .. 4294967295";
                    }
                  }
                  description
                    "Identifier for this Layer 2 circuit";
                }
    
                leaf description {
                  type string;
                  description
                    "Text description of Layer 2 circuit";
                }
    
                choice control-word-choice {
                  leaf control-word {
                    type empty;
                    description
                      "Add control word to the Layer 2 encapsulation";
                  }
                  leaf no-control-word {
                    type empty;
                    description
                      "Don't add control word to the Layer 2 encapsulation";
                  }
                }  // choice control-word-choice
    
                leaf flow-label-transmit {
                  junos:must "(!(".. egress-protection"))";
                  junos:must-message "Can't configure flow-label with egress-protection";
                  junos:must "(!(".. connection-protection"))";
                  junos:must-message "Can't configure flow-label with connection-protection";
                  type empty;
                  description
                    "Advertise capability to push Flow Label in transmit direction to remote PE";
                }
    
                leaf flow-label-transmit-static {
                  junos:must "(!(".. static"))";
                  junos:must-message "Can't configure flow-label for static pseudowire";
                  junos:must "(!(".. egress-protection"))";
                  junos:must-message "Can't configure flow-label with egress-protection";
                  junos:must "(!(".. connection-protection"))";
                  junos:must-message "Can't configure flow-label with connection-protection";
                  junos:must "(!(".. backup-neighbor"))";
                  junos:must-message "Can't configure flow-label with backup-neighbor";
                  junos:must "(!(".. flow-label-transmit"))";
                  junos:must-message "Can't have flow-label-transmit-static along with flow-label-transmit";
                  type empty;
                  description
                    "Push Flow Label on PW packets sent to remote PE";
                }
    
                leaf flow-label-receive {
                  junos:must "(!(".. egress-protection"))";
                  junos:must-message "Can't configure flow-label with egress-protection";
                  junos:must "(!(".. connection-protection"))";
                  junos:must-message "Can't configure flow-label with connection-protection";
                  type empty;
                  description
                    "Advertise capability to pop Flow Label in receive direction to remote PE";
                }
    
                leaf flow-label-receive-static {
                  junos:must "(!(".. static"))";
                  junos:must-message "Can't configure flow-label for static pseudowire";
                  junos:must "(!(".. egress-protection"))";
                  junos:must-message "Can't configure flow-label with egress-protection";
                  junos:must "(!(".. connection-protection"))";
                  junos:must-message "Can't configure flow-label with connection-protection";
                  junos:must "(!(".. backup-neighbor"))";
                  junos:must-message "Can't configure flow-label with backup-neighbor";
                  junos:must "(!(".. flow-label-receive"))";
                  junos:must-message "Can't have flow-label-receive-static along with flow-label-receive";
                  type empty;
                  description
                    "Pop Flow Label from PW packets received from remote PE";
                }
    
                leaf community {
                  type string;
                  description
                    "Community associated with this Layer 2 circuit";
                }
    
                leaf mtu {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "512 .. 65535";
                    }
                  }
                  description
                    "MTU to be advertised for this Layer 2 circuit";
                }
    
                leaf encapsulation-type {
                  type enumeration {
                    enum "atm-aal5" {
                      value 0;
                      description
                        "ATM AAL/5 encapsulation";
                    }
                    enum "atm-cell" {
                      value 1;
                      description
                        "ATM port promiscuous mode cell encapsulation";
                    }
                    enum "atm-cell-port-mode" {
                      value 2;
                      description
                        "ATM port promiscuous mode cell encapsulation";
                    }
                    enum "atm-cell-vp-mode" {
                      value 3;
                      description
                        "ATM VP promiscuous mode cell encapsulation";
                    }
                    enum "atm-cell-vc-mode" {
                      value 4;
                      description
                        "ATM non-promiscuous cell encapsulation";
                    }
                    enum "frame-relay" {
                      value 5;
                      description
                        "Frame Relay encapsulation";
                    }
                    enum "ppp" {
                      value 6;
                      description
                        "PPP encapsulation";
                    }
                    enum "cisco-hdlc" {
                      value 7;
                      description
                        "Cisco-compatible HDLC encapsulation";
                    }
                    enum "ethernet-vlan" {
                      value 8;
                      description
                        "Ethernet VLAN encapsulation";
                    }
                    enum "ethernet" {
                      value 9;
                      description
                        "Ethernet encapsulation";
                    }
                    enum "interworking" {
                      value 10;
                      description
                        "Layer 2.5 interworking VPN";
                    }
                    enum "frame-relay-port-mode" {
                      value 11;
                      description
                        "Frame Relay port mode encapsulation";
                    }
                    enum "satop-t1" {
                      value 12;
                      description
                        "SATOP-T1 based Layer 2 VPN";
                    }
                    enum "satop-e1" {
                      value 13;
                      description
                        "SATOP-E1 based Layer 2 VPN";
                    }
                    enum "satop-t3" {
                      value 14;
                      description
                        "SATOP-T3 based Layer 2 VPN";
                    }
                    enum "satop-e3" {
                      value 15;
                      description
                        "SATOP-E3 based Layer 2 VPN";
                    }
                    enum "cesop" {
                      value 16;
                      description
                        "CESOP based Layer 2 VPN";
                    }
                  }
                  description
                    "Encapsulation type for VPN";
                }
    
                leaf ignore-encapsulation-mismatch {
                  junos:must "(!(".. static"))";
                  junos:must-message "not supported for static pseudowires";
                  type empty;
                  description
                    "Allow different encapsulation types on local and remote end";
                }
    
                leaf ignore-mtu-mismatch {
                  junos:must "(!(".. static"))";
                  junos:must-message "not supported for static pseudowires";
                  type empty;
                  description
                    "Allow different MTUs on interfaces";
                }
    
                leaf no-revert {
                  junos:must "(".. protect-interface")";
                  junos:must-message "no-revert cannot be configured without protect-interface";
                  type empty;
                  description
                    "Don't revert to primary-interface";
                }
    
                container bandwidth {
                  description
                    "Bandwidth to reserve (bps)";
                  uses bandwidth-type;
                }  // container bandwidth
    
                leaf send-ip-addr-list-tlv {
                  type empty;
                  description
                    "Send IP ADDR LIST TLV to remote side";
                }
    
                container pseudowire-status-tlv {
                  presence
                    "enable pseudowire-status-tlv";
                  description
                    "Send pseudowire status TLV";
                  uses apply-advanced;
    
                  leaf hot-standby-vc-on {
                    junos:must "(!(".. .. static"))";
                    junos:must-message "not supported for static pseudowires";
                    type empty;
                    description
                      "Activate pseudowire upon arrival of 'hot-standby' status TLV message";
                  }
                }  // container pseudowire-status-tlv
    
                leaf switchover-delay {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "0 .. 180000";
                    }
                  }
                  units "milliseconds";
                  default "10000";
                  description
                    "Layer 2 circuit switchover delay";
                }
    
                container revert-time {
                  presence "enable revert-time";
                  description
                    "Enable pseudowire redundancy reversion";
                  leaf delay {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint32 {
                        range "0 .. 600";
                      }
                    }
                    units "seconds";
                    description
                      "Reversion timer (seconds)";
                  }
    
                  leaf maximum {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint32 {
                        range "0 .. 1200";
                      }
                    }
                    units "seconds";
                    description
                      "Maximum reversion interval to add over revert-time delay";
                  }
                }  // container revert-time
    
                leaf connection-protection {
                  junos:must "((!(".. backup-neighbor") || all ".. backup-neighbor <*> standby"))";
                  junos:must-message "For connection-protection services, backup neighbor must be standby";
                  junos:must "(!(".. switchover-delay"))";
                  junos:must-message "connection-protection cannot be configured with switchover-delay";
                  junos:must "(!(".. revert-time"))";
                  junos:must-message "connection-protection cannot be configured with revert-time";
                  type empty;
                  description
                    "End-2-end protection via OAM failure detection";
                }
    
                list backup-neighbor {
                  key "name";
                  ordered-by user;
                  description
                    "Configuration of redundant l2circuit";
                  leaf name {
                    type jt:ipv4addr;
                    description "Neighbor ID";
                  }
    
                  uses apply-advanced;
    
                  container static {
                    junos:must "(".. .. static")";
                    junos:must-message "Primary Pseudo wire has to be static";
                    presence "enable static";
                    description
                      "Configuration of static Pseudowire";
                    uses apply-advanced;
    
                    leaf incoming-label {
                      type union {
                        type string {
                          pattern "<.*>|$.*";
                        }
                        type uint32 {
                          range "16 .. 1048575";
                        }
                      }
                      description
                        "Layer 2 circuit incoming static label";
                    }
    
                    leaf outgoing-label {
                      type union {
                        type string {
                          pattern "<.*>|$.*";
                        }
                        type uint32 {
                          range "16 .. 1048575";
                        }
                      }
                      description
                        "Layer 2 circuit outgoing static label";
                    }
                  }  // container static
    
                  leaf virtual-circuit-id {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint32 {
                        range "1 .. 4294967295";
                      }
                    }
                    description
                      "Identifier for this Layer 2 circuit";
                  }
    
                  leaf community {
                    junos:must "(!(".. .. connection-protection"))";
                    junos:must-message "The backup neighbor cannot be configured with community alongwith connection-protection";
                    type string;
                    description
                      "Community associated with this Layer 2 circuit";
                  }
    
                  leaf psn-tunnel-endpoint {
                    type jt:ipv4addr;
                    description
                      "Endpoint of the transport tunnel on the remote PE";
                  }
    
                  leaf standby {
                    type empty;
                    description
                      "Keep backup pseudowire in continuous standby";
                  }
    
                  leaf hot-standby {
                    junos:must "(".. .. pseudowire-status-tlv")";
                    junos:must-message "Pseudowire-status-tlv must be configured in order to have hot-standby enabled";
                    junos:must "(!(".. .. connection-protection"))";
                    junos:must-message "Hot-standby cannot be configured while having connection-protection enabled";
                    junos:must "(!(".. standby"))";
                    junos:must-message "The backup neighbor cannot be configured with standby and hot-standby features simultaneously";
                    type empty;
                    description
                      "Keep backup pseudowire in continuous standby mode and ready for traffic forwarding";
                  }
                }  // list backup-neighbor
    
                container oam {
                  description
                    "OAM Configuration for Layer 2 circuit";
                  uses apply-advanced;
    
                  leaf ping-interval {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint16 {
                        range "30 .. 3600";
                      }
                    }
                    units "seconds";
                    default "60";
                    description
                      "Time interval between ping messages";
                  }
    
                  leaf ping-multiplier {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint8 {
                        range "1 .. 5";
                      }
                    }
                    description
                      "Number of ping reply missed before declaring BFD down";
                  }
    
                  container bfd-liveness-detection {
                    description
                      "Bidirectional Forwarding Detection (BFD) options";
                    uses apply-advanced;
    
                    leaf version {
                      type enumeration {
                        enum "0" {
                          value 0;
                          description
                            "BFD version 0 (deprecated)";
                        }
                        enum "1" {
                          value 1;
                          description
                            "BFD version 1";
                        }
                        enum "automatic" {
                          value 2;
                          description
                            "Choose BFD version automatically";
                        }
                      }
                      default "automatic";
                      description
                        "BFD protocol version number";
                    }
    
                    leaf minimum-interval {
                      type union {
                        type string {
                          pattern "<.*>|$.*";
                        }
                        type uint32 {
                          range "1 .. 255000";
                        }
                      }
                      units "milliseconds";
                      description
                        "Minimum transmit and receive interval";
                    }
    
                    leaf minimum-transmit-interval {
                      type union {
                        type string {
                          pattern "<.*>|$.*";
                        }
                        type uint32 {
                          range "1 .. 255000";
                        }
                      }
                      units "milliseconds";
                      status deprecated;
                      description
                        "Minimum transmit interval";
                    }
    
                    leaf minimum-receive-interval {
                      type union {
                        type string {
                          pattern "<.*>|$.*";
                        }
                        type uint32 {
                          range "1 .. 255000";
                        }
                      }
                      units "milliseconds";
                      description
                        "Minimum receive interval";
                    }
    
                    leaf multiplier {
                      type union {
                        type string {
                          pattern "<.*>|$.*";
                        }
                        type uint32 {
                          range "1 .. 255";
                        }
                      }
                      default "3";
                      description
                        "Detection time multiplier";
                    }
    
                    choice adaptation-choice {
                      leaf no-adaptation {
                        type empty;
                        description
                          "Disable adaptation";
                      }
                    }  // choice adaptation-choice
    
                    container transmit-interval {
                      description
                        "Transmit-interval options";
                      uses apply-advanced;
    
                      leaf minimum-interval {
                        type union {
                          type string {
                            pattern "<.*>|$.*";
                          }
                          type uint32 {
                            range "1 .. 255000";
                          }
                        }
                        units "milliseconds";
                        description
                          "Minimum transmit interval";
                      }
    
                      leaf threshold {
                        type union {
                          type uint32;
                          type string {
                            pattern "<.*>|$.*";
                          }
                        }
                        units "milliseconds";
                        description
                          "High transmit interval triggering a trap";
                      }
                    }  // container transmit-interval
    
                    container detection-time {
                      description
                        "Detection-time options";
                      uses apply-advanced;
    
                      leaf threshold {
                        type union {
                          type uint32;
                          type string {
                            pattern "<.*>|$.*";
                          }
                        }
                        units "milliseconds";
                        description
                          "High detection-time triggering a trap";
                      }
                    }  // container detection-time
                  }  // container bfd-liveness-detection
                }  // container oam
    
                container egress-protection {
                  junos:must "(!(".. backup-neighbor"))";
                  junos:must-message "Can't configure both backup-neighbor and egress-protection";
                  junos:must "(!(".. protect-interface"))";
                  junos:must-message "Can't configure both protect-interface and egress-protection";
                  description
                    "Egress protection for Layer 2 circuit";
                  uses apply-advanced;
    
                  choice protection-type {
                    leaf protector-interface {
                      junos:must "(!(".. protected-l2circuit"))";
                      junos:must-message "Can't configure both protector-interface and protected-l2circuit";
                      type union {
                        type jt:interface-name;
                        type string {
                          pattern "<.*>|$.*";
                        }
                      }
                      description
                        "Name of the protector interface for local protection";
                    }
                    container protector-pe {
                      junos:must "(".. .. .. .. .. ldp upstream-label-assignment")";
                      junos:must-message "LDP upstream-label-assignment capability must be enabled";
                      description
                        "Address of the protector PE";
                      leaf address {
                        type jt:ipv4addr;
                        description
                          "Address of the protector PE";
                      }
    
                      leaf context-identifier {
                        type jt:ipv4addr;
                        description
                          "Identifier of the context used for this protection";
                      }
    
                      leaf lsp {
                        type string {
                          junos:posix-pattern "^.{1,64}$";
                          junos:pattern-message "Must be a string of 64 characters or less";
                        }
                        description
                          "Name of the label-switched path used for the protection";
                      }
                    }  // container protector-pe
                  }  // choice protection-type
    
                  container protected-l2circuit {
                    junos:must "(".. .. .. .. .. ldp upstream-label-assignment")";
                    junos:must-message "LDP upstream-label-assignment capability must be enabled";
                    description
                      "Primary Layer 2 circuit to be protected";
                    leaf l2circuit-name {
                      type string {
                        junos:posix-pattern "^.{1,64}$";
                        junos:pattern-message "Must be a string of 64 characters or less";
                      }
                      description
                        "Name of the protected Layer 2 circuit";
                    }
    
                    leaf ingress-pe {
                      type jt:ipv4addr;
                      description
                        "Ingress PE address of the protected Layer 2 circuit";
                    }
    
                    leaf egress-pe {
                      type jt:ipv4addr;
                      description
                        "Egress PE address of the protected Layer 2 circuit";
                    }
    
                    leaf virtual-circuit-id {
                      type union {
                        type string {
                          pattern "<.*>|$.*";
                        }
                        type uint32 {
                          range
                            "1 .. 4294967295";
                        }
                      }
                      description
                        "Identifier of the protected Layer 2 circuit";
                    }
                  }  // container protected-l2circuit
                }  // container egress-protection
              }  // list interface
            }  // list neighbor
    
            container local-switching {
              description
                "Configuration of Layer 2 circuits local switching";
              uses apply-advanced;
    
              list interface {
                key "name";
                ordered-by user;
                description
                  "Interface forming the local Layer 2 circuit";
                leaf name {
                  type union {
                    type jt:interface-name;
                    type string {
                      pattern "<.*>|$.*";
                    }
                  }
                  description "Interface name";
                }
    
                uses apply-advanced;
    
                leaf no-revert {
                  junos:must "(".. protect-interface")";
                  junos:must-message "no-revert cannot be configured without protect-interface";
                  type empty;
                  description
                    "Do not revert to primary-interface";
                }
    
                leaf protect-interface {
                  type union {
                    type jt:interface-name;
                    type string {
                      pattern "<.*>|$.*";
                    }
                  }
                  description
                    "Name of protect interface";
                }
    
                leaf connection-protection {
                  junos:must "((".. neighbor" || (".. backup-neighbor" || ".. end-interface backup-interface")))";
                  junos:must-message "Connection-protection can be configured only when neighbor/backup-neighbor/backup-interface is present";
                  type empty;
                  description
                    "End-2-end protection via OAM failure detection";
                }
    
                list neighbor {
                  junos:must "(".. end-interface backup-interface")";
                  junos:must-message "Backup-interface must be configured when neighbor is present";
                  junos:must "(".. connection-protection")";
                  junos:must-message "Connection-protection must be configured when neighbor is present";
                  junos:must "(!(".. end-interface interface"))";
                  junos:must-message "Neighbor cannot be configured along with end-interface interface";
                  junos:must "(!(".. backup-neighbor"))";
                  junos:must-message "Neighbor cannot be configured along with backup-neighbor";
                  key "name";
                  ordered-by user;
                  description
                    "Configuration of Layer 2 circuit";
                  leaf name {
                    type jt:ipv4addr;
                    description "Neighbor ID";
                  }
    
                  uses apply-advanced;
    
                  leaf virtual-circuit-id {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint32 {
                        range "1 .. 4294967295";
                      }
                    }
                    description
                      "Identifier for this Layer 2 circuit";
                  }
    
                  leaf community {
                    type string;
                    description
                      "Community associated with this Layer 2 circuit";
                  }
    
                  leaf psn-tunnel-endpoint {
                    type jt:ipv4addr;
                    description
                      "Endpoint of the transport tunnel on the neighbor PE";
                  }
    
                  leaf mtu {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint32 {
                        range "512 .. 65535";
                      }
                    }
                    description
                      "MTU to be advertised for this Layer 2 circuit";
                  }
                }  // list neighbor
    
                list backup-neighbor {
                  junos:must "(".. end-interface interface")";
                  junos:must-message "End-interface interface must be configured when backup-neighbor is present";
                  junos:must "(".. connection-protection")";
                  junos:must-message "Connection-protection must be configured when backup-neighbor is present";
                  junos:must "(!(".. end-interface backup-interface"))";
                  junos:must-message "Backup-neighbor cannot be configured along with backup-interface";
                  junos:must "(!(".. neighbor"))";
                  junos:must-message "Backup-neighbor cannot be configured along with neighbor";
                  key "name";
                  ordered-by user;
                  description
                    "Configuration of redundant l2circuit";
                  leaf name {
                    type jt:ipv4addr;
                    description
                      "Backup Neighbor ID";
                  }
    
                  uses apply-advanced;
    
                  leaf virtual-circuit-id {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint32 {
                        range "1 .. 4294967295";
                      }
                    }
                    description
                      "Identifier for this Layer 2 circuit";
                  }
    
                  leaf psn-tunnel-endpoint {
                    type jt:ipv4addr;
                    description
                      "Endpoint of the transport tunnel on the backup neighbor PE";
                  }
    
                  leaf community {
                    type string;
                    description
                      "Community associated with this Layer 2 circuit";
                  }
    
                  leaf mtu {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint32 {
                        range "512 .. 65535";
                      }
                    }
                    description
                      "MTU to be advertised for this Layer 2 circuit";
                  }
                }  // list backup-neighbor
    
                container end-interface {
                  description
                    "Interface name of the other end point";
                  uses apply-advanced;
    
                  leaf interface {
                    junos:must "(!(".. .. neighbor"))";
                    junos:must-message "end-interface interface cannot be configured along with neighbor";
                    type union {
                      type jt:interface-name;
                      type string {
                        pattern "<.*>|$.*";
                      }
                    }
                    description "Interface name";
                  }
    
                  leaf no-revert {
                    junos:must "(".. protect-interface")";
                    junos:must-message "no-revert cannot be configured without protect-interface";
                    type empty;
                    description
                      "Do not revert to primary-interface";
                  }
    
                  leaf protect-interface {
                    junos:must "(".. interface")";
                    junos:must-message "Protect-interface can be configured only when end-interface interface is present";
                    type union {
                      type jt:interface-name;
                      type string {
                        pattern "<.*>|$.*";
                      }
                    }
                    description
                      "Name of protect interface";
                  }
    
                  leaf backup-interface {
                    junos:must "((".. interface" || ".. .. neighbor"))";
                    junos:must-message "Backup-interface can be configured only when neighbor/end-interface interface is present";
                    junos:must "(".. .. connection-protection")";
                    junos:must-message "Connection-protection must be configured when backup-interface is present";
                    junos:must "(!(".. .. backup-neighbor"))";
                    junos:must-message "Backup-interface cannot be configured along with backup-neighbor";
                    junos:must "(!(".. protect-interface"))";
                    junos:must-message "Backup-interface cannot be configured along with protect-interface";
                    type union {
                      type jt:interface-name;
                      type string {
                        pattern "<.*>|$.*";
                      }
                    }
                    description
                      "Name of backup interface";
                  }
                }  // container end-interface
    
                leaf description {
                  type string;
                  description
                    "Text description of Layer 2 circuit";
                }
    
                leaf encapsulation-type {
                  type enumeration {
                    enum "atm-aal5" {
                      value 0;
                      description
                        "ATM AAL/5 encapsulation";
                    }
                    enum "atm-cell" {
                      value 1;
                      description
                        "ATM port promiscuous mode cell encapsulation";
                    }
                    enum "atm-cell-port-mode" {
                      value 2;
                      description
                        "ATM port promiscuous mode cell encapsulation";
                    }
                    enum "atm-cell-vp-mode" {
                      value 3;
                      description
                        "ATM VP promiscuous mode cell encapsulation";
                    }
                    enum "atm-cell-vc-mode" {
                      value 4;
                      description
                        "ATM non-promiscuous cell encapsulation";
                    }
                    enum "frame-relay" {
                      value 5;
                      description
                        "Frame Relay encapsulation";
                    }
                    enum "ppp" {
                      value 6;
                      description
                        "PPP encapsulation";
                    }
                    enum "cisco-hdlc" {
                      value 7;
                      description
                        "Cisco-compatible HDLC encapsulation";
                    }
                    enum "ethernet-vlan" {
                      value 8;
                      description
                        "Ethernet VLAN encapsulation";
                    }
                    enum "ethernet" {
                      value 9;
                      description
                        "Ethernet encapsulation";
                    }
                    enum "interworking" {
                      value 10;
                      description
                        "Layer 2.5 interworking VPN";
                    }
                    enum "frame-relay-port-mode" {
                      value 11;
                      description
                        "Frame Relay port mode encapsulation";
                    }
                    enum "satop-t1" {
                      value 12;
                      description
                        "SATOP-T1 based Layer 2 VPN";
                    }
                    enum "satop-e1" {
                      value 13;
                      description
                        "SATOP-E1 based Layer 2 VPN";
                    }
                    enum "satop-t3" {
                      value 14;
                      description
                        "SATOP-T3 based Layer 2 VPN";
                    }
                    enum "satop-e3" {
                      value 15;
                      description
                        "SATOP-E3 based Layer 2 VPN";
                    }
                    enum "cesop" {
                      value 16;
                      description
                        "CESOP based Layer 2 VPN";
                    }
                  }
                  description
                    "Encapsulation type for VPN";
                }
    
                leaf ignore-encapsulation-mismatch {
                  type empty;
                  description
                    "Allow different encapsulation types on local and remote end";
                }
    
                leaf ignore-mtu-mismatch {
                  type empty;
                  description
                    "Allow different MTUs on interfaces";
                }
              }  // list interface
            }  // container local-switching
    
            container auto-sensing {
              presence "enable auto-sensing";
              description
                "Configuration of PW auto-sensing";
              uses apply-advanced;
    
              leaf password {
                type jt:unreadable;
                description
                  "Password for authentication with Radius server; 1 to 15 characters long";
              }
            }  // container auto-sensing
    
            container resolution {
              description
                "Configuration of PW nexthop resolution";
              uses apply-advanced;
    
              leaf preserve-nexthop-heirarchy {
                type empty;
                description
                  "Install expanded heirarchy";
              }
            }  // container resolution
          }  // container l2circuit
    
          container l2vpn {
            description
              "Configuration for Layer 2 VPN circuits over MPLS";
            uses apply-advanced;
    
            container resolution {
              description
                "Configuration of PW nexthop resolution";
              uses apply-advanced;
    
              leaf preserve-nexthop-heirarchy {
                type empty;
                description
                  "Install expanded heirarchy";
              }
            }  // container resolution
          }  // container l2vpn
    
          container ldp {
            description "LDP options";
            uses juniper-protocols-ldp;
          }  // container ldp
    
          container link-management {
            description "LMP options";
            uses juniper-protocols-lmp;
          }  // container link-management
    
          container mld {
            presence "enable mld";
            description "MLD options";
            uses apply-advanced;
    
            container traceoptions {
              description
                "Trace options for MLD";
              uses apply-advanced;
    
              container file {
                description "Trace file options";
                leaf filename {
                  type string {
                    junos:posix-pattern "![/ %]";
                    junos:pattern-message "Must not contain '/', % or a space";
                    length "1 .. 1024";
                  }
                  description
                    "Name of file in which to write trace information";
                }
    
                leaf replace {
                  type empty;
                  status deprecated;
                  description
                    "Replace trace file rather than appending to it";
                }
    
                leaf size {
                  type string;
                  description
                    "Maximum trace file size";
                }
    
                leaf files {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "2 .. 1000";
                    }
                  }
                  default "10";
                  description
                    "Maximum number of trace files";
                }
    
                leaf no-stamp {
                  type empty;
                  status deprecated;
                  description
                    "Do not timestamp trace file";
                }
    
                choice world-readable-choice {
                  leaf world-readable {
                    type empty;
                    description
                      "Allow any user to read the log file";
                  }
                  leaf no-world-readable {
                    type empty;
                    description
                      "Don't allow any user to read the log file";
                  }
                }  // choice world-readable-choice
              }  // container file
    
              list flag {
                key "name";
                ordered-by user;
                description "Tracing parameters";
                leaf name {
                  type enumeration {
                    enum "packets" {
                      value 0;
                      description
                        "Trace all MLD packets";
                    }
                    enum "query" {
                      value 1;
                      description
                        "Trace MLD membership query messages";
                    }
                    enum "report" {
                      value 2;
                      description
                        "Trace membership report messages";
                    }
                    enum "leave" {
                      value 3;
                      description
                        "Trace leave group messages (MLDv2 only)";
                    }
                    enum "mtrace" {
                      value 4;
                      description
                        "Trace mtrace packets";
                    }
                    enum "group" {
                      value 5;
                      description
                        "Trace group operations";
                    }
                    enum "client-notification" {
                      value 6;
                      description
                        "Trace notifications";
                    }
                    enum "host-notification" {
                      value 7;
                      description
                        "Trace host notifications";
                    }
                    enum "route" {
                      value 8;
                      description
                        "Trace routing information";
                    }
                    enum "normal" {
                      value 9;
                      description
                        "Trace normal events";
                    }
                    enum "general" {
                      value 10;
                      description
                        "Trace general events";
                    }
                    enum "state" {
                      value 11;
                      description
                        "Trace state transitions";
                    }
                    enum "policy" {
                      value 12;
                      description
                        "Trace policy processing";
                    }
                    enum "task" {
                      value 13;
                      description
                        "Trace routing protocol task processing";
                    }
                    enum "timer" {
                      value 14;
                      description
                        "Trace routing protocol timer processing";
                    }
                    enum "all" {
                      value 15;
                      description
                        "Trace everything";
                    }
                  }
                }
    
                leaf send {
                  type empty;
                  description
                    "Trace transmitted packets";
                }
    
                leaf receive {
                  type empty;
                  description
                    "Trace received packets";
                }
    
                leaf detail {
                  type empty;
                  description
                    "Trace detailed information";
                }
    
                leaf disable {
                  type empty;
                  description
                    "Disable this trace flag";
                }
              }  // list flag
            }  // container traceoptions
    
            leaf query-interval {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "1 .. 1024";
                }
              }
              units "seconds";
              description
                "When to send host query messages";
            }
    
            leaf query-response-interval {
              type string {
                junos:posix-pattern "^[0-9]{1,4}(.[0-9])?$";
                junos:pattern-message "Up to 1 digit to right of decimal point";
              }
              units "seconds";
              description
                "How long to wait for a host query response";
            }
    
            leaf query-last-member-interval {
              type string {
                junos:posix-pattern "^[0-9]{1,4}(.[0-9])?$";
                junos:pattern-message "Up to 1 digit to right of decimal point";
              }
              units "seconds";
              description
                "When to send group query messages";
            }
    
            leaf robust-count {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "2 .. 10";
                }
              }
              description
                "Expected packet loss on a subnet";
            }
    
            leaf maximum-transmit-rate {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "1 .. 10000";
                }
              }
              description
                "Maximum transmission rate (packets per second)";
            }
    
            leaf accounting {
              type empty;
              description
                "Enable join and leave event notification";
            }
    
            list interface {
              key "name";
              ordered-by user;
              description
                "Interface options for MLD";
              leaf name {
                type string;
              }
    
              uses apply-advanced;
    
              choice enable-disable {
                leaf disable {
                  type empty;
                  description
                    "Disable MLD on this interface";
                }
              }  // choice enable-disable
    
              leaf version {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint8 {
                    range "1 .. 2";
                  }
                }
                description
                  "Set mld version number on this interface";
              }
    
              container static {
                description
                  "Static group or source membership";
                uses apply-advanced;
    
                list group {
                  key "name";
                  ordered-by user;
                  description
                    "IP multicast group address";
                  leaf name {
                    type jt:ipv6addr;
                    description
                      "IP multicast group address";
                  }
    
                  uses apply-advanced;
    
                  leaf group-increment {
                    type jt:ipv6addr;
                    description
                      "Mask for the incrementing group IP address";
                  }
    
                  leaf group-count {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint32 {
                        range "1 .. 512";
                      }
                    }
                    description
                      "Number of groups";
                  }
    
                  leaf exclude {
                    type empty;
                    description
                      "Exclude sources";
                  }
    
                  list source {
                    key "name";
                    ordered-by user;
                    description
                      "IP multicast source address";
                    leaf name {
                      type jt:ipv6addr;
                      description
                        "Source address of IP multicast data";
                    }
    
                    uses apply-advanced;
    
                    leaf source-increment {
                      type jt:ipv6addr;
                      description
                        "Mask for the incrementing source IP address";
                    }
    
                    leaf source-count {
                      type union {
                        type string {
                          pattern "<.*>|$.*";
                        }
                        type uint32 {
                          range "1 .. 1024";
                        }
                      }
                      description
                        "Number of sources";
                    }
                  }  // list source
                }  // list group
              }  // container static
    
              leaf ssm-map {
                type string;
                description
                  "Map for ssm translation of mld v1 messages";
              }
    
              leaf-list ssm-map-policy {
                type jt:policy-algebra;
                ordered-by user;
                description
                  "SSM map policy name";
              }
    
              leaf immediate-leave {
                type empty;
                description
                  "Group removed immediately, last membership query not sent";
              }
    
              leaf-list group-policy {
                type jt:policy-algebra;
                ordered-by user;
                description
                  "Group filter applied to incoming mld report messages";
              }
    
              leaf group-limit {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint16 {
                    range "1 .. 32767";
                  }
                }
                description
                  "Maximum number of (source,group) per interface";
              }
    
              leaf group-threshold {
                junos:must "(".. group-limit")";
                junos:must-message "To configure group-threshold, group-limit must be configured";
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint16 {
                    range "1 .. 100";
                  }
                }
                description
                  "Percentage of group-limit at which to start generating warnings";
              }
    
              leaf log-interval {
                junos:must "(".. group-limit")";
                junos:must-message "To configure log-interval, group-limit must be configured";
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "6 .. 32767";
                  }
                }
                description
                  "Time between consecutive log messages";
              }
    
              choice accounting-choice {
                leaf accounting {
                  type empty;
                  description
                    "Enable join and leave event notification";
                }
                leaf no-accounting {
                  type empty;
                  description
                    "Don't enable join and leave event notification";
                }
              }  // choice accounting-choice
    
              container passive {
                presence "enable passive";
                description
                  "Suppress sending and receiving mld messages";
                leaf allow-receive {
                  type empty;
                  description
                    "Allow receiving mld messages";
                }
    
                leaf send-general-query {
                  type empty;
                  description
                    "Send mld general query messages";
                }
    
                leaf send-group-query {
                  type empty;
                  description
                    "Send mld group query messages";
                }
              }  // container passive
    
              leaf-list oif-map {
                type jt:policy-algebra;
                ordered-by user;
                description
                  "Output interface map";
              }
    
              leaf distributed {
                junos:must "("chassis network-services enhanced-ip")";
                junos:must-message "distributed is supported only in enhanced-ip mode";
                type empty;
                description
                  "Distributed MLD interface";
              }
            }  // list interface
          }  // container mld
    
          container mpls {
            description
              "Multiprotocol Label Switching options";
            uses juniper-protocols-mpls;
          }  // container mpls
    
          container msdp {
            description "MSDP configuration";
            uses juniper-protocols-msdp;
          }  // container msdp
    
          container mvpn {
            description "BGP-MVPN configuration";
            uses juniper-protocols-mvpn;
          }  // container mvpn
    
          container ospf {
            description "OSPF configuration";
            uses juniper-protocols-ospf;
          }  // container ospf
    
          container ospf3 {
            description "OSPFv3 configuration";
            uses juniper-protocols-ospf3;
          }  // container ospf3
    
          container pim {
            description "PIM configuration";
            uses juniper-protocols-pim;
          }  // container pim
    
          container ripng {
            description "RIPng options";
            uses juniper-protocols-ripng;
          }  // container ripng
    
          container rip {
            description "RIP options";
            uses juniper-protocols-rip;
          }  // container rip
    
          container rsvp {
            description "RSVP options";
            uses juniper-protocols-rsvp;
          }  // container rsvp
    
          container sap {
            presence "enable sap";
            description
              "Session Advertisement Protocol options";
            uses apply-advanced;
    
            choice enable-disable {
              leaf disable {
                type empty;
                description "Disable SAP";
              }
            }  // choice enable-disable
    
            list listen {
              key "name";
              ordered-by user;
              description
                "Address for SAP and SDP to listen on";
              leaf name {
                type jt:ipv4addr;
                description "IP address";
              }
    
              leaf port {
                type union {
                  type uint16;
                  type string {
                    pattern "<.*>|$.*";
                  }
                }
                description
                  "Port to listen for session advertisements";
              }
            }  // list listen
          }  // container sap
    
          container source-packet-routing {
            presence
              "enable source-packet-routing";
            description
              "Enable source packet routing (SPRING)";
            uses apply-advanced;
    
            container traceoptions {
              description
                "Trace options for soure-packet-routing";
              uses apply-advanced;
    
              container file {
                description "Trace file options";
                leaf filename {
                  type string {
                    junos:posix-pattern "![/ %]";
                    junos:pattern-message "Must not contain '/', % or a space";
                    length "1 .. 1024";
                  }
                  description
                    "Name of file in which to write trace information";
                }
    
                leaf replace {
                  type empty;
                  status deprecated;
                  description
                    "Replace trace file rather than appending to it";
                }
    
                leaf size {
                  type string;
                  description
                    "Maximum trace file size";
                }
    
                leaf files {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "2 .. 1000";
                    }
                  }
                  default "10";
                  description
                    "Maximum number of trace files";
                }
    
                leaf no-stamp {
                  type empty;
                  status deprecated;
                  description
                    "Do not timestamp trace file";
                }
    
                choice world-readable-choice {
                  leaf world-readable {
                    type empty;
                    description
                      "Allow any user to read the log file";
                  }
                  leaf no-world-readable {
                    type empty;
                    description
                      "Don't allow any user to read the log file";
                  }
                }  // choice world-readable-choice
              }  // container file
    
              list flag {
                key "name";
                ordered-by user;
                description "Tracing parameters";
                leaf name {
                  type enumeration {
                    enum "controller" {
                      value 0;
                      description
                        "Trace controller-related activity";
                    }
                    enum "state" {
                      value 1;
                      description
                        "Trace LSP state-related activity";
                    }
                    enum "route" {
                      value 2;
                      description
                        "Trace route-related activity";
                    }
                    enum "general" {
                      value 3;
                      description
                        "Trace general activity";
                    }
                    enum "interface" {
                      value 4;
                      description
                        "Trace interface-related activity";
                    }
                    enum "dtm" {
                      value 5;
                      description
                        "Trace dtm-related activity";
                    }
                    enum "bfd" {
                      value 6;
                      description
                        "Trace bfd-related activity";
                    }
                    enum "translation" {
                      value 7;
                      description
                        "Trace translation-related activity";
                    }
                    enum "srv6-te" {
                      value 8;
                      description
                        "Trace srv6-te activity";
                    }
                    enum "telemetry-statistics" {
                      value 9;
                      description
                        "Trace telemetry statistics related activity";
                    }
                    enum "compute" {
                      value 10;
                      description
                        "Trace compute profile and computed lsp related activity";
                    }
                    enum "nsr-replication" {
                      value 11;
                      description
                        "Trace NSR replication activity";
                    }
                    enum "all" {
                      value 12;
                      description
                        "Trace everything";
                    }
                  }
                }
    
                leaf detail {
                  type empty;
                  description
                    "Trace detailed information";
                }
              }  // list flag
            }  // container traceoptions
    
            list lsp-external-controller {
              junos:must "(".. .. mpls lsp-external-controller")";
              junos:must-message "To enable spring, mpls lsp-external-controller must be configure";
              key "name";
              ordered-by user;
              description
                "External path computing entity";
              leaf name {
                type string {
                  length "1 .. 64";
                }
                description
                  "Name of the external path computing entity";
              }
    
              uses apply-advanced;
            }  // list lsp-external-controller
    
            leaf preference {
              type union {
                type uint32;
                type string {
                  pattern "<.*>|$.*";
                }
              }
              description
                "Route preference for SPRING-TE routes";
            }
    
            leaf sr-preference-override {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "0 .. 4294967295";
                }
              }
              description
                "SR-preference override for static SR-policies.Higher value is more preferred";
            }
    
            leaf sr-preference {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "0 .. 4294967295";
                }
              }
              description
                "SR-preference for static SR-policies.Higher value is more preferred";
            }
    
            leaf maximum-segment-list-depth {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "1 .. 16";
                }
              }
              description
                "Maximum segment list depth for SR-TE policies";
            }
    
            leaf maximum-srv6-te-segment-list-depth {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "1 .. 6";
                }
              }
              description
                "Maximum segment list depth for SRv6-TE policies";
            }
    
            leaf no-chained-composite-next-hop {
              type empty;
              description
                "Do not use chained composite next hops for SRTE routes";
            }
    
            leaf tunnel-tracking {
              type empty;
              description
                "Track route status for first hop label based tunnels";
            }
    
            list segment-list {
              key "name";
              ordered-by user;
              description
                "Explicit path for SR-TE segments";
              leaf name {
                type string {
                  length "1 .. 64";
                }
                description
                  "Name of SR-TE segment-list";
              }
    
              uses apply-advanced;
    
              leaf inherit-label-nexthops {
                junos:must "(!(".. srv6"))";
                junos:must-message "Inherit label nexthops functionality can't be used with a segment-list for SRv6";
                junos:must "(!(".. compute"))";
                junos:must-message "Inherit label nexthops functionality can't be used with a segment-list for compute";
                type empty;
                description
                  "Inherit label nexthops for first hop in this segment list";
              }
    
              choice translation-type {
                container auto-translate {
                  junos:must "(!(".. srv6"))";
                  junos:must-message "Please use non SRv6 segment lists for auto-translate";
                  junos:must "(!(".. compute"))";
                  junos:must-message "Please use different segment lists for compute and auto-translate";
                  presence
                    "enable auto-translate";
                  description
                    "Enable auto translation from IP address to labels";
                  uses apply-advanced;
    
                  choice protection-choice {
                    container protected {
                      presence
                        "enable protected";
                      description
                        "Choose protected labels if available";
                      uses apply-advanced;
    
                      leaf mandatory {
                        type empty;
                        description
                          "Mandatorily choose protected labels";
                      }
                    }  // container protected
                    container unprotected {
                      presence
                        "enable unprotected";
                      description
                        "Choose unprotected labels if available";
                      uses apply-advanced;
    
                      leaf mandatory {
                        type empty;
                        description
                          "Mandatorily choose unprotected labels";
                      }
                    }  // container unprotected
                  }  // choice protection-choice
                }  // container auto-translate
                container dynamic {
                  junos:must "(!(".. srv6"))";
                  junos:must-message "Please use non SRv6 segment lists for dynamic";
                  junos:must "(!(".. compute"))";
                  junos:must-message "Please use different segment lists for compute and dynamic template";
                  presence "enable dynamic";
                  description
                    "Enable dynamic last hop computation";
                  uses apply-advanced;
    
                  choice protection-choice {
                    container protected {
                      presence
                        "enable protected";
                      description
                        "Choose protected labels if available";
                      uses apply-advanced;
    
                      leaf mandatory {
                        type empty;
                        description
                          "Mandatorily choose protected labels";
                      }
                    }  // container protected
                    container unprotected {
                      presence
                        "enable unprotected";
                      description
                        "Choose unprotected labels if available";
                      uses apply-advanced;
    
                      leaf mandatory {
                        type empty;
                        description
                          "Mandatorily choose unprotected labels";
                      }
                    }  // container unprotected
                  }  // choice protection-choice
                }  // container dynamic
              }  // choice translation-type
    
              leaf compute {
                junos:must "(!(".. srv6"))";
                junos:must-message "Please use non SRv6 segment lists for compute";
                type empty;
                description
                  "Segment list used for specifying explicit path for computed paths";
              }
    
              leaf srm6 {
                junos:must "((!(".. compute") && (!(".. dynamic") && (!(".. inherit-label-nexthops") && (!(".. auto-translate") && !(".. srv6"))))))";
                junos:must-message "SRm6 segment-list cannot be configured with SR-TE combination";
                type empty;
                description
                  "Segment list used for SRm6";
              }
    
              leaf srv6 {
                junos:must "(".. .. srv6")";
                junos:must-message "Please enable srv6 under protocols source-packet-routing";
                junos:must "(!(".. srm6"))";
                junos:must-message "SRv6 segment-list cannot be configured with srm6";
                junos:must "(!(".. auto-translate"))";
                junos:must-message "SRv6 segment-list cannot be configured with auto-translate";
                junos:must "(!(".. inherit-label-nexthops"))";
                junos:must-message "SRv6 segment-list cannot be configured with inherit-label-nexthops";
                junos:must "(!(".. dynamic"))";
                junos:must-message "SRv6 segment-list cannot be configured with dynamic";
                junos:must "(!(".. compute"))";
                junos:must-message "SRv6 segment-list cannot be configured with compute";
                type empty;
                description
                  "Segment list used for SRv6";
              }
    
              list hop-list {
                key "name";
                max-elements 16;
                ordered-by user;
                leaf name {
                  type string {
                    length "1 .. 64";
                  }
                  description
                    "Next hop in segment-list";
                }
    
                uses apply-advanced;
    
                leaf label {
                  junos:must "(!(".. .. srv6"))";
                  junos:must-message "label hop can't be used with a segment-list for srv6";
                  junos:must "(!(".. .. srm6"))";
                  junos:must-message "label hop can't be used with a segment-list for srm6";
                  junos:must "(!(".. .. compute"))";
                  junos:must-message "label hops can't be used with a segment-list for compute";
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "0 .. 1048575";
                    }
                  }
                  description
                    "Next label in SR-TE segment-list";
                }
    
                leaf ip-address {
                  junos:must "(!(".. .. srv6"))";
                  junos:must-message "ip address hop can't be used with a segment-list for srv6";
                  junos:must "(!(".. .. srm6"))";
                  junos:must-message "ip address hop can't be used with a segment-list for srm6";
                  type jt:ipaddr;
                  description
                    "IP address of the hop";
                }
    
                leaf sid {
                  junos:must "(!(".. .. srv6"))";
                  junos:must-message "sid can't be used with a segment-list for srv6";
                  junos:must "(".. .. srm6")";
                  junos:must-message "srm6 must be configured";
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "1 .. 65535";
                    }
                  }
                  description
                    "Next sid in SRm6 segment-list";
                }
    
                leaf srv6-sid {
                  junos:must "(".. .. srv6")";
                  junos:must-message "srv6 must be configured";
                  junos:must "(!(".. .. srm6"))";
                  junos:must-message "srm6 can't be used with a segment-list for srv6";
                  type jt:ipaddr;
                  description
                    "Sid for SRv6 segment-list in form of ipv6 address";
                }
    
                choice hop-choice {
                  leaf strict {
                    junos:must "(!(".. .. srv6"))";
                    junos:must-message "Hop choice only for compute-type segment-list not for srv6";
                    junos:must "(!(".. .. srm6"))";
                    junos:must-message "Hop choice only for compute-type segment-list not for srm6";
                    junos:must "(".. .. compute")";
                    junos:must-message "Hop choice only for compute-type segment-list";
                    type empty;
                    description "Strict hop";
                  }
                  leaf loose {
                    junos:must "(!(".. .. srv6"))";
                    junos:must-message "Hop choice only for compute-type segment-list not for srv6";
                    junos:must "(!(".. .. srm6"))";
                    junos:must-message "Hop choice only for compute-type segment-list not for srm6";
                    junos:must "(".. .. compute")";
                    junos:must-message "Hop choice only for compute-type segment-list";
                    type empty;
                    description "Loose hop";
                  }
                }  // choice hop-choice
    
                container label-type {
                  junos:must "(!(".. .. srv6"))";
                  junos:must-message "label-type functionality can't be used with a segment-list for srv6";
                  junos:must "(!(".. .. srm6"))";
                  junos:must-message "label-type functionality can't be used with a segment-list for srm6";
                  junos:must "(!(".. .. compute"))";
                  junos:must-message "label-type functionality can't be used with a segment-list for compute";
                  description
                    "Type of label for the hop";
                  uses apply-advanced;
    
                  leaf node {
                    type empty;
                    description
                      "Hop represents a node";
                  }
                }  // container label-type
              }  // list hop-list
            }  // list segment-list
    
            list compute-profile {
              key "name";
              ordered-by user;
              description
                "Compute profile for dynamically computed paths";
              leaf name {
                type string {
                  length "1 .. 64";
                }
                description
                  "Name of the computation-profile";
              }
    
              uses apply-advanced;
    
              container admin-group {
                description
                  "Administrative group policy";
                uses admin_group_include_exclude;
              }  // container admin-group
    
              leaf maximum-segment-list-depth {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "1 .. 16";
                  }
                }
                description
                  "Maximum depth of computed path";
              }
    
              leaf no-label-stack-compression {
                type empty;
                description
                  "Provide fully expanded path, using adjacency segment identifiers";
              }
    
              choice protection-choice {
                container protected {
                  presence "enable protected";
                  description
                    "Choose protected labels if available";
                  uses apply-advanced;
    
                  leaf mandatory {
                    type empty;
                    description
                      "Mandatorily choose protected labels";
                  }
                }  // container protected
                container unprotected {
                  presence "enable unprotected";
                  description
                    "Choose unprotected labels if available";
                  uses apply-advanced;
    
                  leaf mandatory {
                    type empty;
                    description
                      "Mandatorily choose unprotected labels";
                  }
                }  // container unprotected
              }  // choice protection-choice
    
              leaf compute-segment-list {
                junos:must "(".. .. segment-list $$ compute")";
                junos:must-message "Compute segment list can only be referenced by this compute profile";
                type string {
                  length "1 .. 64";
                }
                description
                  "Name of the compute type segmentlist";
              }
    
              leaf maximum-computed-segment-lists {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "1 .. 128";
                  }
                }
                description
                  "Maximum number of segment-lists(ECMP paths) to be computed";
              }
    
              container metric-type {
                description
                  "Metric type used for computaion";
                uses apply-advanced;
    
                choice metric-choice {
                  leaf te {
                    type empty;
                    description "TE metric";
                  }
                  leaf igp {
                    type empty;
                    description "IGP metric";
                  }
                  container delay {
                    presence "enable delay";
                    description "Delay metric";
                    uses apply-advanced;
    
                    choice metric-choice {
                      leaf minimum {
                        type empty;
                        description
                          "Minimum delay metric type";
                      }
                      leaf maximum {
                        type empty;
                        description
                          "Maximum delay metric type";
                      }
                      leaf average {
                        type empty;
                        description
                          "Average delay metric type";
                      }
                    }  // choice metric-choice
    
                    leaf delay-variation-threshold {
                      type union {
                        type string {
                          pattern "<.*>|$.*";
                        }
                        type uint32 {
                          range "1 .. 16777215";
                        }
                      }
                      description
                        "Link delay variation threshold";
                    }
                  }  // container delay
                }  // choice metric-choice
              }  // container metric-type
            }  // list compute-profile
    
            leaf srv6 {
              junos:must "("routing-options forwarding-table srv6-chain-merge")";
              junos:must-message "SRv6 can only be enabled with srv6-chain-merge";
              junos:must "(("routing-options resolution preserve-nexthop-hierarchy" || ("protocols source-packet-routing preserve-nexthop-hierarchy" && !("protocols source-packet-routing preserve-nexthop-hierarchy srv6 disable"))))";
              junos:must-message "SRv6 can only be enabled with preserve-nexthop-hierarchy";
              type empty;
              description
                "Enable srv6 support for source-packet-routing";
            }
    
            container preserve-nexthop-hierarchy {
              presence
                "enable preserve-nexthop-hierarchy";
              description
                "Enable preserve-nexthop-hierarchy for source-packet-routing";
              uses apply-advanced;
    
              container sr-mpls {
                description
                  "Disable preserve-nexthop-hierarchy for sr-mpls";
                uses apply-advanced;
    
                choice enable-disable {
                  leaf disable {
                    type empty;
                    description
                      "Disable preserve-nexthop-hierarchy for sr-mpls";
                  }
                }  // choice enable-disable
              }  // container sr-mpls
    
              container srv6 {
                description
                  "Disable preserve-nexthop-hierarchy for srv6";
                uses apply-advanced;
    
                choice enable-disable {
                  leaf disable {
                    type empty;
                    description
                      "Disable preserve-nexthop-hierarchy for srv6";
                  }
                }  // choice enable-disable
              }  // container srv6
            }  // container preserve-nexthop-hierarchy
    
            list source-routing-path {
              key "name";
              ordered-by user;
              description
                "Configure a source-routing-path";
              leaf name {
                type string {
                  length "1 .. 64";
                }
                description
                  "Name of the source routing path";
              }
    
              uses apply-advanced;
    
              leaf srm6 {
                junos:must "(".. from")";
                junos:must-message "From address mandatory for srm6 tunnel";
                junos:must "((!(".. ldp-tunneling") && (!(".. color") && (!(".. no-ingress") && (!(".. binding-sid") && (!(".. preference") && (!(".. metric") && (!(".. sr-preference") && (!(".. lsp-external-controller") && (!(".. install") && (!(".. secondary") && (!(".. srv6") && !(".. use-for-shortcut")))))))))))))";
                junos:must-message "SRm6 tunnel cannot be configured with SR-TE combination";
                type empty;
                description "Tunnel type SRm6";
              }
    
              leaf srv6 {
                junos:must "(!(".. use-for-shortcut"))";
                junos:must-message "SRv6 tunnel cannot be configured with use-for-shortcut";
                junos:must "(".. from")";
                junos:must-message "From address mandatory for srv6 tunnel";
                junos:must "(".. .. srv6")";
                junos:must-message "Srv6 knob under source-packet-routing mandatory for SRv6 tunnel";
                junos:must "(!(".. srm6"))";
                junos:must-message "SRv6 tunnel cannot be configured with srm6";
                junos:must "(!(".. lsp-external-controller"))";
                junos:must-message "SRv6 tunnel cannot be configured with lsp-external-controller";
                junos:must "(!(".. binding-sid"))";
                junos:must-message "SRv6 tunnel cannot be configured with binding-sid";
                junos:must "(!(".. no-ingress"))";
                junos:must-message "SRv6 tunnel cannot be configured with no-ingress";
                junos:must "(!(".. ldp-tunneling"))";
                junos:must-message "SRv6 tunnel cannot be configured with ldp-tunneling";
                type empty;
                description "Tunnel type SRv6";
              }
    
              leaf ldp-tunneling {
                junos:must "(!(".. color"))";
                junos:must-message "LDP tunneling is not supported for colored source-routing paths";
                type empty;
                description
                  "Allow LDP to use this LSP for tunneling";
              }
    
              leaf use-for-shortcut {
                junos:must "(!(".. srv6"))";
                junos:must-message "Shortcut usage is not supported with SRv6 tunnel";
                junos:must "(!(".. srm6"))";
                junos:must-message "Shortcut usage is not supported with SRm6 tunnel";
                junos:must "(!(".. color"))";
                junos:must-message "Shortcut usage is not supported for colored source-routing paths";
                type empty;
                description
                  "Allow this LSP to be used as a shortcut tunnel";
              }
    
              leaf to {
                type jt:ipaddr;
                description
                  "Ip-address of the tunnel end-point";
              }
    
              leaf from {
                junos:must "((".. srm6" || ".. srv6"))";
                junos:must-message "Tunnel must be of type srm6 or srv6";
                type jt:ipaddr;
                description
                  "Ip-address of the tunnel start-point";
              }
    
              leaf color {
                type union {
                  type uint32;
                  type string {
                    pattern "<.*>|$.*";
                  }
                }
                description
                  "Color identifier for the tunnel end-point";
              }
    
              leaf no-ingress {
                junos:must "(!(".. color"))";
                junos:must-message "Ingress functionlity is required for colored source-routing paths";
                junos:must "((".. binding-sid" || ".. install"))";
                junos:must-message "Please configure the binding-label or install prefixes if ingress functinality is not required";
                type empty;
                description
                  "Disable ingress functionality for this tunnel";
              }
    
              leaf binding-sid {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "16 .. 1048575";
                  }
                }
                description
                  "Specify the binding-label to enable transit functionality for this tunnel";
              }
    
              list install {
                key "name";
                ordered-by user;
                description "Install prefix";
                leaf name {
                  junos:must "(!(".. .. to $$"))";
                  junos:must-message "Install and to address must be different";
                  type jt:ipaddr;
                  description
                    "Destination prefix";
                }
              }  // list install
    
              leaf preference {
                type union {
                  type uint32;
                  type string {
                    pattern "<.*>|$.*";
                  }
                }
                status deprecated;
                description
                  "Preference for routes downloaded for this tunnel";
              }
    
              leaf metric {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "1 .. 16777215";
                  }
                }
                description
                  "Metric for routes downloaded for this tunnel";
              }
    
              leaf sr-preference {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "0 .. 4294967295";
                  }
                }
                description
                  "SR-preference for SPRING-TE routes. Higher value is more preferred";
              }
    
              leaf lsp-external-controller {
                junos:must "("protocols source-packet-routing lsp-external-controller $$")";
                junos:must-message "Please define the lsp-external-controller under 'protocols source-packet-routing' hierarchy";
                type string {
                  length "1 .. 64";
                }
                description
                  "Name of the external path computing entity";
              }
    
              list primary {
                key "name";
                max-elements 128;
                ordered-by user;
                description
                  "Configure a primary segment list for this source-routing-path";
                leaf name {
                  junos:must "(!(".. .. .. segment-list $$ dynamic"))";
                  junos:must-message "Dynamic segment list cannot be referenced by this static policy";
                  junos:must "(!(".. .. .. segment-list $$ compute"))";
                  junos:must-message "compute segment list cannot be referenced by this static policy";
                  junos:must "(((".. .. .. segment-list $$" && !(".. compute")) || (!(".. .. .. segment-list $$") && ".. compute")))";
                  junos:must-message "Please either use defined segment list without compute or undefined segment list with compute";
                  type string {
                    length "1 .. 64";
                  }
                  description
                    "Name of SR-TE segment-list";
                }
    
                uses apply-advanced;
    
                leaf weight {
                  junos:must "(!(".. .. srm6"))";
                  junos:must-message "Balance factor cannot be configured with SRm6 tunnel";
                  type union {
                    type uint32;
                    type string {
                      pattern "<.*>|$.*";
                    }
                  }
                  description
                    "Specify the balance factor for this segment list in SR-TE tunnel";
                }
    
                container bfd-liveness-detection {
                  junos:must "(!(".. .. srv6"))";
                  junos:must-message "Bidirectional forwarding detection cannot be configured with SRv6 tunnel";
                  junos:must "(!(".. .. srm6"))";
                  junos:must-message "Bidirectional forwarding detection cannot be configured with SRm6 tunnel";
                  description
                    "Bidirectional forwarding detection options";
                  uses apply-advanced;
    
                  container sbfd {
                    presence "enable sbfd";
                    description
                      "Seamless BFD parameters";
                    uses apply-advanced;
    
                    leaf remote-discriminator {
                      type union {
                        type string {
                          pattern "<.*>|$.*";
                        }
                        type uint32 {
                          range
                            "1 .. 4294967295";
                        }
                      }
                      description
                        "Remote discriminator of reflector";
                    }
                  }  // container sbfd
    
                  leaf minimum-interval {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint32 {
                        range "1 .. 255000";
                      }
                    }
                    units "milliseconds";
                    description
                      "Minimum transmit and receive interval";
                  }
    
                  leaf multiplier {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint32 {
                        range "1 .. 255";
                      }
                    }
                    default "3";
                    description
                      "Detection time multiplier";
                  }
    
                  leaf no-router-alert-option {
                    type empty;
                    description
                      "Do not set the router alert option in IP header";
                  }
                }  // container bfd-liveness-detection
    
                container compute {
                  junos:must "(!(".. .. srv6"))";
                  junos:must-message "Computation cannot be configured with SRv6 tunnel";
                  junos:must "(!(".. .. srm6"))";
                  junos:must-message "Computation cannot be configured with SRm6 tunnel";
                  presence "enable compute";
                  description
                    "Enable computation";
                  uses apply-advanced;
    
                  leaf compute-profile-name {
                    junos:must "(".. .. .. .. compute-profile $$")";
                    junos:must-message "Please define the compute-profile referenced by this policy";
                    type string {
                      length "1 .. 64";
                    }
                    description
                      "Name of compute-profile";
                  }
                }  // container compute
    
                leaf lsp-external-controller {
                  junos:must "("protocols source-packet-routing lsp-external-controller $$")";
                  junos:must-message "Please define the lsp-external-controller under 'protocols source-packet-routing' hierarchy";
                  type string {
                    length "1 .. 64";
                  }
                  description
                    "Name of the external path computing entity";
                }
              }  // list primary
    
              list secondary {
                key "name";
                max-elements 1;
                ordered-by user;
                description
                  "Configure a secondary segment list for this source-routing-path";
                leaf name {
                  junos:must "(!(".. .. .. segment-list $$ dynamic"))";
                  junos:must-message "Dynamic segment list cannot be referenced by this static policy";
                  junos:must "(!(".. .. .. segment-list $$ compute"))";
                  junos:must-message "compute segment list cannot be referenced by this static policy";
                  junos:must "(((".. .. .. segment-list $$" && !(".. compute")) || (!(".. .. .. segment-list $$") && ".. compute")))";
                  junos:must-message "Please either use defined segment list without compute or undefined segment list with compute";
                  type string {
                    length "1 .. 64";
                  }
                  description
                    "Name of SR-TE segment-list";
                }
    
                uses apply-advanced;
    
                container bfd-liveness-detection {
                  junos:must "(!(".. .. srv6"))";
                  junos:must-message "Bidirectional forwarding detection cannot be configured with SRv6 tunnel";
                  junos:must "(!(".. .. srm6"))";
                  junos:must-message "Bidirectional forwarding detection cannot be configured with SRm6 tunnel";
                  description
                    "Bidirectional forwarding detection options";
                  uses apply-advanced;
    
                  container sbfd {
                    presence "enable sbfd";
                    description
                      "Seamless BFD parameters";
                    uses apply-advanced;
    
                    leaf remote-discriminator {
                      type union {
                        type string {
                          pattern "<.*>|$.*";
                        }
                        type uint32 {
                          range
                            "1 .. 4294967295";
                        }
                      }
                      description
                        "Remote discriminator of reflector";
                    }
                  }  // container sbfd
    
                  leaf minimum-interval {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint32 {
                        range "1 .. 255000";
                      }
                    }
                    units "milliseconds";
                    description
                      "Minimum transmit and receive interval";
                  }
    
                  leaf multiplier {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint32 {
                        range "1 .. 255";
                      }
                    }
                    default "3";
                    description
                      "Detection time multiplier";
                  }
    
                  leaf no-router-alert-option {
                    type empty;
                    description
                      "Do not set the router alert option in IP header";
                  }
                }  // container bfd-liveness-detection
    
                container compute {
                  junos:must "(!(".. .. srv6"))";
                  junos:must-message "Computation cannot be configured with SRv6 tunnel";
                  junos:must "(!(".. .. srm6"))";
                  junos:must-message "Computation cannot be configured with SRm6 tunnel";
                  presence "enable compute";
                  description
                    "Enable computation";
                  uses apply-advanced;
    
                  leaf compute-profile-name {
                    junos:must "(".. .. .. .. compute-profile $$")";
                    junos:must-message "Please define the compute-profile referenced by this policy";
                    type string {
                      length "1 .. 64";
                    }
                    description
                      "Name of compute-profile";
                  }
                }  // container compute
              }  // list secondary
            }  // list source-routing-path
    
            list source-routing-path-template {
              key "name";
              ordered-by user;
              description
                "Configure a source-routing-path-template";
              leaf name {
                type string {
                  length "1 .. 64";
                }
                description
                  "Name of the source routing path";
              }
    
              uses apply-advanced;
    
              leaf no-ingress {
                type empty;
                description
                  "Disable ingress functionality for this tunnel";
              }
    
              leaf use-for-shortcut {
                junos:must "(!(".. srv6"))";
                junos:must-message "Shortcut usage is not supported with SRv6 tunnel";
                junos:must "(!(".. srm6"))";
                junos:must-message "Shortcut usage is not supported with SRm6 tunnel";
                junos:must "(!(".. color"))";
                junos:must-message "Shortcut usage is not supported for colored source-routing paths";
                type empty;
                description
                  "Allow this LSP to be used as a shortcut tunnel";
              }
    
              leaf metric {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "1 .. 16777215";
                  }
                }
                description
                  "Metric for routes downloaded for this tunnel";
              }
    
              leaf sr-preference {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "0 .. 4294967295";
                  }
                }
                description
                  "SR-preference for SPRING-TE routes. Higher value is more preferred";
              }
    
              leaf ldp-tunneling {
                type empty;
                description
                  "Allow LDP to use this LSP for tunneling";
              }
    
              leaf lsp-external-controller {
                junos:must "("protocols source-packet-routing lsp-external-controller $$")";
                junos:must-message "Please define the lsp-external-controller under 'protocols source-packet-routing' hierarchy";
                type string {
                  length "1 .. 64";
                }
                description
                  "Name of the external path computing entity";
              }
    
              list primary {
                key "name";
                max-elements 128;
                ordered-by user;
                description
                  "Configure a primary segment list for this source-routing-path";
                leaf name {
                  junos:must "(!(".. .. .. segment-list $$ compute"))";
                  junos:must-message "compute segment list cannot be referenced by this static policy";
                  junos:must "(((".. .. .. segment-list $$ dynamic" && !(".. compute")) || (!(".. .. .. segment-list $$") && ".. compute")))";
                  junos:must-message "Please either define dynamic type segment list without compute or undefined segment list with compute";
                  type string {
                    length "1 .. 64";
                  }
                  description
                    "Name of SR-TE segment-list";
                }
    
                uses apply-advanced;
    
                leaf weight {
                  type union {
                    type uint32;
                    type string {
                      pattern "<.*>|$.*";
                    }
                  }
                  description
                    "Specify the balance factor for this segment list in SR-TE tunnel";
                }
    
                container compute {
                  junos:must "(!(".. .. srv6"))";
                  junos:must-message "Computation cannot be configured with SRv6 tunnel";
                  junos:must "(!(".. .. srm6"))";
                  junos:must-message "Computation cannot be configured with SRm6 tunnel";
                  presence "enable compute";
                  description
                    "Enable computation";
                  uses apply-advanced;
    
                  leaf compute-profile-name {
                    junos:must "(".. .. .. .. compute-profile $$")";
                    junos:must-message "Please define the compute-profile referenced by this policy";
                    type string {
                      length "1 .. 64";
                    }
                    description
                      "Name of compute-profile";
                  }
                }  // container compute
    
                leaf lsp-external-controller {
                  junos:must "("protocols source-packet-routing lsp-external-controller $$")";
                  junos:must-message "Please define the lsp-external-controller under 'protocols source-packet-routing' hierarchy";
                  type string {
                    length "1 .. 64";
                  }
                  description
                    "Name of the external path computing entity";
                }
              }  // list primary
    
              list secondary {
                key "name";
                max-elements 1;
                ordered-by user;
                description
                  "Configure a secondary segment list for this source-routing-path";
                leaf name {
                  junos:must "(!(".. .. .. segment-list $$ compute"))";
                  junos:must-message "compute segment list cannot be referenced by this static policy";
                  junos:must "(((".. .. .. segment-list $$ dynamic" && !(".. compute")) || (!(".. .. .. segment-list $$") && ".. compute")))";
                  junos:must-message "Please either define dynamic type segment list without compute or undefined segment list with compute";
                  type string {
                    length "1 .. 64";
                  }
                  description
                    "Name of SR-TE segment-list";
                }
    
                uses apply-advanced;
    
                container compute {
                  junos:must "(!(".. .. srv6"))";
                  junos:must-message "Computation cannot be configured with SRv6 tunnel";
                  junos:must "(!(".. .. srm6"))";
                  junos:must-message "Computation cannot be configured with SRm6 tunnel";
                  presence "enable compute";
                  description
                    "Enable computation";
                  uses apply-advanced;
    
                  leaf compute-profile-name {
                    junos:must "(".. .. .. .. compute-profile $$")";
                    junos:must-message "Please define the compute-profile referenced by this policy";
                    type string {
                      length "1 .. 64";
                    }
                    description
                      "Name of compute-profile";
                  }
                }  // container compute
              }  // list secondary
    
              container bfd-liveness-detection {
                junos:must "(!(".. .. srv6"))";
                junos:must-message "Bidirectional forwarding detection cannot be configured with SRv6 tunnel";
                junos:must "(!(".. .. srm6"))";
                junos:must-message "Bidirectional forwarding detection cannot be configured with SRm6 tunnel";
                description
                  "Bidirectional forwarding detection options";
                uses apply-advanced;
    
                container sbfd {
                  presence "enable sbfd";
                  description
                    "Seamless BFD parameters";
                  uses apply-advanced;
    
                  leaf remote-discriminator {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint32 {
                        range "1 .. 4294967295";
                      }
                    }
                    description
                      "Remote discriminator of reflector";
                  }
                }  // container sbfd
    
                leaf minimum-interval {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "1 .. 255000";
                    }
                  }
                  units "milliseconds";
                  description
                    "Minimum transmit and receive interval";
                }
    
                leaf multiplier {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "1 .. 255";
                    }
                  }
                  default "3";
                  description
                    "Detection time multiplier";
                }
    
                leaf no-router-alert-option {
                  type empty;
                  description
                    "Do not set the router alert option in IP header";
                }
              }  // container bfd-liveness-detection
            }  // list source-routing-path-template
    
            leaf inherit-label-nexthops {
              type empty;
              description
                "Inherit label nexthops for first hop in segment lists";
            }
    
            container rib-group {
              description
                "Enable rib-group import  poilicies on SR-TE";
              uses apply-advanced;
    
              container ipv4 {
                presence "enable ipv4";
                description
                  "Import  policy to be applied on ipv4 uncolored route";
                uses apply-advanced;
    
                leaf rib-group-name {
                  type string {
                    length "1 .. 64";
                  }
                  description
                    "Rib-group import policy";
                }
              }  // container ipv4
    
              container ipv6 {
                presence "enable ipv6";
                description
                  "Import  policy to be applied on ipv6 uncolored route";
                uses apply-advanced;
    
                leaf rib-group-name {
                  type string {
                    length "1 .. 64";
                  }
                  description
                    "Rib-group import policy";
                }
              }  // container ipv6
    
              container ipv4-color {
                presence "enable ipv4-color";
                description
                  "Import  policy to be applied on ipv4 colored route";
                uses apply-advanced;
    
                leaf rib-group-name {
                  type string {
                    length "1 .. 64";
                  }
                  description
                    "Rib-group import policy";
                }
              }  // container ipv4-color
    
              container ipv6-color {
                presence "enable ipv6-color";
                description
                  "Import  policy to be applied on ipv6 colored route";
                uses apply-advanced;
    
                leaf rib-group-name {
                  type string {
                    length "1 .. 64";
                  }
                  description
                    "Rib-group import policy";
                }
              }  // container ipv6-color
    
              container tag {
                presence "enable tag";
                description
                  "Import  policy to be applied on mpls route";
                uses apply-advanced;
    
                leaf rib-group-name {
                  type string {
                    length "1 .. 64";
                  }
                  description
                    "Rib-group import policy";
                }
              }  // container tag
            }  // container rib-group
    
            container telemetry {
              description
                "Enable telemetry on SR-TE policies";
              uses apply-advanced;
    
              container statistics {
                presence "enable statistics";
                description
                  "Enable traffic-statistics collection on SR-TE policies";
                uses apply-advanced;
    
                leaf no-transit {
                  junos:must "(!(".. no-ingress"))";
                  junos:must-message "Please enable ingress statistics if no transit statistics is required";
                  type empty;
                  description
                    "Disable statistics collection on binding sid route";
                }
    
                leaf no-ingress {
                  junos:must "(!(".. no-transit"))";
                  junos:must-message "Please enable transit statistics if no ingress statistics is required";
                  type empty;
                  description
                    "Disable statistics collection on destination route";
                }
    
                container per-source {
                  description
                    "Enable traffic-statistics collection per source";
                  uses apply-advanced;
    
                  leaf per-segment-list {
                    type empty;
                    description
                      "Enable per path level traffic-statistics collection";
                  }
                }  // container per-source
              }  // container statistics
    
              leaf uncolored-rib-stat {
                type empty;
                description
                  "Enable rib-stat for uncolored tunnel";
              }
            }  // container telemetry
    
            container use-transport-class {
              junos:must "(!((".. rib-group ipv4-color" || ".. rib-group ipv6-color")))";
              junos:must-message "Transport Class and color based rib-groups cannot be configured at the same time";
              junos:must "("routing-options transport-class")";
              junos:must-message "Please enable required Transport Class configs under routing-options transport-class hierarchy";
              presence
                "enable use-transport-class";
              description
                "Enable transport class on SR-TE colored policies";
              uses apply-advanced;
    
              leaf fib-install {
                type empty;
                description
                  "Install SRTE routes in FIB";
              }
    
              leaf inet3-install {
                type empty;
                description
                  "Install SRTE routes in inet{6}.3 table";
              }
            }  // container use-transport-class
    
            leaf inet-color-append-explicit-null {
              type empty;
              description
                "Enable appending explicit NULL for inet SRTE policy";
            }
    
            leaf retry-timer {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type int32 {
                  range "1 .. 600";
                }
              }
              units "seconds";
              description
                "Time before retrying auto-translation failed paths";
            }
    
            leaf import-color-only-cross-af {
              type empty;
              description
                "Enable importing of Null Endpoint color route for cross address family";
            }
    
            leaf inet6-color-append-explicit-null {
              type empty;
              description
                "Enable appending explicit NULL for inet6 SRTE policy";
            }
    
            leaf ipv6-tunneling-append-explicit-null {
              type empty;
              description
                "Enable appending explicit NULL for v4ov6 SRTE routes ";
            }
    
            container source-routing-path-template-map {
              description
                "Configure a source routing path template map";
              uses apply-advanced;
    
              leaf-list policy {
                type jt:policy-algebra;
                ordered-by user;
                description "Configure policy";
              }
            }  // container source-routing-path-template-map
          }  // container source-packet-routing
    
          container l2-learning {
            description
              "Layer 2 forwarding configuration";
            uses juniper-protocols-bridge;
          }  // container l2-learning
    
          container dcbx {
            presence "enable dcbx";
          }  // container dcbx
    
          container lldp {
            description
              "Link Layer Detection Protocol";
            uses apply-advanced;
    
            choice enable-disable {
              leaf disable {
                type empty;
                description "Disable LLDP";
              }
            }  // choice enable-disable
    
            container traceoptions {
              description
                "Trace options for LLDP";
              uses apply-advanced;
    
              container file {
                description "Trace file options";
                leaf filename {
                  type string {
                    junos:posix-pattern "![/ %]";
                    junos:pattern-message "Must not contain '/', % or a space";
                    length "1 .. 1024";
                  }
                  description
                    "Name of file in which to write trace information";
                }
    
                leaf replace {
                  type empty;
                  status deprecated;
                  description
                    "Replace trace file rather than appending to it";
                }
    
                leaf size {
                  type string;
                  description
                    "Maximum trace file size";
                }
    
                leaf files {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "2 .. 1000";
                    }
                  }
                  default "10";
                  description
                    "Maximum number of trace files";
                }
    
                leaf no-stamp {
                  type empty;
                  status deprecated;
                  description
                    "Do not timestamp trace file";
                }
    
                choice world-readable-choice {
                  leaf world-readable {
                    type empty;
                    description
                      "Allow any user to read the log file";
                  }
                  leaf no-world-readable {
                    type empty;
                    description
                      "Don't allow any user to read the log file";
                  }
                }  // choice world-readable-choice
              }  // container file
    
              list flag {
                key "name";
                description "Tracing parameters";
                leaf name {
                  type enumeration {
                    enum "all" {
                      value 0;
                      description
                        "Trace configuration events";
                    }
                    enum "configuration" {
                      value 1;
                      description
                        "Log configuration events";
                    }
                    enum "rtsock" {
                      value 2;
                      description
                        "Trace rtsock message events";
                    }
                    enum "packet" {
                      value 3;
                      description
                        "Trace packet information";
                    }
                    enum "protocol" {
                      value 4;
                      description
                        "Trace protocol information";
                    }
                    enum "interface" {
                      value 5;
                      description
                        "Trace interface update events";
                    }
                    enum "vlan" {
                      value 6;
                      description
                        "Trace VLAN update events";
                    }
                    enum "snmp" {
                      value 7;
                      description
                        "Trace SNMP events";
                    }
                    enum "jvision" {
                      value 8;
                      description
                        "Trace Jvision events";
                    }
                  }
                }
    
                leaf disable {
                  type empty;
                  description
                    "Disable this trace flag";
                }
              }  // list flag
            }  // container traceoptions
    
            leaf management-address {
              type jt:ipaddr;
              description
                "LLDP management address";
            }
    
            leaf advertisement-interval {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "5 .. 32768";
                }
              }
              units "seconds";
              default "30";
              description
                "Transmit interval for LLDP messages";
            }
    
            leaf transmit-delay {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "1 .. 8192";
                }
              }
              units "seconds";
              description
                "Transmit delay time interval for LLDP messages";
            }
    
            leaf hold-multiplier {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "2 .. 10";
                }
              }
              default "4";
              description
                "Hold timer interval for LLDP messages";
            }
    
            leaf ptopo-configuration-trap-interval {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "0 .. 3600";
                }
              }
              units "seconds";
              default "0";
              description
                "Interval for physical topology configuration change trap";
            }
    
            leaf ptopo-configuration-maximum-hold-time {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "1 .. 2147483647";
                }
              }
              units "seconds";
              default "300";
              description
                "Hold time for physical topology connection entries";
            }
    
            leaf lldp-configuration-notification-interval {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "5 .. 3600";
                }
              }
              units "seconds";
              default "5";
              description
                "Time interval for LLDP notification";
            }
    
            leaf port-id-subtype {
              type enumeration {
                enum "locally-assigned" {
                  value 0;
                  description
                    "Locally assigned value (SNMP index of the interface)";
                }
                enum "interface-name" {
                  value 1;
                  description
                    "Interface name on which LLDPDU is sent";
                }
              }
              default "locally-assigned";
              description
                "Sub-type to be used for Port ID TLV generation";
            }
    
            leaf port-description-type {
              type enumeration {
                enum "interface-alias" {
                  value 0;
                  description
                    "Use object ifAlias value for TLV generation";
                }
                enum "interface-description" {
                  value 1;
                  description
                    "Use object ifDescr value for TLV generation";
                }
              }
              default "interface-alias";
              description
                "The Interfaces Group MIB object to be used for Port Description TLV generation";
            }
    
            leaf neighbour-port-info-display {
              type enumeration {
                enum "port-id" {
                  value 0;
                  description
                    "Display port-id information of neighbor in port info";
                }
                enum "port-description" {
                  value 1;
                  description
                    "Display port description of neighbor in port info";
                }
              }
              description
                "Show lldp neighbors to display port-id or port-description ";
            }
    
            leaf vlan-name-tlv-option {
              type enumeration {
                enum "vlan-id" {
                  value 0;
                  description
                    "Use vlan-id for tlv";
                }
                enum "name" {
                  value 1;
                  description
                    "Use vlan-name for tlv";
                }
              }
              default "vlan-id";
              description
                "Vlan tlv options to transmit vlan name or vlan-id";
            }
    
            leaf lldp-tx-fast-init {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "1 .. 8";
                }
              }
              description
                "Transmission count in fast transmission mode";
            }
    
            leaf fast-rx-processing {
              type empty;
              description
                "Start optimised processing of received pdu";
            }
    
            leaf-list tlv-select {
              type enumeration {
                enum "port-description" {
                  value 0;
                  description "Port Description";
                }
                enum "system-name" {
                  value 1;
                  description "System Name";
                }
                enum "system-description" {
                  value 2;
                  description
                    "System Description";
                }
                enum "system-capabilities" {
                  value 3;
                  description
                    "System Capabilities";
                }
                enum "management-address" {
                  value 4;
                  description
                    "Management Address";
                }
                enum "mac-phy-config-status" {
                  value 5;
                  description
                    "OUI IEEE 802.3 mac-phy-config-status";
                }
                enum "power-vi-mdi" {
                  value 6;
                  description
                    "OUI IEEE 802.3 power-vi-mdi";
                }
                enum "link-aggregation" {
                  value 7;
                  description
                    "OUI IEEE 802.3 link-aggregation";
                }
                enum "maximum-frame-size" {
                  value 8;
                  description
                    "OUI IEEE 802.3 maximum-frame-size";
                }
                enum "jnpr-chassis-serial" {
                  value 9;
                  description
                    "OUI Juniper chassis-serial";
                }
                enum "jnpr-vcp" {
                  value 10;
                  description "OUI Juniper vcp";
                }
                enum "jnpr-mode-change" {
                  value 11;
                  description
                    "OUI Juniper mode-change";
                }
                enum "jnpr-mode-change-error" {
                  value 12;
                  description
                    "OUI Juniper mode-change-error";
                }
                enum
                  "jnpr-mode-change-ip-address" {
                  value 13;
                  description
                    "OUI Juniper mode-change-ip-address";
                }
                enum
                  "jnpr-mode-change-image-name" {
                  value 14;
                  description
                    "OUI Juniper mode-change-image-name";
                }
                enum
                  "jnpr-mode-change-ftp-login" {
                  value 15;
                  description
                    "OUI Juniper mode-change-ftp-login";
                }
                enum
                  "jnpr-mode-change-image-md5" {
                  value 16;
                  description
                    "OUI Juniper mode-change-image-md5";
                }
                enum
                  "jnpr-mode-change-ftp-server" {
                  value 17;
                  description
                    "OUI Juniper mode-change-ftp-server";
                }
                enum "port-vid" {
                  value 18;
                  description
                    "OUI IEEE 802.1 port-vid";
                }
                enum "port-protocol-vid" {
                  value 19;
                  description
                    "OUI IEEE 802.1 port-procol-vid";
                }
                enum "vlan-name" {
                  value 20;
                  description
                    "OUI IEEE 802.1 vlan-name";
                }
                enum "protocol-id" {
                  value 21;
                  description
                    "OUI IEEE 802.1 protocol-id";
                }
                enum "evb" {
                  value 22;
                  description
                    "OUI IEEE 82.1QBG evb";
                }
                enum
                  "power-via-mdi-measurements" {
                  value 23;
                  description
                    "OUI IEEE 802.3 power-via-mdi-measurements";
                }
                enum "cloud-reach-event" {
                  value 24;
                  description
                    "Cloud reachability event";
                }
                enum "phone-home-active" {
                  value 25;
                  description
                    "Phone-home active configuration";
                }
              }
              ordered-by user;
              description
                "Select TLVs to be sent";
            }
    
            leaf-list tlv-filter {
              junos:must "(!(".. tlv-select"))";
              junos:must-message "tlv-select or tlv-filter is allowed, not both.";
              type enumeration {
                enum "all" {
                  value 0;
                  description
                    "Filter all non mandatory TLVs";
                }
                enum "port-description" {
                  value 1;
                  description "Port Description";
                }
                enum "system-name" {
                  value 2;
                  description "System Name";
                }
                enum "system-description" {
                  value 3;
                  description
                    "System Description";
                }
                enum "system-capabilities" {
                  value 4;
                  description
                    "System Capabilities";
                }
                enum "management-address" {
                  value 5;
                  description
                    "Management Address";
                }
                enum "mac-phy-config-status" {
                  value 6;
                  description
                    "OUI IEEE 802.3 mac-phy-config-status";
                }
                enum "power-vi-mdi" {
                  value 7;
                  description
                    "OUI IEEE 802.3 power-vi-mdi";
                }
                enum "link-aggregation" {
                  value 8;
                  description
                    "OUI IEEE 802.3 link-aggregation";
                }
                enum "maximum-frame-size" {
                  value 9;
                  description
                    "OUI IEEE 802.3 maximum-frame-size";
                }
                enum "jnpr-chassis-serial" {
                  value 10;
                  description
                    "OUI Juniper chassis-serial";
                }
                enum "jnpr-vcp" {
                  value 11;
                  description "OUI Juniper vcp";
                }
                enum "jnpr-mode-change" {
                  value 12;
                  description
                    "OUI Juniper mode-change";
                }
                enum "jnpr-mode-change-error" {
                  value 13;
                  description
                    "OUI Juniper mode-change-error";
                }
                enum
                  "jnpr-mode-change-ip-address" {
                  value 14;
                  description
                    "OUI Juniper mode-change-ip-address";
                }
                enum
                  "jnpr-mode-change-image-name" {
                  value 15;
                  description
                    "OUI Juniper mode-change-image-name";
                }
                enum
                  "jnpr-mode-change-ftp-login" {
                  value 16;
                  description
                    "OUI Juniper mode-change-ftp-login";
                }
                enum
                  "jnpr-mode-change-image-md5" {
                  value 17;
                  description
                    "OUI Juniper mode-change-image-md5";
                }
                enum
                  "jnpr-mode-change-ftp-server" {
                  value 18;
                  description
                    "OUI Juniper mode-change-ftp-server";
                }
                enum "port-vid" {
                  value 19;
                  description
                    "OUI IEEE 802.1 port-vid";
                }
                enum "port-protocol-vid" {
                  value 20;
                  description
                    "OUI IEEE 802.1 port-procol-vid";
                }
                enum "vlan-name" {
                  value 21;
                  description
                    "OUI IEEE 802.1 vlan-name";
                }
                enum "protocol-id" {
                  value 22;
                  description
                    "OUI IEEE 802.1 protocol-id";
                }
                enum "evb" {
                  value 23;
                  description
                    "OUI IEEE 802.1QBG evb";
                }
                enum
                  "power-via-mdi-measurements" {
                  value 24;
                  description
                    "OUI IEEE 802.3 power-via-mdi-measurements";
                }
                enum "cloud-reach-event" {
                  value 25;
                  description
                    "Cloud reachability event";
                }
                enum "phone-home-active" {
                  value 26;
                  description
                    "Phone-home active configuration";
                }
              }
              ordered-by user;
              description
                "Filter TLVs to be sent";
            }
    
            list interface {
              key "name";
              ordered-by user;
              description
                "Interface configuration";
              leaf name {
                type string;
              }
    
              uses apply-advanced;
    
              choice enable-disable {
                leaf disable {
                  type empty;
                  description "Disable LLDP";
                }
              }  // choice enable-disable
    
              container power-negotiation {
                presence
                  "enable power-negotiation";
                description
                  "LLDP power negotiation";
                uses apply-advanced;
    
                choice enable-disable {
                  leaf disable {
                    type empty;
                    description
                      "Disable power negotiation";
                  }
                }  // choice enable-disable
              }  // container power-negotiation
    
              leaf-list tlv-select {
                type enumeration {
                  enum "port-description" {
                    value 0;
                    description
                      "Port Description";
                  }
                  enum "system-name" {
                    value 1;
                    description "System Name";
                  }
                  enum "system-description" {
                    value 2;
                    description
                      "System Description";
                  }
                  enum "system-capabilities" {
                    value 3;
                    description
                      "System Capabilities";
                  }
                  enum "management-address" {
                    value 4;
                    description
                      "Management Address";
                  }
                  enum "mac-phy-config-status" {
                    value 5;
                    description
                      "OUI IEEE 802.3 mac-phy-config-status";
                  }
                  enum "power-vi-mdi" {
                    value 6;
                    description
                      "OUI IEEE 802.3 power-vi-mdi";
                  }
                  enum "link-aggregation" {
                    value 7;
                    description
                      "OUI IEEE 802.3 link-aggregation";
                  }
                  enum "maximum-frame-size" {
                    value 8;
                    description
                      "OUI IEEE 802.3 maximum-frame-size";
                  }
                  enum "jnpr-chassis-serial" {
                    value 9;
                    description
                      "OUI Juniper chassis-serial";
                  }
                  enum "jnpr-vcp" {
                    value 10;
                    description
                      "OUI Juniper vcp";
                  }
                  enum "jnpr-mode-change" {
                    value 11;
                    description
                      "OUI Juniper mode-change";
                  }
                  enum "jnpr-mode-change-error" {
                    value 12;
                    description
                      "OUI Juniper mode-change-error";
                  }
                  enum
                    "jnpr-mode-change-ip-address" {
                    value 13;
                    description
                      "OUI Juniper mode-change-ip-address";
                  }
                  enum
                    "jnpr-mode-change-image-name" {
                    value 14;
                    description
                      "OUI Juniper mode-change-image-name";
                  }
                  enum
                    "jnpr-mode-change-ftp-login" {
                    value 15;
                    description
                      "OUI Juniper mode-change-ftp-login";
                  }
                  enum
                    "jnpr-mode-change-image-md5" {
                    value 16;
                    description
                      "OUI Juniper mode-change-image-md5";
                  }
                  enum
                    "jnpr-mode-change-ftp-server" {
                    value 17;
                    description
                      "OUI Juniper mode-change-ftp-server";
                  }
                  enum "port-vid" {
                    value 18;
                    description
                      "OUI IEEE 802.1 port-vid";
                  }
                  enum "port-protocol-vid" {
                    value 19;
                    description
                      "OUI IEEE 802.1 port-procol-vid";
                  }
                  enum "vlan-name" {
                    value 20;
                    description
                      "OUI IEEE 802.1 vlan-name";
                  }
                  enum "protocol-id" {
                    value 21;
                    description
                      "OUI IEEE 802.1 protocol-id";
                  }
                  enum "evb" {
                    value 22;
                    description
                      "OUI IEEE 82.1QBG evb";
                  }
                  enum
                    "power-via-mdi-measurements" {
                    value 23;
                    description
                      "OUI IEEE 802.3 power-via-mdi-measurements";
                  }
                  enum "cloud-reach-event" {
                    value 24;
                    description
                      "Cloud reachability event";
                  }
                  enum "phone-home-active" {
                    value 25;
                    description
                      "Phone-home active configuration";
                  }
                }
                ordered-by user;
                description
                  "Select TLV(s) to be sent";
              }
    
              leaf-list tlv-filter {
                junos:must "(!(".. tlv-select"))";
                junos:must-message "tlv-select or tlv-filter is allowed, not both.";
                type enumeration {
                  enum "all" {
                    value 0;
                    description
                      "Filter all non mandatory TLVs";
                  }
                  enum "port-description" {
                    value 1;
                    description
                      "Port Description";
                  }
                  enum "system-name" {
                    value 2;
                    description "System Name";
                  }
                  enum "system-description" {
                    value 3;
                    description
                      "System Description";
                  }
                  enum "system-capabilities" {
                    value 4;
                    description
                      "System Capabilities";
                  }
                  enum "management-address" {
                    value 5;
                    description
                      "Management Address";
                  }
                  enum "mac-phy-config-status" {
                    value 6;
                    description
                      "OUI IEEE 802.3 mac-phy-config-status";
                  }
                  enum "power-vi-mdi" {
                    value 7;
                    description
                      "OUI IEEE 802.3 power-vi-mdi";
                  }
                  enum "link-aggregation" {
                    value 8;
                    description
                      "OUI IEEE 802.3 link-aggregation";
                  }
                  enum "maximum-frame-size" {
                    value 9;
                    description
                      "OUI IEEE 802.3 maximum-frame-size";
                  }
                  enum "jnpr-chassis-serial" {
                    value 10;
                    description
                      "OUI Juniper chassis-serial";
                  }
                  enum "jnpr-vcp" {
                    value 11;
                    description
                      "OUI Juniper vcp";
                  }
                  enum "jnpr-mode-change" {
                    value 12;
                    description
                      "OUI Juniper mode-change";
                  }
                  enum "jnpr-mode-change-error" {
                    value 13;
                    description
                      "OUI Juniper mode-change-error";
                  }
                  enum
                    "jnpr-mode-change-ip-address" {
                    value 14;
                    description
                      "OUI Juniper mode-change-ip-address";
                  }
                  enum
                    "jnpr-mode-change-image-name" {
                    value 15;
                    description
                      "OUI Juniper mode-change-image-name";
                  }
                  enum
                    "jnpr-mode-change-ftp-login" {
                    value 16;
                    description
                      "OUI Juniper mode-change-ftp-login";
                  }
                  enum
                    "jnpr-mode-change-image-md5" {
                    value 17;
                    description
                      "OUI Juniper mode-change-image-md5";
                  }
                  enum
                    "jnpr-mode-change-ftp-server" {
                    value 18;
                    description
                      "OUI Juniper mode-change-ftp-server";
                  }
                  enum "port-vid" {
                    value 19;
                    description
                      "OUI IEEE 802.1 port-vid";
                  }
                  enum "port-protocol-vid" {
                    value 20;
                    description
                      "OUI IEEE 802.1 port-procol-vid";
                  }
                  enum "vlan-name" {
                    value 21;
                    description
                      "OUI IEEE 802.1 vlan-name";
                  }
                  enum "protocol-id" {
                    value 22;
                    description
                      "OUI IEEE 802.1 protocol-id";
                  }
                  enum "evb" {
                    value 23;
                    description
                      "OUI IEEE 802.1QBG evb";
                  }
                  enum
                    "power-via-mdi-measurements" {
                    value 24;
                    description
                      "OUI IEEE 802.3 power-via-mdi-measurements";
                  }
                  enum "cloud-reach-event" {
                    value 25;
                    description
                      "Cloud reachability event";
                  }
                  enum "phone-home-active" {
                    value 26;
                    description
                      "Phone-home active configuration";
                  }
                }
                ordered-by user;
                description
                  "Filter TLV(s) to be sent";
              }
    
              leaf trap-notification {
                type enumeration {
                  enum "enable" {
                    value 0;
                    description
                      "Enable trap notification";
                  }
                  enum "disable" {
                    value 1;
                    description
                      "Disable trap notification";
                  }
                }
                default "enable";
                description
                  "To enable or disable for lldp-trap notification";
              }
            }  // list interface
          }  // container lldp
    
          container lldp-med {
            presence "enable lldp-med";
            description
              "LLDP Media Endpoint Discovery";
            uses apply-advanced;
    
            leaf fast-start {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "1 .. 10";
                }
              }
              description
                "Discovery count for MED";
            }
    
            list interface {
              key "name";
              ordered-by user;
              description
                "Interface configuration";
              leaf name {
                type string;
              }
    
              uses apply-advanced;
    
              choice enable-disable {
                leaf disable {
                  type empty;
                  description "Disable LLDP";
                }
              }  // choice enable-disable
    
              container location {
                presence "enable location";
                uses apply-advanced;
    
                choice location-type {
                  container civic-based {
                    presence
                      "enable civic-based";
                    description "Postal address";
                    uses civic-address-elements;
                  }  // container civic-based
                  leaf elin {
                    type string;
                    description
                      "Emergency line identification (ELIN) string";
                  }
    
                  case case_3 {
                  }  // case case_3
                }  // choice location-type
              }  // container location
    
              leaf-list tlv-select {
                type enumeration {
                  enum "med-capabilities" {
                    value 0;
                    description
                      "OUI TIA med-capabilities";
                  }
                  enum "network-policy" {
                    value 1;
                    description
                      "OUI TIA network-policy";
                  }
                  enum "location-id" {
                    value 2;
                    description
                      "OUI TIA location-id";
                  }
                  enum "ext-power-via-mdi" {
                    value 3;
                    description
                      "OUI TIA ext-power-via-mdi";
                  }
                }
                ordered-by user;
                description
                  "Select TLV(s) to be sent";
              }
    
              leaf-list tlv-filter {
                junos:must "(!(".. tlv-select"))";
                junos:must-message "tlv-select or tlv-filter is allowed, not both.";
                type enumeration {
                  enum "all" {
                    value 0;
                    description
                      "Filter all non mandatory TLVs";
                  }
                  enum "med-capabilities" {
                    value 1;
                    description
                      "OUI TIA med-capabilities";
                  }
                  enum "network-policy" {
                    value 2;
                    description
                      "OUI TIA network-policy";
                  }
                  enum "location-id" {
                    value 3;
                    description
                      "OUI TIA location-id";
                  }
                  enum "ext-power-via-mdi" {
                    value 4;
                    description
                      "OUI TIA ext-power-via-mdi";
                  }
                }
                ordered-by user;
                description
                  "Filter TLV(s) to be sent";
              }
            }  // list interface
    
            leaf-list tlv-select {
              type enumeration {
                enum "med-capabilities" {
                  value 0;
                  description
                    "OUI TIA med-capabilities";
                }
                enum "network-policy" {
                  value 1;
                  description
                    "OUI TIA network-policy";
                }
                enum "location-id" {
                  value 2;
                  description
                    "OUI TIA location-id";
                }
                enum "ext-power-via-mdi" {
                  value 3;
                  description
                    "OUI TIA ext-power-via-mdi";
                }
              }
              ordered-by user;
              description
                "Select MED TLVs to be sent";
            }
    
            leaf-list tlv-filter {
              junos:must "(!(".. tlv-select"))";
              junos:must-message "tlv-select or tlv-filter is allowed, not both.";
              type enumeration {
                enum "all" {
                  value 0;
                  description
                    "Filter all non mandatory TLVs";
                }
                enum "med-capabilities" {
                  value 1;
                  description
                    "OUI TIA med-capabilities";
                }
                enum "network-policy" {
                  value 2;
                  description
                    "OUI TIA network-policy";
                }
                enum "location-id" {
                  value 3;
                  description
                    "OUI TIA location-id";
                }
                enum "ext-power-via-mdi" {
                  value 4;
                  description
                    "OUI TIA ext-power-via-mdi";
                }
              }
              ordered-by user;
              description
                "Filter MED TLVs to be sent";
            }
          }  // container lldp-med
    
          container igmp-snooping {
            description
              "IGMP snooping configuration";
            uses juniper-default-ri-protocols-igmp-snooping;
          }  // container igmp-snooping
    
          container mld-snooping {
            description
              "MLD snooping configuration";
            uses juniper-default-ri-protocols-mld-snooping;
          }  // container mld-snooping
    
          container openflow {
            description "OpenFlow protocol";
            uses juniper-protocols-openflow;
          }  // container openflow
    
          container ppp {
            description "Configure PPP process";
            uses apply-advanced;
    
            container traceoptions {
              description "PPP trace options";
              uses ppp-traceoptions-type;
            }  // container traceoptions
    
            list monitor-session {
              key "session-name";
              description
                "Monitor packet exchange for PPP session";
              leaf session-name {
                type string;
                description "PPP session name";
              }
    
              uses apply-advanced;
            }  // list monitor-session
          }  // container ppp
    
          container pppoe {
            junos:must "(!("forwarding-options hyper-mode"))";
            junos:must-message "To configure pppoe, 'forwarding-options hyper-mode' should not be configured";
            description
              "Configure PPPoE process";
            uses apply-advanced;
    
            container traceoptions {
              description "PPPoE trace options";
              uses pppoe-traceoptions-type;
            }  // container traceoptions
    
            leaf pado-advertise {
              type empty;
              description
                "Enable PADO advertising of PPPoE Service-Names";
            }
          }  // container pppoe
    
          container sflow {
            presence "enable sflow";
            description "SFLOW protocol";
            uses apply-advanced;
    
            container traceoptions {
              description
                "Trace options for SFLOW";
              uses apply-advanced;
    
              container file {
                description "Trace file options";
                leaf filename {
                  type string {
                    junos:posix-pattern "![/ %]";
                    junos:pattern-message "Must not contain '/', % or a space";
                    length "1 .. 1024";
                  }
                  description
                    "Name of file in which to write trace information";
                }
    
                leaf replace {
                  type empty;
                  status deprecated;
                  description
                    "Replace trace file rather than appending to it";
                }
    
                leaf size {
                  type string;
                  description
                    "Maximum trace file size";
                }
    
                leaf files {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "2 .. 1000";
                    }
                  }
                  default "10";
                  description
                    "Maximum number of trace files";
                }
    
                leaf no-stamp {
                  type empty;
                  status deprecated;
                  description
                    "Do not timestamp trace file";
                }
    
                choice world-readable-choice {
                  leaf world-readable {
                    type empty;
                    description
                      "Allow any user to read the log file";
                  }
                  leaf no-world-readable {
                    type empty;
                    description
                      "Don't allow any user to read the log file";
                  }
                }  // choice world-readable-choice
              }  // container file
    
              list flag {
                key "name";
                ordered-by user;
                description "Tracing parameters";
                leaf name {
                  type enumeration {
                    enum "configuration" {
                      value 0;
                      description
                        "Trace sflow configuration";
                    }
                    enum "rtsock" {
                      value 1;
                      description
                        "Trace rtsock events";
                    }
                    enum "interface" {
                      value 2;
                      description
                        "Trace interface events";
                    }
                    enum "client-server" {
                      value 3;
                      description
                        "Trace sflow client-server events";
                    }
                    enum "all" {
                      value 4;
                      description
                        "Trace all sflow events";
                    }
                  }
                }
    
                leaf disable {
                  type empty;
                  description
                    "Disable this trace flag";
                }
              }  // list flag
            }  // container traceoptions
    
            container agent-id {
              description
                "Sflow agent id configuration";
              leaf inet {
                type jt:ipv4addr;
                description
                  "Sflow agent ipv4 address";
              }
            }  // container agent-id
    
            leaf polling-interval {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "0 .. 3600";
                }
              }
              units "seconds";
              default "20";
              description
                "Interval between port statistics";
            }
    
            container adaptive-sample-rate {
              description
                "Trigger adaptive sampling";
              leaf sample-rate {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32;
                }
                description
                  "Sflow adaptive sampling rate configuration";
              }
    
              leaf fallback {
                type empty;
                description
                  "Enable fallback to previous adapted sample rates";
              }
    
              leaf sample-limit-threshold {
                junos:must "(".. fallback")";
                junos:must-message "Adaptive sample rate fallback must be configured";
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32;
                }
                description
                  "Per FPC Sample limits in pps ";
              }
            }  // container adaptive-sample-rate
    
            leaf inline-sampling {
              type empty;
              description
                "Enable inline sampling of packets";
            }
    
            container sample-rate {
              description "Sampling rate";
              uses apply-advanced;
    
              leaf ingress {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32;
                }
                description "Ingress direction";
              }
    
              leaf egress {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32;
                }
                description "Egress direction";
              }
            }  // container sample-rate
    
            container source-ip {
              description
                "Sflow agent id configuration";
              leaf inet {
                type jt:ipv4addr;
                description
                  "Sflow datagram source ipv4 address";
              }
            }  // container source-ip
    
            list collector {
              key "name";
              max-elements 4;
              ordered-by user;
              description
                "SFLOW collector configuration";
              leaf name {
                junos:must "(!(("protocols sflow source-ip $$" || "protocols sflow source-ip inet6 $$")))";
                junos:must-message "sFlow collector address and source ip cannot be same";
                type jt:ipaddr;
                description
                  "Collector IP v4/v6 address";
              }
    
              uses apply-advanced;
    
              leaf udp-port {
                type union {
                  type uint16;
                  type string {
                    pattern "<.*>|$.*";
                  }
                }
                default "6343";
                description "Collector UDP port";
              }
            }  // list collector
    
            list interfaces {
              key "name";
              description
                "Enable SFLOW on this interface";
              leaf name {
                type union {
                  type jt:interface-name;
                  type string {
                    pattern "<.*>|$.*";
                  }
                }
                description "Interface name";
              }
    
              uses apply-advanced;
    
              leaf polling-interval {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "0 .. 3600";
                  }
                }
                units "seconds";
                description
                  "Interval between port statistics";
              }
    
              container sample-rate {
                description "Sampling rate";
                uses apply-advanced;
    
                leaf ingress {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32;
                  }
                  description
                    "Ingress direction";
                }
    
                leaf egress {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32;
                  }
                  description "Egress direction";
                }
              }  // container sample-rate
            }  // list interfaces
    
            leaf disable-sw-rate-limiter {
              type empty;
              description
                "Disable sw rate limiter";
            }
          }  // container sflow
    
          container protection-group {
            presence "enable protection-group";
            description "Protection group";
            uses juniper-protocols-protection-group;
          }  // container protection-group
    
          container mvrp {
            junos:must "((!(".. vstp") || ".. vstp disable"))";
            junos:must-message "vstp enabled, mvrp is not supported";
            junos:must "(((".. mstp" && !(".. mstp disable")) || (".. rstp" && !(".. rstp disable"))))";
            junos:must-message "RSTP/MSTP is not enabled, MVRP not allowed";
            description "MVRP configuration";
            uses juniper-protocols-mvrp;
          }  // container mvrp
    
          container layer2-control {
            description
              "Global options for layer 2 protocols";
            uses juniper-protocols-l2control;
          }  // container layer2-control
    
          container rstp {
            description
              "Rapid Spanning Tree Protocol options";
            uses juniper-protocols-stp;
          }  // container rstp
    
          container mstp {
            description
              "Multiple Spanning Tree Protocol options";
            uses juniper-protocols-mstp;
          }  // container mstp
    
          container vstp {
            junos:must "((".. vstp disable" || (!(".. mstp") || ".. mstp disable")))";
            junos:must-message "MSTP is enabled in the same routing instance, VSTP not allowed";
            description
              "VLAN Spanning Tree Protocol options";
            uses juniper-protocols-vstp;
          }  // container vstp
    
          container loop-detect {
            presence "enable loop-detect";
            description
              "Layer2 Loop Detect on interface with non-IP L2 Multicast mac as destination mac";
            uses apply-advanced;
    
            list interface {
              junos:must "(any ".. destination-mac <*>")";
              junos:must-message "destination-mac is mandatory for enabling loop-detect";
              key "name";
              ordered-by user;
              description
                "Interface name to block Loop Detect PDUs on";
              leaf name {
                type string;
              }
    
              uses apply-advanced;
    
              leaf disable {
                type empty;
                description
                  "Disable loop detect feature on a port";
              }
            }  // list interface
    
            container enhanced {
              description
                "Enhanced loop detect configuration";
              uses apply-advanced;
    
              list interface {
                key "name";
                ordered-by user;
                description "Name of interface";
                leaf name {
                  type string;
                }
    
                uses apply-advanced;
    
                leaf vlan-id {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "1 .. 4094";
                    }
                  }
                  description
                    "VLAN identifier for trunk interface";
                }
    
                leaf loop-detect-action {
                  type enumeration {
                    enum "interface-down" {
                      value 0;
                      description
                        "Interface down action";
                    }
                    enum "laser-off" {
                      value 1;
                      description
                        "Laser off action";
                    }
                  }
                  default "interface-down";
                  description
                    "Action that needs to be taken";
                }
    
                leaf transmit-interval {
                  type enumeration {
                    enum "1s" {
                      value 0;
                    }
                    enum "10s" {
                      value 1;
                    }
                    enum "1m" {
                      value 2;
                    }
                    enum "10m" {
                      value 3;
                    }
                  }
                  default "1s";
                  description
                    "Interval between loop-detect messages";
                }
    
                leaf revert-interval {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "0 .. 300";
                    }
                  }
                  units "seconds";
                  default "0";
                  description
                    "Interval after which action will be reverted";
                }
              }  // list interface
            }  // container enhanced
    
            leaf destination-mac {
              type jt:mac-multicast;
              description
                "Destination non-IP L2 multicast mac to be used for transmitting Loop Detect PDUs";
            }
    
            leaf transmit-interval {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint16 {
                  range "5 .. 3600";
                }
              }
              units "seconds";
              description
                "Loop Detect PDU TX interval in sec --default 30s";
            }
          }  // container loop-detect
    
          container uplink-failure-detection {
            description
              "Uplink failure detection configuration";
            uses apply-advanced;
    
            container group {
              description
                "Uplink failure detection group";
              uses apply-advanced;
    
              list ufd-group-name {
                key "name";
                description
                  "Uplink failure detection group name";
                uses ufd-group-type;
              }  // list ufd-group-name
            }  // container group
    
            container traceoptions {
              description
                "Trace options for uplink failure detection";
              uses apply-advanced;
    
              container file {
                description "Trace file options";
                leaf filename {
                  type string {
                    junos:posix-pattern "![/ %]";
                    junos:pattern-message "Must not contain '/', % or a space";
                    length "1 .. 1024";
                  }
                  description
                    "Name of file in which to write trace information";
                }
    
                leaf replace {
                  type empty;
                  status deprecated;
                  description
                    "Replace trace file rather than appending to it";
                }
    
                leaf size {
                  type string;
                  description
                    "Maximum trace file size";
                }
    
                leaf files {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "2 .. 1000";
                    }
                  }
                  default "10";
                  description
                    "Maximum number of trace files";
                }
    
                leaf no-stamp {
                  type empty;
                  status deprecated;
                  description
                    "Do not timestamp trace file";
                }
    
                choice world-readable-choice {
                  leaf world-readable {
                    type empty;
                    description
                      "Allow any user to read the log file";
                  }
                  leaf no-world-readable {
                    type empty;
                    description
                      "Don't allow any user to read the log file";
                  }
                }  // choice world-readable-choice
              }  // container file
    
              list flag {
                key "name";
                ordered-by user;
                description "Tracing parameters";
                leaf name {
                  type enumeration {
                    enum "parse" {
                      value 0;
                      description
                        "Trace configuration parsing";
                    }
                    enum "interface" {
                      value 1;
                      description
                        "Trace interface notifcation handlers of ufd";
                    }
                    enum "dcd" {
                      value 2;
                      description
                        "Trace ufdd interaction with dcd";
                    }
                    enum "groups" {
                      value 3;
                      description
                        "Trace uplink failure detection group handling";
                    }
                    enum "all" {
                      value 4;
                      description
                        "Trace everything";
                    }
                  }
                }
              }  // list flag
            }  // container traceoptions
    
            container action {
              description
                "Define action on ufd group state change";
              uses apply-advanced;
    
              leaf log {
                type empty;
                description "Log a message";
              }
            }  // container action
          }  // container uplink-failure-detection
        }  // grouping juniper-protocols
    
        grouping admin_group_include_exclude {
          uses apply-advanced;
    
          choice include-any-choice {
            leaf-list include-any {
              type string;
              ordered-by user;
              description
                "Groups, one or more of which must be present";
            }
          }  // choice include-any-choice
    
          choice include-all-choice {
            leaf-list include-all {
              type string;
              ordered-by user;
              description
                "Groups, all of which must be present";
            }
          }  // choice include-all-choice
    
          choice exclude-choice {
            leaf-list exclude {
              type string;
              ordered-by user;
              description
                "Groups, all of which must be absent";
            }
          }  // choice exclude-choice
        }  // grouping admin_group_include_exclude
    
        grouping apply-advanced {
          description
            "Apply advanced configuration logic";
          leaf-list apply-groups {
            type string;
            ordered-by user;
            description
              "Groups from which to inherit configuration data";
          }
    
          leaf-list apply-groups-except {
            type string;
            ordered-by user;
            description
              "Don't inherit configuration data from these groups";
          }
    
          list apply-macro {
            key "name";
            ordered-by user;
            description
              "Macro and parameters for commit script expansion";
            uses apply-macro-type;
          }  // list apply-macro
        }  // grouping apply-advanced
    
        grouping apply-macro-type {
          description
            "Macro data for commit-script expansion";
          leaf name {
            type string;
            description
              "Name of the macro to be expanded";
          }
    
          list data {
            key "name";
            uses macro-data-type;
          }  // list data
        }  // grouping apply-macro-type
    
        grouping bandwidth-type {
          uses apply-advanced;
    
          leaf per-traffic-class-bandwidth {
            type string;
            units "bps";
            description "Bandwidth to reserve";
          }
    
          leaf ct0 {
            type string;
            units "bps";
            description
              "Bandwidth from traffic class 0";
          }
    
          leaf ct1 {
            type string;
            units "bps";
            description
              "Bandwidth from traffic class 1";
          }
    
          leaf ct2 {
            type string;
            units "bps";
            description
              "Bandwidth from traffic class 2";
          }
    
          leaf ct3 {
            type string;
            units "bps";
            description
              "Bandwidth from traffic class 3";
          }
        }  // grouping bandwidth-type
    
        grouping cfm-traceoptions {
          description
            "Trace options for connectivity fault management";
          uses apply-advanced;
    
          leaf no-remote-trace {
            junos:must "("system tracing")";
            junos:must-message "'no-remote-trace' is valid only when [system tracing] is configured";
            type empty;
            description "Disable remote tracing";
          }
    
          container file {
            description "Trace file information";
            leaf filename {
              type string {
                junos:posix-pattern "![/ %]";
                junos:pattern-message "Must not contain '/', % or a space";
                length "1 .. 1024";
              }
              description
                "Name of file in which to write trace information";
            }
    
            leaf size {
              type string;
              description
                "Maximum trace file size";
            }
    
            leaf files {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "2 .. 1000";
                }
              }
              default "3";
              description
                "Maximum number of trace files";
            }
    
            choice world-readable-choice {
              leaf world-readable {
                type empty;
                description
                  "Allow any user to read the log file";
              }
              leaf no-world-readable {
                type empty;
                description
                  "Don't allow any user to read the log file";
              }
            }  // choice world-readable-choice
    
            leaf match {
              type jt:regular-expression;
              description
                "Regular expression for lines to be logged";
            }
          }  // container file
    
          list flag {
            key "name";
            ordered-by user;
            description "Tracing parameters";
            leaf name {
              type enumeration {
                enum "configuration" {
                  value 0;
                  description
                    "Trace configuration events";
                }
                enum "routing-socket" {
                  value 1;
                  description
                    "Trace routing socket events";
                }
                enum "protocol" {
                  value 2;
                  description
                    "Trace protocol processing events";
                }
                enum "init" {
                  value 3;
                  description
                    "Trace events related to protocol daemon start-up";
                }
                enum "error" {
                  value 4;
                  description
                    "Trace events related to catestrophic errors in daemon";
                }
                enum "issu" {
                  value 5;
                  description
                    "Trace ISSU related events";
                }
                enum "all" {
                  value 6;
                  description "Trace everything";
                }
              }
            }
          }  // list flag
        }  // grouping cfm-traceoptions
    
        grouping civic-address-elements {
          uses apply-advanced;
    
          leaf what {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint16 {
                range "0 .. 2";
              }
            }
            default "1";
            description "Type of address";
          }
    
          leaf country-code {
            type string {
              length "2";
            }
            description
              "Two-letter country code";
          }
    
          list ca-type {
            key "name";
            ordered-by user;
            leaf name {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint16 {
                  range "0 .. 255";
                }
              }
              description "Address element type";
            }
    
            uses apply-advanced;
    
            leaf ca-value {
              type string;
              description
                "Address element value";
            }
          }  // list ca-type
        }  // grouping civic-address-elements
    
        grouping juniper-default-ri-protocols-igmp-snooping {
          description "IGMP snooping options";
          uses apply-advanced;
    
          list vlan {
            key "name";
            ordered-by user;
            description "VLAN options";
            leaf name {
              junos:must "(!(".. .. .. .. vlans ${vlan} private-vlan"))";
              junos:must-message "Snooping cannot be enabled on secondary vlan";
              junos:must "((!(".. .. .. .. vlans ${vlan} vlan-id-list") && (!(".. .. .. .. vlans ${vlan} vxlan") || ".. .. .. .. protocols evpn")))";
              junos:must-message "Snooping must be configured on specific vlans which is not vxlan enabled (not on vlan list)";
              type string;
              description "VLAN name";
            }
    
            uses apply-advanced;
    
            container traceoptions {
              description
                "Trace options for IGMP Snooping";
              uses apply-advanced;
    
              container file {
                description "Trace file options";
                leaf filename {
                  type string {
                    junos:posix-pattern "![/ %]";
                    junos:pattern-message "Must not contain '/', % or a space";
                    length "1 .. 1024";
                  }
                  description
                    "Name of file in which to write trace information";
                }
    
                leaf replace {
                  type empty;
                  status deprecated;
                  description
                    "Replace trace file rather than appending to it";
                }
    
                leaf size {
                  type string;
                  description
                    "Maximum trace file size";
                }
    
                leaf files {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "2 .. 1000";
                    }
                  }
                  default "10";
                  description
                    "Maximum number of trace files";
                }
    
                leaf no-stamp {
                  type empty;
                  status deprecated;
                  description
                    "Do not timestamp trace file";
                }
    
                choice world-readable-choice {
                  leaf world-readable {
                    type empty;
                    description
                      "Allow any user to read the log file";
                  }
                  leaf no-world-readable {
                    type empty;
                    description
                      "Don't allow any user to read the log file";
                  }
                }  // choice world-readable-choice
              }  // container file
    
              list flag {
                key "name";
                ordered-by user;
                description "Tracing parameters";
                leaf name {
                  type enumeration {
                    enum "packets" {
                      value 0;
                      description
                        "Trace all IGMP packets";
                    }
                    enum "query" {
                      value 1;
                      description
                        "Trace IGMP membership query messages";
                    }
                    enum "report" {
                      value 2;
                      description
                        "Trace membership report messages";
                    }
                    enum "leave" {
                      value 3;
                      description
                        "Trace leave group messages (IGMPv2 only)";
                    }
                    enum "group" {
                      value 4;
                      description
                        "Trace group operations";
                    }
                    enum "client-notification" {
                      value 5;
                      description
                        "Trace notifications";
                    }
                    enum "route" {
                      value 6;
                      description
                        "Trace routing information";
                    }
                    enum "normal" {
                      value 7;
                      description
                        "Trace normal events";
                    }
                    enum "general" {
                      value 8;
                      description
                        "Trace general events";
                    }
                    enum "state" {
                      value 9;
                      description
                        "Trace state transitions";
                    }
                    enum "task" {
                      value 10;
                      description
                        "Trace routing protocol task processing";
                    }
                    enum "timer" {
                      value 11;
                      description
                        "Trace routing protocol timer processing";
                    }
                    enum "all" {
                      value 12;
                      description
                        "Trace everything";
                    }
                  }
                }
    
                leaf send {
                  type empty;
                  description
                    "Trace transmitted packets";
                }
    
                leaf receive {
                  type empty;
                  description
                    "Trace received packets";
                }
    
                leaf detail {
                  type empty;
                  description
                    "Trace detailed information";
                }
    
                leaf disable {
                  type empty;
                  description
                    "Disable this trace flag";
                }
              }  // list flag
            }  // container traceoptions
    
            leaf query-interval {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "1 .. 1024";
                }
              }
              units "seconds";
              default "125";
              description
                "When to send host query messages";
            }
    
            container l2-querier {
              description
                "Enable L2 querier mode";
              uses apply-advanced;
    
              leaf source-address {
                type jt:ipv4addr;
                description
                  "Source IP address to use for L2 querier";
              }
            }  // container l2-querier
    
            leaf query-response-interval {
              type string {
                junos:posix-pattern "^[0-9]{1,4}(.[0-9])?$";
                junos:pattern-message "Up to 1 digit to right of decimal point";
              }
              units "seconds";
              default "10";
              description
                "How long to wait for a host query response";
            }
    
            leaf query-last-member-interval {
              type string {
                junos:posix-pattern "^[0-9]{1,4}(.[0-9])?$";
                junos:pattern-message "Up to 1 digit to right of decimal point";
              }
              units "seconds";
              default "1";
              description
                "When to send group query messages";
            }
    
            leaf robust-count {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "2 .. 10";
                }
              }
              default "2";
              description
                "Expected packet loss on a subnet";
            }
    
            leaf immediate-leave {
              type empty;
              description
                "Enable immediate group leave on interfaces";
            }
    
            container proxy {
              presence "enable proxy";
              description "Enable proxy mode";
              uses apply-advanced;
    
              leaf source-address {
                junos:must "(!(".. .. .. .. .. vlans ${vlan} vlan-id all"))";
                junos:must-message "With qualified-learning source-address should be configured under qualified vlan options";
                type jt:ipv4addr;
                description
                  "Source IP address to use for proxy";
              }
            }  // container proxy
    
            leaf evpn-ssm-reports-only {
              type empty;
              description
                "Accept and process only <s,g> reports of SSM groups";
            }
    
            list interface {
              key "name";
              ordered-by user;
              description
                "Interface options for IGMP";
              leaf name {
                junos:must "(!("interfaces $$-IFL vlan-tags inner-range"))";
                junos:must-message "interface with vlan-tags inner-range should be specified in a learning-domain only";
                junos:must "(!("interfaces $$-IFL vlan-id-range"))";
                junos:must-message "interface with vlan-id-range should be specified in a learning-domain only";
                junos:must "(!(".. .. .. .. .. vlans ${vlan} vlan-id all"))";
                junos:must-message "When 'vlan-id all' is configured, interface should be configured only under vlan";
                type union {
                  type jt:interface-name;
                  type string {
                    pattern "<.*>|$.*";
                  }
                }
                description "Interface name";
              }
    
              uses apply-advanced;
    
              leaf multicast-router-interface {
                type empty;
                description
                  "Enabling multicast-router-interface on the interface";
              }
    
              leaf immediate-leave {
                type empty;
                description
                  "Enable immediate group leave on interface";
              }
    
              leaf host-only-interface {
                junos:must "(!(".. multicast-router-interface"))";
                junos:must-message "interface cannot be both host-only and multicast-router";
                type empty;
                description
                  "Enable interface to be treated as host-side interface";
              }
    
              leaf group-limit {
                type union {
                  type uint16;
                  type string {
                    pattern "<.*>|$.*";
                  }
                }
                description
                  "Maximum number of groups an interface can join";
              }
    
              container static {
                description
                  "Static group or source membership";
                uses apply-advanced;
    
                list group {
                  key "name";
                  ordered-by user;
                  description
                    "IP multicast group address";
                  leaf name {
                    type jt:ipv4addr;
                    description
                      "IP multicast group address";
                  }
    
                  uses apply-advanced;
    
                  list source {
                    key "name";
                    ordered-by user;
                    description
                      "IP multicast source address";
                    leaf name {
                      type jt:ipv4addr;
                      description
                        "Source address of IP multicast data";
                    }
    
                    uses apply-advanced;
                  }  // list source
                }  // list group
              }  // container static
            }  // list interface
    
            list qualified-vlan {
              key "name";
              ordered-by user;
              description
                "VLAN options for qualified-learning";
              leaf name {
                junos:must "(".. .. .. .. .. vlans ${vlan} vlan-id all")";
                junos:must-message "vlan specific configuration is allowed with qualified-learning only";
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "0 .. 1023";
                  }
                }
                description
                  "VLAN ID of the learning-domain";
              }
    
              uses apply-advanced;
    
              leaf query-interval {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "1 .. 1024";
                  }
                }
                units "seconds";
                description
                  "When to send host query messages";
              }
    
              container l2-querier {
                description
                  "Enable L2 querier mode";
                uses apply-advanced;
    
                leaf source-address {
                  type jt:ipv4addr;
                  description
                    "Source IP address to use for L2 querier";
                }
              }  // container l2-querier
    
              leaf query-response-interval {
                type string {
                  junos:posix-pattern "^[0-9]{1,4}(.[0-9])?$";
                  junos:pattern-message "Up to 1 digit to right of decimal point";
                }
                units "seconds";
                description
                  "How long to wait for a host query response";
              }
    
              leaf query-last-member-interval {
                type string {
                  junos:posix-pattern "^[0-9]{1,4}(.[0-9])?$";
                  junos:pattern-message "Up to 1 digit to right of decimal point";
                }
                units "seconds";
                description
                  "When to send group query messages";
              }
    
              leaf robust-count {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "2 .. 10";
                  }
                }
                description
                  "Expected packet loss on a subnet";
              }
    
              leaf immediate-leave {
                type empty;
                description
                  "Enable immediate group leave on interfaces";
              }
    
              container proxy {
                presence "enable proxy";
                description "Enable proxy mode";
                uses apply-advanced;
    
                leaf source-address {
                  type jt:ipv4addr;
                  description
                    "Source IP address to use for proxy";
                }
              }  // container proxy
    
              leaf evpn-ssm-reports-only {
                type empty;
                description
                  "Accept and process only <s,g> reports of SSM groups";
              }
    
              list interface {
                key "name";
                ordered-by user;
                description
                  "Interface options for IGMP";
                leaf name {
                  junos:must "(".. .. .. .. .. .. vlans ${vlan} interface $$")";
                  junos:must-message "interface options can be specified for the interfaces in the routing-instance";
                  type union {
                    type jt:interface-name;
                    type string {
                      pattern "<.*>|$.*";
                    }
                  }
                  description "Interface name";
                }
    
                uses apply-advanced;
    
                leaf multicast-router-interface {
                  type empty;
                  description
                    "Enabling multicast-router-interface on the interface";
                }
    
                leaf immediate-leave {
                  type empty;
                  description
                    "Enable immediate group leave on interface";
                }
    
                leaf host-only-interface {
                  junos:must "(!(".. multicast-router-interface"))";
                  junos:must-message "interface cannot be both host-only and multicast-router";
                  type empty;
                  description
                    "Enable interface to be treated as host-side interface";
                }
    
                leaf group-limit {
                  type union {
                    type uint16;
                    type string {
                      pattern "<.*>|$.*";
                    }
                  }
                  description
                    "Maximum number of groups an interface can join";
                }
    
                container static {
                  description
                    "Static group or source membership";
                  uses apply-advanced;
    
                  list group {
                    key "name";
                    ordered-by user;
                    description
                      "IP multicast group address";
                    leaf name {
                      type jt:ipv4addr;
                      description
                        "IP multicast group address";
                    }
    
                    uses apply-advanced;
    
                    list source {
                      key "name";
                      ordered-by user;
                      description
                        "IP multicast source address";
                      leaf name {
                        type jt:ipv4addr;
                        description
                          "Source address of IP multicast data";
                      }
    
                      uses apply-advanced;
                    }  // list source
                  }  // list group
                }  // container static
              }  // list interface
            }  // list qualified-vlan
          }  // list vlan
    
          container traceoptions {
            description
              "Trace options for IGMP Snooping";
            uses apply-advanced;
    
            container file {
              description "Trace file options";
              leaf filename {
                type string {
                  junos:posix-pattern "![/ %]";
                  junos:pattern-message "Must not contain '/', % or a space";
                  length "1 .. 1024";
                }
                description
                  "Name of file in which to write trace information";
              }
    
              leaf replace {
                type empty;
                status deprecated;
                description
                  "Replace trace file rather than appending to it";
              }
    
              leaf size {
                type string;
                description
                  "Maximum trace file size";
              }
    
              leaf files {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "2 .. 1000";
                  }
                }
                default "10";
                description
                  "Maximum number of trace files";
              }
    
              leaf no-stamp {
                type empty;
                status deprecated;
                description
                  "Do not timestamp trace file";
              }
    
              choice world-readable-choice {
                leaf world-readable {
                  type empty;
                  description
                    "Allow any user to read the log file";
                }
                leaf no-world-readable {
                  type empty;
                  description
                    "Don't allow any user to read the log file";
                }
              }  // choice world-readable-choice
            }  // container file
    
            list flag {
              key "name";
              ordered-by user;
              description "Tracing parameters";
              leaf name {
                type enumeration {
                  enum "packets" {
                    value 0;
                    description
                      "Trace all IGMP packets";
                  }
                  enum "query" {
                    value 1;
                    description
                      "Trace IGMP membership query messages";
                  }
                  enum "report" {
                    value 2;
                    description
                      "Trace membership report messages";
                  }
                  enum "leave" {
                    value 3;
                    description
                      "Trace leave group messages (IGMPv2 only)";
                  }
                  enum "group" {
                    value 4;
                    description
                      "Trace group operations";
                  }
                  enum "client-notification" {
                    value 5;
                    description
                      "Trace notifications";
                  }
                  enum "host-notification" {
                    value 6;
                    description
                      "Trace host notifications";
                  }
                  enum "route" {
                    value 7;
                    description
                      "Trace routing information";
                  }
                  enum "normal" {
                    value 8;
                    description
                      "Trace normal events";
                  }
                  enum "general" {
                    value 9;
                    description
                      "Trace general events";
                  }
                  enum "state" {
                    value 10;
                    description
                      "Trace state transitions";
                  }
                  enum "policy" {
                    value 11;
                    description
                      "Trace policy processing";
                  }
                  enum "task" {
                    value 12;
                    description
                      "Trace routing protocol task processing";
                  }
                  enum "timer" {
                    value 13;
                    description
                      "Trace routing protocol timer processing";
                  }
                  enum "all" {
                    value 14;
                    description
                      "Trace everything";
                  }
                }
              }
    
              leaf send {
                type empty;
                description
                  "Trace transmitted packets";
              }
    
              leaf receive {
                type empty;
                description
                  "Trace received packets";
              }
    
              leaf detail {
                type empty;
                description
                  "Trace detailed information";
              }
    
              leaf disable {
                type empty;
                description
                  "Disable this trace flag";
              }
            }  // list flag
          }  // container traceoptions
    
          leaf query-interval {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "1 .. 1024";
              }
            }
            units "seconds";
            default "125";
            description
              "When to send host query messages";
          }
    
          leaf query-response-interval {
            type string {
              junos:posix-pattern "^[0-9]{1,4}(.[0-9])?$";
              junos:pattern-message "Up to 1 digit to right of decimal point";
            }
            units "seconds";
            default "10";
            description
              "How long to wait for a host query response";
          }
    
          leaf query-last-member-interval {
            type string {
              junos:posix-pattern "^[0-9]{1,4}(.[0-9])?$";
              junos:pattern-message "Up to 1 digit to right of decimal point";
            }
            units "seconds";
            default "1";
            description
              "When to send group query messages";
          }
    
          leaf robust-count {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "2 .. 10";
              }
            }
            default "2";
            description
              "Expected packet loss on a subnet";
          }
    
          leaf immediate-leave {
            type empty;
            description
              "Enable immediate group leave on interfaces";
          }
    
          leaf evpn-ssm-reports-only {
            type empty;
            description
              "Accept and process only <s,g> reports of SSM groups";
          }
    
          container proxy {
            presence "enable proxy";
            description "Enable proxy mode";
            uses apply-advanced;
    
            leaf source-address {
              type jt:ipv4addr;
              description
                "Source IP address to use for proxy";
            }
    
            leaf irb {
              type empty;
              description
                "Proxy IGMP reports to IRB";
            }
          }  // container proxy
    
          list interface {
            key "name";
            ordered-by user;
            description
              "Interface options for IGMP";
            leaf name {
              junos:must "(("interfaces $$-IFL family bridge interface-mode" && !(any "routing-instances <*> interface $$")))";
              junos:must-message "interface options can be specified for access/trunk interfaces in this routing instance only";
              type union {
                type jt:interface-name;
                type string {
                  pattern "<.*>|$.*";
                }
              }
              description "Interface name";
            }
    
            uses apply-advanced;
    
            leaf multicast-router-interface {
              type empty;
              description
                "Enabling multicast-router-interface on the interface";
            }
    
            leaf immediate-leave {
              type empty;
              description
                "Enable immediate group leave on interfaces";
            }
    
            leaf host-only-interface {
              junos:must "(!(".. multicast-router-interface"))";
              junos:must-message "interface cannot be both host-only and multicast-router";
              type empty;
              description
                "Enable interfaces to be treated as host-side interfaces";
            }
    
            leaf group-limit {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint16 {
                  range "1 .. 65535";
                }
              }
              description
                "Maximum number of (source,group) per interface";
            }
    
            container static {
              description
                "Static group or source membership";
              uses apply-advanced;
    
              list group {
                key "name";
                ordered-by user;
                description
                  "IP multicast group address";
                leaf name {
                  type jt:ipv4addr;
                  description
                    "IP multicast group address";
                }
    
                uses apply-advanced;
    
                list source {
                  key "name";
                  ordered-by user;
                  description
                    "IP multicast source address";
                  leaf name {
                    type jt:ipv4addr;
                    description
                      "Source address of IP multicast data";
                  }
    
                  uses apply-advanced;
                }  // list source
              }  // list group
            }  // container static
          }  // list interface
        }  // grouping juniper-default-ri-protocols-igmp-snooping
    
        grouping juniper-default-ri-protocols-mld-snooping {
          description "MLD snooping options";
          uses apply-advanced;
    
          list vlan {
            key "name";
            ordered-by user;
            description "VLAN options";
            leaf name {
              junos:must "(!(".. .. .. .. vlans ${vlan} private-vlan"))";
              junos:must-message "Snooping cannot be enabled on secondary vlan";
              junos:must "((!(".. .. .. .. vlans ${vlan} vlan-id-list") && (!(".. .. .. .. vlans ${vlan} vxlan") || ".. .. .. .. protocols evpn")))";
              junos:must-message "Snooping must be configured on specific vlans which is not vxlan enabled(not on vlan list)";
              type string;
              description "VLAN name";
            }
    
            uses apply-advanced;
    
            container traceoptions {
              description
                "Trace options for MLD Snooping";
              uses apply-advanced;
    
              container file {
                description "Trace file options";
                leaf filename {
                  type string {
                    junos:posix-pattern "![/ %]";
                    junos:pattern-message "Must not contain '/', % or a space";
                    length "1 .. 1024";
                  }
                  description
                    "Name of file in which to write trace information";
                }
    
                leaf replace {
                  type empty;
                  status deprecated;
                  description
                    "Replace trace file rather than appending to it";
                }
    
                leaf size {
                  type string;
                  description
                    "Maximum trace file size";
                }
    
                leaf files {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "2 .. 1000";
                    }
                  }
                  default "10";
                  description
                    "Maximum number of trace files";
                }
    
                leaf no-stamp {
                  type empty;
                  status deprecated;
                  description
                    "Do not timestamp trace file";
                }
    
                choice world-readable-choice {
                  leaf world-readable {
                    type empty;
                    description
                      "Allow any user to read the log file";
                  }
                  leaf no-world-readable {
                    type empty;
                    description
                      "Don't allow any user to read the log file";
                  }
                }  // choice world-readable-choice
              }  // container file
    
              list flag {
                key "name";
                ordered-by user;
                description "Tracing parameters";
                leaf name {
                  type enumeration {
                    enum "packets" {
                      value 0;
                      description
                        "Trace all MLD packets";
                    }
                    enum "query" {
                      value 1;
                      description
                        "Trace MLD membership query messages";
                    }
                    enum "report" {
                      value 2;
                      description
                        "Trace membership report messages";
                    }
                    enum "leave" {
                      value 3;
                      description
                        "Trace leave group messages (MLDv1 only)";
                    }
                    enum "group" {
                      value 4;
                      description
                        "Trace group operations";
                    }
                    enum "client-notification" {
                      value 5;
                      description
                        "Trace notifications";
                    }
                    enum "host-notification" {
                      value 6;
                      description
                        "Trace host notifications";
                    }
                    enum "route" {
                      value 7;
                      description
                        "Trace routing information";
                    }
                    enum "normal" {
                      value 8;
                      description
                        "Trace normal events";
                    }
                    enum "general" {
                      value 9;
                      description
                        "Trace general events";
                    }
                    enum "state" {
                      value 10;
                      description
                        "Trace state transitions";
                    }
                    enum "policy" {
                      value 11;
                      description
                        "Trace policy processing";
                    }
                    enum "task" {
                      value 12;
                      description
                        "Trace routing protocol task processing";
                    }
                    enum "timer" {
                      value 13;
                      description
                        "Trace routing protocol timer processing";
                    }
                    enum "all" {
                      value 14;
                      description
                        "Trace everything";
                    }
                  }
                }
    
                leaf send {
                  type empty;
                  description
                    "Trace transmitted packets";
                }
    
                leaf receive {
                  type empty;
                  description
                    "Trace received packets";
                }
    
                leaf detail {
                  type empty;
                  description
                    "Trace detailed information";
                }
    
                leaf disable {
                  type empty;
                  description
                    "Disable this trace flag";
                }
              }  // list flag
            }  // container traceoptions
    
            leaf query-interval {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "1 .. 1024";
                }
              }
              units "seconds";
              default "125";
              description
                "When to send host query messages";
            }
    
            container l2-querier {
              description
                "Enable L2 querier mode";
              uses apply-advanced;
    
              leaf source-address {
                type jt:ipv6addr;
                description
                  "Source IP address to use for L2 querier";
              }
            }  // container l2-querier
    
            leaf query-response-interval {
              type string {
                junos:posix-pattern "^[0-9]{1,4}(.[0-9])?$";
                junos:pattern-message "Up to 1 digit to right of decimal point";
              }
              units "seconds";
              default "10";
              description
                "How long to wait for a host query response";
            }
    
            leaf query-last-member-interval {
              type string {
                junos:posix-pattern "^[0-9]{1,4}(.[0-9])?$";
                junos:pattern-message "Up to 1 digit to right of decimal point";
              }
              units "seconds";
              default "1";
              description
                "When to send group query messages";
            }
    
            leaf robust-count {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "2 .. 10";
                }
              }
              default "2";
              description
                "Expected packet loss on a subnet";
            }
    
            leaf immediate-leave {
              type empty;
              description
                "Enable immediate group leave on interfaces";
            }
    
            container proxy {
              presence "enable proxy";
              description "Enable proxy mode";
              uses apply-advanced;
    
              leaf source-address {
                junos:must "(!(".. .. .. .. .. vlans ${vlan} vlan-id all"))";
                junos:must-message "With qualified-learning source-address should be configured under Vlan options";
                type jt:ipv6addr;
                description
                  "Source IP address to use for proxy";
              }
            }  // container proxy
    
            leaf evpn-ssm-reports-only {
              type empty;
              description
                "Accept and process only <s,g> reports of SSM groups";
            }
    
            list interface {
              key "name";
              ordered-by user;
              description
                "Interface options for MLD";
              leaf name {
                junos:must "(!("interfaces $$-IFL vlan-tags inner-range"))";
                junos:must-message "interface with vlan-tags inner-range should be specified in a learning-domain only";
                junos:must "(!("interfaces $$-IFL vlan-id-range"))";
                junos:must-message "interface with vlan-id-range should be specified in a learning-domain only";
                junos:must "(!(".. .. .. .. .. vlans ${vlan} vlan-id all"))";
                junos:must-message "When 'vlan-id all' is configured, interface should be configured only under vlan";
                type union {
                  type jt:interface-name;
                  type string {
                    pattern "<.*>|$.*";
                  }
                }
                description "Interface name";
              }
    
              uses apply-advanced;
    
              leaf multicast-router-interface {
                type empty;
                description
                  "Enabling multicast-router-interface on the interface";
              }
    
              leaf immediate-leave {
                type empty;
                description
                  "Enable immediate group leave on interfaces";
              }
    
              leaf host-only-interface {
                type empty;
                description
                  "Enable interfaces to be treated as host-side interfaces";
              }
    
              leaf group-limit {
                type union {
                  type uint16;
                  type string {
                    pattern "<.*>|$.*";
                  }
                }
                description
                  "Maximum number of groups an interface can join";
              }
    
              container static {
                description
                  "Static group or source membership";
                uses apply-advanced;
    
                list group {
                  key "name";
                  ordered-by user;
                  description
                    "IP multicast group address";
                  leaf name {
                    type jt:ipv6addr;
                    description
                      "IP multicast group address";
                  }
    
                  uses apply-advanced;
    
                  list source {
                    key "name";
                    ordered-by user;
                    description
                      "IP multicast source address";
                    leaf name {
                      type jt:ipv6addr;
                      description
                        "Source address of IP multicast data";
                    }
    
                    uses apply-advanced;
                  }  // list source
                }  // list group
              }  // container static
            }  // list interface
    
            list qualified-vlan {
              key "name";
              ordered-by user;
              description
                "VLAN options for qualified-learning";
              leaf name {
                junos:must "(".. .. .. .. .. vlans ${vlan} vlan-id all")";
                junos:must-message "vlan specific configuration is allowed with qualified-learning only";
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "0 .. 1023";
                  }
                }
                description
                  "VLAN ID of the learning-domain";
              }
    
              uses apply-advanced;
    
              leaf query-interval {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "1 .. 1024";
                  }
                }
                units "seconds";
                description
                  "When to send host query messages";
              }
    
              container l2-querier {
                uses apply-advanced;
    
                leaf source-address {
                  type jt:ipv6addr;
                  description
                    "Source IP address to use for L2 querier";
                }
              }  // container l2-querier
    
              leaf query-response-interval {
                type string {
                  junos:posix-pattern "^[0-9]{1,4}(.[0-9])?$";
                  junos:pattern-message "Up to 1 digit to right of decimal point";
                }
                units "seconds";
                description
                  "How long to wait for a host query response";
              }
    
              leaf query-last-member-interval {
                type string {
                  junos:posix-pattern "^[0-9]{1,4}(.[0-9])?$";
                  junos:pattern-message "Up to 1 digit to right of decimal point";
                }
                units "seconds";
                description
                  "When to send group query messages";
              }
    
              leaf robust-count {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "2 .. 10";
                  }
                }
                description
                  "Expected packet loss on a subnet";
              }
    
              leaf immediate-leave {
                type empty;
                description
                  "Enable immediate group leave on interfaces";
              }
    
              container proxy {
                presence "enable proxy";
                description "Enable proxy mode";
                uses apply-advanced;
    
                leaf source-address {
                  type jt:ipv6addr;
                  description
                    "Source IP address to use for proxy";
                }
              }  // container proxy
    
              leaf evpn-ssm-reports-only {
                type empty;
                description
                  "Accept and process only <s,g> reports of SSM groups";
              }
    
              list interface {
                key "name";
                ordered-by user;
                description
                  "Interface options for MLD";
                leaf name {
                  junos:must "(".. .. .. .. .. .. vlans ${vlan} interface $$")";
                  junos:must-message "interface options can be specified for the interfaces in the routing-instance";
                  type union {
                    type jt:interface-name;
                    type string {
                      pattern "<.*>|$.*";
                    }
                  }
                  description "Interface name";
                }
    
                uses apply-advanced;
    
                leaf multicast-router-interface {
                  type empty;
                  description
                    "Enabling multicast-router-interface on the interface";
                }
    
                leaf immediate-leave {
                  type empty;
                  description
                    "Enable immediate group leave on interfaces";
                }
    
                leaf host-only-interface {
                  type empty;
                  description
                    "Enable interfaces to be treated as host-side interfaces";
                }
    
                leaf group-limit {
                  type union {
                    type uint16;
                    type string {
                      pattern "<.*>|$.*";
                    }
                  }
                  description
                    "Maximum number of groups an interface can join";
                }
    
                container static {
                  description
                    "Static group or source membership";
                  uses apply-advanced;
    
                  list group {
                    key "name";
                    ordered-by user;
                    description
                      "IP multicast group address";
                    leaf name {
                      type jt:ipv6addr;
                      description
                        "IP multicast group address";
                    }
    
                    uses apply-advanced;
    
                    list source {
                      key "name";
                      ordered-by user;
                      description
                        "IP multicast source address";
                      leaf name {
                        type jt:ipv6addr;
                        description
                          "Source address of IP multicast data";
                      }
    
                      uses apply-advanced;
                    }  // list source
                  }  // list group
                }  // container static
              }  // list interface
            }  // list qualified-vlan
          }  // list vlan
    
          container traceoptions {
            description
              "Trace options for MLD Snooping";
            uses apply-advanced;
    
            container file {
              description "Trace file options";
              leaf filename {
                type string {
                  junos:posix-pattern "![/ %]";
                  junos:pattern-message "Must not contain '/', % or a space";
                  length "1 .. 1024";
                }
                description
                  "Name of file in which to write trace information";
              }
    
              leaf replace {
                type empty;
                status deprecated;
                description
                  "Replace trace file rather than appending to it";
              }
    
              leaf size {
                type string;
                description
                  "Maximum trace file size";
              }
    
              leaf files {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "2 .. 1000";
                  }
                }
                default "10";
                description
                  "Maximum number of trace files";
              }
    
              leaf no-stamp {
                type empty;
                status deprecated;
                description
                  "Do not timestamp trace file";
              }
    
              choice world-readable-choice {
                leaf world-readable {
                  type empty;
                  description
                    "Allow any user to read the log file";
                }
                leaf no-world-readable {
                  type empty;
                  description
                    "Don't allow any user to read the log file";
                }
              }  // choice world-readable-choice
            }  // container file
    
            list flag {
              key "name";
              ordered-by user;
              description "Tracing parameters";
              leaf name {
                type enumeration {
                  enum "packets" {
                    value 0;
                    description
                      "Trace all MLD packets";
                  }
                  enum "query" {
                    value 1;
                    description
                      "Trace MLD membership query messages";
                  }
                  enum "report" {
                    value 2;
                    description
                      "Trace membership report messages";
                  }
                  enum "leave" {
                    value 3;
                    description
                      "Trace leave group messages (MLDv2 only)";
                  }
                  enum "group" {
                    value 4;
                    description
                      "Trace group operations";
                  }
                  enum "client-notification" {
                    value 5;
                    description
                      "Trace notifications";
                  }
                  enum "host-notification" {
                    value 6;
                    description
                      "Trace host notifications";
                  }
                  enum "route" {
                    value 7;
                    description
                      "Trace routing information";
                  }
                  enum "normal" {
                    value 8;
                    description
                      "Trace normal events";
                  }
                  enum "general" {
                    value 9;
                    description
                      "Trace general events";
                  }
                  enum "state" {
                    value 10;
                    description
                      "Trace state transitions";
                  }
                  enum "policy" {
                    value 11;
                    description
                      "Trace policy processing";
                  }
                  enum "task" {
                    value 12;
                    description
                      "Trace routing protocol task processing";
                  }
                  enum "timer" {
                    value 13;
                    description
                      "Trace routing protocol timer processing";
                  }
                  enum "all" {
                    value 14;
                    description
                      "Trace everything";
                  }
                }
              }
    
              leaf send {
                type empty;
                description
                  "Trace transmitted packets";
              }
    
              leaf receive {
                type empty;
                description
                  "Trace received packets";
              }
    
              leaf detail {
                type empty;
                description
                  "Trace detailed information";
              }
    
              leaf disable {
                type empty;
                description
                  "Disable this trace flag";
              }
            }  // list flag
          }  // container traceoptions
    
          leaf query-interval {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "1 .. 1024";
              }
            }
            units "seconds";
            default "125";
            description
              "When to send host query messages";
          }
    
          leaf query-response-interval {
            type string {
              junos:posix-pattern "^[0-9]{1,4}(.[0-9])?$";
              junos:pattern-message "Up to 1 digit to right of decimal point";
            }
            units "seconds";
            default "10";
            description
              "How long to wait for a host query response";
          }
    
          leaf query-last-member-interval {
            type string {
              junos:posix-pattern "^[0-9]{1,4}(.[0-9])?$";
              junos:pattern-message "Up to 1 digit to right of decimal point";
            }
            units "seconds";
            default "1";
            description
              "When to send group query messages";
          }
    
          leaf robust-count {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "2 .. 10";
              }
            }
            default "2";
            description
              "Expected packet loss on a subnet";
          }
    
          leaf immediate-leave {
            type empty;
            description
              "Enable immediate group leave on interfaces";
          }
    
          leaf evpn-ssm-reports-only {
            type empty;
            description
              "Accept and process only <s,g> reports of SSM groups";
          }
    
          container proxy {
            presence "enable proxy";
            description "Enable proxy mode";
            uses apply-advanced;
    
            leaf source-address {
              type jt:ipv6addr;
              description
                "Source IP address to use for proxy";
            }
    
            leaf irb {
              type empty;
              description
                "Proxy IGMP reports to IRB";
            }
          }  // container proxy
    
          list interface {
            key "name";
            ordered-by user;
            description
              "Interface options for MLD";
            leaf name {
              junos:must "(("interfaces $$-IFL family bridge interface-mode" && !(any "routing-instances <*> interface $$")))";
              junos:must-message "interface options can be specified for access/trunk interfaces in this routing instance only";
              type union {
                type jt:interface-name;
                type string {
                  pattern "<.*>|$.*";
                }
              }
              description "Interface name";
            }
    
            uses apply-advanced;
    
            leaf multicast-router-interface {
              type empty;
              description
                "Enabling multicast-router-interface on the interface";
            }
    
            leaf immediate-leave {
              type empty;
              description
                "Enable immediate group leave on interfaces";
            }
    
            leaf host-only-interface {
              junos:must "(!(".. multicast-router-interface"))";
              junos:must-message "interface cannot be both host-only and multicast-router";
              type empty;
              description
                "Enable interfaces to be treated as host-side interfaces";
            }
    
            leaf group-limit {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint16 {
                  range "1 .. 65535";
                }
              }
              description
                "Maximum number of (source,group) per interface";
            }
    
            container static {
              description
                "Static group or source membership";
              uses apply-advanced;
    
              list group {
                key "name";
                ordered-by user;
                description
                  "IP multicast group address";
                leaf name {
                  type jt:ipv6addr;
                  description
                    "IP multicast group address";
                }
    
                uses apply-advanced;
    
                list source {
                  key "name";
                  ordered-by user;
                  description
                    "IP multicast source address";
                  leaf name {
                    type jt:ipv6addr;
                    description
                      "Source address of IP multicast data";
                  }
    
                  uses apply-advanced;
                }  // list source
              }  // list group
            }  // container static
          }  // list interface
        }  // grouping juniper-default-ri-protocols-mld-snooping
    
        grouping juniper-protocols-amt {
          uses apply-advanced;
    
          container traceoptions {
            description "Trace options for AMT";
            uses apply-advanced;
    
            container file {
              description "Trace file options";
              leaf filename {
                type string {
                  junos:posix-pattern "![/ %]";
                  junos:pattern-message "Must not contain '/', % or a space";
                  length "1 .. 1024";
                }
                description
                  "Name of file in which to write trace information";
              }
    
              leaf replace {
                type empty;
                status deprecated;
                description
                  "Replace trace file rather than appending to it";
              }
    
              leaf size {
                type string;
                description
                  "Maximum trace file size";
              }
    
              leaf files {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "2 .. 1000";
                  }
                }
                default "10";
                description
                  "Maximum number of trace files";
              }
    
              leaf no-stamp {
                type empty;
                status deprecated;
                description
                  "Do not timestamp trace file";
              }
    
              choice world-readable-choice {
                leaf world-readable {
                  type empty;
                  description
                    "Allow any user to read the log file";
                }
                leaf no-world-readable {
                  type empty;
                  description
                    "Don't allow any user to read the log file";
                }
              }  // choice world-readable-choice
            }  // container file
    
            list flag {
              key "name";
              ordered-by user;
              description "Tracing parameters";
              leaf name {
                type enumeration {
                  enum "packets" {
                    value 0;
                    description
                      "Trace all AMT packets";
                  }
                  enum "errors" {
                    value 1;
                    description
                      "Trace all error messages";
                  }
                  enum "tunnels" {
                    value 2;
                    description
                      "Trace all AMT tunnel messages";
                  }
                  enum "route" {
                    value 3;
                    description
                      "Trace routing information";
                  }
                  enum "normal" {
                    value 4;
                    description
                      "Trace normal events";
                  }
                  enum "general" {
                    value 5;
                    description
                      "Trace general events";
                  }
                  enum "state" {
                    value 6;
                    description
                      "Trace state transitions";
                  }
                  enum "policy" {
                    value 7;
                    description
                      "Trace policy processing";
                  }
                  enum "task" {
                    value 8;
                    description
                      "Trace routing protocol task processing";
                  }
                  enum "timer" {
                    value 9;
                    description
                      "Trace routing protocol timer processing";
                  }
                  enum "all" {
                    value 10;
                    description
                      "Trace everything";
                  }
                }
              }
    
              leaf send {
                type empty;
                description
                  "Trace transmitted packets";
              }
    
              leaf receive {
                type empty;
                description
                  "Trace received packets";
              }
    
              leaf detail {
                type empty;
                description
                  "Trace detailed information";
              }
    
              leaf disable {
                type empty;
                description
                  "Disable this trace flag";
              }
            }  // list flag
          }  // container traceoptions
    
          container relay {
            presence "enable relay";
            description "AMT relay";
            uses juniper-protocols-amt-relay;
          }  // container relay
        }  // grouping juniper-protocols-amt
    
        grouping juniper-protocols-amt-relay {
          uses apply-advanced;
    
          container family {
            presence "enable family";
            description "Protocol family";
            uses apply-advanced;
    
            container inet {
              presence "enable inet";
              uses apply-advanced;
    
              leaf anycast-prefix {
                type jt:ipv4prefix;
                description
                  "IPv4 anycast prefix";
              }
    
              leaf local-address {
                type jt:ipv4addr;
                description "IPv4 local address";
              }
            }  // container inet
          }  // container family
    
          leaf secret-key-timeout {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "5 .. 1440";
              }
            }
            units "minutes";
            description
              "Time interval for the secret key to expire";
          }
    
          leaf tunnel-limit {
            type union {
              type uint32;
              type string {
                pattern "<.*>|$.*";
              }
            }
            description "Number of AMT tunnels";
          }
    
          leaf unicast-stream-limit {
            type union {
              type uint32;
              type string {
                pattern "<.*>|$.*";
              }
            }
            description
              "Maximum number of AMT unicast streams(s,g,intf)";
          }
    
          leaf accounting {
            type empty;
            description "Enable AMT accounting";
          }
    
          leaf-list tunnel-devices {
            type union {
              type jt:interface-device;
              type string {
                pattern "<.*>|$.*";
              }
            }
            ordered-by user;
            description
              "Tunnel devices to be used for creating ud interfaces";
          }
        }  // grouping juniper-protocols-amt-relay
    
        grouping juniper-protocols-ancp {
          uses apply-advanced;
    
          container traceoptions {
            description "Trace options for ANCP";
            uses apply-advanced;
    
            leaf no-remote-trace {
              junos:must "("system tracing")";
              junos:must-message "'no-remote-trace' is valid only when [system tracing] is configured";
              type empty;
              description
                "Disable remote tracing";
            }
    
            container file {
              description
                "Trace file information";
              leaf filename {
                type string {
                  junos:posix-pattern "![/ %]";
                  junos:pattern-message "Must not contain '/', % or a space";
                  length "1 .. 1024";
                }
                description
                  "Name of file in which to write trace information";
              }
    
              leaf size {
                type string;
                description
                  "Maximum trace file size";
              }
    
              leaf files {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "2 .. 1000";
                  }
                }
                default "3";
                description
                  "Maximum number of trace files";
              }
    
              choice world-readable-choice {
                leaf world-readable {
                  type empty;
                  description
                    "Allow any user to read the log file";
                }
                leaf no-world-readable {
                  type empty;
                  description
                    "Don't allow any user to read the log file";
                }
              }  // choice world-readable-choice
    
              leaf match {
                type jt:regular-expression;
                description
                  "Regular expression for lines to be logged";
              }
            }  // container file
    
            leaf level {
              type enumeration {
                enum "error" {
                  value 0;
                  description
                    "Match error conditions";
                }
                enum "warning" {
                  value 1;
                  description
                    "Match warning messages";
                }
                enum "notice" {
                  value 2;
                  description
                    "Match conditions that should be handled specially";
                }
                enum "info" {
                  value 3;
                  description
                    "Match informational messages";
                }
                enum "verbose" {
                  value 4;
                  description
                    "Match verbose messages";
                }
                enum "all" {
                  value 5;
                  description "Match all levels";
                }
              }
              default "error";
              description
                "Level of debugging output";
            }
    
            list flag {
              key "name";
              ordered-by user;
              description "Tracing parameters";
              leaf name {
                type enumeration {
                  enum "config" {
                    value 0;
                    description
                      "Trace config events";
                  }
                  enum "cos" {
                    value 1;
                    description
                      "Trace CoS events";
                  }
                  enum "routing-socket" {
                    value 2;
                    description
                      "Trace routing-socket events";
                  }
                  enum "packet" {
                    value 3;
                    description
                      "Trace ANCP packet Transmit/Receive";
                  }
                  enum "protocol" {
                    value 4;
                    description
                      "Trace protocol events";
                  }
                  enum "process" {
                    value 5;
                    description
                      "Trace process internals";
                  }
                  enum "startup" {
                    value 6;
                    description
                      "Trace ANCP startup events/flow";
                  }
                  enum "session" {
                    value 7;
                    description
                      "Trace connection events/sessions";
                  }
                  enum "general" {
                    value 8;
                    description
                      "Trace general flow";
                  }
                  enum "restart" {
                    value 9;
                    description
                      "Trace process restart flow";
                  }
                  enum "subscriber" {
                    value 10;
                    description
                      "Trace subscriber events";
                  }
                  enum "timer" {
                    value 11;
                    description
                      "Trace timer processing";
                  }
                  enum "all" {
                    value 12;
                    description
                      "Trace everything";
                  }
                }
              }
    
              leaf disable {
                type empty;
                description
                  "Disable this trace flag";
              }
            }  // list flag
          }  // container traceoptions
    
          container qos-adjust {
            presence "enable qos-adjust";
            description
              "Enable QoS adjust for interfaces and interface-sets";
            uses apply-advanced;
    
            leaf sdsl-bytes {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type int32 {
                  range "-100 .. 100";
                }
              }
              units "bytes";
              default "0";
              status deprecated;
              description
                "Set SDSL byte adjust value";
            }
    
            leaf sdsl-overhead-adjust {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "80 .. 100";
                }
              }
              units "percent";
              default "100";
              status deprecated;
              description
                "Set SDSL overhead adjusted";
            }
    
            leaf vdsl-bytes {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type int32 {
                  range "-100 .. 100";
                }
              }
              units "bytes";
              default "0";
              status deprecated;
              description
                "Set VDSL byte adjust value";
            }
    
            leaf vdsl-overhead-adjust {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "80 .. 100";
                }
              }
              units "percent";
              default "100";
              status deprecated;
              description
                "Set VDSL overhead adjusted";
            }
    
            leaf vdsl2-bytes {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type int32 {
                  range "-100 .. 100";
                }
              }
              units "bytes";
              default "0";
              status deprecated;
              description
                "Set VDSL2 byte adjust value";
            }
    
            leaf vdsl2-overhead-adjust {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "80 .. 100";
                }
              }
              units "percent";
              default "100";
              status deprecated;
              description
                "Set VDSL2 overhead adjusted";
            }
    
            leaf adsl-bytes {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type int32 {
                  range "-100 .. 100";
                }
              }
              units "bytes";
              default "0";
              status deprecated;
              description
                "Set ADSL byte adjust value";
            }
    
            leaf adsl2-bytes {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type int32 {
                  range "-100 .. 100";
                }
              }
              units "bytes";
              default "0";
              status deprecated;
              description
                "Set ADSL2 byte adjust value";
            }
    
            leaf adsl2-plus-bytes {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type int32 {
                  range "-100 .. 100";
                }
              }
              units "bytes";
              default "0";
              status deprecated;
              description
                "Set ADSL-PLUS byte adjust value";
            }
    
            leaf other-bytes {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type int32 {
                  range "-100 .. 100";
                }
              }
              units "bytes";
              default "0";
              status deprecated;
              description
                "Set OTHER byte adjust value";
            }
    
            leaf other-overhead-adjust {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "80 .. 100";
                }
              }
              units "percent";
              default "100";
              status deprecated;
              description
                "Set OTHER overhead adjusted";
            }
          }  // container qos-adjust
    
          leaf pre-ietf-mode {
            type empty;
            description
              "Enable backward compatibility mode";
          }
    
          leaf maximum-discovery-table-entries {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "1 .. 100000";
              }
            }
            description
              "Maximum number of discovery table entries per neighbor";
          }
    
          leaf adjacency-timer {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "1 .. 25";
              }
            }
            description
              "Set adjacency timer in seconds";
          }
    
          leaf maximum-helper-restart-time {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "45 .. 600";
              }
            }
            units "seconds";
            description
              "Set maximum helper restart timer";
          }
    
          leaf qos-adjust-adsl {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "0 .. 100";
              }
            }
            units "percent";
            default "100";
            status deprecated;
            description
              "Set ADSL QoS adjustment factor";
          }
    
          leaf qos-adjust-adsl2 {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "0 .. 100";
              }
            }
            units "percent";
            default "100";
            status deprecated;
            description
              "Set ADSL2 QoS adjustment factor";
          }
    
          leaf qos-adjust-adsl2-plus {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "0 .. 100";
              }
            }
            units "percent";
            default "100";
            status deprecated;
            description
              "Set ADSL2+ QoS adjustment factor";
          }
    
          leaf qos-adjust-vdsl {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "0 .. 100";
              }
            }
            units "percent";
            default "100";
            status deprecated;
            description
              "Set VDSL QoS adjustment factor";
          }
    
          leaf qos-adjust-vdsl2 {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "0 .. 100";
              }
            }
            units "percent";
            default "100";
            status deprecated;
            description
              "Set VDSL2 QoS adjustment factor";
          }
    
          leaf qos-adjust-sdsl {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "0 .. 100";
              }
            }
            units "percent";
            default "100";
            status deprecated;
            description
              "Set SDSL QoS adjustment factor";
          }
    
          leaf qos-adjust-other {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "0 .. 100";
              }
            }
            units "percent";
            default "100";
            status deprecated;
            description
              "Set OTHER QoS adjustment factor";
          }
    
          leaf gsmp-syn-wait {
            type empty;
            description
              "Enable partition ID learning";
          }
    
          leaf gsmp-syn-timeout {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "1 .. 60";
              }
            }
            units "seconds";
            default "30";
            description
              "Set partition ID learning timeout";
          }
    
          leaf adjacency-loss-hold-time {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "0 .. 1800";
              }
            }
            units "seconds";
            default "0";
            description
              "Audit duration upon adjacency loss";
          }
    
          container interfaces {
            description
              "ANCP interface config options";
            uses apply-advanced;
    
            list interface-set {
              key "name";
              description
                "ANCP interface-set specific options";
              leaf name {
                type string {
                  junos:posix-pattern "^.{1,64}$";
                  junos:pattern-message "Must be string of 64 characters or less";
                }
                description
                  "Name of the interface set";
              }
    
              uses apply-advanced;
    
              leaf access-identifier {
                type string {
                  junos:posix-pattern "^.{1,64}$";
                  junos:pattern-message "Must be string of 64 characters or less";
                }
                description
                  "Subscriber specific access identifier information";
              }
    
              leaf neighbor {
                type jt:ipaddr;
                status deprecated;
                description
                  "Neighbor IP address";
              }
            }  // list interface-set
    
            list interface {
              key "name";
              uses ancp_interfaces_type;
            }  // list interface
          }  // container interfaces
    
          list neighbor {
            key "name";
            description
              "ANCP neighbor config options";
            leaf name {
              type jt:ipaddr;
              description
                "IP address of neighbor";
            }
    
            uses apply-advanced;
    
            leaf discovery-mode {
              type empty;
              status deprecated;
              description
                "Enable topology discovery";
            }
    
            choice ietf-mode-option {
              leaf pre-ietf-mode {
                type empty;
                description
                  "Enable backward compatibility mode";
              }
              leaf ietf-mode {
                type empty;
                description "Enable IETF mode";
              }
            }  // choice ietf-mode-option
    
            leaf adjacency-timer {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "1 .. 25";
                }
              }
              description
                "Set adjacency timer in seconds";
            }
    
            leaf maximum-discovery-table-entries {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "1 .. 100000";
                }
              }
              description
                "Maximum number of discovery table entries";
            }
    
            container auto-configure-trigger {
              presence
                "enable auto-configure-trigger";
              description
                "Auto-configure trigger support";
              uses apply-advanced;
    
              leaf interface {
                junos:must "("interfaces $$")";
                junos:must-message "Interface must be defined";
                type union {
                  type jt:interface-device;
                  type string {
                    pattern "<.*>|$.*";
                  }
                }
              }
            }  // container auto-configure-trigger
    
            leaf adjacency-loss-hold-time {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "0 .. 1800";
                }
              }
              units "seconds";
              description
                "Audit duration upon adjacency loss";
            }
          }  // list neighbor
        }  // grouping juniper-protocols-ancp
    
        grouping ancp_interfaces_type {
          description "Physical interface";
          leaf name {
            junos:must "("interfaces $$")";
            junos:must-message "Interface must be defined";
            type union {
              type jt:interface-name;
              type string {
                pattern "<.*>|$.*";
              }
            }
          }
    
          uses apply-advanced;
    
          leaf access-identifier {
            type string {
              junos:posix-pattern "^.{1,64}$";
              junos:pattern-message "Must be string of 64 characters or less";
            }
            description
              "Subscriber specific access identifier information";
          }
    
          leaf neighbor {
            type jt:ipaddr;
            status deprecated;
            description "Neighbor IP address";
          }
    
          leaf overhead-accounting {
            type empty;
            status deprecated;
            description
              "Enable overhead accounting on per ACI basis";
          }
        }  // grouping ancp_interfaces_type
    
        grouping juniper-protocols-bgp {
          uses apply-advanced;
    
          container path-selection {
            description
              "Configure path selection strategy";
            uses apply-advanced;
    
            leaf l2vpn-use-bgp-rules {
              type empty;
              description
                "Use standard BGP rules during L2VPN path selection";
            }
    
            leaf cisco-non-deterministic {
              type empty;
              description
                "Use Cisco IOS nondeterministic path selection algorithm";
            }
    
            leaf always-compare-med {
              type empty;
              description
                "Always compare MED values, regardless of neighbor AS";
            }
    
            container med-plus-igp {
              presence "enable med-plus-igp";
              description
                "Add IGP cost to next-hop to MED before comparing MED values";
              uses apply-advanced;
    
              leaf med-multiplier {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint16 {
                    range "1 .. 1000";
                  }
                }
                default "1";
                description "Multiplier for MED";
              }
    
              leaf igp-multiplier {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint16 {
                    range "1 .. 1000";
                  }
                }
                default "1";
                description
                  "Multiplier for IGP cost to next-hop";
              }
            }  // container med-plus-igp
    
            leaf external-router-id {
              type empty;
              description
                "Compare router ID on BGP externals";
            }
    
            leaf as-path-ignore {
              junos:must "(!(".. .. .. .. routing-options multipath as-path-compare"))";
              junos:must-message "Configuring 'as-path-ignore' is not allowed when 'as-path-compare' is enabled for this routing instance";
              type empty;
              description
                "Ignore AS path comparison during path selection";
            }
          }  // container path-selection
    
          container accept-prpd-connection {
            presence
              "enable accept-prpd-connection";
            description
              "Enable BGP to accept PRPD connections";
          }  // container accept-prpd-connection
    
          leaf advertise-from-main-vpn-tables {
            type empty;
            description
              "Advertise VPN routes from bgp.Xvpn.0 tables in master instance";
          }
    
          leaf stale-labels-holddown-period {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type int32 {
                range "1 .. 600";
              }
            }
            description
              "Duration (sec) MPLS labels allocated by BGP are kept after they go stale";
          }
    
          leaf holddown-all-stale-labels {
            type empty;
            description
              "Hold all BGP stale-labels, facilating make-before-break for new label advertisements";
          }
    
          container egress-te-backup-paths {
            description
              "Backup-path for Egress-TE peer interface failure";
            uses apply-advanced;
    
            list template {
              key "name";
              description "Backup-path template";
              leaf name {
                type string {
                  junos:posix-pattern "^.{1,64}$";
                  junos:pattern-message "Must be a string of 64 characters or less";
                }
                description
                  "Name of Egress-TE backup path";
              }
    
              uses apply-advanced;
    
              list peer {
                key "name";
                ordered-by user;
                description
                  "Egress peer TE backup exit path";
                leaf name {
                  type jt:ipaddr;
                  description
                    "Address of BGP peer to use as backup next-hop";
                }
    
                uses apply-advanced;
              }  // list peer
    
              container remote-nexthop {
                description
                  "Resolve and use tunnel to this next-hop as backup path";
                uses apply-advanced;
    
                leaf remote-nh-addr {
                  type jt:ipaddr;
                  description
                    "Address of remote-nexthop to use as backup path";
                }
              }  // container remote-nexthop
    
              container ip-forward {
                junos:must "(!(".. remote-nexthop"))";
                junos:must-message "'ip-forward' will not take effect as backup when 'remote-nexthop' is in use";
                presence "enable ip-forward";
                description
                  "Use IP-forward backup path for Egress TE";
                uses apply-advanced;
    
                leaf rti-name {
                  type string {
                    junos:posix-pattern "!^((__.*__)|(all)|(.*[ ].*)|("")|(.{129,}))$";
                    junos:pattern-message "Must be a non-reserved string of 128 characters or less with no spaces.";
                  }
                  description
                    "Routing-instance to use as IP forward backup-path";
                }
              }  // container ip-forward
            }  // list template
          }  // container egress-te-backup-paths
    
          leaf sr-preference-override {
            type union {
              type uint32;
              type string {
                pattern "<.*>|$.*";
              }
            }
            description
              "Replace received segment routing traffic engineering preference value with override value";
          }
    
          leaf vpn-apply-export {
            type empty;
            description
              "Apply BGP export policy when exporting VPN routes";
          }
    
          container family {
            description
              "Protocol family for NLRIs in updates";
            uses apply-advanced;
    
            container inet {
              description "IPv4 NLRI parameters";
              uses apply-advanced;
    
              container labeled-unicast {
                presence
                  "enable labeled-unicast";
                description
                  "Include labeled unicast NLRI";
                uses bgp-afi-labeled;
              }  // container labeled-unicast
    
              container segment-routing-te {
                presence
                  "enable segment-routing-te";
                description
                  "Include segment-routing TE policy";
                uses bgp-afi-srte;
              }  // container segment-routing-te
    
              container transport {
                presence "enable transport";
                description
                  "Include Classful Transport NLRI";
                uses bgp-afi-inet-transport;
              }  // container transport
    
              container unicast {
                presence "enable unicast";
                description
                  "Include unicast NLRI";
                uses bgp-afi-topo;
              }  // container unicast
    
              container multicast {
                presence "enable multicast";
                description
                  "Include multicast NLRI";
                uses bgp-afi-default;
              }  // container multicast
    
              container flow {
                presence "enable flow";
                description "Include flow NLRI";
                uses bgp-afi-flow-with-redirect-ip-action;
              }  // container flow
    
              container any {
                presence "enable any";
                description
                  "Include unicast or multicast NLRI";
                uses bgp-afi-default;
              }  // container any
            }  // container inet
    
            container inet-vpn {
              description
                "IPv4 Layer 3 VPN NLRI parameters";
              uses apply-advanced;
    
              container unicast {
                presence "enable unicast";
                description
                  "Include unicast NLRI";
                uses bgp-afi-l3vpn;
              }  // container unicast
    
              container multicast {
                presence "enable multicast";
                description
                  "Include multicast NLRI";
                uses bgp-afi-vpn;
              }  // container multicast
    
              container flow {
                presence "enable flow";
                description
                  "Include flow VPN NLRI";
                uses bgp-afi-flow-with-redirect-ip-action;
              }  // container flow
    
              container any {
                presence "enable any";
                description
                  "Include unicast or multicast NLRI";
                uses bgp-afi-vpn;
              }  // container any
            }  // container inet-vpn
    
            container inet6 {
              description "IPv6 NLRI parameters";
              uses apply-advanced;
    
              container labeled-unicast {
                presence
                  "enable labeled-unicast";
                description
                  "Include labeled unicast NLRI";
                uses bgp-afi-inet6-labeled;
              }  // container labeled-unicast
    
              container segment-routing-te {
                presence
                  "enable segment-routing-te";
                description
                  "Include segment-routing TE policy";
                uses bgp-afi-srte;
              }  // container segment-routing-te
    
              container transport {
                presence "enable transport";
                description
                  "Include Classful Transport NLRI";
                uses bgp-afi-inet6-transport;
              }  // container transport
    
              container unicast {
                presence "enable unicast";
                description
                  "Include unicast NLRI";
                uses bgp-afi-topo;
              }  // container unicast
    
              container multicast {
                presence "enable multicast";
                description
                  "Include multicast NLRI";
                uses bgp-afi-default;
              }  // container multicast
    
              container flow {
                presence "enable flow";
                description "Include flow NLRI";
                uses bgp-afi-flow;
              }  // container flow
    
              container any {
                presence "enable any";
                description
                  "Include unicast or multicast NLRI";
                uses bgp-afi-default;
              }  // container any
            }  // container inet6
    
            container inet6-vpn {
              description
                "IPv6 Layer 3 VPN NLRI parameters";
              uses apply-advanced;
    
              container unicast {
                presence "enable unicast";
                description
                  "Include unicast NLRI";
                uses bgp-afi-l3vpn;
              }  // container unicast
    
              container multicast {
                presence "enable multicast";
                description
                  "Include multicast NLRI";
                uses bgp-afi-vpn;
              }  // container multicast
    
              container flow {
                presence "enable flow";
                description
                  "Include flow VPN NLRI";
                uses bgp-afi-flow;
              }  // container flow
    
              container any {
                presence "enable any";
                description
                  "Include unicast or multicast NLRI";
                uses bgp-afi-vpn;
              }  // container any
            }  // container inet6-vpn
    
            container iso-vpn {
              description
                "ISO Layer 3 VPN NLRI parameters";
              uses apply-advanced;
    
              container unicast {
                presence "enable unicast";
                description
                  "Include unicast NLRI";
                uses bgp-afi-vpn-protection;
              }  // container unicast
            }  // container iso-vpn
    
            container l2vpn {
              description
                "MPLS-based Layer 2 VPN and VPLS NLRI parameters";
              uses apply-advanced;
    
              container auto-discovery-only {
                presence
                  "enable auto-discovery-only";
                description
                  "Include auto-discovery NLRI for LDP Layer 2 VPN and VPLS";
                uses bgp-afi-default;
              }  // container auto-discovery-only
    
              container auto-discovery-mspw {
                presence
                  "enable auto-discovery-mspw";
                description
                  "Include auto-discovery NLRI for LDP Signalled MultiSegment PW";
                uses bgp-afi-default;
              }  // container auto-discovery-mspw
    
              container signaling {
                presence "enable signaling";
                description
                  "Include Layer 2 VPN and VPLS signaling NLRI";
                uses bgp-afi-l2vpn;
              }  // container signaling
            }  // container l2vpn
    
            container evpn {
              description "EVPN NLRI parameters";
              uses apply-advanced;
    
              container signaling {
                presence "enable signaling";
                description
                  "Include EVPN signaling NLRI";
                uses bgp-afi-default;
              }  // container signaling
            }  // container evpn
    
            container inet-mvpn {
              description
                "IPv4 MVPN NLRI parameters";
              uses apply-advanced;
    
              container signaling {
                presence "enable signaling";
                description
                  "Include IPv4 multicast VPN signaling NLRI";
                uses bgp-afi-default;
              }  // container signaling
            }  // container inet-mvpn
    
            container inet6-mvpn {
              description
                "IPv6 MVPN NLRI parameters";
              uses apply-advanced;
    
              container signaling {
                presence "enable signaling";
                description
                  "Include IPv6 multicast VPN signaling NLRI";
                uses bgp-afi-default;
              }  // container signaling
            }  // container inet6-mvpn
    
            container inet-mdt {
              description
                "IPv4 Multicast Distribution Tree (MDT) NLRI parameters";
              uses apply-advanced;
    
              container signaling {
                presence "enable signaling";
                description
                  "Include IPv4 multicast VPN auto-discovery NLRI";
                uses bgp-afi-default;
              }  // container signaling
            }  // container inet-mdt
    
            container traffic-engineering {
              description
                "Traffic Engineering (BGP-TE) NLRI parameters";
              uses apply-advanced;
    
              container unicast {
                presence "enable unicast";
                description
                  "Include BGP-TE NLRI";
                uses bgp-afi-default;
              }  // container unicast
            }  // container traffic-engineering
    
            container route-target {
              presence "enable route-target";
              description
                "Route target NLRI used for VPN route filtering";
              uses apply-advanced;
    
              container prefix-limit {
                description
                  "Limit maximum number of prefixes from a peer";
                uses bgpaf-prefix-limit;
              }  // container prefix-limit
    
              container accepted-prefix-limit {
                description
                  "Limit maximum number of prefixes accepted from a peer";
                uses bgpaf-accepted-prefix-limit;
              }  // container accepted-prefix-limit
    
              container proxy-generate {
                presence "enable proxy-generate";
                description
                  "Generate route target NLRI for peers that don't support it";
                uses apply-advanced;
    
                leaf-list route-target-policy {
                  type jt:policy-algebra;
                  ordered-by user;
                  description
                    "Limit VPN routes that are used to generate proxy route-target filters";
                }
              }  // container proxy-generate
    
              leaf external-paths {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "1 .. 256";
                  }
                }
                description
                  "Number of external paths accepted for route filtering";
              }
    
              leaf advertise-default {
                type empty;
                description
                  "Advertise default and suppress more specific routes";
              }
    
              leaf damping {
                type empty;
                description
                  "Enable route flap damping";
              }
    
              container graceful-restart {
                description
                  "BGP graceful restart options";
                uses bgp-af-gr;
              }  // container graceful-restart
    
              leaf local-ipv4-address {
                type jt:ipv4addr;
                description "Local IPv4 address";
              }
    
              container output-queue-priority {
                description
                  "Default output-queue to assign updates to";
                uses bgp-output-queue-priority-class;
              }  // container output-queue-priority
    
              container route-refresh-priority {
                description
                  "Default output-queue to assign route refreshes to";
                uses bgp-output-queue-priority-class;
              }  // container route-refresh-priority
    
              container withdraw-priority {
                description
                  "Default output-queue to assign withdrawn routes to";
                uses bgp-output-queue-priority-class;
              }  // container withdraw-priority
            }  // container route-target
    
            container inet-bgpmcast {
              description
                "IPv4 BGPMCAST NLRI parameters";
              uses apply-advanced;
    
              container signaling {
                presence "enable signaling";
                description
                  "Include IPv4 BGP multicast signaling NLRI";
                uses bgp-afi-default;
              }  // container signaling
            }  // container inet-bgpmcast
    
            container inet6-bgpmcast {
              description
                "IPv6 BGPMCAST NLRI parameters";
              uses apply-advanced;
    
              container signaling {
                presence "enable signaling";
                description
                  "Include IPv6 BGP multicast signaling NLRI";
                uses bgp-afi-default;
              }  // container signaling
            }  // container inet6-bgpmcast
          }  // container family
    
          container egress-te {
            presence "enable egress-te";
            description
              "Use Egress Peering traffic engineering";
            uses apply-advanced;
    
            leaf install-address {
              type jt:ipaddr;
              description
                "Address to use in egress-te created inet route";
            }
    
            container rib {
              description
                "Select primary table for Egress-TE routes";
              uses apply-advanced;
    
              leaf inet.0 {
                type empty;
                description
                  "Install Egress-TE routes in inet.0";
              }
    
              leaf inet6.0 {
                type empty;
                description
                  "Install Egress-TE routes in inet6.0";
              }
            }  // container rib
    
            leaf no-install {
              type empty;
              description
                "Avoid installation to FIB or resolving over";
            }
    
            leaf-list import {
              type jt:policy-algebra;
              ordered-by user;
              description
                "Import policy to set attributes";
            }
    
            leaf backup-path {
              junos:must "("protocols bgp egress-te-backup-paths template $$")";
              junos:must-message "bgp egress-te-backup-paths template not configured";
              type string {
                junos:posix-pattern "^.{1,64}$";
                junos:pattern-message "Must be a string of 64 characters or less";
              }
              description
                "The 'egress-te-backup-paths template' to use for this peer";
            }
          }  // container egress-te
    
          leaf advertise-prefix-sid {
            type empty;
            description
              "Advertise prefix sid to E-BGP peers";
          }
    
          leaf accept-prefix-sid {
            type empty;
            description
              "Accept prefix sid from E-BGP peers";
          }
    
          leaf advertise-srgb {
            type empty;
            description "Advertise SRGB TLV";
          }
    
          leaf egress-te-sid-stats {
            type empty;
            description
              "Create BGP-Peer-SID sensor";
          }
    
          list egress-te-set-segment {
            key "name";
            ordered-by user;
            description
              "Configure BGP-Peer-Set segment";
            leaf name {
              type string {
                junos:posix-pattern "^.{1,64}$";
                junos:pattern-message "Must be a string of 64 characters or less";
              }
              description
                "The BGP-Peer-Set segment name";
            }
    
            uses apply-advanced;
    
            container label {
              description
                "BGP-Peer-Set SID label from static label pool";
              uses apply-advanced;
    
              leaf label-value {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "16 .. 1048575";
                  }
                }
                description
                  "BGP-Peer-Set SID label value from static label pool";
              }
            }  // container label
    
            container egress-te-backup-segment {
              description
                "Backup segment for FRR";
              uses apply-advanced;
    
              container label {
                description
                  "Backup segment label from static label pool";
                uses apply-advanced;
    
                leaf label-value {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "16 .. 1048575";
                    }
                  }
                  description
                    "Backup segment label value from static label pool";
                }
              }  // container label
            }  // container egress-te-backup-segment
    
            container egress-te-backup-ip-forward {
              presence
                "enable egress-te-backup-ip-forward";
              description
                "Use IP-forward backup path for Egress TE";
              uses apply-advanced;
    
              leaf instance-name {
                type string {
                  junos:posix-pattern "!^((__.*__)|(all)|(.*[ ].*)|("")|(.{129,}))$";
                  junos:pattern-message "Must be a non-reserved string of 128 characters or less with no spaces.";
                }
                description
                  "Routing-instance to use as IP forward backup-path";
              }
            }  // container egress-te-backup-ip-forward
          }  // list egress-te-set-segment
    
          list group {
            key "name";
            ordered-by user;
            description "Define a peer group";
            leaf name {
              type string;
              description "Group name";
            }
    
            uses apply-advanced;
    
            leaf type {
              type enumeration {
                enum "internal" {
                  value 0;
                  description "IBGP group";
                }
                enum "external" {
                  value 1;
                  description "EBGP group";
                }
              }
              description "Type of peer group";
            }
    
            leaf protocol {
              type enumeration {
                enum "rip" {
                  value 0;
                  status deprecated;
                  description
                    "Use RIP to resolve the BGP next hop";
                }
                enum "ospf" {
                  value 1;
                  status deprecated;
                  description
                    "Use OSPF to resolve the BGP next hop";
                }
                enum "isis" {
                  value 2;
                  status deprecated;
                  description
                    "Use IS-IS to resolve the BGP next hop";
                }
              }
              status deprecated;
              description
                "IGP to use to resolve the next hop";
            }
    
            container traceoptions {
              description
                "Trace options for BGP";
              uses apply-advanced;
    
              container file {
                description "Trace file options";
                leaf filename {
                  type string {
                    junos:posix-pattern "![/ %]";
                    junos:pattern-message "Must not contain '/', % or a space";
                    length "1 .. 1024";
                  }
                  description
                    "Name of file in which to write trace information";
                }
    
                leaf replace {
                  type empty;
                  status deprecated;
                  description
                    "Replace trace file rather than appending to it";
                }
    
                leaf size {
                  type string;
                  description
                    "Maximum trace file size";
                }
    
                leaf files {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "2 .. 1000";
                    }
                  }
                  default "10";
                  description
                    "Maximum number of trace files";
                }
    
                leaf no-stamp {
                  type empty;
                  status deprecated;
                  description
                    "Do not timestamp trace file";
                }
    
                choice world-readable-choice {
                  leaf world-readable {
                    type empty;
                    description
                      "Allow any user to read the log file";
                  }
                  leaf no-world-readable {
                    type empty;
                    description
                      "Don't allow any user to read the log file";
                  }
                }  // choice world-readable-choice
              }  // container file
    
              list flag {
                key "name";
                ordered-by user;
                description "Tracing parameters";
                leaf name {
                  type enumeration {
                    enum "damping" {
                      value 0;
                      description
                        "Trace BGP damping information";
                    }
                    enum "packets" {
                      value 1;
                      description
                        "Trace all BGP protocol packets";
                    }
                    enum "open" {
                      value 2;
                      description
                        "Trace BGP open packets";
                    }
                    enum "update" {
                      value 3;
                      description
                        "Trace BGP update packets";
                    }
                    enum "keepalive" {
                      value 4;
                      description
                        "Trace BGP keepalive packets";
                    }
                    enum "refresh" {
                      value 5;
                      description
                        "Trace BGP refresh packets";
                    }
                    enum "nsr-synchronization" {
                      value 6;
                      description
                        "Trace NSR synchronization events";
                    }
                    enum "bfd" {
                      value 7;
                      description
                        "Trace BFD events";
                    }
                    enum "4byte-as" {
                      value 8;
                      description
                        "Trace 4 byte AS events";
                    }
                    enum "add-path" {
                      value 9;
                      description
                        "Trace add-path events";
                    }
                    enum "graceful-restart" {
                      value 10;
                      description
                        "Trace Graceful Restart events";
                    }
                    enum "egress-te" {
                      value 11;
                      description
                        "Egress Peering Traffic-Engineering events";
                    }
                    enum "thread-io" {
                      value 12;
                      description
                        "Trace threaded I/O processing";
                    }
                    enum "sharding" {
                      value 13;
                      description
                        "Trace BGP rib sharding";
                    }
                    enum "thread-update-io" {
                      value 14;
                      description
                        "Trace threaded update I/O processing";
                    }
                    enum "route-validation" {
                      value 15;
                      description
                        "Trace route validation";
                    }
                    enum "ipsec" {
                      value 16;
                      description "Trace ipsec";
                    }
                    enum "route" {
                      value 17;
                      description
                        "Trace routing information";
                    }
                    enum "normal" {
                      value 18;
                      description
                        "Trace normal events";
                    }
                    enum "general" {
                      value 19;
                      description
                        "Trace general events";
                    }
                    enum "state" {
                      value 20;
                      description
                        "Trace state transitions";
                    }
                    enum "policy" {
                      value 21;
                      description
                        "Trace policy processing";
                    }
                    enum "task" {
                      value 22;
                      description
                        "Trace routing protocol task processing";
                    }
                    enum "timer" {
                      value 23;
                      description
                        "Trace routing protocol timer processing";
                    }
                    enum "all" {
                      value 24;
                      description
                        "Trace everything";
                    }
                  }
                }
    
                leaf send {
                  type empty;
                  description
                    "Trace transmitted packets";
                }
    
                leaf receive {
                  type empty;
                  description
                    "Trace received packets";
                }
    
                leaf detail {
                  type empty;
                  description
                    "Trace detailed information";
                }
    
                leaf disable {
                  type empty;
                  description
                    "Disable this trace flag";
                }
    
                container filter {
                  presence "enable filter";
                  description
                    "Filter to apply to this flag";
                  uses bgp_filter_obj;
                }  // container filter
              }  // list flag
            }  // container traceoptions
    
            leaf description {
              type string {
                length "1 .. 255";
              }
              description "Text description";
            }
    
            container metric-out {
              description
                "Route metric sent in MED";
              choice metric_param {
                leaf metric-value {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "0 .. 4294967295";
                    }
                  }
                  description "Metric value";
                }
                container minimum-igp {
                  presence "enable minimum-igp";
                  description
                    "Track the minimum IGP metric";
                  leaf metric-offset {
                    type union {
                      type int32;
                      type string {
                        pattern "<.*>|$.*";
                      }
                    }
                    description
                      "Metric offset for MED";
                  }
                }  // container minimum-igp
                container igp {
                  presence "enable igp";
                  description
                    "Track the IGP metric";
                  leaf metric-offset {
                    type union {
                      type int32;
                      type string {
                        pattern "<.*>|$.*";
                      }
                    }
                    description
                      "Metric offset for MED";
                  }
    
                  leaf delay-med-update {
                    type empty;
                    description
                      "Delay updating MED when IGP metric increases";
                  }
                }  // container igp
                container effective-aigp {
                  presence
                    "enable effective-aigp";
                  description
                    "Track the effective AIGP metric";
                  leaf metric-offset {
                    type union {
                      type int32;
                      type string {
                        pattern "<.*>|$.*";
                      }
                    }
                    description
                      "Metric offset for MED";
                  }
                }  // container effective-aigp
                container minimum-effective-aigp {
                  presence
                    "enable minimum-effective-aigp";
                  description
                    "Track the minimum effective AIGP metric";
                  leaf metric-offset {
                    type union {
                      type int32;
                      type string {
                        pattern "<.*>|$.*";
                      }
                    }
                    description
                      "Metric offset for MED";
                  }
                }  // container minimum-effective-aigp
              }  // choice metric_param
            }  // container metric-out
    
            container multihop {
              presence "enable multihop";
              description
                "Configure an EBGP multihop session";
              uses apply-advanced;
    
              leaf ttl {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint8 {
                    range "1 .. 255";
                  }
                }
                description
                  "TTL value for the session";
              }
    
              leaf no-nexthop-change {
                type empty;
                description
                  "Do not change next hop to self in advertisements";
              }
            }  // container multihop
    
            leaf route-server-client {
              type empty;
              description
                "Enable route server client behavior";
            }
    
            leaf accept-remote-nexthop {
              type empty;
              description
                "Allow import policy to specify a non-directly connected next-hop";
            }
    
            leaf preference {
              type union {
                type uint32;
                type string {
                  pattern "<.*>|$.*";
                }
              }
              description "Preference value";
            }
    
            leaf local-preference {
              type union {
                type uint32;
                type string {
                  pattern "<.*>|$.*";
                }
              }
              description
                "Value of LOCAL_PREF path attribute";
            }
    
            leaf local-address {
              type jt:ipaddr;
              description
                "Address of local end of BGP session";
            }
    
            leaf local-interface {
              type union {
                type jt:interface-name;
                type string {
                  pattern "<.*>|$.*";
                }
              }
              description
                "Local interface for IPv6 link local EBGP peering";
            }
    
            leaf forwarding-context {
              type string {
                junos:posix-pattern "!^((__.*__)|(all)|(.*[ ].*)|("")|(.{129,}))$";
                junos:pattern-message "Must be a non-reserved string of 128 characters or less with no spaces.";
              }
              description
                "Routing-instance used for data-forwarding and transport-session";
            }
    
            leaf hold-time {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "0 .. 65535";
                }
              }
              description
                "Hold time used when negotiating with a peer";
            }
    
            leaf minimum-hold-time {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "3 .. 65535";
                }
              }
              description
                "Minimum hold time accepted from the peer";
            }
    
            leaf passive {
              type empty;
              description
                "Do not send open messages to a peer";
            }
    
            leaf advertise-inactive {
              type empty;
              description
                "Advertise inactive routes";
            }
    
            choice advertise-peer-as-choice {
              leaf advertise-peer-as {
                type empty;
                description
                  "Advertise routes received from the same autonomous system";
              }
              leaf no-advertise-peer-as {
                type empty;
                description
                  "Don't advertise routes received from the same autonomous system";
              }
            }  // choice advertise-peer-as-choice
    
            container advertise-external {
              presence
                "enable advertise-external";
              description
                "Advertise best external routes";
              leaf conditional {
                type empty;
                description
                  "Route matches active route upto med-comparison rule";
              }
            }  // container advertise-external
    
            leaf keep {
              type enumeration {
                enum "all" {
                  value 0;
                  description
                    "Retain all routes";
                }
                enum "none" {
                  value 1;
                  description "Retain no routes";
                }
              }
              description
                "How to retain routes in the routing table";
            }
    
            leaf rfc6514-compliant-safi129 {
              type empty;
              description
                "Compliant with RFC6514 SAFI129 format";
            }
    
            leaf no-aggregator-id {
              type empty;
              description
                "Set router ID in aggregator path attribute to 0";
            }
    
            leaf mtu-discovery {
              type empty;
              description
                "Enable TCP path MTU discovery";
            }
    
            leaf enforce-first-as {
              type empty;
              description
                "Enforce first AS in AS-path is the neighbor's AS";
            }
    
            leaf out-delay {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "0 .. 65535";
                }
              }
              description
                "How long before exporting routes from routing table";
            }
    
            leaf ttl {
              junos:must "((!(".. .. type internal") && !(".. multihop")))";
              junos:must-message "This option is valid only for single-hop EBGP neighbor";
              type enumeration {
                enum "1" {
                  value 0;
                }
                enum "255" {
                  value 1;
                }
              }
              description
                "TTL value for the single-hop peer";
            }
    
            leaf log-updown {
              type empty;
              description
                "Log a message for peer state transitions";
            }
    
            leaf damping {
              type empty;
              description
                "Enable route flap damping";
            }
    
            leaf-list import {
              type jt:policy-algebra;
              ordered-by user;
              description "Import policy";
            }
    
            leaf-list nlri {
              type enumeration {
                enum "unicast" {
                  value 0;
                  status deprecated;
                  description
                    "Include unicast NLRI";
                }
                enum "multicast" {
                  value 1;
                  status deprecated;
                  description
                    "Include multicast NLRI";
                }
                enum "any" {
                  value 2;
                  status deprecated;
                  description
                    "Include any kind of NLRI";
                }
              }
              ordered-by user;
              status deprecated;
              description
                "NLRI type to include in updates";
            }
    
            container bgp-error-tolerance {
              presence
                "enable bgp-error-tolerance";
              description
                "Handle BGP malformed updates softly";
              uses apply-advanced;
    
              leaf malformed-update-log-interval {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "10 .. 65535";
                  }
                }
                units "seconds";
                default "300";
                description
                  "Time used when logging malformed update";
              }
    
              choice malformed-routes-limit-choice {
                leaf malformed-route-limit {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "0 .. 4294967295";
                    }
                  }
                  default "1000";
                  description
                    "Maximum number of malformed routes from a peer";
                }
                leaf no-malformed-route-limit {
                  type empty;
                  description
                    "No malformed route limit";
                }
              }  // choice malformed-routes-limit-choice
            }  // container bgp-error-tolerance
    
            container family {
              description
                "Protocol family for NLRIs in updates";
              uses apply-advanced;
    
              container inet {
                description
                  "IPv4 NLRI parameters";
                uses apply-advanced;
    
                container labeled-unicast {
                  presence
                    "enable labeled-unicast";
                  description
                    "Include labeled unicast NLRI";
                  uses bgp-afi-labeled;
                }  // container labeled-unicast
    
                container segment-routing-te {
                  presence
                    "enable segment-routing-te";
                  description
                    "Include segment-routing TE policy";
                  uses bgp-afi-srte;
                }  // container segment-routing-te
    
                container transport {
                  presence "enable transport";
                  description
                    "Include Classful Transport NLRI";
                  uses bgp-afi-inet-transport;
                }  // container transport
    
                container unicast {
                  presence "enable unicast";
                  description
                    "Include unicast NLRI";
                  uses bgp-afi-topo;
                }  // container unicast
    
                container multicast {
                  presence "enable multicast";
                  description
                    "Include multicast NLRI";
                  uses bgp-afi-default;
                }  // container multicast
    
                container flow {
                  presence "enable flow";
                  description
                    "Include flow NLRI";
                  uses bgp-afi-flow-with-redirect-ip-action;
                }  // container flow
    
                container any {
                  presence "enable any";
                  description
                    "Include unicast or multicast NLRI";
                  uses bgp-afi-default;
                }  // container any
              }  // container inet
    
              container inet-vpn {
                description
                  "IPv4 Layer 3 VPN NLRI parameters";
                uses apply-advanced;
    
                container unicast {
                  presence "enable unicast";
                  description
                    "Include unicast NLRI";
                  uses bgp-afi-l3vpn;
                }  // container unicast
    
                container multicast {
                  presence "enable multicast";
                  description
                    "Include multicast NLRI";
                  uses bgp-afi-vpn;
                }  // container multicast
    
                container flow {
                  presence "enable flow";
                  description
                    "Include flow VPN NLRI";
                  uses bgp-afi-flow-with-redirect-ip-action;
                }  // container flow
    
                container any {
                  presence "enable any";
                  description
                    "Include unicast or multicast NLRI";
                  uses bgp-afi-vpn;
                }  // container any
              }  // container inet-vpn
    
              container inet6 {
                description
                  "IPv6 NLRI parameters";
                uses apply-advanced;
    
                container labeled-unicast {
                  presence
                    "enable labeled-unicast";
                  description
                    "Include labeled unicast NLRI";
                  uses bgp-afi-inet6-labeled;
                }  // container labeled-unicast
    
                container segment-routing-te {
                  presence
                    "enable segment-routing-te";
                  description
                    "Include segment-routing TE policy";
                  uses bgp-afi-srte;
                }  // container segment-routing-te
    
                container transport {
                  presence "enable transport";
                  description
                    "Include Classful Transport NLRI";
                  uses bgp-afi-inet6-transport;
                }  // container transport
    
                container unicast {
                  presence "enable unicast";
                  description
                    "Include unicast NLRI";
                  uses bgp-afi-topo;
                }  // container unicast
    
                container multicast {
                  presence "enable multicast";
                  description
                    "Include multicast NLRI";
                  uses bgp-afi-default;
                }  // container multicast
    
                container flow {
                  presence "enable flow";
                  description
                    "Include flow NLRI";
                  uses bgp-afi-flow;
                }  // container flow
    
                container any {
                  presence "enable any";
                  description
                    "Include unicast or multicast NLRI";
                  uses bgp-afi-default;
                }  // container any
              }  // container inet6
    
              container inet6-vpn {
                description
                  "IPv6 Layer 3 VPN NLRI parameters";
                uses apply-advanced;
    
                container unicast {
                  presence "enable unicast";
                  description
                    "Include unicast NLRI";
                  uses bgp-afi-l3vpn;
                }  // container unicast
    
                container multicast {
                  presence "enable multicast";
                  description
                    "Include multicast NLRI";
                  uses bgp-afi-vpn;
                }  // container multicast
    
                container flow {
                  presence "enable flow";
                  description
                    "Include flow VPN NLRI";
                  uses bgp-afi-flow;
                }  // container flow
    
                container any {
                  presence "enable any";
                  description
                    "Include unicast or multicast NLRI";
                  uses bgp-afi-vpn;
                }  // container any
              }  // container inet6-vpn
    
              container iso-vpn {
                description
                  "ISO Layer 3 VPN NLRI parameters";
                uses apply-advanced;
    
                container unicast {
                  presence "enable unicast";
                  description
                    "Include unicast NLRI";
                  uses bgp-afi-vpn-protection;
                }  // container unicast
              }  // container iso-vpn
    
              container l2vpn {
                description
                  "MPLS-based Layer 2 VPN and VPLS NLRI parameters";
                uses apply-advanced;
    
                container auto-discovery-only {
                  presence
                    "enable auto-discovery-only";
                  description
                    "Include auto-discovery NLRI for LDP Layer 2 VPN and VPLS";
                  uses bgp-afi-default;
                }  // container auto-discovery-only
    
                container auto-discovery-mspw {
                  presence
                    "enable auto-discovery-mspw";
                  description
                    "Include auto-discovery NLRI for LDP Signalled MultiSegment PW";
                  uses bgp-afi-default;
                }  // container auto-discovery-mspw
    
                container signaling {
                  presence "enable signaling";
                  description
                    "Include Layer 2 VPN and VPLS signaling NLRI";
                  uses bgp-afi-l2vpn;
                }  // container signaling
              }  // container l2vpn
    
              container evpn {
                description
                  "EVPN NLRI parameters";
                uses apply-advanced;
    
                container signaling {
                  presence "enable signaling";
                  description
                    "Include EVPN signaling NLRI";
                  uses bgp-afi-default;
                }  // container signaling
              }  // container evpn
    
              container inet-mvpn {
                description
                  "IPv4 MVPN NLRI parameters";
                uses apply-advanced;
    
                container signaling {
                  presence "enable signaling";
                  description
                    "Include IPv4 multicast VPN signaling NLRI";
                  uses bgp-afi-default;
                }  // container signaling
              }  // container inet-mvpn
    
              container inet6-mvpn {
                description
                  "IPv6 MVPN NLRI parameters";
                uses apply-advanced;
    
                container signaling {
                  presence "enable signaling";
                  description
                    "Include IPv6 multicast VPN signaling NLRI";
                  uses bgp-afi-default;
                }  // container signaling
              }  // container inet6-mvpn
    
              container inet-mdt {
                description
                  "IPv4 Multicast Distribution Tree (MDT) NLRI parameters";
                uses apply-advanced;
    
                container signaling {
                  presence "enable signaling";
                  description
                    "Include IPv4 multicast VPN auto-discovery NLRI";
                  uses bgp-afi-default;
                }  // container signaling
              }  // container inet-mdt
    
              container traffic-engineering {
                description
                  "Traffic Engineering (BGP-TE) NLRI parameters";
                uses apply-advanced;
    
                container unicast {
                  presence "enable unicast";
                  description
                    "Include BGP-TE NLRI";
                  uses bgp-afi-default;
                }  // container unicast
              }  // container traffic-engineering
    
              container route-target {
                presence "enable route-target";
                description
                  "Route target NLRI used for VPN route filtering";
                uses apply-advanced;
    
                container prefix-limit {
                  description
                    "Limit maximum number of prefixes from a peer";
                  uses bgpaf-prefix-limit;
                }  // container prefix-limit
    
                container accepted-prefix-limit {
                  description
                    "Limit maximum number of prefixes accepted from a peer";
                  uses bgpaf-accepted-prefix-limit;
                }  // container accepted-prefix-limit
    
                container proxy-generate {
                  presence
                    "enable proxy-generate";
                  description
                    "Generate route target NLRI for peers that don't support it";
                  uses apply-advanced;
    
                  leaf-list route-target-policy {
                    type jt:policy-algebra;
                    ordered-by user;
                    description
                      "Limit VPN routes that are used to generate proxy route-target filters";
                  }
                }  // container proxy-generate
    
                leaf external-paths {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "1 .. 256";
                    }
                  }
                  description
                    "Number of external paths accepted for route filtering";
                }
    
                leaf advertise-default {
                  type empty;
                  description
                    "Advertise default and suppress more specific routes";
                }
    
                leaf damping {
                  type empty;
                  description
                    "Enable route flap damping";
                }
    
                container graceful-restart {
                  description
                    "BGP graceful restart options";
                  uses bgp-af-gr;
                }  // container graceful-restart
    
                leaf local-ipv4-address {
                  type jt:ipv4addr;
                  description
                    "Local IPv4 address";
                }
    
                container output-queue-priority {
                  description
                    "Default output-queue to assign updates to";
                  uses bgp-output-queue-priority-class;
                }  // container output-queue-priority
    
                container route-refresh-priority {
                  description
                    "Default output-queue to assign route refreshes to";
                  uses bgp-output-queue-priority-class;
                }  // container route-refresh-priority
    
                container withdraw-priority {
                  description
                    "Default output-queue to assign withdrawn routes to";
                  uses bgp-output-queue-priority-class;
                }  // container withdraw-priority
              }  // container route-target
    
              container inet-bgpmcast {
                description
                  "IPv4 BGPMCAST NLRI parameters";
                uses apply-advanced;
    
                container signaling {
                  presence "enable signaling";
                  description
                    "Include IPv4 BGP multicast signaling NLRI";
                  uses bgp-afi-default;
                }  // container signaling
              }  // container inet-bgpmcast
    
              container inet6-bgpmcast {
                description
                  "IPv6 BGPMCAST NLRI parameters";
                uses apply-advanced;
    
                container signaling {
                  presence "enable signaling";
                  description
                    "Include IPv6 BGP multicast signaling NLRI";
                  uses bgp-afi-default;
                }  // container signaling
              }  // container inet6-bgpmcast
            }  // container family
    
            leaf authentication-key {
              type string {
                length "1 .. 126";
              }
              description
                "MD5 authentication key";
            }
    
            leaf authentication-algorithm {
              junos:must "(".. authentication-key-chain")";
              junos:must-message "May not be configured without authentication-key-chain";
              junos:must "(!(".. authentication-key"))";
              junos:must-message "May not be configured with authentication-key";
              type enumeration {
                enum "md5" {
                  value 0;
                  description "Message Digest 5";
                }
                enum "hmac-sha-1-96" {
                  value 1;
                  description
                    "Hash-based Message Authentication Code (SHA1) (96 bits)";
                }
                enum "aes-128-cmac-96" {
                  value 2;
                  description
                    "Cipher-based Message Authentication Code (AES128) (96 bits)";
                }
                enum "ao" {
                  value 3;
                  description
                    "TCP Authentication Option";
                }
              }
              description
                "Authentication algorithm name";
            }
    
            leaf tcpao-handling-with-digest-mismatch {
              junos:must "(!(".. authentication-key"))";
              junos:must-message "May not be configured with authentication-key";
              type enumeration {
                enum "drop-if-no-tcpao" {
                  value 0;
                  description
                    "Drop the connection if Digest mismatched";
                }
                enum "allow-without-tcpao" {
                  value 1;
                  description
                    "Allow the connection establishment without TCP-AO";
                }
              }
              description
                "Drop or continue without TCP-AO with digest mismatch with TCP-AO";
            }
    
            leaf authentication-key-chain {
              junos:must "(!(".. authentication-key"))";
              junos:must-message "May not be configured with authentication-key";
              junos:must "("security authentication-key-chains key-chain $$")";
              junos:must-message "Referenced key-chain must be defined";
              type string {
                length "1 .. 128";
              }
              description "Key chain name";
            }
    
            leaf-list export {
              type jt:policy-algebra;
              ordered-by user;
              description "Export policy";
            }
    
            container remove-private {
              presence "enable remove-private";
              description
                "Remove well-known private AS numbers";
              uses apply-advanced;
    
              container all {
                presence "enable all";
                description
                  "Remove all private AS numbers and do not stop at the first public AS number";
                container replace {
                  presence "enable replace";
                  description
                    "Replace private AS numbers with the BGP Group's local AS number";
                  leaf nearest {
                    type empty;
                    description
                      "Use closest public AS number to replace a private AS number";
                  }
                }  // container replace
              }  // container all
    
              leaf no-peer-loop-check {
                type empty;
                description
                  "Remove peer loop-check";
              }
            }  // container remove-private
    
            leaf cluster {
              type jt:areaid;
              description "Cluster identifier";
            }
    
            leaf no-client-reflect {
              type empty;
              description
                "Disable intracluster route redistribution";
            }
    
            leaf peer-as {
              type string {
                junos:posix-pattern "^[0-9]+(.[0-9]+)?$";
                junos:pattern-message "Use format 'x' or 'x.y' to specify number 'x' (Range 1 .. 4294967295) or number with higher 2 bytes 'x' (Range 0 .. 65535) and lower 2 bytes 'y' (Range 0 .. 65535) respectively";
              }
              description
                " Autonomous system number in plain number or 'higher 16bits'.'Lower 16 bits' (asdot notation) format";
            }
    
            container local-as {
              description
                "Local autonomous system number";
              leaf as-number {
                type string {
                  junos:posix-pattern "^[0-9]+(.[0-9]+)?$";
                  junos:pattern-message "Use format 'x' or 'x.y' to specify number 'x' (Range 1 .. 4294967295) or number with higher 2 bytes 'x' (Range 0 .. 65535) and lower 2 bytes 'y' (Range 0 .. 65535) respectively";
                }
                description
                  " Autonomous system number in plain number or 'higher 16bits'.'Lower 16 bits' (asdot notation) format";
              }
    
              leaf loops {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type int32 {
                    range "1 .. 10";
                  }
                }
                description
                  "Maximum number of times this AS can be in an AS path";
              }
    
              leaf private {
                type empty;
                description
                  "Hide this local AS in paths learned from this peering";
              }
    
              leaf alias {
                type empty;
                description
                  "Treat this AS as an alias to the system AS";
              }
    
              leaf no-prepend-global-as {
                type empty;
                description
                  "Do not prepend global autonomous-system number in advertised paths";
              }
            }  // container local-as
    
            leaf ipsec-sa {
              junos:must "("security ipsec security-association $$")";
              junos:must-message "Referenced IPSec Security Association must be defined";
              type string {
                length "1 .. 32";
              }
              description "IPSec SA name";
            }
    
            container graceful-shutdown {
              description
                "BGP peer graceful shutdown option";
              uses apply-advanced;
    
              container receiver {
                presence "enable receiver";
                description
                  "BGP peer graceful-shutdown receiver";
                uses apply-advanced;
    
                leaf disable {
                  junos:must "(!(".. .. sender"))";
                  junos:must-message "Receiver cannot be disabled on Sender";
                  type empty;
                  description
                    "Disable graceful-shutdown receiver";
                }
    
                leaf local-preference {
                  type union {
                    type uint32;
                    type string {
                      pattern "<.*>|$.*";
                    }
                  }
                  description
                    "Value of receiver LOCAL_PREF path attribute";
                }
              }  // container receiver
    
              container sender {
                presence "enable sender";
                description
                  "BGP peer graceful-shutdown sender";
                uses apply-advanced;
    
                leaf local-preference {
                  type union {
                    type uint32;
                    type string {
                      pattern "<.*>|$.*";
                    }
                  }
                  description
                    "Value of sender LOCAL_PREF path attribute";
                }
              }  // container sender
            }  // container graceful-shutdown
    
            container shutdown {
              presence "enable shutdown";
              description "Shutdown";
              uses apply-advanced;
    
              leaf notify-message {
                type string;
                description
                  "Notification message";
              }
            }  // container shutdown
    
            leaf unconfigured-peer-graceful-restart {
              junos:must "(".. graceful-restart")";
              junos:must-message "unconfigured-peer-graceful-restart is only valid with 'graceful-restart'";
              type empty;
              description
                "BGP unconfigured peer graceful restart options";
            }
    
            container graceful-restart {
              presence "enable graceful-restart";
              description
                "BGP graceful restart options";
              uses apply-advanced;
    
              choice enable-disable {
                leaf disable {
                  type empty;
                  description
                    "Disable graceful restart";
                }
              }  // choice enable-disable
    
              leaf restart-time {
                junos:must "(("routing-options graceful-restart" || "fabric routing-options graceful-restart"))";
                junos:must-message "restart-time is only valid with 'routing-options graceful-restart'";
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "1 .. 1800";
                  }
                }
                description
                  "Restart time used when negotiating with a peer";
              }
    
              leaf stale-routes-time {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "1 .. 1800";
                  }
                }
                description
                  "Maximum time for which stale routes are kept";
              }
    
              container long-lived {
                description
                  "Long-lived graceful restart options";
                uses apply-advanced;
    
                container receiver {
                  description
                    "Long-lived graceful restart receiver (helper) options";
                  uses apply-advanced;
    
                  choice enable-disable {
                    leaf disable {
                      type empty;
                      description
                        "Disable receiver (helper) functionality";
                    }
                  }  // choice enable-disable
                }  // container receiver
    
                container advertise-to-non-llgr-neighbor {
                  presence
                    "enable advertise-to-non-llgr-neighbor";
                  description
                    "Advertise stale routes to non-LLGR neighbors";
                  uses apply-advanced;
    
                  leaf omit-no-export {
                    type empty;
                    description
                      "Do not attach no-export community to stale routes";
                  }
                }  // container advertise-to-non-llgr-neighbor
              }  // container long-lived
    
              leaf disable-notification-extensions {
                type empty;
                description
                  "Disable notification extensions";
              }
    
              leaf forwarding-state-bit {
                type enumeration {
                  enum "as-rr-client" {
                    value 0;
                    description
                      "As for a route reflector client";
                  }
                  enum "from-fib" {
                    value 1;
                    description
                      "Always use state of associated FIB(s)";
                  }
                }
                description
                  "Control forwarding-state flag negotiation";
              }
    
              leaf dont-help-shared-fate-bfd-down {
                type empty;
                description
                  "Honor BFD-Down(C=0) if GR-restart not in progress";
              }
            }  // container graceful-restart
    
            leaf include-mp-next-hop {
              type empty;
              description
                "Include NEXT-HOP attribute in multiprotocol updates";
            }
    
            leaf disable-4byte-as {
              type empty;
              description
                "Disable 4 byte AS capability advertisement";
            }
    
            container idle-after-switch-over {
              description
                "Stop peer session from coming up after nonstop-routing switch-over";
              choice idle-interval {
                leaf forever {
                  type empty;
                  description
                    "Idle the peer until the user intervenes";
                }
                leaf timeout {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "1 .. 4294967295";
                    }
                  }
                  description
                    "Timeout value, in seconds, for starting peer after switch over";
                }
              }  // choice idle-interval
            }  // container idle-after-switch-over
    
            container outbound-route-filter {
              junos:must "(!("system processes routing bgp update-threading"))";
              junos:must-message "Can't be configured together with update-threading";
              description
                "Dynamically negotiated cooperative route filtering";
              uses apply-advanced;
    
              leaf bgp-orf-cisco-mode {
                type empty;
                description
                  "Using BGP ORF capability code 130 and Prefix ORF type 128";
              }
    
              container extended-community {
                status deprecated;
                description
                  "Extended community filtering";
                uses apply-advanced;
    
                choice accept-choice {
                  leaf accept {
                    type empty;
                    description
                      "Honor remote requests for extended community ORF";
                  }
                  leaf no-accept {
                    type empty;
                    description
                      "Don't honor remote requests for extended community ORF";
                  }
                }  // choice accept-choice
    
                leaf vrf-filter {
                  type empty;
                  description
                    "Request remote filtering using locally configured VRF import targets";
                }
              }  // container extended-community
    
              container prefix-based {
                presence "enable prefix-based";
                description
                  "Prefix-based outbound route filtering";
                uses apply-advanced;
    
                container accept {
                  presence "enable accept";
                  description
                    "Honor Prefix-based ORFs from remote peers";
                  uses apply-advanced;
    
                  leaf inet {
                    type empty;
                    description
                      "Honor IPv4 prefix filters";
                  }
    
                  leaf inet6 {
                    type empty;
                    description
                      "Honor IPv6 prefix filters";
                  }
                }  // container accept
              }  // container prefix-based
            }  // container outbound-route-filter
    
            container message-batching {
              status deprecated;
              description
                "DEPRECATED - Batching of outgoing messages";
              uses apply-advanced;
    
              choice enable-disable {
                leaf enable {
                  type empty;
                  description "Enable parameter";
                }
                leaf disable {
                  type empty;
                  description
                    "Disable parameter";
                }
              }  // choice enable-disable
    
              leaf interval {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "100 .. 1000";
                  }
                }
                units "milliseconds";
                default "250";
                description
                  "DEPRECATED - Interval over which to batch messages";
              }
            }  // container message-batching
    
            container multipath {
              presence "enable multipath";
              description
                "Allow load sharing among multiple BGP paths";
              uses apply-advanced;
    
              leaf disable {
                type empty;
                description "Disable Multipath";
              }
    
              leaf multiple-as {
                type empty;
                description
                  "Use paths received from different ASs";
              }
    
              leaf allow-protection {
                type empty;
                description
                  "Allow protection for multipath legs";
              }
    
              leaf pause-computation-during-churn {
                type empty;
                description
                  "Pause multipath job to absorb churn";
              }
    
              leaf list-nexthop {
                type empty;
                description
                  "Use List-NH for homogenous nexthop-set also";
              }
            }  // container multipath
    
            leaf tcp-mss {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "1 .. 4096";
                }
              }
              description
                "Maximum TCP segment size";
            }
    
            leaf bgp-identifier {
              type jt:ipv4addr;
              description "BGP Identifier";
            }
    
            leaf tcp-aggressive-transmission {
              type empty;
              description
                "Enable aggressive transmission of pure TCP ACKs and retransmissions";
            }
    
            container bmp {
              description
                "Specific settings to override the routing-options settings";
              uses apply-advanced;
    
              leaf monitor {
                type enumeration {
                  enum "enable" {
                    value 0;
                    description
                      "Enable monitoring of BGP peer(s)";
                  }
                  enum "disable" {
                    value 1;
                    description
                      "Disable monitoring of BGP peer(s)";
                  }
                }
                description
                  "Enable/Disable monitoring";
              }
    
              container route-monitoring {
                description
                  "Control route monitoring settings";
                uses apply-advanced;
    
                leaf none {
                  junos:must "((!(".. pre-policy") && (!(".. post-policy") && !(".. rib-out"))))";
                  junos:must-message "May not be configured with pre-policy or post-policy or rib-out";
                  type empty;
                  description
                    "Do not send route monitoring messages";
                }
    
                container pre-policy {
                  presence "enable pre-policy";
                  description
                    "Send pre-policy route monitoring messages";
                  leaf exclude-non-feasible {
                    type empty;
                    description
                      "Exclude looped routes, etc";
                  }
                }  // container pre-policy
    
                container post-policy {
                  presence "enable post-policy";
                  description
                    "Send post-policy route monitoring messages";
                  leaf exclude-non-eligible {
                    type empty;
                    description
                      "Exclude unresolved routes, etc.";
                  }
                }  // container post-policy
    
                container rib-out {
                  junos:must "((!("system processes routing bgp update-threading") || "system processes routing bgp rib-sharding"))";
                  junos:must-message "Update threading can't be configured together with bmp rib-out monitoring";
                  presence "enable rib-out";
                  description
                    "Send adj-ribs-out route monitoring messages";
                  leaf pre-policy {
                    type empty;
                    description
                      "Send pre-policy adj-ribs-out route monitoring messages";
                  }
    
                  leaf post-policy {
                    type empty;
                    description
                      "Send post-policy adj-ribs-out route monitoring messages";
                  }
                }  // container rib-out
              }  // container route-monitoring
            }  // container bmp
    
            container advertise-bgp-static {
              presence
                "enable advertise-bgp-static";
              description
                "Advertise bgp-static routes";
              uses apply-advanced;
    
              leaf-list policy {
                type jt:policy-algebra;
                ordered-by user;
                description
                  "Static route advertisement policy";
              }
            }  // container advertise-bgp-static
    
            leaf add-path-display-ipv4-address {
              type empty;
              description
                "Display add-path path-id in IPv4 address format";
            }
    
            container bfd-liveness-detection {
              description
                "Bidirectional Forwarding Detection (BFD) options";
              uses apply-advanced;
    
              leaf version {
                type enumeration {
                  enum "0" {
                    value 0;
                    description
                      "BFD version 0 (deprecated)";
                  }
                  enum "1" {
                    value 1;
                    description "BFD version 1";
                  }
                  enum "automatic" {
                    value 2;
                    description
                      "Choose BFD version automatically";
                  }
                }
                default "automatic";
                description
                  "BFD protocol version number";
              }
    
              leaf minimum-interval {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "1 .. 255000";
                  }
                }
                units "milliseconds";
                description
                  "Minimum transmit and receive interval";
              }
    
              leaf minimum-transmit-interval {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "1 .. 255000";
                  }
                }
                units "milliseconds";
                status deprecated;
                description
                  "Minimum transmit interval";
              }
    
              leaf minimum-receive-interval {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "1 .. 255000";
                  }
                }
                units "milliseconds";
                description
                  "Minimum receive interval";
              }
    
              leaf multiplier {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "1 .. 255";
                  }
                }
                default "3";
                description
                  "Detection time multiplier";
              }
    
              choice adaptation-choice {
                leaf no-adaptation {
                  type empty;
                  description
                    "Disable adaptation";
                }
              }  // choice adaptation-choice
    
              container transmit-interval {
                description
                  "Transmit-interval options";
                uses apply-advanced;
    
                leaf minimum-interval {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "1 .. 255000";
                    }
                  }
                  units "milliseconds";
                  description
                    "Minimum transmit interval";
                }
    
                leaf threshold {
                  type union {
                    type uint32;
                    type string {
                      pattern "<.*>|$.*";
                    }
                  }
                  units "milliseconds";
                  description
                    "High transmit interval triggering a trap";
                }
              }  // container transmit-interval
    
              container detection-time {
                description
                  "Detection-time options";
                uses apply-advanced;
    
                leaf threshold {
                  type union {
                    type uint32;
                    type string {
                      pattern "<.*>|$.*";
                    }
                  }
                  units "milliseconds";
                  description
                    "High detection-time triggering a trap";
                }
              }  // container detection-time
    
              container authentication {
                description
                  "Authentication options";
                uses apply-advanced;
    
                leaf key-chain {
                  junos:must "(".. algorithm")";
                  junos:must-message "May not be configured without algorithm";
                  junos:must "("security authentication-key-chains key-chain $$")";
                  junos:must-message "Referenced key-chain must be defined";
                  type string;
                  description "Key chain name";
                }
    
                leaf algorithm {
                  junos:must "(".. key-chain")";
                  junos:must-message "May not be configured without key-chain";
                  type enumeration {
                    enum "simple-password" {
                      value 0;
                      description
                        "Simple password";
                    }
                    enum "keyed-md5" {
                      value 1;
                      description
                        "Keyed message Digest 5";
                    }
                    enum "meticulous-keyed-md5" {
                      value 2;
                      description
                        "Meticulous keyed message Digest 5";
                    }
                    enum "keyed-sha-1" {
                      value 3;
                      description
                        "Keyed secure hash algorithm (SHA1) ";
                    }
                    enum
                      "meticulous-keyed-sha-1" {
                      value 4;
                      description
                        "Meticulous keyed secure hash algorithm (SHA1) ";
                    }
                  }
                  description "Algorithm name";
                }
    
                leaf loose-check {
                  type empty;
                  description
                    "Verify authentication only if authentication is negotiated";
                }
              }  // container authentication
    
              leaf session-mode {
                type enumeration {
                  enum "automatic" {
                    value 0;
                    description
                      "Choose session-mode automatically";
                  }
                  enum "single-hop" {
                    value 1;
                    description "Use single-hop";
                  }
                  enum "multihop" {
                    value 2;
                    description "Use multihop";
                  }
                }
                default "automatic";
                description
                  "BFD single-hop or multihop session-mode";
              }
    
              leaf holddown-interval {
                junos:must "(!(".. .. type internal"))";
                junos:must-message "bfd holddown-interval is only valid for EBGP.";
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "0 .. 255000";
                  }
                }
                units "milliseconds";
                description
                  "Time to hold the session-UP notification to the client";
              }
            }  // container bfd-liveness-detection
    
            leaf as-override {
              type empty;
              description
                "Replace neighbor AS number with our AS number";
            }
    
            leaf-list allow {
              type jt:ipprefix;
              ordered-by user;
              description
                "Configure peer connections for specific networks";
            }
    
            list dynamic-neighbor {
              key "name";
              ordered-by user;
              description
                "Configure peer options for specific networks";
              leaf name {
                junos:must "((".. allow" || ".. peer-auto-discovery"))";
                junos:must-message "dynamic-neighbor must enable allow or peer-auto-discovery";
                type string;
                description "Template name";
              }
    
              uses apply-advanced;
    
              leaf-list allow {
                type jt:ipprefix;
                ordered-by user;
                description
                  "Configure peer connections for specific networks";
              }
    
              leaf authentication-key {
                type string {
                  length "1 .. 126";
                }
                description
                  "MD5 authentication key";
              }
    
              leaf authentication-algorithm {
                junos:must "(".. authentication-key-chain")";
                junos:must-message "May not be configured without authentication-key-chain";
                junos:must "(!(".. authentication-key"))";
                junos:must-message "May not be configured with authentication-key";
                type enumeration {
                  enum "md5" {
                    value 0;
                    description
                      "Message Digest 5";
                  }
                  enum "hmac-sha-1-96" {
                    value 1;
                    description
                      "Hash-based Message Authentication Code (SHA1) (96 bits)";
                  }
                  enum "aes-128-cmac-96" {
                    value 2;
                    description
                      "Cipher-based Message Authentication Code (AES128) (96 bits)";
                  }
                  enum "ao" {
                    value 3;
                    description
                      "TCP Authentication Option";
                  }
                }
                description
                  "Authentication algorithm name";
              }
    
              leaf tcpao-handling-with-digest-mismatch {
                junos:must "(!(".. authentication-key"))";
                junos:must-message "May not be configured with authentication-key";
                type enumeration {
                  enum "drop-if-no-tcpao" {
                    value 0;
                    description
                      "Drop the connection if Digest mismatched";
                  }
                  enum "allow-without-tcpao" {
                    value 1;
                    description
                      "Allow the connection establishment without TCP-AO";
                  }
                }
                description
                  "Drop or continue without TCP-AO with digest mismatch with TCP-AO";
              }
    
              leaf authentication-key-chain {
                junos:must "(!(".. authentication-key"))";
                junos:must-message "May not be configured with authentication-key";
                junos:must "("security authentication-key-chains key-chain $$")";
                junos:must-message "Referenced key-chain must be defined";
                type string {
                  length "1 .. 128";
                }
                description "Key chain name";
              }
    
              container peer-auto-discovery {
                junos:must "((!(".. authentication-algorithm") && (!(".. .. authentication-algorithm") && !(".. .. .. authentication-algorithm"))))";
                junos:must-message "Can't be configured along with authentication-algorithm";
                junos:must "((!(".. authentication-key") && (!(".. .. authentication-key") && !(".. .. .. authentication-key"))))";
                junos:must-message "Can't be configured along with authentication-key";
                junos:must "(!(".. allow"))";
                junos:must-message "peer-auto-discovery and allow cannot be configured in the same dynamic-neighbor";
                junos:must "((!(".. .. type internal") && !(".. .. multihop")))";
                junos:must-message "peer-auto-discovery is valid only for single-hop EBGP neighbor";
                description
                  "Configure auto-discovery options for BGP neighbors";
                uses apply-advanced;
    
                container family {
                  description
                    "Address family based neighbor auto-discovery parameters";
                  container inet6 {
                    uses apply-advanced;
    
                    choice auto-discovery-type {
                      container ipv6-nd {
                        presence
                          "enable ipv6-nd";
                        description
                          "Use ipv6 neighbor discovery to learn neighbor address";
                      }  // container ipv6-nd
                    }  // choice auto-discovery-type
                  }  // container inet6
                }  // container family
    
                list interface {
                  key "name";
                  leaf name {
                    type union {
                      type jt:interface-name;
                      type string {
                        pattern "<.*>|$.*";
                      }
                    }
                    description
                      "Configure interfaces over which to discover bgp neighbors";
                  }
    
                  uses apply-advanced;
    
                  choice enable-disable {
                    leaf disable {
                      type empty;
                      description
                        "Disable peer discovery on interface";
                    }
                  }  // choice enable-disable
                }  // list interface
              }  // container peer-auto-discovery
            }  // list dynamic-neighbor
    
            container optimal-route-reflection {
              junos:must "(".. type internal")";
              junos:must-message "Must be configured with type internal";
              description
                "Enable optimal route reflection for this client group";
              uses apply-advanced;
    
              leaf igp-primary {
                type jt:ipv4addr;
                description
                  "Primary node identifier for this client group";
              }
    
              leaf igp-backup {
                type jt:ipv4addr;
                description
                  "Backup node identifier for this client group";
              }
            }  // container optimal-route-reflection
    
            leaf peer-as-list {
              junos:must "((".. allow" || ".. dynamic-neighbor"))";
              junos:must-message "May be configured only with allow or dynamic-neighbor";
              type string;
              description
                "Configure list of peer autonomous systems for unconfigured neighbors";
            }
    
            leaf mvpn-iana-rt-import {
              type empty;
              status deprecated;
              description
                "Use IANA assigned rt-import type value for MVPN";
            }
    
            list neighbor {
              key "name";
              ordered-by user;
              description "Configure a neighbor";
              leaf name {
                type jt:ipaddr-scoped;
              }
    
              uses apply-advanced;
    
              container traceoptions {
                description
                  "Trace options for BGP";
                uses apply-advanced;
    
                container file {
                  description
                    "Trace file options";
                  leaf filename {
                    type string {
                      junos:posix-pattern "![/ %]";
                      junos:pattern-message "Must not contain '/', % or a space";
                      length "1 .. 1024";
                    }
                    description
                      "Name of file in which to write trace information";
                  }
    
                  leaf replace {
                    type empty;
                    status deprecated;
                    description
                      "Replace trace file rather than appending to it";
                  }
    
                  leaf size {
                    type string;
                    description
                      "Maximum trace file size";
                  }
    
                  leaf files {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint32 {
                        range "2 .. 1000";
                      }
                    }
                    default "10";
                    description
                      "Maximum number of trace files";
                  }
    
                  leaf no-stamp {
                    type empty;
                    status deprecated;
                    description
                      "Do not timestamp trace file";
                  }
    
                  choice world-readable-choice {
                    leaf world-readable {
                      type empty;
                      description
                        "Allow any user to read the log file";
                    }
                    leaf no-world-readable {
                      type empty;
                      description
                        "Don't allow any user to read the log file";
                    }
                  }  // choice world-readable-choice
                }  // container file
    
                list flag {
                  key "name";
                  ordered-by user;
                  description
                    "Tracing parameters";
                  leaf name {
                    type enumeration {
                      enum "damping" {
                        value 0;
                        description
                          "Trace BGP damping information";
                      }
                      enum "packets" {
                        value 1;
                        description
                          "Trace all BGP protocol packets";
                      }
                      enum "open" {
                        value 2;
                        description
                          "Trace BGP open packets";
                      }
                      enum "update" {
                        value 3;
                        description
                          "Trace BGP update packets";
                      }
                      enum "keepalive" {
                        value 4;
                        description
                          "Trace BGP keepalive packets";
                      }
                      enum "refresh" {
                        value 5;
                        description
                          "Trace BGP refresh packets";
                      }
                      enum "nsr-synchronization" {
                        value 6;
                        description
                          "Trace NSR synchronization events";
                      }
                      enum "bfd" {
                        value 7;
                        description
                          "Trace BFD events";
                      }
                      enum "4byte-as" {
                        value 8;
                        description
                          "Trace 4 byte AS events";
                      }
                      enum "add-path" {
                        value 9;
                        description
                          "Trace add-path events";
                      }
                      enum "graceful-restart" {
                        value 10;
                        description
                          "Trace Graceful Restart events";
                      }
                      enum "egress-te" {
                        value 11;
                        description
                          "Egress Peering Traffic-Engineering events";
                      }
                      enum "thread-io" {
                        value 12;
                        description
                          "Trace threaded I/O processing";
                      }
                      enum "sharding" {
                        value 13;
                        description
                          "Trace BGP rib sharding";
                      }
                      enum "thread-update-io" {
                        value 14;
                        description
                          "Trace threaded update I/O processing";
                      }
                      enum "route-validation" {
                        value 15;
                        description
                          "Trace route validation";
                      }
                      enum "ipsec" {
                        value 16;
                        description
                          "Trace ipsec";
                      }
                      enum "route" {
                        value 17;
                        description
                          "Trace routing information";
                      }
                      enum "normal" {
                        value 18;
                        description
                          "Trace normal events";
                      }
                      enum "general" {
                        value 19;
                        description
                          "Trace general events";
                      }
                      enum "state" {
                        value 20;
                        description
                          "Trace state transitions";
                      }
                      enum "policy" {
                        value 21;
                        description
                          "Trace policy processing";
                      }
                      enum "task" {
                        value 22;
                        description
                          "Trace routing protocol task processing";
                      }
                      enum "timer" {
                        value 23;
                        description
                          "Trace routing protocol timer processing";
                      }
                      enum "all" {
                        value 24;
                        description
                          "Trace everything";
                      }
                    }
                  }
    
                  leaf send {
                    type empty;
                    description
                      "Trace transmitted packets";
                  }
    
                  leaf receive {
                    type empty;
                    description
                      "Trace received packets";
                  }
    
                  leaf detail {
                    type empty;
                    description
                      "Trace detailed information";
                  }
    
                  leaf disable {
                    type empty;
                    description
                      "Disable this trace flag";
                  }
    
                  container filter {
                    presence "enable filter";
                    description
                      "Filter to apply to this flag";
                    uses bgp_filter_obj;
                  }  // container filter
                }  // list flag
              }  // container traceoptions
    
              leaf description {
                type string {
                  length "1 .. 255";
                }
                description "Text description";
              }
    
              container metric-out {
                description
                  "Route metric sent in MED";
                choice metric_param {
                  leaf metric-value {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint32 {
                        range "0 .. 4294967295";
                      }
                    }
                    description "Metric value";
                  }
                  container minimum-igp {
                    presence
                      "enable minimum-igp";
                    description
                      "Track the minimum IGP metric";
                    leaf metric-offset {
                      type union {
                        type int32;
                        type string {
                          pattern "<.*>|$.*";
                        }
                      }
                      description
                        "Metric offset for MED";
                    }
                  }  // container minimum-igp
                  container igp {
                    presence "enable igp";
                    description
                      "Track the IGP metric";
                    leaf metric-offset {
                      type union {
                        type int32;
                        type string {
                          pattern "<.*>|$.*";
                        }
                      }
                      description
                        "Metric offset for MED";
                    }
    
                    leaf delay-med-update {
                      type empty;
                      description
                        "Delay updating MED when IGP metric increases";
                    }
                  }  // container igp
                  container effective-aigp {
                    presence
                      "enable effective-aigp";
                    description
                      "Track the effective AIGP metric";
                    leaf metric-offset {
                      type union {
                        type int32;
                        type string {
                          pattern "<.*>|$.*";
                        }
                      }
                      description
                        "Metric offset for MED";
                    }
                  }  // container effective-aigp
                  container minimum-effective-aigp {
                    presence
                      "enable minimum-effective-aigp";
                    description
                      "Track the minimum effective AIGP metric";
                    leaf metric-offset {
                      type union {
                        type int32;
                        type string {
                          pattern "<.*>|$.*";
                        }
                      }
                      description
                        "Metric offset for MED";
                    }
                  }  // container minimum-effective-aigp
                }  // choice metric_param
              }  // container metric-out
    
              container multihop {
                presence "enable multihop";
                description
                  "Configure an EBGP multihop session";
                uses apply-advanced;
    
                leaf ttl {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint8 {
                      range "1 .. 255";
                    }
                  }
                  description
                    "TTL value for the session";
                }
    
                leaf no-nexthop-change {
                  type empty;
                  description
                    "Do not change next hop to self in advertisements";
                }
              }  // container multihop
    
              leaf route-server-client {
                type empty;
                description
                  "Enable route server client behavior";
              }
    
              leaf accept-remote-nexthop {
                type empty;
                description
                  "Allow import policy to specify a non-directly connected next-hop";
              }
    
              leaf preference {
                type union {
                  type uint32;
                  type string {
                    pattern "<.*>|$.*";
                  }
                }
                description "Preference value";
              }
    
              leaf local-preference {
                type union {
                  type uint32;
                  type string {
                    pattern "<.*>|$.*";
                  }
                }
                description
                  "Value of LOCAL_PREF path attribute";
              }
    
              leaf local-address {
                type jt:ipaddr;
                description
                  "Address of local end of BGP session";
              }
    
              leaf local-interface {
                type union {
                  type jt:interface-name;
                  type string {
                    pattern "<.*>|$.*";
                  }
                }
                description
                  "Local interface for IPv6 link local EBGP peering";
              }
    
              leaf forwarding-context {
                type string {
                  junos:posix-pattern "!^((__.*__)|(all)|(.*[ ].*)|("")|(.{129,}))$";
                  junos:pattern-message "Must be a non-reserved string of 128 characters or less with no spaces.";
                }
                description
                  "Routing-instance used for data-forwarding and transport-session";
              }
    
              leaf hold-time {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "0 .. 65535";
                  }
                }
                description
                  "Hold time used when negotiating with a peer";
              }
    
              leaf minimum-hold-time {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "3 .. 65535";
                  }
                }
                description
                  "Minimum hold time accepted from the peer";
              }
    
              leaf passive {
                type empty;
                description
                  "Do not send open messages to a peer";
              }
    
              leaf advertise-inactive {
                type empty;
                description
                  "Advertise inactive routes";
              }
    
              choice advertise-peer-as-choice {
                leaf advertise-peer-as {
                  type empty;
                  description
                    "Advertise routes received from the same autonomous system";
                }
                leaf no-advertise-peer-as {
                  type empty;
                  description
                    "Don't advertise routes received from the same autonomous system";
                }
              }  // choice advertise-peer-as-choice
    
              container advertise-external {
                presence
                  "enable advertise-external";
                description
                  "Advertise best external routes";
                leaf conditional {
                  type empty;
                  description
                    "Route matches active route upto med-comparison rule";
                }
              }  // container advertise-external
    
              leaf keep {
                type enumeration {
                  enum "all" {
                    value 0;
                    description
                      "Retain all routes";
                  }
                  enum "none" {
                    value 1;
                    description
                      "Retain no routes";
                  }
                }
                description
                  "How to retain routes in the routing table";
              }
    
              leaf rfc6514-compliant-safi129 {
                type empty;
                description
                  "Compliant with RFC6514 SAFI129 format";
              }
    
              leaf no-aggregator-id {
                type empty;
                description
                  "Set router ID in aggregator path attribute to 0";
              }
    
              leaf mtu-discovery {
                type empty;
                description
                  "Enable TCP path MTU discovery";
              }
    
              leaf enforce-first-as {
                type empty;
                description
                  "Enforce first AS in AS-path is the neighbor's AS";
              }
    
              leaf out-delay {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "0 .. 65535";
                  }
                }
                description
                  "How long before exporting routes from routing table";
              }
    
              leaf ttl {
                junos:must "((!(".. .. type internal") && !(".. multihop")))";
                junos:must-message "This option is valid only for single-hop EBGP neighbor";
                type enumeration {
                  enum "1" {
                    value 0;
                  }
                  enum "255" {
                    value 1;
                  }
                }
                description
                  "TTL value for the single-hop peer";
              }
    
              leaf log-updown {
                type empty;
                description
                  "Log a message for peer state transitions";
              }
    
              leaf damping {
                type empty;
                description
                  "Enable route flap damping";
              }
    
              leaf-list import {
                type jt:policy-algebra;
                ordered-by user;
                description "Import policy";
              }
    
              leaf-list nlri {
                type enumeration {
                  enum "unicast" {
                    value 0;
                    status deprecated;
                    description
                      "Include unicast NLRI";
                  }
                  enum "multicast" {
                    value 1;
                    status deprecated;
                    description
                      "Include multicast NLRI";
                  }
                  enum "any" {
                    value 2;
                    status deprecated;
                    description
                      "Include any kind of NLRI";
                  }
                }
                ordered-by user;
                status deprecated;
                description
                  "NLRI type to include in updates";
              }
    
              container bgp-error-tolerance {
                presence
                  "enable bgp-error-tolerance";
                description
                  "Handle BGP malformed updates softly";
                uses apply-advanced;
    
                leaf malformed-update-log-interval {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "10 .. 65535";
                    }
                  }
                  units "seconds";
                  default "300";
                  description
                    "Time used when logging malformed update";
                }
    
                choice malformed-routes-limit-choice {
                  leaf malformed-route-limit {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint32 {
                        range "0 .. 4294967295";
                      }
                    }
                    default "1000";
                    description
                      "Maximum number of malformed routes from a peer";
                  }
                  leaf no-malformed-route-limit {
                    type empty;
                    description
                      "No malformed route limit";
                  }
                }  // choice malformed-routes-limit-choice
              }  // container bgp-error-tolerance
    
              container family {
                description
                  "Protocol family for NLRIs in updates";
                uses apply-advanced;
    
                container inet {
                  description
                    "IPv4 NLRI parameters";
                  uses apply-advanced;
    
                  container labeled-unicast {
                    presence
                      "enable labeled-unicast";
                    description
                      "Include labeled unicast NLRI";
                    uses bgp-afi-labeled;
                  }  // container labeled-unicast
    
                  container segment-routing-te {
                    presence
                      "enable segment-routing-te";
                    description
                      "Include segment-routing TE policy";
                    uses bgp-afi-srte;
                  }  // container segment-routing-te
    
                  container transport {
                    presence "enable transport";
                    description
                      "Include Classful Transport NLRI";
                    uses bgp-afi-inet-transport;
                  }  // container transport
    
                  container unicast {
                    presence "enable unicast";
                    description
                      "Include unicast NLRI";
                    uses bgp-afi-topo;
                  }  // container unicast
    
                  container multicast {
                    presence "enable multicast";
                    description
                      "Include multicast NLRI";
                    uses bgp-afi-default;
                  }  // container multicast
    
                  container flow {
                    presence "enable flow";
                    description
                      "Include flow NLRI";
                    uses bgp-afi-flow-with-redirect-ip-action;
                  }  // container flow
    
                  container any {
                    presence "enable any";
                    description
                      "Include unicast or multicast NLRI";
                    uses bgp-afi-default;
                  }  // container any
                }  // container inet
    
                container inet-vpn {
                  description
                    "IPv4 Layer 3 VPN NLRI parameters";
                  uses apply-advanced;
    
                  container unicast {
                    presence "enable unicast";
                    description
                      "Include unicast NLRI";
                    uses bgp-afi-l3vpn;
                  }  // container unicast
    
                  container multicast {
                    presence "enable multicast";
                    description
                      "Include multicast NLRI";
                    uses bgp-afi-vpn;
                  }  // container multicast
    
                  container flow {
                    presence "enable flow";
                    description
                      "Include flow VPN NLRI";
                    uses bgp-afi-flow-with-redirect-ip-action;
                  }  // container flow
    
                  container any {
                    presence "enable any";
                    description
                      "Include unicast or multicast NLRI";
                    uses bgp-afi-vpn;
                  }  // container any
                }  // container inet-vpn
    
                container inet6 {
                  description
                    "IPv6 NLRI parameters";
                  uses apply-advanced;
    
                  container labeled-unicast {
                    presence
                      "enable labeled-unicast";
                    description
                      "Include labeled unicast NLRI";
                    uses bgp-afi-inet6-labeled;
                  }  // container labeled-unicast
    
                  container segment-routing-te {
                    presence
                      "enable segment-routing-te";
                    description
                      "Include segment-routing TE policy";
                    uses bgp-afi-srte;
                  }  // container segment-routing-te
    
                  container transport {
                    presence "enable transport";
                    description
                      "Include Classful Transport NLRI";
                    uses bgp-afi-inet6-transport;
                  }  // container transport
    
                  container unicast {
                    presence "enable unicast";
                    description
                      "Include unicast NLRI";
                    uses bgp-afi-topo;
                  }  // container unicast
    
                  container multicast {
                    presence "enable multicast";
                    description
                      "Include multicast NLRI";
                    uses bgp-afi-default;
                  }  // container multicast
    
                  container flow {
                    presence "enable flow";
                    description
                      "Include flow NLRI";
                    uses bgp-afi-flow;
                  }  // container flow
    
                  container any {
                    presence "enable any";
                    description
                      "Include unicast or multicast NLRI";
                    uses bgp-afi-default;
                  }  // container any
                }  // container inet6
    
                container inet6-vpn {
                  description
                    "IPv6 Layer 3 VPN NLRI parameters";
                  uses apply-advanced;
    
                  container unicast {
                    presence "enable unicast";
                    description
                      "Include unicast NLRI";
                    uses bgp-afi-l3vpn;
                  }  // container unicast
    
                  container multicast {
                    presence "enable multicast";
                    description
                      "Include multicast NLRI";
                    uses bgp-afi-vpn;
                  }  // container multicast
    
                  container flow {
                    presence "enable flow";
                    description
                      "Include flow VPN NLRI";
                    uses bgp-afi-flow;
                  }  // container flow
    
                  container any {
                    presence "enable any";
                    description
                      "Include unicast or multicast NLRI";
                    uses bgp-afi-vpn;
                  }  // container any
                }  // container inet6-vpn
    
                container iso-vpn {
                  description
                    "ISO Layer 3 VPN NLRI parameters";
                  uses apply-advanced;
    
                  container unicast {
                    presence "enable unicast";
                    description
                      "Include unicast NLRI";
                    uses bgp-afi-vpn-protection;
                  }  // container unicast
                }  // container iso-vpn
    
                container l2vpn {
                  description
                    "MPLS-based Layer 2 VPN and VPLS NLRI parameters";
                  uses apply-advanced;
    
                  container auto-discovery-only {
                    presence
                      "enable auto-discovery-only";
                    description
                      "Include auto-discovery NLRI for LDP Layer 2 VPN and VPLS";
                    uses bgp-afi-default;
                  }  // container auto-discovery-only
    
                  container auto-discovery-mspw {
                    presence
                      "enable auto-discovery-mspw";
                    description
                      "Include auto-discovery NLRI for LDP Signalled MultiSegment PW";
                    uses bgp-afi-default;
                  }  // container auto-discovery-mspw
    
                  container signaling {
                    presence "enable signaling";
                    description
                      "Include Layer 2 VPN and VPLS signaling NLRI";
                    uses bgp-afi-l2vpn;
                  }  // container signaling
                }  // container l2vpn
    
                container evpn {
                  description
                    "EVPN NLRI parameters";
                  uses apply-advanced;
    
                  container signaling {
                    presence "enable signaling";
                    description
                      "Include EVPN signaling NLRI";
                    uses bgp-afi-default;
                  }  // container signaling
                }  // container evpn
    
                container inet-mvpn {
                  description
                    "IPv4 MVPN NLRI parameters";
                  uses apply-advanced;
    
                  container signaling {
                    presence "enable signaling";
                    description
                      "Include IPv4 multicast VPN signaling NLRI";
                    uses bgp-afi-default;
                  }  // container signaling
                }  // container inet-mvpn
    
                container inet6-mvpn {
                  description
                    "IPv6 MVPN NLRI parameters";
                  uses apply-advanced;
    
                  container signaling {
                    presence "enable signaling";
                    description
                      "Include IPv6 multicast VPN signaling NLRI";
                    uses bgp-afi-default;
                  }  // container signaling
                }  // container inet6-mvpn
    
                container inet-mdt {
                  description
                    "IPv4 Multicast Distribution Tree (MDT) NLRI parameters";
                  uses apply-advanced;
    
                  container signaling {
                    presence "enable signaling";
                    description
                      "Include IPv4 multicast VPN auto-discovery NLRI";
                    uses bgp-afi-default;
                  }  // container signaling
                }  // container inet-mdt
    
                container traffic-engineering {
                  description
                    "Traffic Engineering (BGP-TE) NLRI parameters";
                  uses apply-advanced;
    
                  container unicast {
                    presence "enable unicast";
                    description
                      "Include BGP-TE NLRI";
                    uses bgp-afi-default;
                  }  // container unicast
                }  // container traffic-engineering
    
                container route-target {
                  presence "enable route-target";
                  description
                    "Route target NLRI used for VPN route filtering";
                  uses apply-advanced;
    
                  container prefix-limit {
                    description
                      "Limit maximum number of prefixes from a peer";
                    uses bgpaf-prefix-limit;
                  }  // container prefix-limit
    
                  container accepted-prefix-limit {
                    description
                      "Limit maximum number of prefixes accepted from a peer";
                    uses bgpaf-accepted-prefix-limit;
                  }  // container accepted-prefix-limit
    
                  container proxy-generate {
                    presence
                      "enable proxy-generate";
                    description
                      "Generate route target NLRI for peers that don't support it";
                    uses apply-advanced;
    
                    leaf-list route-target-policy {
                      type jt:policy-algebra;
                      ordered-by user;
                      description
                        "Limit VPN routes that are used to generate proxy route-target filters";
                    }
                  }  // container proxy-generate
    
                  leaf external-paths {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint32 {
                        range "1 .. 256";
                      }
                    }
                    description
                      "Number of external paths accepted for route filtering";
                  }
    
                  leaf advertise-default {
                    type empty;
                    description
                      "Advertise default and suppress more specific routes";
                  }
    
                  leaf damping {
                    type empty;
                    description
                      "Enable route flap damping";
                  }
    
                  container graceful-restart {
                    description
                      "BGP graceful restart options";
                    uses bgp-af-gr;
                  }  // container graceful-restart
    
                  leaf local-ipv4-address {
                    type jt:ipv4addr;
                    description
                      "Local IPv4 address";
                  }
    
                  container output-queue-priority {
                    description
                      "Default output-queue to assign updates to";
                    uses bgp-output-queue-priority-class;
                  }  // container output-queue-priority
    
                  container route-refresh-priority {
                    description
                      "Default output-queue to assign route refreshes to";
                    uses bgp-output-queue-priority-class;
                  }  // container route-refresh-priority
    
                  container withdraw-priority {
                    description
                      "Default output-queue to assign withdrawn routes to";
                    uses bgp-output-queue-priority-class;
                  }  // container withdraw-priority
                }  // container route-target
    
                container inet-bgpmcast {
                  description
                    "IPv4 BGPMCAST NLRI parameters";
                  uses apply-advanced;
    
                  container signaling {
                    presence "enable signaling";
                    description
                      "Include IPv4 BGP multicast signaling NLRI";
                    uses bgp-afi-default;
                  }  // container signaling
                }  // container inet-bgpmcast
    
                container inet6-bgpmcast {
                  description
                    "IPv6 BGPMCAST NLRI parameters";
                  uses apply-advanced;
    
                  container signaling {
                    presence "enable signaling";
                    description
                      "Include IPv6 BGP multicast signaling NLRI";
                    uses bgp-afi-default;
                  }  // container signaling
                }  // container inet6-bgpmcast
              }  // container family
    
              leaf authentication-key {
                type string {
                  length "1 .. 126";
                }
                description
                  "MD5 authentication key";
              }
    
              leaf authentication-algorithm {
                junos:must "(".. authentication-key-chain")";
                junos:must-message "May not be configured without authentication-key-chain";
                junos:must "(!(".. authentication-key"))";
                junos:must-message "May not be configured with authentication-key";
                type enumeration {
                  enum "md5" {
                    value 0;
                    description
                      "Message Digest 5";
                  }
                  enum "hmac-sha-1-96" {
                    value 1;
                    description
                      "Hash-based Message Authentication Code (SHA1) (96 bits)";
                  }
                  enum "aes-128-cmac-96" {
                    value 2;
                    description
                      "Cipher-based Message Authentication Code (AES128) (96 bits)";
                  }
                  enum "ao" {
                    value 3;
                    description
                      "TCP Authentication Option";
                  }
                }
                description
                  "Authentication algorithm name";
              }
    
              leaf tcpao-handling-with-digest-mismatch {
                junos:must "(!(".. authentication-key"))";
                junos:must-message "May not be configured with authentication-key";
                type enumeration {
                  enum "drop-if-no-tcpao" {
                    value 0;
                    description
                      "Drop the connection if Digest mismatched";
                  }
                  enum "allow-without-tcpao" {
                    value 1;
                    description
                      "Allow the connection establishment without TCP-AO";
                  }
                }
                description
                  "Drop or continue without TCP-AO with digest mismatch with TCP-AO";
              }
    
              leaf authentication-key-chain {
                junos:must "(!(".. authentication-key"))";
                junos:must-message "May not be configured with authentication-key";
                junos:must "("security authentication-key-chains key-chain $$")";
                junos:must-message "Referenced key-chain must be defined";
                type string {
                  length "1 .. 128";
                }
                description "Key chain name";
              }
    
              leaf-list export {
                type jt:policy-algebra;
                ordered-by user;
                description "Export policy";
              }
    
              container remove-private {
                presence "enable remove-private";
                description
                  "Remove well-known private AS numbers";
                uses apply-advanced;
    
                container all {
                  presence "enable all";
                  description
                    "Remove all private AS numbers and do not stop at the first public AS number";
                  container replace {
                    presence "enable replace";
                    description
                      "Replace private AS numbers with the BGP Group's local AS number";
                    leaf nearest {
                      type empty;
                      description
                        "Use closest public AS number to replace a private AS number";
                    }
                  }  // container replace
                }  // container all
    
                leaf no-peer-loop-check {
                  type empty;
                  description
                    "Remove peer loop-check";
                }
              }  // container remove-private
    
              leaf cluster {
                type jt:areaid;
                description "Cluster identifier";
              }
    
              leaf no-client-reflect {
                type empty;
                description
                  "Disable intracluster route redistribution";
              }
    
              leaf peer-as {
                type string {
                  junos:posix-pattern "^[0-9]+(.[0-9]+)?$";
                  junos:pattern-message "Use format 'x' or 'x.y' to specify number 'x' (Range 1 .. 4294967295) or number with higher 2 bytes 'x' (Range 0 .. 65535) and lower 2 bytes 'y' (Range 0 .. 65535) respectively";
                }
                description
                  " Autonomous system number in plain number or 'higher 16bits'.'Lower 16 bits' (asdot notation) format";
              }
    
              container local-as {
                description
                  "Local autonomous system number";
                leaf as-number {
                  type string {
                    junos:posix-pattern "^[0-9]+(.[0-9]+)?$";
                    junos:pattern-message "Use format 'x' or 'x.y' to specify number 'x' (Range 1 .. 4294967295) or number with higher 2 bytes 'x' (Range 0 .. 65535) and lower 2 bytes 'y' (Range 0 .. 65535) respectively";
                  }
                  description
                    " Autonomous system number in plain number or 'higher 16bits'.'Lower 16 bits' (asdot notation) format";
                }
    
                leaf loops {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type int32 {
                      range "1 .. 10";
                    }
                  }
                  description
                    "Maximum number of times this AS can be in an AS path";
                }
    
                leaf private {
                  type empty;
                  description
                    "Hide this local AS in paths learned from this peering";
                }
    
                leaf alias {
                  type empty;
                  description
                    "Treat this AS as an alias to the system AS";
                }
    
                leaf no-prepend-global-as {
                  type empty;
                  description
                    "Do not prepend global autonomous-system number in advertised paths";
                }
              }  // container local-as
    
              leaf ipsec-sa {
                junos:must "("security ipsec security-association $$")";
                junos:must-message "Referenced IPSec Security Association must be defined";
                type string {
                  length "1 .. 32";
                }
                description "IPSec SA name";
              }
    
              container graceful-shutdown {
                description
                  "BGP peer graceful shutdown option";
                uses apply-advanced;
    
                container receiver {
                  presence "enable receiver";
                  description
                    "BGP peer graceful-shutdown receiver";
                  uses apply-advanced;
    
                  leaf disable {
                    junos:must "(!(".. .. sender"))";
                    junos:must-message "Receiver cannot be disabled on Sender";
                    type empty;
                    description
                      "Disable graceful-shutdown receiver";
                  }
    
                  leaf local-preference {
                    type union {
                      type uint32;
                      type string {
                        pattern "<.*>|$.*";
                      }
                    }
                    description
                      "Value of receiver LOCAL_PREF path attribute";
                  }
                }  // container receiver
    
                container sender {
                  presence "enable sender";
                  description
                    "BGP peer graceful-shutdown sender";
                  uses apply-advanced;
    
                  leaf local-preference {
                    type union {
                      type uint32;
                      type string {
                        pattern "<.*>|$.*";
                      }
                    }
                    description
                      "Value of sender LOCAL_PREF path attribute";
                  }
                }  // container sender
              }  // container graceful-shutdown
    
              container shutdown {
                presence "enable shutdown";
                description "Shutdown";
                uses apply-advanced;
    
                leaf notify-message {
                  type string;
                  description
                    "Notification message";
                }
              }  // container shutdown
    
              leaf unconfigured-peer-graceful-restart {
                junos:must "(".. graceful-restart")";
                junos:must-message "unconfigured-peer-graceful-restart is only valid with 'graceful-restart'";
                type empty;
                description
                  "BGP unconfigured peer graceful restart options";
              }
    
              container graceful-restart {
                presence
                  "enable graceful-restart";
                description
                  "BGP graceful restart options";
                uses apply-advanced;
    
                choice enable-disable {
                  leaf disable {
                    type empty;
                    description
                      "Disable graceful restart";
                  }
                }  // choice enable-disable
    
                leaf restart-time {
                  junos:must "(("routing-options graceful-restart" || "fabric routing-options graceful-restart"))";
                  junos:must-message "restart-time is only valid with 'routing-options graceful-restart'";
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "1 .. 1800";
                    }
                  }
                  description
                    "Restart time used when negotiating with a peer";
                }
    
                leaf stale-routes-time {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "1 .. 1800";
                    }
                  }
                  description
                    "Maximum time for which stale routes are kept";
                }
    
                container long-lived {
                  description
                    "Long-lived graceful restart options";
                  uses apply-advanced;
    
                  container receiver {
                    description
                      "Long-lived graceful restart receiver (helper) options";
                    uses apply-advanced;
    
                    choice enable-disable {
                      leaf disable {
                        type empty;
                        description
                          "Disable receiver (helper) functionality";
                      }
                    }  // choice enable-disable
                  }  // container receiver
    
                  container advertise-to-non-llgr-neighbor {
                    presence
                      "enable advertise-to-non-llgr-neighbor";
                    description
                      "Advertise stale routes to non-LLGR neighbors";
                    uses apply-advanced;
    
                    leaf omit-no-export {
                      type empty;
                      description
                        "Do not attach no-export community to stale routes";
                    }
                  }  // container advertise-to-non-llgr-neighbor
                }  // container long-lived
    
                leaf disable-notification-extensions {
                  type empty;
                  description
                    "Disable notification extensions";
                }
    
                leaf forwarding-state-bit {
                  type enumeration {
                    enum "as-rr-client" {
                      value 0;
                      description
                        "As for a route reflector client";
                    }
                    enum "from-fib" {
                      value 1;
                      description
                        "Always use state of associated FIB(s)";
                    }
                  }
                  description
                    "Control forwarding-state flag negotiation";
                }
    
                leaf dont-help-shared-fate-bfd-down {
                  type empty;
                  description
                    "Honor BFD-Down(C=0) if GR-restart not in progress";
                }
              }  // container graceful-restart
    
              leaf include-mp-next-hop {
                type empty;
                description
                  "Include NEXT-HOP attribute in multiprotocol updates";
              }
    
              leaf disable-4byte-as {
                type empty;
                description
                  "Disable 4 byte AS capability advertisement";
              }
    
              container idle-after-switch-over {
                description
                  "Stop peer session from coming up after nonstop-routing switch-over";
                choice idle-interval {
                  leaf forever {
                    type empty;
                    description
                      "Idle the peer until the user intervenes";
                  }
                  leaf timeout {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint32 {
                        range "1 .. 4294967295";
                      }
                    }
                    description
                      "Timeout value, in seconds, for starting peer after switch over";
                  }
                }  // choice idle-interval
              }  // container idle-after-switch-over
    
              container outbound-route-filter {
                junos:must "(!("system processes routing bgp update-threading"))";
                junos:must-message "Can't be configured together with update-threading";
                description
                  "Dynamically negotiated cooperative route filtering";
                uses apply-advanced;
    
                leaf bgp-orf-cisco-mode {
                  type empty;
                  description
                    "Using BGP ORF capability code 130 and Prefix ORF type 128";
                }
    
                container extended-community {
                  status deprecated;
                  description
                    "Extended community filtering";
                  uses apply-advanced;
    
                  choice accept-choice {
                    leaf accept {
                      type empty;
                      description
                        "Honor remote requests for extended community ORF";
                    }
                    leaf no-accept {
                      type empty;
                      description
                        "Don't honor remote requests for extended community ORF";
                    }
                  }  // choice accept-choice
    
                  leaf vrf-filter {
                    type empty;
                    description
                      "Request remote filtering using locally configured VRF import targets";
                  }
                }  // container extended-community
    
                container prefix-based {
                  presence "enable prefix-based";
                  description
                    "Prefix-based outbound route filtering";
                  uses apply-advanced;
    
                  container accept {
                    presence "enable accept";
                    description
                      "Honor Prefix-based ORFs from remote peers";
                    uses apply-advanced;
    
                    leaf inet {
                      type empty;
                      description
                        "Honor IPv4 prefix filters";
                    }
    
                    leaf inet6 {
                      type empty;
                      description
                        "Honor IPv6 prefix filters";
                    }
                  }  // container accept
                }  // container prefix-based
              }  // container outbound-route-filter
    
              container message-batching {
                status deprecated;
                description
                  "DEPRECATED - Batching of outgoing messages";
                uses apply-advanced;
    
                choice enable-disable {
                  leaf enable {
                    type empty;
                    description
                      "Enable parameter";
                  }
                  leaf disable {
                    type empty;
                    description
                      "Disable parameter";
                  }
                }  // choice enable-disable
    
                leaf interval {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "100 .. 1000";
                    }
                  }
                  units "milliseconds";
                  default "250";
                  description
                    "DEPRECATED - Interval over which to batch messages";
                }
              }  // container message-batching
    
              container multipath {
                presence "enable multipath";
                description
                  "Allow load sharing among multiple BGP paths";
                uses apply-advanced;
    
                leaf disable {
                  type empty;
                  description
                    "Disable Multipath";
                }
    
                leaf multiple-as {
                  type empty;
                  description
                    "Use paths received from different ASs";
                }
    
                leaf allow-protection {
                  type empty;
                  description
                    "Allow protection for multipath legs";
                }
    
                leaf pause-computation-during-churn {
                  type empty;
                  description
                    "Pause multipath job to absorb churn";
                }
    
                leaf list-nexthop {
                  type empty;
                  description
                    "Use List-NH for homogenous nexthop-set also";
                }
              }  // container multipath
    
              leaf tcp-mss {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "1 .. 4096";
                  }
                }
                description
                  "Maximum TCP segment size";
              }
    
              leaf bgp-identifier {
                type jt:ipv4addr;
                description "BGP Identifier";
              }
    
              leaf tcp-aggressive-transmission {
                type empty;
                description
                  "Enable aggressive transmission of pure TCP ACKs and retransmissions";
              }
    
              container bmp {
                description
                  "Specific settings to override the routing-options settings";
                uses apply-advanced;
    
                leaf monitor {
                  type enumeration {
                    enum "enable" {
                      value 0;
                      description
                        "Enable monitoring of BGP peer(s)";
                    }
                    enum "disable" {
                      value 1;
                      description
                        "Disable monitoring of BGP peer(s)";
                    }
                  }
                  description
                    "Enable/Disable monitoring";
                }
    
                container route-monitoring {
                  description
                    "Control route monitoring settings";
                  uses apply-advanced;
    
                  leaf none {
                    junos:must "((!(".. pre-policy") && (!(".. post-policy") && !(".. rib-out"))))";
                    junos:must-message "May not be configured with pre-policy or post-policy or rib-out";
                    type empty;
                    description
                      "Do not send route monitoring messages";
                  }
    
                  container pre-policy {
                    presence "enable pre-policy";
                    description
                      "Send pre-policy route monitoring messages";
                    leaf exclude-non-feasible {
                      type empty;
                      description
                        "Exclude looped routes, etc";
                    }
                  }  // container pre-policy
    
                  container post-policy {
                    presence
                      "enable post-policy";
                    description
                      "Send post-policy route monitoring messages";
                    leaf exclude-non-eligible {
                      type empty;
                      description
                        "Exclude unresolved routes, etc.";
                    }
                  }  // container post-policy
    
                  container rib-out {
                    junos:must "((!("system processes routing bgp update-threading") || "system processes routing bgp rib-sharding"))";
                    junos:must-message "Update threading can't be configured together with bmp rib-out monitoring";
                    presence "enable rib-out";
                    description
                      "Send adj-ribs-out route monitoring messages";
                    leaf pre-policy {
                      type empty;
                      description
                        "Send pre-policy adj-ribs-out route monitoring messages";
                    }
    
                    leaf post-policy {
                      type empty;
                      description
                        "Send post-policy adj-ribs-out route monitoring messages";
                    }
                  }  // container rib-out
                }  // container route-monitoring
              }  // container bmp
    
              container advertise-bgp-static {
                presence
                  "enable advertise-bgp-static";
                description
                  "Advertise bgp-static routes";
                uses apply-advanced;
    
                leaf-list policy {
                  type jt:policy-algebra;
                  ordered-by user;
                  description
                    "Static route advertisement policy";
                }
              }  // container advertise-bgp-static
    
              leaf add-path-display-ipv4-address {
                type empty;
                description
                  "Display add-path path-id in IPv4 address format";
              }
    
              container bfd-liveness-detection {
                description
                  "Bidirectional Forwarding Detection (BFD) options";
                uses apply-advanced;
    
                leaf version {
                  type enumeration {
                    enum "0" {
                      value 0;
                      description
                        "BFD version 0 (deprecated)";
                    }
                    enum "1" {
                      value 1;
                      description
                        "BFD version 1";
                    }
                    enum "automatic" {
                      value 2;
                      description
                        "Choose BFD version automatically";
                    }
                  }
                  default "automatic";
                  description
                    "BFD protocol version number";
                }
    
                leaf minimum-interval {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "1 .. 255000";
                    }
                  }
                  units "milliseconds";
                  description
                    "Minimum transmit and receive interval";
                }
    
                leaf minimum-transmit-interval {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "1 .. 255000";
                    }
                  }
                  units "milliseconds";
                  status deprecated;
                  description
                    "Minimum transmit interval";
                }
    
                leaf minimum-receive-interval {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "1 .. 255000";
                    }
                  }
                  units "milliseconds";
                  description
                    "Minimum receive interval";
                }
    
                leaf multiplier {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "1 .. 255";
                    }
                  }
                  default "3";
                  description
                    "Detection time multiplier";
                }
    
                choice adaptation-choice {
                  leaf no-adaptation {
                    type empty;
                    description
                      "Disable adaptation";
                  }
                }  // choice adaptation-choice
    
                container transmit-interval {
                  description
                    "Transmit-interval options";
                  uses apply-advanced;
    
                  leaf minimum-interval {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint32 {
                        range "1 .. 255000";
                      }
                    }
                    units "milliseconds";
                    description
                      "Minimum transmit interval";
                  }
    
                  leaf threshold {
                    type union {
                      type uint32;
                      type string {
                        pattern "<.*>|$.*";
                      }
                    }
                    units "milliseconds";
                    description
                      "High transmit interval triggering a trap";
                  }
                }  // container transmit-interval
    
                container detection-time {
                  description
                    "Detection-time options";
                  uses apply-advanced;
    
                  leaf threshold {
                    type union {
                      type uint32;
                      type string {
                        pattern "<.*>|$.*";
                      }
                    }
                    units "milliseconds";
                    description
                      "High detection-time triggering a trap";
                  }
                }  // container detection-time
    
                container authentication {
                  description
                    "Authentication options";
                  uses apply-advanced;
    
                  leaf key-chain {
                    junos:must "(".. algorithm")";
                    junos:must-message "May not be configured without algorithm";
                    junos:must "("security authentication-key-chains key-chain $$")";
                    junos:must-message "Referenced key-chain must be defined";
                    type string;
                    description "Key chain name";
                  }
    
                  leaf algorithm {
                    junos:must "(".. key-chain")";
                    junos:must-message "May not be configured without key-chain";
                    type enumeration {
                      enum "simple-password" {
                        value 0;
                        description
                          "Simple password";
                      }
                      enum "keyed-md5" {
                        value 1;
                        description
                          "Keyed message Digest 5";
                      }
                      enum
                        "meticulous-keyed-md5" {
                        value 2;
                        description
                          "Meticulous keyed message Digest 5";
                      }
                      enum "keyed-sha-1" {
                        value 3;
                        description
                          "Keyed secure hash algorithm (SHA1) ";
                      }
                      enum
                        "meticulous-keyed-sha-1" {
                        value 4;
                        description
                          "Meticulous keyed secure hash algorithm (SHA1) ";
                      }
                    }
                    description "Algorithm name";
                  }
    
                  leaf loose-check {
                    type empty;
                    description
                      "Verify authentication only if authentication is negotiated";
                  }
                }  // container authentication
    
                leaf session-mode {
                  type enumeration {
                    enum "automatic" {
                      value 0;
                      description
                        "Choose session-mode automatically";
                    }
                    enum "single-hop" {
                      value 1;
                      description
                        "Use single-hop";
                    }
                    enum "multihop" {
                      value 2;
                      description "Use multihop";
                    }
                  }
                  default "automatic";
                  description
                    "BFD single-hop or multihop session-mode";
                }
    
                leaf holddown-interval {
                  junos:must "(!(".. .. .. type internal"))";
                  junos:must-message "bfd holddown-interval is only valid for EBGP.";
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "0 .. 255000";
                    }
                  }
                  units "milliseconds";
                  description
                    "Time to hold the session-UP notification to the client";
                }
              }  // container bfd-liveness-detection
    
              leaf as-override {
                type empty;
                description
                  "Replace neighbor AS number with our AS number";
              }
    
              container egress-te-node-segment {
                description
                  "Configure BGP-Peer-Node segment";
                uses apply-advanced;
    
                container label {
                  description
                    "BGP-Peer-Node SID label from static label pool";
                  uses apply-advanced;
    
                  leaf label-value {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint32 {
                        range "16 .. 1048575";
                      }
                    }
                    description
                      "BGP-Peer-Node SID label value from static label pool";
                  }
                }  // container label
    
                container egress-te-set {
                  description
                    "Configure as a member of a SET segment";
                  uses apply-advanced;
    
                  leaf set-name {
                    junos:must "("protocols bgp egress-te-set-segment $$")";
                    junos:must-message "protocols bgp egress-te-set-segment not configured";
                    type string {
                      junos:posix-pattern "^.{1,64}$";
                      junos:pattern-message "Must be a string of 64 characters or less";
                    }
                    description "Set name";
                  }
    
                  leaf weight {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint32 {
                        range "1 .. 255";
                      }
                    }
                    description
                      "Weight for set segment";
                  }
                }  // container egress-te-set
    
                container egress-te-backup-segment {
                  description
                    "Backup segment for FRR";
                  uses apply-advanced;
    
                  container label {
                    description
                      "Backup segment label from static label pool";
                    uses apply-advanced;
    
                    leaf label-value {
                      type union {
                        type string {
                          pattern "<.*>|$.*";
                        }
                        type uint32 {
                          range "16 .. 1048575";
                        }
                      }
                      description
                        "Backup segment label value from static label pool";
                    }
                  }  // container label
                }  // container egress-te-backup-segment
    
                container egress-te-backup-ip-forward {
                  presence
                    "enable egress-te-backup-ip-forward";
                  description
                    "Use IP-forward backup path for Egress TE";
                  uses apply-advanced;
    
                  leaf instance-name {
                    type string {
                      junos:posix-pattern "!^((__.*__)|(all)|(.*[ ].*)|("")|(.{129,}))$";
                      junos:pattern-message "Must be a non-reserved string of 128 characters or less with no spaces.";
                    }
                    description
                      "Routing-instance to use as IP forward backup-path";
                  }
                }  // container egress-te-backup-ip-forward
              }  // container egress-te-node-segment
    
              list egress-te-adj-segment {
                key "name";
                description
                  "Configure BGP-Peer-Adj segment";
                leaf name {
                  type string {
                    junos:posix-pattern "^.{1,64}$";
                    junos:pattern-message "Must be a string of 64 characters or less";
                  }
                  description
                    "The BGP-Adj-Set segment name";
                }
    
                uses apply-advanced;
    
                container label {
                  junos:must "(".. next-hop")";
                  junos:must-message "The 'egress-te-adj-segment next-hop' must be configured";
                  description
                    "BGP-Peer-Adj SID label from static label pool";
                  uses apply-advanced;
    
                  leaf label-value {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint32 {
                        range "16 .. 1048575";
                      }
                    }
                    description
                      "BGP-Peer-Adj SID label value from static label pool";
                  }
                }  // container label
    
                container next-hop {
                  junos:must "(".. label")";
                  junos:must-message "The 'egress-te-adj-segment label' must be configured";
                  description
                    "Address of directly connected next-hop to use";
                  uses apply-advanced;
    
                  leaf next-hop-addr {
                    type jt:ipaddr;
                    description
                      "Address of directly connected next-hop";
                  }
                }  // container next-hop
    
                container egress-te-set {
                  description
                    "Configure as a member of a SET segment";
                  uses apply-advanced;
    
                  leaf set-name {
                    junos:must "("protocols bgp egress-te-set-segment $$")";
                    junos:must-message "protocols bgp egress-te-set-segment not configured";
                    type string {
                      junos:posix-pattern "^.{1,64}$";
                      junos:pattern-message "Must be a string of 64 characters or less";
                    }
                    description "Set name";
                  }
    
                  leaf weight {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint32 {
                        range "1 .. 255";
                      }
                    }
                    description
                      "Weight for set segment";
                  }
                }  // container egress-te-set
    
                container egress-te-backup-segment {
                  description
                    "Backup segment for FRR";
                  uses apply-advanced;
    
                  container label {
                    description
                      "Backup segment label from static label pool";
                    uses apply-advanced;
    
                    leaf label-value {
                      type union {
                        type string {
                          pattern "<.*>|$.*";
                        }
                        type uint32 {
                          range "16 .. 1048575";
                        }
                      }
                      description
                        "Backup segment label value from static label pool";
                    }
                  }  // container label
                }  // container egress-te-backup-segment
    
                container egress-te-backup-ip-forward {
                  presence
                    "enable egress-te-backup-ip-forward";
                  description
                    "Use IP-forward backup path for Egress TE";
                  uses apply-advanced;
    
                  leaf instance-name {
                    type string {
                      junos:posix-pattern "!^((__.*__)|(all)|(.*[ ].*)|("")|(.{129,}))$";
                      junos:pattern-message "Must be a non-reserved string of 128 characters or less with no spaces.";
                    }
                    description
                      "Routing-instance to use as IP forward backup-path";
                  }
                }  // container egress-te-backup-ip-forward
    
                container te-link-attribute {
                  presence
                    "enable te-link-attribute";
                  description "Link attribute";
                  uses apply-advanced;
    
                  leaf te-metric {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint32 {
                        range "1 .. 4294967295";
                      }
                    }
                    default "1";
                    description
                      "TE Metric value";
                  }
    
                  leaf igp-metric {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint32 {
                        range "1 .. 16777215";
                      }
                    }
                    default "1";
                    description
                      "IGP Metric value";
                  }
    
                  leaf-list admin-group {
                    type string;
                    max-elements 16;
                    ordered-by user;
                    description
                      "Administrative groups";
                  }
                }  // container te-link-attribute
              }  // list egress-te-adj-segment
    
              leaf vpn-apply-export {
                type empty;
                description
                  "Apply BGP export policy when exporting VPN routes";
              }
    
              container egress-te {
                presence "enable egress-te";
                description
                  "Use Egress Peering traffic engineering";
                uses apply-advanced;
    
                leaf install-address {
                  type jt:ipaddr;
                  description
                    "Address to use in egress-te created inet route";
                }
    
                container rib {
                  description
                    "Select primary table for Egress-TE routes";
                  uses apply-advanced;
    
                  leaf inet.0 {
                    type empty;
                    description
                      "Install Egress-TE routes in inet.0";
                  }
    
                  leaf inet6.0 {
                    type empty;
                    description
                      "Install Egress-TE routes in inet6.0";
                  }
                }  // container rib
    
                leaf no-install {
                  type empty;
                  description
                    "Avoid installation to FIB or resolving over";
                }
    
                leaf-list import {
                  type jt:policy-algebra;
                  ordered-by user;
                  description
                    "Import policy to set attributes";
                }
    
                leaf backup-path {
                  junos:must "("protocols bgp egress-te-backup-paths template $$")";
                  junos:must-message "bgp egress-te-backup-paths template not configured";
                  type string {
                    junos:posix-pattern "^.{1,64}$";
                    junos:pattern-message "Must be a string of 64 characters or less";
                  }
                  description
                    "The 'egress-te-backup-paths template' to use for this peer";
                }
              }  // container egress-te
    
              leaf advertise-prefix-sid {
                type empty;
                description
                  "Advertise prefix sid to E-BGP peers";
              }
    
              leaf accept-prefix-sid {
                type empty;
                description
                  "Accept prefix sid from E-BGP peers";
              }
    
              leaf advertise-srgb {
                type empty;
                description "Advertise SRGB TLV";
              }
            }  // list neighbor
    
            leaf vpn-apply-export {
              type empty;
              description
                "Apply BGP export policy when exporting VPN routes";
            }
    
            container egress-te {
              presence "enable egress-te";
              description
                "Use Egress Peering traffic engineering";
              uses apply-advanced;
    
              leaf install-address {
                type jt:ipaddr;
                description
                  "Address to use in egress-te created inet route";
              }
    
              container rib {
                description
                  "Select primary table for Egress-TE routes";
                uses apply-advanced;
    
                leaf inet.0 {
                  type empty;
                  description
                    "Install Egress-TE routes in inet.0";
                }
    
                leaf inet6.0 {
                  type empty;
                  description
                    "Install Egress-TE routes in inet6.0";
                }
              }  // container rib
    
              leaf no-install {
                type empty;
                description
                  "Avoid installation to FIB or resolving over";
              }
    
              leaf-list import {
                type jt:policy-algebra;
                ordered-by user;
                description
                  "Import policy to set attributes";
              }
    
              leaf backup-path {
                junos:must "("protocols bgp egress-te-backup-paths template $$")";
                junos:must-message "bgp egress-te-backup-paths template not configured";
                type string {
                  junos:posix-pattern "^.{1,64}$";
                  junos:pattern-message "Must be a string of 64 characters or less";
                }
                description
                  "The 'egress-te-backup-paths template' to use for this peer";
              }
            }  // container egress-te
    
            leaf advertise-prefix-sid {
              type empty;
              description
                "Advertise prefix sid to E-BGP peers";
            }
    
            leaf accept-prefix-sid {
              type empty;
              description
                "Accept prefix sid from E-BGP peers";
            }
    
            leaf advertise-srgb {
              type empty;
              description "Advertise SRGB TLV";
            }
          }  // list group
    
          container traffic-statistics-labeled-path {
            presence
              "enable traffic-statistics-labeled-path";
            description
              "Collect periodic ingress labeled statistics for BGP label-switched paths ";
            uses apply-advanced;
    
            container file {
              description
                "Statistics file options";
              leaf filename {
                type string {
                  junos:posix-pattern "![/ %]";
                  junos:pattern-message "Must not contain '/', % or a space";
                  length "1 .. 1024";
                }
                description
                  "Name of file in which to write trace information";
              }
    
              leaf replace {
                type empty;
                status deprecated;
                description
                  "Replace trace file rather than appending to it";
              }
    
              leaf size {
                type string;
                description
                  "Maximum trace file size";
              }
    
              leaf files {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "2 .. 1000";
                  }
                }
                default "10";
                description
                  "Maximum number of trace files";
              }
    
              leaf no-stamp {
                type empty;
                status deprecated;
                description
                  "Do not timestamp trace file";
              }
    
              choice world-readable-choice {
                leaf world-readable {
                  type empty;
                  description
                    "Allow any user to read the log file";
                }
                leaf no-world-readable {
                  type empty;
                  description
                    "Don't allow any user to read the log file";
                }
              }  // choice world-readable-choice
            }  // container file
    
            leaf interval {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type int32 {
                  range "60 .. 65535";
                }
              }
              units "seconds";
              description
                "Time interval to collect statistics";
            }
          }  // container traffic-statistics-labeled-path
    
          container source-packet-routing {
            description
              "Enable Source Packet Routing (SPRING)";
            uses apply-advanced;
    
            container srgb {
              junos:must "(!(".. .. .. .. protocols mpls disable"))";
              junos:must-message "SPRING configuration is not allowed with 'protocols mpls disable'";
              junos:must "(".. .. .. .. protocols mpls ")";
              junos:must-message "SPRING configuration is not allowed without 'protocols mpls'";
              description
                "Set the SRGB global block in SPRING";
              leaf start-label {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32;
                }
                description
                  "Start range for SRGB label block";
              }
    
              leaf index-range {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32;
                }
                description
                  "Index to the SRGB start label block";
              }
            }  // container srgb
    
            container srv6 {
              description
                "Enable IPv6 Segment Routing (SRv6)";
              uses apply-advanced;
    
              list locator {
                key "name";
                ordered-by user;
                description "SRv6 Locator";
                leaf name {
                  junos:must "("routing-options source-packet-routing srv6 locator $$")";
                  junos:must-message "Referenced srv6 locator must be defined";
                  type string;
                  description "Locator name";
                }
    
                uses apply-advanced;
    
                leaf end-dt4-sid {
                  type jt:ipv6addr;
                  description
                    "End dt4 sid with 128 bit address";
                }
    
                leaf end-dt6-sid {
                  type jt:ipv6addr;
                  description
                    "End dt6 sid with 128 bit address";
                }
              }  // list locator
            }  // container srv6
          }  // container source-packet-routing
    
          choice enable-disable {
            leaf disable {
              type empty;
              description "Disable BGP";
            }
          }  // choice enable-disable
    
          choice precision-timers-choice {
            leaf precision-timers {
              type empty;
              description
                "Use precision timers for scheduling keepalives";
            }
            leaf no-precision-timers {
              type empty;
              description
                "Don't use precision timers for scheduling keepalives";
            }
          }  // choice precision-timers-choice
    
          container snmp-options {
            description
              "Customize SNMP behaviors specifically for BGP MIBs";
            uses apply-advanced;
    
            leaf backward-traps-only-from-established {
              type empty;
              description
                "Limit traps for backward transitions to only those moving from Established state.";
            }
    
            leaf emit-inet-address-length-in-oid {
              type empty;
              description
                "Emit Length in OID for InetAddress MIB type.";
            }
          }  // container snmp-options
    
          leaf route-age-bgp-view {
            type empty;
            description
              "Maintain BGP route's age based on Update messages only";
          }
    
          leaf prioritize-route-queueing {
            type empty;
            description
              "Let route-queue building happen without getting throttled";
          }
    
          container traceoptions {
            description "Trace options for BGP";
            uses apply-advanced;
    
            container file {
              description "Trace file options";
              leaf filename {
                type string {
                  junos:posix-pattern "![/ %]";
                  junos:pattern-message "Must not contain '/', % or a space";
                  length "1 .. 1024";
                }
                description
                  "Name of file in which to write trace information";
              }
    
              leaf replace {
                type empty;
                status deprecated;
                description
                  "Replace trace file rather than appending to it";
              }
    
              leaf size {
                type string;
                description
                  "Maximum trace file size";
              }
    
              leaf files {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "2 .. 1000";
                  }
                }
                default "10";
                description
                  "Maximum number of trace files";
              }
    
              leaf no-stamp {
                type empty;
                status deprecated;
                description
                  "Do not timestamp trace file";
              }
    
              choice world-readable-choice {
                leaf world-readable {
                  type empty;
                  description
                    "Allow any user to read the log file";
                }
                leaf no-world-readable {
                  type empty;
                  description
                    "Don't allow any user to read the log file";
                }
              }  // choice world-readable-choice
            }  // container file
    
            list flag {
              key "name";
              ordered-by user;
              description "Tracing parameters";
              leaf name {
                type enumeration {
                  enum "damping" {
                    value 0;
                    description
                      "Trace BGP damping information";
                  }
                  enum "packets" {
                    value 1;
                    description
                      "Trace all BGP protocol packets";
                  }
                  enum "open" {
                    value 2;
                    description
                      "Trace BGP open packets";
                  }
                  enum "update" {
                    value 3;
                    description
                      "Trace BGP update packets";
                  }
                  enum "keepalive" {
                    value 4;
                    description
                      "Trace BGP keepalive packets";
                  }
                  enum "refresh" {
                    value 5;
                    description
                      "Trace BGP refresh packets";
                  }
                  enum "nsr-synchronization" {
                    value 6;
                    description
                      "Trace NSR synchronization events";
                  }
                  enum "bfd" {
                    value 7;
                    description
                      "Trace BFD events";
                  }
                  enum "4byte-as" {
                    value 8;
                    description
                      "Trace 4 byte AS events";
                  }
                  enum "add-path" {
                    value 9;
                    description
                      "Trace add-path events";
                  }
                  enum "graceful-restart" {
                    value 10;
                    description
                      "Trace Graceful Restart events";
                  }
                  enum "egress-te" {
                    value 11;
                    description
                      "Egress Peering Traffic-Engineering events";
                  }
                  enum "thread-io" {
                    value 12;
                    description
                      "Trace threaded I/O processing";
                  }
                  enum "sharding" {
                    value 13;
                    description
                      "Trace BGP rib sharding";
                  }
                  enum "thread-update-io" {
                    value 14;
                    description
                      "Trace threaded update I/O processing";
                  }
                  enum "route-validation" {
                    value 15;
                    description
                      "Trace route validation";
                  }
                  enum "ipsec" {
                    value 16;
                    description "Trace ipsec";
                  }
                  enum "route" {
                    value 17;
                    description
                      "Trace routing information";
                  }
                  enum "normal" {
                    value 18;
                    description
                      "Trace normal events";
                  }
                  enum "general" {
                    value 19;
                    description
                      "Trace general events";
                  }
                  enum "state" {
                    value 20;
                    description
                      "Trace state transitions";
                  }
                  enum "policy" {
                    value 21;
                    description
                      "Trace policy processing";
                  }
                  enum "task" {
                    value 22;
                    description
                      "Trace routing protocol task processing";
                  }
                  enum "timer" {
                    value 23;
                    description
                      "Trace routing protocol timer processing";
                  }
                  enum "all" {
                    value 24;
                    description
                      "Trace everything";
                  }
                }
              }
    
              leaf send {
                type empty;
                description
                  "Trace transmitted packets";
              }
    
              leaf receive {
                type empty;
                description
                  "Trace received packets";
              }
    
              leaf detail {
                type empty;
                description
                  "Trace detailed information";
              }
    
              leaf disable {
                type empty;
                description
                  "Disable this trace flag";
              }
    
              container filter {
                presence "enable filter";
                description
                  "Filter to apply to this flag";
                uses bgp_filter_obj;
              }  // container filter
            }  // list flag
          }  // container traceoptions
    
          leaf description {
            type string {
              length "1 .. 255";
            }
            description "Text description";
          }
    
          container metric-out {
            description
              "Route metric sent in MED";
            choice metric_param {
              leaf metric-value {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "0 .. 4294967295";
                  }
                }
                description "Metric value";
              }
              container minimum-igp {
                presence "enable minimum-igp";
                description
                  "Track the minimum IGP metric";
                leaf metric-offset {
                  type union {
                    type int32;
                    type string {
                      pattern "<.*>|$.*";
                    }
                  }
                  description
                    "Metric offset for MED";
                }
              }  // container minimum-igp
              container igp {
                presence "enable igp";
                description
                  "Track the IGP metric";
                leaf metric-offset {
                  type union {
                    type int32;
                    type string {
                      pattern "<.*>|$.*";
                    }
                  }
                  description
                    "Metric offset for MED";
                }
    
                leaf delay-med-update {
                  type empty;
                  description
                    "Delay updating MED when IGP metric increases";
                }
              }  // container igp
              container effective-aigp {
                presence "enable effective-aigp";
                description
                  "Track the effective AIGP metric";
                leaf metric-offset {
                  type union {
                    type int32;
                    type string {
                      pattern "<.*>|$.*";
                    }
                  }
                  description
                    "Metric offset for MED";
                }
              }  // container effective-aigp
              container minimum-effective-aigp {
                presence
                  "enable minimum-effective-aigp";
                description
                  "Track the minimum effective AIGP metric";
                leaf metric-offset {
                  type union {
                    type int32;
                    type string {
                      pattern "<.*>|$.*";
                    }
                  }
                  description
                    "Metric offset for MED";
                }
              }  // container minimum-effective-aigp
            }  // choice metric_param
          }  // container metric-out
    
          container multihop {
            presence "enable multihop";
            description
              "Configure an EBGP multihop session";
            uses apply-advanced;
    
            leaf ttl {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint8 {
                  range "1 .. 255";
                }
              }
              description
                "TTL value for the session";
            }
    
            leaf no-nexthop-change {
              type empty;
              description
                "Do not change next hop to self in advertisements";
            }
          }  // container multihop
    
          leaf route-server-client {
            type empty;
            description
              "Enable route server client behavior";
          }
    
          leaf accept-remote-nexthop {
            type empty;
            description
              "Allow import policy to specify a non-directly connected next-hop";
          }
    
          leaf preference {
            type union {
              type uint32;
              type string {
                pattern "<.*>|$.*";
              }
            }
            description "Preference value";
          }
    
          leaf local-preference {
            type union {
              type uint32;
              type string {
                pattern "<.*>|$.*";
              }
            }
            description
              "Value of LOCAL_PREF path attribute";
          }
    
          leaf local-address {
            type jt:ipaddr;
            description
              "Address of local end of BGP session";
          }
    
          leaf local-interface {
            type union {
              type jt:interface-name;
              type string {
                pattern "<.*>|$.*";
              }
            }
            description
              "Local interface for IPv6 link local EBGP peering";
          }
    
          leaf forwarding-context {
            type string {
              junos:posix-pattern "!^((__.*__)|(all)|(.*[ ].*)|("")|(.{129,}))$";
              junos:pattern-message "Must be a non-reserved string of 128 characters or less with no spaces.";
            }
            description
              "Routing-instance used for data-forwarding and transport-session";
          }
    
          leaf hold-time {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "0 .. 65535";
              }
            }
            description
              "Hold time used when negotiating with a peer";
          }
    
          leaf minimum-hold-time {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "3 .. 65535";
              }
            }
            description
              "Minimum hold time accepted from the peer";
          }
    
          leaf passive {
            type empty;
            description
              "Do not send open messages to a peer";
          }
    
          leaf advertise-inactive {
            type empty;
            description
              "Advertise inactive routes";
          }
    
          choice advertise-peer-as-choice {
            leaf advertise-peer-as {
              type empty;
              description
                "Advertise routes received from the same autonomous system";
            }
            leaf no-advertise-peer-as {
              type empty;
              description
                "Don't advertise routes received from the same autonomous system";
            }
          }  // choice advertise-peer-as-choice
    
          container advertise-external {
            presence "enable advertise-external";
            description
              "Advertise best external routes";
            leaf conditional {
              type empty;
              description
                "Route matches active route upto med-comparison rule";
            }
          }  // container advertise-external
    
          leaf keep {
            type enumeration {
              enum "all" {
                value 0;
                description "Retain all routes";
              }
              enum "none" {
                value 1;
                description "Retain no routes";
              }
            }
            description
              "How to retain routes in the routing table";
          }
    
          leaf rfc6514-compliant-safi129 {
            type empty;
            description
              "Compliant with RFC6514 SAFI129 format";
          }
    
          leaf no-aggregator-id {
            type empty;
            description
              "Set router ID in aggregator path attribute to 0";
          }
    
          leaf mtu-discovery {
            type empty;
            description
              "Enable TCP path MTU discovery";
          }
    
          leaf enforce-first-as {
            type empty;
            description
              "Enforce first AS in AS-path is the neighbor's AS";
          }
    
          leaf out-delay {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "0 .. 65535";
              }
            }
            description
              "How long before exporting routes from routing table";
          }
    
          leaf ttl {
            junos:must "((!(".. .. type internal") && !(".. multihop")))";
            junos:must-message "This option is valid only for single-hop EBGP neighbor";
            type enumeration {
              enum "1" {
                value 0;
              }
              enum "255" {
                value 1;
              }
            }
            description
              "TTL value for the single-hop peer";
          }
    
          leaf log-updown {
            type empty;
            description
              "Log a message for peer state transitions";
          }
    
          leaf damping {
            type empty;
            description
              "Enable route flap damping";
          }
    
          leaf-list import {
            type jt:policy-algebra;
            ordered-by user;
            description "Import policy";
          }
    
          leaf-list nlri {
            type enumeration {
              enum "unicast" {
                value 0;
                status deprecated;
                description
                  "Include unicast NLRI";
              }
              enum "multicast" {
                value 1;
                status deprecated;
                description
                  "Include multicast NLRI";
              }
              enum "any" {
                value 2;
                status deprecated;
                description
                  "Include any kind of NLRI";
              }
            }
            ordered-by user;
            status deprecated;
            description
              "NLRI type to include in updates";
          }
    
          container bgp-error-tolerance {
            presence
              "enable bgp-error-tolerance";
            description
              "Handle BGP malformed updates softly";
            uses apply-advanced;
    
            leaf malformed-update-log-interval {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "10 .. 65535";
                }
              }
              units "seconds";
              default "300";
              description
                "Time used when logging malformed update";
            }
    
            choice malformed-routes-limit-choice {
              leaf malformed-route-limit {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "0 .. 4294967295";
                  }
                }
                default "1000";
                description
                  "Maximum number of malformed routes from a peer";
              }
              leaf no-malformed-route-limit {
                type empty;
                description
                  "No malformed route limit";
              }
            }  // choice malformed-routes-limit-choice
          }  // container bgp-error-tolerance
    
          leaf authentication-key {
            type string {
              length "1 .. 126";
            }
            description "MD5 authentication key";
          }
    
          leaf authentication-algorithm {
            junos:must "(".. authentication-key-chain")";
            junos:must-message "May not be configured without authentication-key-chain";
            junos:must "(!(".. authentication-key"))";
            junos:must-message "May not be configured with authentication-key";
            type enumeration {
              enum "md5" {
                value 0;
                description "Message Digest 5";
              }
              enum "hmac-sha-1-96" {
                value 1;
                description
                  "Hash-based Message Authentication Code (SHA1) (96 bits)";
              }
              enum "aes-128-cmac-96" {
                value 2;
                description
                  "Cipher-based Message Authentication Code (AES128) (96 bits)";
              }
              enum "ao" {
                value 3;
                description
                  "TCP Authentication Option";
              }
            }
            default "hmac-sha-1-96";
            description
              "Authentication algorithm name";
          }
    
          leaf tcpao-handling-with-digest-mismatch {
            junos:must "(!(".. authentication-key"))";
            junos:must-message "May not be configured with authentication-key";
            type enumeration {
              enum "drop-if-no-tcpao" {
                value 0;
                description
                  "Drop the connection if Digest mismatched";
              }
              enum "allow-without-tcpao" {
                value 1;
                description
                  "Allow the connection establishment without TCP-AO";
              }
            }
            description
              "Drop or continue without TCP-AO with digest mismatch with TCP-AO";
          }
    
          leaf authentication-key-chain {
            junos:must "(!(".. authentication-key"))";
            junos:must-message "May not be configured with authentication-key";
            junos:must "("security authentication-key-chains key-chain $$")";
            junos:must-message "Referenced key-chain must be defined";
            type string {
              length "1 .. 128";
            }
            description "Key chain name";
          }
    
          leaf-list export {
            type jt:policy-algebra;
            ordered-by user;
            description "Export policy";
          }
    
          container remove-private {
            presence "enable remove-private";
            description
              "Remove well-known private AS numbers";
            uses apply-advanced;
    
            container all {
              presence "enable all";
              description
                "Remove all private AS numbers and do not stop at the first public AS number";
              container replace {
                presence "enable replace";
                description
                  "Replace private AS numbers with the BGP Group's local AS number";
                leaf nearest {
                  type empty;
                  description
                    "Use closest public AS number to replace a private AS number";
                }
              }  // container replace
            }  // container all
    
            leaf no-peer-loop-check {
              type empty;
              description
                "Remove peer loop-check";
            }
          }  // container remove-private
    
          leaf cluster {
            type jt:areaid;
            description "Cluster identifier";
          }
    
          leaf no-client-reflect {
            type empty;
            description
              "Disable intracluster route redistribution";
          }
    
          leaf peer-as {
            type string {
              junos:posix-pattern "^[0-9]+(.[0-9]+)?$";
              junos:pattern-message "Use format 'x' or 'x.y' to specify number 'x' (Range 1 .. 4294967295) or number with higher 2 bytes 'x' (Range 0 .. 65535) and lower 2 bytes 'y' (Range 0 .. 65535) respectively";
            }
            description
              " Autonomous system number in plain number or 'higher 16bits'.'Lower 16 bits' (asdot notation) format";
          }
    
          container local-as {
            description
              "Local autonomous system number";
            leaf as-number {
              type string {
                junos:posix-pattern "^[0-9]+(.[0-9]+)?$";
                junos:pattern-message "Use format 'x' or 'x.y' to specify number 'x' (Range 1 .. 4294967295) or number with higher 2 bytes 'x' (Range 0 .. 65535) and lower 2 bytes 'y' (Range 0 .. 65535) respectively";
              }
              description
                " Autonomous system number in plain number or 'higher 16bits'.'Lower 16 bits' (asdot notation) format";
            }
    
            leaf loops {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type int32 {
                  range "1 .. 10";
                }
              }
              description
                "Maximum number of times this AS can be in an AS path";
            }
    
            leaf private {
              type empty;
              description
                "Hide this local AS in paths learned from this peering";
            }
    
            leaf alias {
              type empty;
              description
                "Treat this AS as an alias to the system AS";
            }
    
            leaf no-prepend-global-as {
              type empty;
              description
                "Do not prepend global autonomous-system number in advertised paths";
            }
          }  // container local-as
    
          leaf ipsec-sa {
            junos:must "("security ipsec security-association $$")";
            junos:must-message "Referenced IPSec Security Association must be defined";
            type string {
              length "1 .. 32";
            }
            description "IPSec SA name";
          }
    
          container graceful-shutdown {
            description
              "BGP peer graceful shutdown option";
            uses apply-advanced;
    
            container receiver {
              presence "enable receiver";
              description
                "BGP peer graceful-shutdown receiver";
              uses apply-advanced;
    
              leaf disable {
                junos:must "(!(".. .. sender"))";
                junos:must-message "Receiver cannot be disabled on Sender";
                type empty;
                description
                  "Disable graceful-shutdown receiver";
              }
    
              leaf local-preference {
                type union {
                  type uint32;
                  type string {
                    pattern "<.*>|$.*";
                  }
                }
                description
                  "Value of receiver LOCAL_PREF path attribute";
              }
            }  // container receiver
    
            container sender {
              presence "enable sender";
              description
                "BGP peer graceful-shutdown sender";
              uses apply-advanced;
    
              leaf local-preference {
                type union {
                  type uint32;
                  type string {
                    pattern "<.*>|$.*";
                  }
                }
                description
                  "Value of sender LOCAL_PREF path attribute";
              }
            }  // container sender
          }  // container graceful-shutdown
    
          container shutdown {
            presence "enable shutdown";
            description "Shutdown";
            uses apply-advanced;
    
            leaf notify-message {
              type string;
              description "Notification message";
            }
          }  // container shutdown
    
          leaf unconfigured-peer-graceful-restart {
            junos:must "(".. graceful-restart")";
            junos:must-message "unconfigured-peer-graceful-restart is only valid with 'graceful-restart'";
            type empty;
            description
              "BGP unconfigured peer graceful restart options";
          }
    
          container graceful-restart {
            presence "enable graceful-restart";
            description
              "BGP graceful restart options";
            uses apply-advanced;
    
            choice enable-disable {
              leaf disable {
                type empty;
                description
                  "Disable graceful restart";
              }
            }  // choice enable-disable
    
            leaf restart-time {
              junos:must "(("routing-options graceful-restart" || "fabric routing-options graceful-restart"))";
              junos:must-message "restart-time is only valid with 'routing-options graceful-restart'";
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "1 .. 1800";
                }
              }
              description
                "Restart time used when negotiating with a peer";
            }
    
            leaf stale-routes-time {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "1 .. 1800";
                }
              }
              description
                "Maximum time for which stale routes are kept";
            }
    
            container long-lived {
              description
                "Long-lived graceful restart options";
              uses apply-advanced;
    
              container receiver {
                description
                  "Long-lived graceful restart receiver (helper) options";
                uses apply-advanced;
    
                choice enable-disable {
                  leaf disable {
                    type empty;
                    description
                      "Disable receiver (helper) functionality";
                  }
                }  // choice enable-disable
              }  // container receiver
    
              container advertise-to-non-llgr-neighbor {
                presence
                  "enable advertise-to-non-llgr-neighbor";
                description
                  "Advertise stale routes to non-LLGR neighbors";
                uses apply-advanced;
    
                leaf omit-no-export {
                  type empty;
                  description
                    "Do not attach no-export community to stale routes";
                }
              }  // container advertise-to-non-llgr-neighbor
            }  // container long-lived
    
            leaf disable-notification-extensions {
              type empty;
              description
                "Disable notification extensions";
            }
    
            leaf forwarding-state-bit {
              type enumeration {
                enum "as-rr-client" {
                  value 0;
                  description
                    "As for a route reflector client";
                }
                enum "from-fib" {
                  value 1;
                  description
                    "Always use state of associated FIB(s)";
                }
              }
              description
                "Control forwarding-state flag negotiation";
            }
    
            leaf dont-help-shared-fate-bfd-down {
              type empty;
              description
                "Honor BFD-Down(C=0) if GR-restart not in progress";
            }
          }  // container graceful-restart
    
          leaf include-mp-next-hop {
            type empty;
            description
              "Include NEXT-HOP attribute in multiprotocol updates";
          }
    
          leaf disable-4byte-as {
            type empty;
            description
              "Disable 4 byte AS capability advertisement";
          }
    
          container idle-after-switch-over {
            description
              "Stop peer session from coming up after nonstop-routing switch-over";
            choice idle-interval {
              leaf forever {
                type empty;
                description
                  "Idle the peer until the user intervenes";
              }
              leaf timeout {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "1 .. 4294967295";
                  }
                }
                description
                  "Timeout value, in seconds, for starting peer after switch over";
              }
            }  // choice idle-interval
          }  // container idle-after-switch-over
    
          container outbound-route-filter {
            junos:must "(!("system processes routing bgp update-threading"))";
            junos:must-message "Can't be configured together with update-threading";
            description
              "Dynamically negotiated cooperative route filtering";
            uses apply-advanced;
    
            leaf bgp-orf-cisco-mode {
              type empty;
              description
                "Using BGP ORF capability code 130 and Prefix ORF type 128";
            }
    
            container extended-community {
              status deprecated;
              description
                "Extended community filtering";
              uses apply-advanced;
    
              choice accept-choice {
                leaf accept {
                  type empty;
                  description
                    "Honor remote requests for extended community ORF";
                }
                leaf no-accept {
                  type empty;
                  description
                    "Don't honor remote requests for extended community ORF";
                }
              }  // choice accept-choice
    
              leaf vrf-filter {
                type empty;
                description
                  "Request remote filtering using locally configured VRF import targets";
              }
            }  // container extended-community
    
            container prefix-based {
              presence "enable prefix-based";
              description
                "Prefix-based outbound route filtering";
              uses apply-advanced;
    
              container accept {
                presence "enable accept";
                description
                  "Honor Prefix-based ORFs from remote peers";
                uses apply-advanced;
    
                leaf inet {
                  type empty;
                  description
                    "Honor IPv4 prefix filters";
                }
    
                leaf inet6 {
                  type empty;
                  description
                    "Honor IPv6 prefix filters";
                }
              }  // container accept
            }  // container prefix-based
          }  // container outbound-route-filter
    
          container message-batching {
            status deprecated;
            description
              "DEPRECATED - Batching of outgoing messages";
            uses apply-advanced;
    
            choice enable-disable {
              leaf enable {
                type empty;
                description "Enable parameter";
              }
              leaf disable {
                type empty;
                description "Disable parameter";
              }
            }  // choice enable-disable
    
            leaf interval {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "100 .. 1000";
                }
              }
              units "milliseconds";
              default "250";
              description
                "DEPRECATED - Interval over which to batch messages";
            }
          }  // container message-batching
    
          container multipath {
            presence "enable multipath";
            description
              "Allow load sharing among multiple BGP paths";
            uses apply-advanced;
    
            leaf disable {
              type empty;
              description "Disable Multipath";
            }
    
            leaf multiple-as {
              type empty;
              description
                "Use paths received from different ASs";
            }
    
            leaf allow-protection {
              type empty;
              description
                "Allow protection for multipath legs";
            }
    
            leaf pause-computation-during-churn {
              type empty;
              description
                "Pause multipath job to absorb churn";
            }
    
            leaf list-nexthop {
              type empty;
              description
                "Use List-NH for homogenous nexthop-set also";
            }
          }  // container multipath
    
          leaf tcp-mss {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "1 .. 4096";
              }
            }
            description
              "Maximum TCP segment size";
          }
    
          leaf bgp-identifier {
            type jt:ipv4addr;
            description "BGP Identifier";
          }
    
          leaf tcp-aggressive-transmission {
            type empty;
            description
              "Enable aggressive transmission of pure TCP ACKs and retransmissions";
          }
    
          container bmp {
            description
              "Specific settings to override the routing-options settings";
            uses apply-advanced;
    
            leaf monitor {
              type enumeration {
                enum "enable" {
                  value 0;
                  description
                    "Enable monitoring of BGP peer(s)";
                }
                enum "disable" {
                  value 1;
                  description
                    "Disable monitoring of BGP peer(s)";
                }
              }
              description
                "Enable/Disable monitoring";
            }
    
            container route-monitoring {
              description
                "Control route monitoring settings";
              uses apply-advanced;
    
              leaf none {
                junos:must "((!(".. pre-policy") && (!(".. post-policy") && !(".. rib-out"))))";
                junos:must-message "May not be configured with pre-policy or post-policy or rib-out";
                type empty;
                description
                  "Do not send route monitoring messages";
              }
    
              container pre-policy {
                presence "enable pre-policy";
                description
                  "Send pre-policy route monitoring messages";
                leaf exclude-non-feasible {
                  type empty;
                  description
                    "Exclude looped routes, etc";
                }
              }  // container pre-policy
    
              container post-policy {
                presence "enable post-policy";
                description
                  "Send post-policy route monitoring messages";
                leaf exclude-non-eligible {
                  type empty;
                  description
                    "Exclude unresolved routes, etc.";
                }
              }  // container post-policy
    
              container rib-out {
                junos:must "((!("system processes routing bgp update-threading") || "system processes routing bgp rib-sharding"))";
                junos:must-message "Update threading can't be configured together with bmp rib-out monitoring";
                presence "enable rib-out";
                description
                  "Send adj-ribs-out route monitoring messages";
                leaf pre-policy {
                  type empty;
                  description
                    "Send pre-policy adj-ribs-out route monitoring messages";
                }
    
                leaf post-policy {
                  type empty;
                  description
                    "Send post-policy adj-ribs-out route monitoring messages";
                }
              }  // container rib-out
            }  // container route-monitoring
          }  // container bmp
    
          container advertise-bgp-static {
            presence
              "enable advertise-bgp-static";
            description
              "Advertise bgp-static routes";
            uses apply-advanced;
    
            leaf-list policy {
              type jt:policy-algebra;
              ordered-by user;
              description
                "Static route advertisement policy";
            }
          }  // container advertise-bgp-static
    
          leaf add-path-display-ipv4-address {
            type empty;
            description
              "Display add-path path-id in IPv4 address format";
          }
    
          container bfd-liveness-detection {
            description
              "Bidirectional Forwarding Detection (BFD) options";
            uses apply-advanced;
    
            leaf version {
              type enumeration {
                enum "0" {
                  value 0;
                  description
                    "BFD version 0 (deprecated)";
                }
                enum "1" {
                  value 1;
                  description "BFD version 1";
                }
                enum "automatic" {
                  value 2;
                  description
                    "Choose BFD version automatically";
                }
              }
              default "automatic";
              description
                "BFD protocol version number";
            }
    
            leaf minimum-interval {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "1 .. 255000";
                }
              }
              units "milliseconds";
              description
                "Minimum transmit and receive interval";
            }
    
            leaf minimum-transmit-interval {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "1 .. 255000";
                }
              }
              units "milliseconds";
              status deprecated;
              description
                "Minimum transmit interval";
            }
    
            leaf minimum-receive-interval {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "1 .. 255000";
                }
              }
              units "milliseconds";
              description
                "Minimum receive interval";
            }
    
            leaf multiplier {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "1 .. 255";
                }
              }
              default "3";
              description
                "Detection time multiplier";
            }
    
            choice adaptation-choice {
              leaf no-adaptation {
                type empty;
                description "Disable adaptation";
              }
            }  // choice adaptation-choice
    
            container transmit-interval {
              description
                "Transmit-interval options";
              uses apply-advanced;
    
              leaf minimum-interval {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "1 .. 255000";
                  }
                }
                units "milliseconds";
                description
                  "Minimum transmit interval";
              }
    
              leaf threshold {
                type union {
                  type uint32;
                  type string {
                    pattern "<.*>|$.*";
                  }
                }
                units "milliseconds";
                description
                  "High transmit interval triggering a trap";
              }
            }  // container transmit-interval
    
            container detection-time {
              description
                "Detection-time options";
              uses apply-advanced;
    
              leaf threshold {
                type union {
                  type uint32;
                  type string {
                    pattern "<.*>|$.*";
                  }
                }
                units "milliseconds";
                description
                  "High detection-time triggering a trap";
              }
            }  // container detection-time
    
            container authentication {
              description
                "Authentication options";
              uses apply-advanced;
    
              leaf key-chain {
                junos:must "(".. algorithm")";
                junos:must-message "May not be configured without algorithm";
                junos:must "("security authentication-key-chains key-chain $$")";
                junos:must-message "Referenced key-chain must be defined";
                type string;
                description "Key chain name";
              }
    
              leaf algorithm {
                junos:must "(".. key-chain")";
                junos:must-message "May not be configured without key-chain";
                type enumeration {
                  enum "simple-password" {
                    value 0;
                    description
                      "Simple password";
                  }
                  enum "keyed-md5" {
                    value 1;
                    description
                      "Keyed message Digest 5";
                  }
                  enum "meticulous-keyed-md5" {
                    value 2;
                    description
                      "Meticulous keyed message Digest 5";
                  }
                  enum "keyed-sha-1" {
                    value 3;
                    description
                      "Keyed secure hash algorithm (SHA1) ";
                  }
                  enum "meticulous-keyed-sha-1" {
                    value 4;
                    description
                      "Meticulous keyed secure hash algorithm (SHA1) ";
                  }
                }
                description "Algorithm name";
              }
    
              leaf loose-check {
                type empty;
                description
                  "Verify authentication only if authentication is negotiated";
              }
            }  // container authentication
    
            leaf session-mode {
              type enumeration {
                enum "automatic" {
                  value 0;
                  description
                    "Choose session-mode automatically";
                }
                enum "single-hop" {
                  value 1;
                  description "Use single-hop";
                }
                enum "multihop" {
                  value 2;
                  description "Use multihop";
                }
              }
              default "automatic";
              description
                "BFD single-hop or multihop session-mode";
            }
    
            leaf holddown-interval {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "0 .. 255000";
                }
              }
              units "milliseconds";
              description
                "Time to hold the session-UP notification to the client";
            }
          }  // container bfd-liveness-detection
    
          container output-queue-priority {
            description
              "BGP output queue priority scheduler for updates";
            uses apply-advanced;
    
            container expedited {
              presence "enable expedited";
              description
                "Expedited queue; highest priority";
              leaf update-tokens {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "1 .. 100";
                  }
                }
                description "Number of tokens";
              }
            }  // container expedited
    
            list priority {
              key "name";
              description
                "Output queue priority 1..16; higher is better";
              leaf name {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "1 .. 16";
                  }
                }
                description
                  "Output queue priority; higher is better";
              }
    
              leaf update-tokens {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "1 .. 100";
                  }
                }
                description "Number of tokens";
              }
            }  // list priority
    
            container defaults {
              description
                "Map policy's priority class and BGP output-queue";
              uses apply-advanced;
    
              container low {
                description
                  "Assign the 'low' priority class to this output-queue";
                uses bgp-output-queue-priority-class;
              }  // container low
    
              container medium {
                description
                  "Assign the 'medium' priority class to this output-queue";
                uses bgp-output-queue-priority-class;
              }  // container medium
    
              container high {
                description
                  "Assign the 'high' priority class to this output-queue";
                uses bgp-output-queue-priority-class;
              }  // container high
            }  // container defaults
          }  // container output-queue-priority
    
          container multipath-build-priority {
            description
              "Configure the multipath build priority";
            uses apply-advanced;
    
            choice multipath-priority {
              leaf low {
                type empty;
                description
                  "Do multipath build with low priority";
              }
              leaf medium {
                type empty;
                description
                  "Do multipath build with medium priority";
              }
            }  // choice multipath-priority
          }  // container multipath-build-priority
    
          leaf send-addpath-optimization {
            type empty;
            description
              "Enable BGP addpath advertisement optimization";
          }
    
          container defaults {
            uses apply-advanced;
    
            container ebgp {
              description
                "Options impacting external BGP default behaviors";
              uses apply-advanced;
    
              container no-policy {
                description
                  "Default ebgp behaviors in the absence of configured policy";
                uses apply-advanced;
    
                leaf receive {
                  type enumeration {
                    enum "accept" {
                      value 0;
                      description
                        "By default, accept routes from all address families";
                    }
                    enum "reject" {
                      value 1;
                      description
                        "By default, reject routes from IPv4/IPv6 unicast address families";
                    }
                    enum "reject-always" {
                      value 2;
                      description
                        "By default, reject routes from all address families";
                    }
                  }
                  description
                    "Default ebgp receive behavior";
                }
    
                leaf advertise {
                  type enumeration {
                    enum "accept" {
                      value 0;
                      description
                        "By default, advertise routes for all address families";
                    }
                    enum "reject" {
                      value 1;
                      description
                        "By default, do not advertise routes from IPv4/IPv6 unicast address families";
                    }
                    enum "reject-always" {
                      value 2;
                      description
                        "By default, do not advertise routes from any address families";
                    }
                  }
                  description
                    "Default ebgp advertise behavior";
                }
              }  // container no-policy
            }  // container ebgp
          }  // container defaults
        }  // grouping juniper-protocols-bgp
    
        grouping bgp-af-gr {
          uses apply-advanced;
    
          container long-lived {
            description
              "Long-lived graceful restart options";
            uses apply-advanced;
    
            container restarter {
              description
                "Long-lived graceful restart restarter options";
              uses apply-advanced;
    
              choice enable-disable {
                leaf disable {
                  type empty;
                  description
                    "Disable restarter functionality";
                }
              }  // choice enable-disable
    
              leaf stale-time {
                type string;
                description
                  "Stale time in seconds or dhms notation (1..16777215)";
              }
            }  // container restarter
          }  // container long-lived
    
          leaf forwarding-state-bit {
            type enumeration {
              enum "set" {
                value 0;
                description "Always set";
              }
              enum "from-fib" {
                value 1;
                description
                  "Use state of associated FIB(s)";
              }
            }
            description
              "Control forwarding-state flag negotiation";
          }
        }  // grouping bgp-af-gr
    
        grouping bgp-afi-default {
          uses apply-advanced;
    
          container prefix-limit {
            description
              "Limit maximum number of prefixes from a peer";
            uses bgpaf-prefix-limit;
          }  // container prefix-limit
    
          container accepted-prefix-limit {
            description
              "Limit maximum number of prefixes accepted from a peer";
            uses bgpaf-accepted-prefix-limit;
          }  // container accepted-prefix-limit
    
          container rib-group {
            description "Routing table group";
            uses rib_group_inet_type;
          }  // container rib-group
    
          container add-path {
            description
              "Advertise multiple paths to peer";
            uses apath-options;
          }  // container add-path
    
          container aigp {
            presence "enable aigp";
            description
              "Allow sending and receiving of AIGP attribute";
            uses bgpaf-aigp-options;
          }  // container aigp
    
          leaf damping {
            type empty;
            description
              "Enable route flap damping";
          }
    
          leaf local-ipv4-address {
            type jt:ipv4addr;
            description "Local IPv4 address";
          }
    
          container loops {
            description
              "Allow local AS in received AS paths";
            uses bgpaf-loops;
          }  // container loops
    
          container delay-route-advertisements {
            junos:must "(!("system processes routing bgp rib-sharding"))";
            junos:must-message "Can't be configured together with rib-sharding";
            presence
              "enable delay-route-advertisements";
            description
              "Delay route updates for this family until FIB-sync";
            uses apply-advanced;
    
            leaf always-wait-for-krt-drain {
              type empty;
              description
                "Wait for KRT-queue drain for more-specific prefixes";
            }
    
            container minimum-delay {
              description
                "Minumum-delay to ensure KRT sees the route flash";
              uses apply-advanced;
    
              leaf routing-uptime {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "1 .. 36000";
                  }
                }
                description
                  "Min delay(sec) advertisement after RPD start";
              }
    
              leaf inbound-convergence {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "1 .. 36000";
                  }
                }
                description
                  "Min delay(sec) advertisement after source-peer sent all routes";
              }
            }  // container minimum-delay
    
            container maximum-delay {
              description
                "Maximum delay deferring routes";
              uses apply-advanced;
    
              leaf route-age {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "1 .. 36000";
                  }
                }
                description
                  "Max delay(sec) advertisement route age";
              }
    
              leaf routing-uptime {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "1 .. 36000";
                  }
                }
                description
                  "Max delay(sec) advertisement after RPD start";
              }
            }  // container maximum-delay
          }  // container delay-route-advertisements
    
          container nexthop-resolution {
            description
              "Configure nexthop resolution properties";
            uses apply-advanced;
    
            leaf no-resolution {
              type empty;
              description
                "Consider nexthop good without resolution attempt";
            }
    
            leaf preserve-nexthop-hierarchy {
              type empty;
              description
                "Attempt preserving resolved nexthop chain in forwarding";
            }
          }  // container nexthop-resolution
    
          container defer-initial-multipath-build {
            presence
              "enable defer-initial-multipath-build";
            description
              "Defer initial multipath build until EOR is received";
            uses apply-advanced;
    
            leaf maximum-delay {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "1 .. 3600";
                }
              }
              description
                "Max delay(sec) multipath build after peer is up";
            }
          }  // container defer-initial-multipath-build
    
          container graceful-restart {
            description
              "BGP graceful restart options";
            uses bgp-af-gr;
          }  // container graceful-restart
    
          leaf extended-nexthop {
            junos:must "(!("system processes routing bgp rib-sharding"))";
            junos:must-message "Can't be configured together with rib-sharding";
            type empty;
            description
              "Extended nexthop encoding";
          }
    
          leaf extended-nexthop-color {
            type empty;
            description
              "Resolve using extended color nexthop";
          }
    
          leaf extended-nexthop-tunnel {
            type empty;
            description
              "Use BGP tunnel attribute";
          }
    
          leaf no-install {
            type empty;
            description
              "Dont install received routes in forwarding";
          }
    
          leaf route-age-bgp-view {
            type empty;
            description
              "Maintain BGP route's age based on Update messages only";
          }
    
          container output-queue-priority {
            description
              "Default output-queue to assign updates to";
            uses bgp-output-queue-priority-class;
          }  // container output-queue-priority
    
          container route-refresh-priority {
            description
              "Default output-queue to assign route refreshes to";
            uses bgp-output-queue-priority-class;
          }  // container route-refresh-priority
    
          container withdraw-priority {
            description
              "Default output-queue to assign withdrawn routes to";
            uses bgp-output-queue-priority-class;
          }  // container withdraw-priority
    
          leaf advertise-srv6-service {
            type empty;
            description "Advertise SRv6 service";
          }
    
          leaf accept-srv6-service {
            type empty;
            description "Accept SRv6 service";
          }
        }  // grouping bgp-afi-default
    
        grouping apath-options {
          description
            "Number of paths to advertise";
          uses apply-advanced;
    
          leaf receive {
            type empty;
            description
              "Receive multiple paths from peer";
          }
    
          container send {
            presence "enable send";
            description
              "Send multiple paths to peer";
            uses apply-advanced;
    
            container path-selection-mode {
              junos:must "(!(".. multipath"))";
              junos:must-message "Multipath must be disabled";
              description
                "Configure how to select add-path routes";
              uses apply-advanced;
    
              choice mode {
                leaf all-paths {
                  type empty;
                  description
                    "Advertise all paths allowed by path count";
                }
                leaf equal-cost-paths {
                  type empty;
                  description
                    "Advertise equal cost paths";
                }
              }  // choice mode
            }  // container path-selection-mode
    
            leaf-list prefix-policy {
              type jt:policy-algebra;
              ordered-by user;
              description
                "Perform add-path only for prefixes that match policy";
            }
    
            leaf path-count {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type int32 {
                  range "2 .. 64";
                }
              }
              description
                "Number of paths to advertise";
            }
    
            leaf include-backup-path {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type int32 {
                  range "1 .. 2";
                }
              }
              description
                "Number of backup paths to advertise";
            }
    
            leaf multipath {
              type empty;
              description
                "Include only multipath contributor routes";
            }
          }  // container send
        }  // grouping apath-options
    
        grouping bgp-afi-flow {
          uses apply-advanced;
    
          container prefix-limit {
            description
              "Limit maximum number of prefixes from a peer";
            uses bgpaf-prefix-limit;
          }  // container prefix-limit
    
          container accepted-prefix-limit {
            description
              "Limit maximum number of prefixes accepted from a peer";
            uses bgpaf-accepted-prefix-limit;
          }  // container accepted-prefix-limit
    
          container rib-group {
            description "Routing table group";
            uses rib_group_inet_type;
          }  // container rib-group
    
          container add-path {
            description
              "Advertise multiple paths to peer";
            uses apath-options;
          }  // container add-path
    
          container aigp {
            presence "enable aigp";
            description
              "Allow sending and receiving of AIGP attribute";
            uses bgpaf-aigp-options;
          }  // container aigp
    
          leaf damping {
            type empty;
            description
              "Enable route flap damping";
          }
    
          leaf local-ipv4-address {
            type jt:ipv4addr;
            description "Local IPv4 address";
          }
    
          container loops {
            description
              "Allow local AS in received AS paths";
            uses bgpaf-loops;
          }  // container loops
    
          container delay-route-advertisements {
            junos:must "(!("system processes routing bgp rib-sharding"))";
            junos:must-message "Can't be configured together with rib-sharding";
            presence
              "enable delay-route-advertisements";
            description
              "Delay route updates for this family until FIB-sync";
            uses apply-advanced;
    
            leaf always-wait-for-krt-drain {
              type empty;
              description
                "Wait for KRT-queue drain for more-specific prefixes";
            }
    
            container minimum-delay {
              description
                "Minumum-delay to ensure KRT sees the route flash";
              uses apply-advanced;
    
              leaf routing-uptime {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "1 .. 36000";
                  }
                }
                description
                  "Min delay(sec) advertisement after RPD start";
              }
    
              leaf inbound-convergence {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "1 .. 36000";
                  }
                }
                description
                  "Min delay(sec) advertisement after source-peer sent all routes";
              }
            }  // container minimum-delay
    
            container maximum-delay {
              description
                "Maximum delay deferring routes";
              uses apply-advanced;
    
              leaf route-age {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "1 .. 36000";
                  }
                }
                description
                  "Max delay(sec) advertisement route age";
              }
    
              leaf routing-uptime {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "1 .. 36000";
                  }
                }
                description
                  "Max delay(sec) advertisement after RPD start";
              }
            }  // container maximum-delay
          }  // container delay-route-advertisements
    
          container nexthop-resolution {
            description
              "Configure nexthop resolution properties";
            uses apply-advanced;
    
            leaf no-resolution {
              type empty;
              description
                "Consider nexthop good without resolution attempt";
            }
    
            leaf preserve-nexthop-hierarchy {
              type empty;
              description
                "Attempt preserving resolved nexthop chain in forwarding";
            }
          }  // container nexthop-resolution
    
          container defer-initial-multipath-build {
            presence
              "enable defer-initial-multipath-build";
            description
              "Defer initial multipath build until EOR is received";
            uses apply-advanced;
    
            leaf maximum-delay {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "1 .. 3600";
                }
              }
              description
                "Max delay(sec) multipath build after peer is up";
            }
          }  // container defer-initial-multipath-build
    
          container graceful-restart {
            description
              "BGP graceful restart options";
            uses bgp-af-gr;
          }  // container graceful-restart
    
          leaf extended-nexthop {
            junos:must "(!("system processes routing bgp rib-sharding"))";
            junos:must-message "Can't be configured together with rib-sharding";
            type empty;
            description
              "Extended nexthop encoding";
          }
    
          leaf extended-nexthop-color {
            type empty;
            description
              "Resolve using extended color nexthop";
          }
    
          leaf extended-nexthop-tunnel {
            type empty;
            description
              "Use BGP tunnel attribute";
          }
    
          leaf no-install {
            type empty;
            description
              "Dont install received routes in forwarding";
          }
    
          leaf route-age-bgp-view {
            type empty;
            description
              "Maintain BGP route's age based on Update messages only";
          }
    
          container output-queue-priority {
            description
              "Default output-queue to assign updates to";
            uses bgp-output-queue-priority-class;
          }  // container output-queue-priority
    
          container route-refresh-priority {
            description
              "Default output-queue to assign route refreshes to";
            uses bgp-output-queue-priority-class;
          }  // container route-refresh-priority
    
          container withdraw-priority {
            description
              "Default output-queue to assign withdrawn routes to";
            uses bgp-output-queue-priority-class;
          }  // container withdraw-priority
    
          leaf advertise-srv6-service {
            type empty;
            description "Advertise SRv6 service";
          }
    
          leaf accept-srv6-service {
            type empty;
            description "Accept SRv6 service";
          }
    
          leaf-list no-validate {
            type jt:policy-algebra;
            ordered-by user;
            description
              "Bypass validation procedure for routes that match policy";
          }
    
          leaf strip-nexthop {
            type empty;
            description
              "Strip the next-hop from the outgoing flow update";
          }
    
          leaf allow-policy-add-nexthop {
            type empty;
            status deprecated;
            description
              "Allow policy to add nexthop to a route without nexthop";
          }
        }  // grouping bgp-afi-flow
    
        grouping bgp-afi-flow-with-redirect-ip-action {
          uses apply-advanced;
    
          container prefix-limit {
            description
              "Limit maximum number of prefixes from a peer";
            uses bgpaf-prefix-limit;
          }  // container prefix-limit
    
          container accepted-prefix-limit {
            description
              "Limit maximum number of prefixes accepted from a peer";
            uses bgpaf-accepted-prefix-limit;
          }  // container accepted-prefix-limit
    
          container rib-group {
            description "Routing table group";
            uses rib_group_inet_type;
          }  // container rib-group
    
          container add-path {
            description
              "Advertise multiple paths to peer";
            uses apath-options;
          }  // container add-path
    
          container aigp {
            presence "enable aigp";
            description
              "Allow sending and receiving of AIGP attribute";
            uses bgpaf-aigp-options;
          }  // container aigp
    
          leaf damping {
            type empty;
            description
              "Enable route flap damping";
          }
    
          leaf local-ipv4-address {
            type jt:ipv4addr;
            description "Local IPv4 address";
          }
    
          container loops {
            description
              "Allow local AS in received AS paths";
            uses bgpaf-loops;
          }  // container loops
    
          container delay-route-advertisements {
            junos:must "(!("system processes routing bgp rib-sharding"))";
            junos:must-message "Can't be configured together with rib-sharding";
            presence
              "enable delay-route-advertisements";
            description
              "Delay route updates for this family until FIB-sync";
            uses apply-advanced;
    
            leaf always-wait-for-krt-drain {
              type empty;
              description
                "Wait for KRT-queue drain for more-specific prefixes";
            }
    
            container minimum-delay {
              description
                "Minumum-delay to ensure KRT sees the route flash";
              uses apply-advanced;
    
              leaf routing-uptime {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "1 .. 36000";
                  }
                }
                description
                  "Min delay(sec) advertisement after RPD start";
              }
    
              leaf inbound-convergence {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "1 .. 36000";
                  }
                }
                description
                  "Min delay(sec) advertisement after source-peer sent all routes";
              }
            }  // container minimum-delay
    
            container maximum-delay {
              description
                "Maximum delay deferring routes";
              uses apply-advanced;
    
              leaf route-age {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "1 .. 36000";
                  }
                }
                description
                  "Max delay(sec) advertisement route age";
              }
    
              leaf routing-uptime {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "1 .. 36000";
                  }
                }
                description
                  "Max delay(sec) advertisement after RPD start";
              }
            }  // container maximum-delay
          }  // container delay-route-advertisements
    
          container nexthop-resolution {
            description
              "Configure nexthop resolution properties";
            uses apply-advanced;
    
            leaf no-resolution {
              type empty;
              description
                "Consider nexthop good without resolution attempt";
            }
    
            leaf preserve-nexthop-hierarchy {
              type empty;
              description
                "Attempt preserving resolved nexthop chain in forwarding";
            }
          }  // container nexthop-resolution
    
          container defer-initial-multipath-build {
            presence
              "enable defer-initial-multipath-build";
            description
              "Defer initial multipath build until EOR is received";
            uses apply-advanced;
    
            leaf maximum-delay {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "1 .. 3600";
                }
              }
              description
                "Max delay(sec) multipath build after peer is up";
            }
          }  // container defer-initial-multipath-build
    
          container graceful-restart {
            description
              "BGP graceful restart options";
            uses bgp-af-gr;
          }  // container graceful-restart
    
          leaf extended-nexthop {
            junos:must "(!("system processes routing bgp rib-sharding"))";
            junos:must-message "Can't be configured together with rib-sharding";
            type empty;
            description
              "Extended nexthop encoding";
          }
    
          leaf extended-nexthop-color {
            type empty;
            description
              "Resolve using extended color nexthop";
          }
    
          leaf extended-nexthop-tunnel {
            type empty;
            description
              "Use BGP tunnel attribute";
          }
    
          leaf no-install {
            type empty;
            description
              "Dont install received routes in forwarding";
          }
    
          leaf route-age-bgp-view {
            type empty;
            description
              "Maintain BGP route's age based on Update messages only";
          }
    
          container output-queue-priority {
            description
              "Default output-queue to assign updates to";
            uses bgp-output-queue-priority-class;
          }  // container output-queue-priority
    
          container route-refresh-priority {
            description
              "Default output-queue to assign route refreshes to";
            uses bgp-output-queue-priority-class;
          }  // container route-refresh-priority
    
          container withdraw-priority {
            description
              "Default output-queue to assign withdrawn routes to";
            uses bgp-output-queue-priority-class;
          }  // container withdraw-priority
    
          leaf advertise-srv6-service {
            type empty;
            description "Advertise SRv6 service";
          }
    
          leaf accept-srv6-service {
            type empty;
            description "Accept SRv6 service";
          }
    
          leaf-list no-validate {
            type jt:policy-algebra;
            ordered-by user;
            description
              "Bypass validation procedure for routes that match policy";
          }
    
          leaf strip-nexthop {
            type empty;
            description
              "Strip the next-hop from the outgoing flow update";
          }
    
          container legacy-redirect-ip-action {
            presence
              "enable legacy-redirect-ip-action";
            description
              "Configure legacy redirect to IP support";
            uses apply-advanced;
    
            leaf receive {
              type empty;
              description
                "Accept legacy encoded redirect-to-ip action attribute";
            }
    
            leaf send {
              type empty;
              description
                "Advertise Redirect action as legacy redirect attribute";
            }
          }  // container legacy-redirect-ip-action
    
          leaf secondary-independent-resolution {
            type empty;
            description
              "Resolve FLOW routes in VRF table independent of VPN FLOW route";
          }
        }  // grouping bgp-afi-flow-with-redirect-ip-action
    
        grouping bgp-afi-inet-transport {
          uses apply-advanced;
    
          container prefix-limit {
            description
              "Limit maximum number of prefixes from a peer";
            uses bgpaf-prefix-limit;
          }  // container prefix-limit
    
          container accepted-prefix-limit {
            description
              "Limit maximum number of prefixes accepted from a peer";
            uses bgpaf-accepted-prefix-limit;
          }  // container accepted-prefix-limit
    
          container rib-group {
            description "Routing table group";
            uses rib_group_inet_type;
          }  // container rib-group
    
          container add-path {
            description
              "Advertise multiple paths to peer";
            uses apath-options;
          }  // container add-path
    
          container aigp {
            presence "enable aigp";
            description
              "Allow sending and receiving of AIGP attribute";
            uses bgpaf-aigp-options;
          }  // container aigp
    
          leaf damping {
            type empty;
            description
              "Enable route flap damping";
          }
    
          leaf local-ipv4-address {
            type jt:ipv4addr;
            description "Local IPv4 address";
          }
    
          container loops {
            description
              "Allow local AS in received AS paths";
            uses bgpaf-loops;
          }  // container loops
    
          container delay-route-advertisements {
            junos:must "(!("system processes routing bgp rib-sharding"))";
            junos:must-message "Can't be configured together with rib-sharding";
            presence
              "enable delay-route-advertisements";
            description
              "Delay route updates for this family until FIB-sync";
            uses apply-advanced;
    
            leaf always-wait-for-krt-drain {
              type empty;
              description
                "Wait for KRT-queue drain for more-specific prefixes";
            }
    
            container minimum-delay {
              description
                "Minumum-delay to ensure KRT sees the route flash";
              uses apply-advanced;
    
              leaf routing-uptime {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "1 .. 36000";
                  }
                }
                description
                  "Min delay(sec) advertisement after RPD start";
              }
    
              leaf inbound-convergence {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "1 .. 36000";
                  }
                }
                description
                  "Min delay(sec) advertisement after source-peer sent all routes";
              }
            }  // container minimum-delay
    
            container maximum-delay {
              description
                "Maximum delay deferring routes";
              uses apply-advanced;
    
              leaf route-age {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "1 .. 36000";
                  }
                }
                description
                  "Max delay(sec) advertisement route age";
              }
    
              leaf routing-uptime {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "1 .. 36000";
                  }
                }
                description
                  "Max delay(sec) advertisement after RPD start";
              }
            }  // container maximum-delay
          }  // container delay-route-advertisements
    
          container nexthop-resolution {
            description
              "Configure nexthop resolution properties";
            uses apply-advanced;
    
            leaf no-resolution {
              type empty;
              description
                "Consider nexthop good without resolution attempt";
            }
    
            leaf preserve-nexthop-hierarchy {
              type empty;
              description
                "Attempt preserving resolved nexthop chain in forwarding";
            }
          }  // container nexthop-resolution
    
          container defer-initial-multipath-build {
            presence
              "enable defer-initial-multipath-build";
            description
              "Defer initial multipath build until EOR is received";
            uses apply-advanced;
    
            leaf maximum-delay {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "1 .. 3600";
                }
              }
              description
                "Max delay(sec) multipath build after peer is up";
            }
          }  // container defer-initial-multipath-build
    
          container graceful-restart {
            description
              "BGP graceful restart options";
            uses bgp-af-gr;
          }  // container graceful-restart
    
          leaf extended-nexthop {
            junos:must "(!("system processes routing bgp rib-sharding"))";
            junos:must-message "Can't be configured together with rib-sharding";
            type empty;
            description
              "Extended nexthop encoding";
          }
    
          leaf extended-nexthop-color {
            type empty;
            description
              "Resolve using extended color nexthop";
          }
    
          leaf extended-nexthop-tunnel {
            type empty;
            description
              "Use BGP tunnel attribute";
          }
    
          leaf no-install {
            type empty;
            description
              "Dont install received routes in forwarding";
          }
    
          leaf route-age-bgp-view {
            type empty;
            description
              "Maintain BGP route's age based on Update messages only";
          }
    
          container output-queue-priority {
            description
              "Default output-queue to assign updates to";
            uses bgp-output-queue-priority-class;
          }  // container output-queue-priority
    
          container route-refresh-priority {
            description
              "Default output-queue to assign route refreshes to";
            uses bgp-output-queue-priority-class;
          }  // container route-refresh-priority
    
          container withdraw-priority {
            description
              "Default output-queue to assign withdrawn routes to";
            uses bgp-output-queue-priority-class;
          }  // container withdraw-priority
    
          leaf advertise-srv6-service {
            type empty;
            description "Advertise SRv6 service";
          }
    
          leaf accept-srv6-service {
            type empty;
            description "Accept SRv6 service";
          }
    
          container aggregate-label {
            presence "enable aggregate-label";
            description
              "Aggregate labels of incoming routes with the same FEC";
            uses apply-advanced;
    
            leaf community {
              type string;
              description
                "Community to identify the FEC of incoming routes";
            }
          }  // container aggregate-label
    
          leaf per-prefix-label {
            type empty;
            description
              "Allocate a unique label to each advertised prefix";
          }
    
          leaf per-group-label {
            type empty;
            description
              "Advertise prefixes with unique labels per group";
          }
    
          container traffic-statistics {
            presence "enable traffic-statistics";
            description
              "Collect statistics for BGP label-switched paths";
            uses bgpaf-traffic-statistics;
          }  // container traffic-statistics
    
          container protection {
            presence "enable protection";
            description
              "Compute backup path for active nexthop failure";
          }  // container protection
        }  // grouping bgp-afi-inet-transport
    
        grouping bgp-afi-inet6-labeled {
          uses apply-advanced;
    
          container prefix-limit {
            description
              "Limit maximum number of prefixes from a peer";
            uses bgpaf-prefix-limit;
          }  // container prefix-limit
    
          container accepted-prefix-limit {
            description
              "Limit maximum number of prefixes accepted from a peer";
            uses bgpaf-accepted-prefix-limit;
          }  // container accepted-prefix-limit
    
          container rib-group {
            description "Routing table group";
            uses rib_group_inet_type;
          }  // container rib-group
    
          container add-path {
            description
              "Advertise multiple paths to peer";
            uses apath-options;
          }  // container add-path
    
          container aigp {
            presence "enable aigp";
            description
              "Allow sending and receiving of AIGP attribute";
            uses bgpaf-aigp-options;
          }  // container aigp
    
          leaf damping {
            type empty;
            description
              "Enable route flap damping";
          }
    
          leaf local-ipv4-address {
            type jt:ipv4addr;
            description "Local IPv4 address";
          }
    
          container loops {
            description
              "Allow local AS in received AS paths";
            uses bgpaf-loops;
          }  // container loops
    
          container delay-route-advertisements {
            junos:must "(!("system processes routing bgp rib-sharding"))";
            junos:must-message "Can't be configured together with rib-sharding";
            presence
              "enable delay-route-advertisements";
            description
              "Delay route updates for this family until FIB-sync";
            uses apply-advanced;
    
            leaf always-wait-for-krt-drain {
              type empty;
              description
                "Wait for KRT-queue drain for more-specific prefixes";
            }
    
            container minimum-delay {
              description
                "Minumum-delay to ensure KRT sees the route flash";
              uses apply-advanced;
    
              leaf routing-uptime {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "1 .. 36000";
                  }
                }
                description
                  "Min delay(sec) advertisement after RPD start";
              }
    
              leaf inbound-convergence {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "1 .. 36000";
                  }
                }
                description
                  "Min delay(sec) advertisement after source-peer sent all routes";
              }
            }  // container minimum-delay
    
            container maximum-delay {
              description
                "Maximum delay deferring routes";
              uses apply-advanced;
    
              leaf route-age {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "1 .. 36000";
                  }
                }
                description
                  "Max delay(sec) advertisement route age";
              }
    
              leaf routing-uptime {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "1 .. 36000";
                  }
                }
                description
                  "Max delay(sec) advertisement after RPD start";
              }
            }  // container maximum-delay
          }  // container delay-route-advertisements
    
          container nexthop-resolution {
            description
              "Configure nexthop resolution properties";
            uses apply-advanced;
    
            leaf no-resolution {
              type empty;
              description
                "Consider nexthop good without resolution attempt";
            }
    
            leaf preserve-nexthop-hierarchy {
              type empty;
              description
                "Attempt preserving resolved nexthop chain in forwarding";
            }
          }  // container nexthop-resolution
    
          container defer-initial-multipath-build {
            presence
              "enable defer-initial-multipath-build";
            description
              "Defer initial multipath build until EOR is received";
            uses apply-advanced;
    
            leaf maximum-delay {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "1 .. 3600";
                }
              }
              description
                "Max delay(sec) multipath build after peer is up";
            }
          }  // container defer-initial-multipath-build
    
          container graceful-restart {
            description
              "BGP graceful restart options";
            uses bgp-af-gr;
          }  // container graceful-restart
    
          leaf extended-nexthop {
            junos:must "(!("system processes routing bgp rib-sharding"))";
            junos:must-message "Can't be configured together with rib-sharding";
            type empty;
            description
              "Extended nexthop encoding";
          }
    
          leaf extended-nexthop-color {
            type empty;
            description
              "Resolve using extended color nexthop";
          }
    
          leaf extended-nexthop-tunnel {
            type empty;
            description
              "Use BGP tunnel attribute";
          }
    
          leaf no-install {
            type empty;
            description
              "Dont install received routes in forwarding";
          }
    
          leaf route-age-bgp-view {
            type empty;
            description
              "Maintain BGP route's age based on Update messages only";
          }
    
          container output-queue-priority {
            description
              "Default output-queue to assign updates to";
            uses bgp-output-queue-priority-class;
          }  // container output-queue-priority
    
          container route-refresh-priority {
            description
              "Default output-queue to assign route refreshes to";
            uses bgp-output-queue-priority-class;
          }  // container route-refresh-priority
    
          container withdraw-priority {
            description
              "Default output-queue to assign withdrawn routes to";
            uses bgp-output-queue-priority-class;
          }  // container withdraw-priority
    
          leaf advertise-srv6-service {
            type empty;
            description "Advertise SRv6 service";
          }
    
          leaf accept-srv6-service {
            type empty;
            description "Accept SRv6 service";
          }
    
          container aggregate-label {
            presence "enable aggregate-label";
            description
              "Aggregate labels of incoming routes with the same FEC";
            uses apply-advanced;
    
            leaf community {
              type string;
              description
                "Community to identify the FEC of incoming routes";
            }
          }  // container aggregate-label
    
          leaf per-group-label {
            type empty;
            description
              "Advertise prefixes with unique labels per group";
          }
    
          container traffic-statistics {
            presence "enable traffic-statistics";
            description
              "Collect statistics for BGP label-switched paths";
            uses bgpaf-traffic-statistics;
          }  // container traffic-statistics
    
          container rib {
            description
              "Select table used by labeled unicast routes";
            uses apply-advanced;
    
            leaf inet6.3 {
              type empty;
              description
                "Use inet6.3 to exchange labeled unicast routes";
            }
          }  // container rib
    
          container explicit-null {
            presence "enable explicit-null";
            description
              "Advertise explicit null";
            leaf connected-only {
              type empty;
              description
                "Advertise explicit null only for connected routes";
            }
          }  // container explicit-null
    
          container protection {
            junos:must "((!(".. .. .. .. type internal") && !(".. .. .. .. .. type internal")))";
            junos:must-message "Protection for labeled-bgp valid only for EBGP";
            presence "enable protection";
            description
              "Compute backup path for active nexthop failure";
          }  // container protection
    
          list topology {
            junos:must "(!("system processes routing bgp rib-sharding"))";
            junos:must-message "Can't be configured together with rib-sharding";
            junos:must "(!("routing-options no-multi-topology-routing"))";
            junos:must-message "Multi topology routing is disabled";
            key "name";
            ordered-by user;
            description
              "Multi topology routing tables";
            leaf name {
              type string {
                junos:posix-pattern "!^((.*:.*)|(.{129,}))$";
                junos:pattern-message "Must be a non-reserved string of 128 characters or less";
              }
              description "Topology name";
            }
    
            uses apply-advanced;
    
            leaf community {
              type string;
              description
                "Community to identify multi topology routes";
            }
          }  // list topology
        }  // grouping bgp-afi-inet6-labeled
    
        grouping bgp-afi-inet6-transport {
          uses apply-advanced;
    
          container prefix-limit {
            description
              "Limit maximum number of prefixes from a peer";
            uses bgpaf-prefix-limit;
          }  // container prefix-limit
    
          container accepted-prefix-limit {
            description
              "Limit maximum number of prefixes accepted from a peer";
            uses bgpaf-accepted-prefix-limit;
          }  // container accepted-prefix-limit
    
          container rib-group {
            description "Routing table group";
            uses rib_group_inet_type;
          }  // container rib-group
    
          container add-path {
            description
              "Advertise multiple paths to peer";
            uses apath-options;
          }  // container add-path
    
          container aigp {
            presence "enable aigp";
            description
              "Allow sending and receiving of AIGP attribute";
            uses bgpaf-aigp-options;
          }  // container aigp
    
          leaf damping {
            type empty;
            description
              "Enable route flap damping";
          }
    
          leaf local-ipv4-address {
            type jt:ipv4addr;
            description "Local IPv4 address";
          }
    
          container loops {
            description
              "Allow local AS in received AS paths";
            uses bgpaf-loops;
          }  // container loops
    
          container delay-route-advertisements {
            junos:must "(!("system processes routing bgp rib-sharding"))";
            junos:must-message "Can't be configured together with rib-sharding";
            presence
              "enable delay-route-advertisements";
            description
              "Delay route updates for this family until FIB-sync";
            uses apply-advanced;
    
            leaf always-wait-for-krt-drain {
              type empty;
              description
                "Wait for KRT-queue drain for more-specific prefixes";
            }
    
            container minimum-delay {
              description
                "Minumum-delay to ensure KRT sees the route flash";
              uses apply-advanced;
    
              leaf routing-uptime {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "1 .. 36000";
                  }
                }
                description
                  "Min delay(sec) advertisement after RPD start";
              }
    
              leaf inbound-convergence {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "1 .. 36000";
                  }
                }
                description
                  "Min delay(sec) advertisement after source-peer sent all routes";
              }
            }  // container minimum-delay
    
            container maximum-delay {
              description
                "Maximum delay deferring routes";
              uses apply-advanced;
    
              leaf route-age {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "1 .. 36000";
                  }
                }
                description
                  "Max delay(sec) advertisement route age";
              }
    
              leaf routing-uptime {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "1 .. 36000";
                  }
                }
                description
                  "Max delay(sec) advertisement after RPD start";
              }
            }  // container maximum-delay
          }  // container delay-route-advertisements
    
          container nexthop-resolution {
            description
              "Configure nexthop resolution properties";
            uses apply-advanced;
    
            leaf no-resolution {
              type empty;
              description
                "Consider nexthop good without resolution attempt";
            }
    
            leaf preserve-nexthop-hierarchy {
              type empty;
              description
                "Attempt preserving resolved nexthop chain in forwarding";
            }
          }  // container nexthop-resolution
    
          container defer-initial-multipath-build {
            presence
              "enable defer-initial-multipath-build";
            description
              "Defer initial multipath build until EOR is received";
            uses apply-advanced;
    
            leaf maximum-delay {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "1 .. 3600";
                }
              }
              description
                "Max delay(sec) multipath build after peer is up";
            }
          }  // container defer-initial-multipath-build
    
          container graceful-restart {
            description
              "BGP graceful restart options";
            uses bgp-af-gr;
          }  // container graceful-restart
    
          leaf extended-nexthop {
            junos:must "(!("system processes routing bgp rib-sharding"))";
            junos:must-message "Can't be configured together with rib-sharding";
            type empty;
            description
              "Extended nexthop encoding";
          }
    
          leaf extended-nexthop-color {
            type empty;
            description
              "Resolve using extended color nexthop";
          }
    
          leaf extended-nexthop-tunnel {
            type empty;
            description
              "Use BGP tunnel attribute";
          }
    
          leaf no-install {
            type empty;
            description
              "Dont install received routes in forwarding";
          }
    
          leaf route-age-bgp-view {
            type empty;
            description
              "Maintain BGP route's age based on Update messages only";
          }
    
          container output-queue-priority {
            description
              "Default output-queue to assign updates to";
            uses bgp-output-queue-priority-class;
          }  // container output-queue-priority
    
          container route-refresh-priority {
            description
              "Default output-queue to assign route refreshes to";
            uses bgp-output-queue-priority-class;
          }  // container route-refresh-priority
    
          container withdraw-priority {
            description
              "Default output-queue to assign withdrawn routes to";
            uses bgp-output-queue-priority-class;
          }  // container withdraw-priority
    
          leaf advertise-srv6-service {
            type empty;
            description "Advertise SRv6 service";
          }
    
          leaf accept-srv6-service {
            type empty;
            description "Accept SRv6 service";
          }
    
          container aggregate-label {
            presence "enable aggregate-label";
            description
              "Aggregate labels of incoming routes with the same FEC";
            uses apply-advanced;
    
            leaf community {
              type string;
              description
                "Community to identify the FEC of incoming routes";
            }
          }  // container aggregate-label
    
          leaf per-prefix-label {
            type empty;
            description
              "Allocate a unique label to each advertised prefix";
          }
    
          leaf per-group-label {
            type empty;
            description
              "Advertise prefixes with unique labels per group";
          }
    
          container traffic-statistics {
            presence "enable traffic-statistics";
            description
              "Collect statistics for BGP label-switched paths";
            uses bgpaf-traffic-statistics;
          }  // container traffic-statistics
    
          container lu-export {
            presence "enable lu-export";
            description
              "Install Classful Transport routes in inet6.3";
            uses apply-advanced;
          }  // container lu-export
    
          container protection {
            presence "enable protection";
            description
              "Compute backup path for active nexthop failure";
          }  // container protection
        }  // grouping bgp-afi-inet6-transport
    
        grouping bgp-afi-l2vpn {
          uses apply-advanced;
    
          container prefix-limit {
            description
              "Limit maximum number of prefixes from a peer";
            uses bgpaf-prefix-limit;
          }  // container prefix-limit
    
          container accepted-prefix-limit {
            description
              "Limit maximum number of prefixes accepted from a peer";
            uses bgpaf-accepted-prefix-limit;
          }  // container accepted-prefix-limit
    
          container rib-group {
            description "Routing table group";
            uses rib_group_inet_type;
          }  // container rib-group
    
          container add-path {
            description
              "Advertise multiple paths to peer";
            uses apath-options;
          }  // container add-path
    
          container aigp {
            presence "enable aigp";
            description
              "Allow sending and receiving of AIGP attribute";
            uses bgpaf-aigp-options;
          }  // container aigp
    
          leaf damping {
            type empty;
            description
              "Enable route flap damping";
          }
    
          leaf local-ipv4-address {
            type jt:ipv4addr;
            description "Local IPv4 address";
          }
    
          container loops {
            description
              "Allow local AS in received AS paths";
            uses bgpaf-loops;
          }  // container loops
    
          container delay-route-advertisements {
            junos:must "(!("system processes routing bgp rib-sharding"))";
            junos:must-message "Can't be configured together with rib-sharding";
            presence
              "enable delay-route-advertisements";
            description
              "Delay route updates for this family until FIB-sync";
            uses apply-advanced;
    
            leaf always-wait-for-krt-drain {
              type empty;
              description
                "Wait for KRT-queue drain for more-specific prefixes";
            }
    
            container minimum-delay {
              description
                "Minumum-delay to ensure KRT sees the route flash";
              uses apply-advanced;
    
              leaf routing-uptime {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "1 .. 36000";
                  }
                }
                description
                  "Min delay(sec) advertisement after RPD start";
              }
    
              leaf inbound-convergence {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "1 .. 36000";
                  }
                }
                description
                  "Min delay(sec) advertisement after source-peer sent all routes";
              }
            }  // container minimum-delay
    
            container maximum-delay {
              description
                "Maximum delay deferring routes";
              uses apply-advanced;
    
              leaf route-age {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "1 .. 36000";
                  }
                }
                description
                  "Max delay(sec) advertisement route age";
              }
    
              leaf routing-uptime {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "1 .. 36000";
                  }
                }
                description
                  "Max delay(sec) advertisement after RPD start";
              }
            }  // container maximum-delay
          }  // container delay-route-advertisements
    
          container nexthop-resolution {
            description
              "Configure nexthop resolution properties";
            uses apply-advanced;
    
            leaf no-resolution {
              type empty;
              description
                "Consider nexthop good without resolution attempt";
            }
    
            leaf preserve-nexthop-hierarchy {
              type empty;
              description
                "Attempt preserving resolved nexthop chain in forwarding";
            }
          }  // container nexthop-resolution
    
          container defer-initial-multipath-build {
            presence
              "enable defer-initial-multipath-build";
            description
              "Defer initial multipath build until EOR is received";
            uses apply-advanced;
    
            leaf maximum-delay {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "1 .. 3600";
                }
              }
              description
                "Max delay(sec) multipath build after peer is up";
            }
          }  // container defer-initial-multipath-build
    
          container graceful-restart {
            description
              "BGP graceful restart options";
            uses bgp-af-gr;
          }  // container graceful-restart
    
          leaf extended-nexthop {
            junos:must "(!("system processes routing bgp rib-sharding"))";
            junos:must-message "Can't be configured together with rib-sharding";
            type empty;
            description
              "Extended nexthop encoding";
          }
    
          leaf extended-nexthop-color {
            type empty;
            description
              "Resolve using extended color nexthop";
          }
    
          leaf extended-nexthop-tunnel {
            type empty;
            description
              "Use BGP tunnel attribute";
          }
    
          leaf no-install {
            type empty;
            description
              "Dont install received routes in forwarding";
          }
    
          leaf route-age-bgp-view {
            type empty;
            description
              "Maintain BGP route's age based on Update messages only";
          }
    
          container output-queue-priority {
            description
              "Default output-queue to assign updates to";
            uses bgp-output-queue-priority-class;
          }  // container output-queue-priority
    
          container route-refresh-priority {
            description
              "Default output-queue to assign route refreshes to";
            uses bgp-output-queue-priority-class;
          }  // container route-refresh-priority
    
          container withdraw-priority {
            description
              "Default output-queue to assign withdrawn routes to";
            uses bgp-output-queue-priority-class;
          }  // container withdraw-priority
    
          leaf advertise-srv6-service {
            type empty;
            description "Advertise SRv6 service";
          }
    
          leaf accept-srv6-service {
            type empty;
            description "Accept SRv6 service";
          }
    
          container egress-protection {
            junos:must "(!(".. .. .. .. type external"))";
            junos:must-message "Egress-protection is valid only for IBGP";
            presence "enable egress-protection";
            description
              "Egress router protection";
            uses apply-advanced;
    
            container context-identifier {
              description "Context identifier";
              uses apply-advanced;
    
              leaf context-id {
                junos:must "("protocols mpls egress-protection context-identifier $$ primary")";
                junos:must-message "context-identifier must be type primary";
                junos:must "("protocols mpls egress-protection context-identifier $$")";
                junos:must-message "same context-identifier must be defined in protocols mpls egress-protection";
                type jt:ipv4addr;
                description "IP address";
              }
            }  // container context-identifier
    
            leaf-list keep-import {
              junos:must "("policy-options policy-statement ")";
              junos:must-message "policy-options policy-statement";
              type jt:policy-algebra;
              ordered-by user;
              description "Import policy";
            }
          }  // container egress-protection
        }  // grouping bgp-afi-l2vpn
    
        grouping bgp-afi-l3vpn {
          uses apply-advanced;
    
          container prefix-limit {
            description
              "Limit maximum number of prefixes from a peer";
            uses bgpaf-prefix-limit;
          }  // container prefix-limit
    
          container accepted-prefix-limit {
            description
              "Limit maximum number of prefixes accepted from a peer";
            uses bgpaf-accepted-prefix-limit;
          }  // container accepted-prefix-limit
    
          container rib-group {
            description "Routing table group";
            uses rib_group_inet_type;
          }  // container rib-group
    
          container add-path {
            description
              "Advertise multiple paths to peer";
            uses apath-options;
          }  // container add-path
    
          container aigp {
            presence "enable aigp";
            description
              "Allow sending and receiving of AIGP attribute";
            uses bgpaf-aigp-options;
          }  // container aigp
    
          leaf damping {
            type empty;
            description
              "Enable route flap damping";
          }
    
          leaf local-ipv4-address {
            type jt:ipv4addr;
            description "Local IPv4 address";
          }
    
          container loops {
            description
              "Allow local AS in received AS paths";
            uses bgpaf-loops;
          }  // container loops
    
          container delay-route-advertisements {
            junos:must "(!("system processes routing bgp rib-sharding"))";
            junos:must-message "Can't be configured together with rib-sharding";
            presence
              "enable delay-route-advertisements";
            description
              "Delay route updates for this family until FIB-sync";
            uses apply-advanced;
    
            leaf always-wait-for-krt-drain {
              type empty;
              description
                "Wait for KRT-queue drain for more-specific prefixes";
            }
    
            container minimum-delay {
              description
                "Minumum-delay to ensure KRT sees the route flash";
              uses apply-advanced;
    
              leaf routing-uptime {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "1 .. 36000";
                  }
                }
                description
                  "Min delay(sec) advertisement after RPD start";
              }
    
              leaf inbound-convergence {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "1 .. 36000";
                  }
                }
                description
                  "Min delay(sec) advertisement after source-peer sent all routes";
              }
            }  // container minimum-delay
    
            container maximum-delay {
              description
                "Maximum delay deferring routes";
              uses apply-advanced;
    
              leaf route-age {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "1 .. 36000";
                  }
                }
                description
                  "Max delay(sec) advertisement route age";
              }
    
              leaf routing-uptime {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "1 .. 36000";
                  }
                }
                description
                  "Max delay(sec) advertisement after RPD start";
              }
            }  // container maximum-delay
          }  // container delay-route-advertisements
    
          container nexthop-resolution {
            description
              "Configure nexthop resolution properties";
            uses apply-advanced;
    
            leaf no-resolution {
              type empty;
              description
                "Consider nexthop good without resolution attempt";
            }
    
            leaf preserve-nexthop-hierarchy {
              type empty;
              description
                "Attempt preserving resolved nexthop chain in forwarding";
            }
          }  // container nexthop-resolution
    
          container defer-initial-multipath-build {
            presence
              "enable defer-initial-multipath-build";
            description
              "Defer initial multipath build until EOR is received";
            uses apply-advanced;
    
            leaf maximum-delay {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "1 .. 3600";
                }
              }
              description
                "Max delay(sec) multipath build after peer is up";
            }
          }  // container defer-initial-multipath-build
    
          container graceful-restart {
            description
              "BGP graceful restart options";
            uses bgp-af-gr;
          }  // container graceful-restart
    
          leaf extended-nexthop {
            junos:must "(!("system processes routing bgp rib-sharding"))";
            junos:must-message "Can't be configured together with rib-sharding";
            type empty;
            description
              "Extended nexthop encoding";
          }
    
          leaf extended-nexthop-color {
            type empty;
            description
              "Resolve using extended color nexthop";
          }
    
          leaf extended-nexthop-tunnel {
            type empty;
            description
              "Use BGP tunnel attribute";
          }
    
          leaf no-install {
            type empty;
            description
              "Dont install received routes in forwarding";
          }
    
          leaf route-age-bgp-view {
            type empty;
            description
              "Maintain BGP route's age based on Update messages only";
          }
    
          container output-queue-priority {
            description
              "Default output-queue to assign updates to";
            uses bgp-output-queue-priority-class;
          }  // container output-queue-priority
    
          container route-refresh-priority {
            description
              "Default output-queue to assign route refreshes to";
            uses bgp-output-queue-priority-class;
          }  // container route-refresh-priority
    
          container withdraw-priority {
            description
              "Default output-queue to assign withdrawn routes to";
            uses bgp-output-queue-priority-class;
          }  // container withdraw-priority
    
          leaf advertise-srv6-service {
            type empty;
            description "Advertise SRv6 service";
          }
    
          leaf accept-srv6-service {
            type empty;
            description "Accept SRv6 service";
          }
    
          container aggregate-label {
            presence "enable aggregate-label";
            description
              "Aggregate labels of incoming routes with the same FEC";
            uses apply-advanced;
    
            leaf community {
              type string;
              description
                "Community to identify the FEC of incoming routes";
            }
          }  // container aggregate-label
    
          container egress-protection {
            junos:must "(!(".. .. .. .. type external"))";
            junos:must-message "Egress-protection is valid only for IBGP";
            presence "enable egress-protection";
            description
              "Egress router protection";
            uses apply-advanced;
    
            container context-identifier {
              description "Context identifier";
              uses apply-advanced;
    
              leaf context-id {
                junos:must "("protocols mpls egress-protection context-identifier $$ primary")";
                junos:must-message "context-identifier must be type primary";
                junos:must "("protocols mpls egress-protection context-identifier $$")";
                junos:must-message "same context-identifier must be defined in protocols mpls egress-protection";
                type jt:ipv4addr;
                description "IP address";
              }
            }  // container context-identifier
    
            leaf-list keep-import {
              junos:must "("policy-options policy-statement ")";
              junos:must-message "policy-options policy-statement";
              type jt:policy-algebra;
              ordered-by user;
              description "Import policy";
            }
          }  // container egress-protection
    
          leaf accept-local-nexthop {
            type empty;
            description
              "Enable processing of routes with own nexthop";
          }
        }  // grouping bgp-afi-l3vpn
    
        grouping bgp-afi-labeled {
          uses apply-advanced;
    
          container prefix-limit {
            description
              "Limit maximum number of prefixes from a peer";
            uses bgpaf-prefix-limit;
          }  // container prefix-limit
    
          container accepted-prefix-limit {
            description
              "Limit maximum number of prefixes accepted from a peer";
            uses bgpaf-accepted-prefix-limit;
          }  // container accepted-prefix-limit
    
          container rib-group {
            description "Routing table group";
            uses rib_group_inet_type;
          }  // container rib-group
    
          container add-path {
            description
              "Advertise multiple paths to peer";
            uses apath-options;
          }  // container add-path
    
          container aigp {
            presence "enable aigp";
            description
              "Allow sending and receiving of AIGP attribute";
            uses bgpaf-aigp-options;
          }  // container aigp
    
          leaf damping {
            type empty;
            description
              "Enable route flap damping";
          }
    
          leaf local-ipv4-address {
            type jt:ipv4addr;
            description "Local IPv4 address";
          }
    
          container loops {
            description
              "Allow local AS in received AS paths";
            uses bgpaf-loops;
          }  // container loops
    
          container delay-route-advertisements {
            junos:must "(!("system processes routing bgp rib-sharding"))";
            junos:must-message "Can't be configured together with rib-sharding";
            presence
              "enable delay-route-advertisements";
            description
              "Delay route updates for this family until FIB-sync";
            uses apply-advanced;
    
            leaf always-wait-for-krt-drain {
              type empty;
              description
                "Wait for KRT-queue drain for more-specific prefixes";
            }
    
            container minimum-delay {
              description
                "Minumum-delay to ensure KRT sees the route flash";
              uses apply-advanced;
    
              leaf routing-uptime {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "1 .. 36000";
                  }
                }
                description
                  "Min delay(sec) advertisement after RPD start";
              }
    
              leaf inbound-convergence {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "1 .. 36000";
                  }
                }
                description
                  "Min delay(sec) advertisement after source-peer sent all routes";
              }
            }  // container minimum-delay
    
            container maximum-delay {
              description
                "Maximum delay deferring routes";
              uses apply-advanced;
    
              leaf route-age {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "1 .. 36000";
                  }
                }
                description
                  "Max delay(sec) advertisement route age";
              }
    
              leaf routing-uptime {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "1 .. 36000";
                  }
                }
                description
                  "Max delay(sec) advertisement after RPD start";
              }
            }  // container maximum-delay
          }  // container delay-route-advertisements
    
          container nexthop-resolution {
            description
              "Configure nexthop resolution properties";
            uses apply-advanced;
    
            leaf no-resolution {
              type empty;
              description
                "Consider nexthop good without resolution attempt";
            }
    
            leaf preserve-nexthop-hierarchy {
              type empty;
              description
                "Attempt preserving resolved nexthop chain in forwarding";
            }
          }  // container nexthop-resolution
    
          container defer-initial-multipath-build {
            presence
              "enable defer-initial-multipath-build";
            description
              "Defer initial multipath build until EOR is received";
            uses apply-advanced;
    
            leaf maximum-delay {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "1 .. 3600";
                }
              }
              description
                "Max delay(sec) multipath build after peer is up";
            }
          }  // container defer-initial-multipath-build
    
          container graceful-restart {
            description
              "BGP graceful restart options";
            uses bgp-af-gr;
          }  // container graceful-restart
    
          leaf extended-nexthop {
            junos:must "(!("system processes routing bgp rib-sharding"))";
            junos:must-message "Can't be configured together with rib-sharding";
            type empty;
            description
              "Extended nexthop encoding";
          }
    
          leaf extended-nexthop-color {
            type empty;
            description
              "Resolve using extended color nexthop";
          }
    
          leaf extended-nexthop-tunnel {
            type empty;
            description
              "Use BGP tunnel attribute";
          }
    
          leaf no-install {
            type empty;
            description
              "Dont install received routes in forwarding";
          }
    
          leaf route-age-bgp-view {
            type empty;
            description
              "Maintain BGP route's age based on Update messages only";
          }
    
          container output-queue-priority {
            description
              "Default output-queue to assign updates to";
            uses bgp-output-queue-priority-class;
          }  // container output-queue-priority
    
          container route-refresh-priority {
            description
              "Default output-queue to assign route refreshes to";
            uses bgp-output-queue-priority-class;
          }  // container route-refresh-priority
    
          container withdraw-priority {
            description
              "Default output-queue to assign withdrawn routes to";
            uses bgp-output-queue-priority-class;
          }  // container withdraw-priority
    
          leaf advertise-srv6-service {
            type empty;
            description "Advertise SRv6 service";
          }
    
          leaf accept-srv6-service {
            type empty;
            description "Accept SRv6 service";
          }
    
          container aggregate-label {
            presence "enable aggregate-label";
            description
              "Aggregate labels of incoming routes with the same FEC";
            uses apply-advanced;
    
            leaf community {
              type string;
              description
                "Community to identify the FEC of incoming routes";
            }
          }  // container aggregate-label
    
          leaf per-prefix-label {
            type empty;
            description
              "Allocate a unique label to each advertised prefix";
          }
    
          leaf per-group-label {
            type empty;
            description
              "Advertise prefixes with unique labels per group";
          }
    
          container traffic-statistics {
            presence "enable traffic-statistics";
            description
              "Collect statistics for BGP label-switched paths";
            uses bgpaf-traffic-statistics;
          }  // container traffic-statistics
    
          list topology {
            junos:must "(!("system processes routing bgp rib-sharding"))";
            junos:must-message "Can't be configured together with rib-sharding";
            junos:must "(!("routing-options no-multi-topology-routing"))";
            junos:must-message "Multi topology routing is disabled";
            key "name";
            ordered-by user;
            description
              "Multi topology routing tables";
            leaf name {
              type string {
                junos:posix-pattern "!^((.*:.*)|(.{129,}))$";
                junos:pattern-message "Must be a non-reserved string of 128 characters or less";
              }
              description "Topology name";
            }
    
            uses apply-advanced;
    
            leaf community {
              type string;
              description
                "Community to identify multi topology routes";
            }
          }  // list topology
    
          container rib {
            description
              "Select table used by labeled unicast routes";
            uses rib-inet3;
          }  // container rib
    
          container explicit-null {
            presence "enable explicit-null";
            description
              "Advertise explicit null";
            leaf connected-only {
              type empty;
              description
                "Advertise explicit null only for connected routes";
            }
          }  // container explicit-null
    
          container protection {
            junos:must "((!(".. .. .. .. type internal") && !(".. .. .. .. .. type internal")))";
            junos:must-message "Protection for labeled-bgp valid only for EBGP";
            presence "enable protection";
            description
              "Compute backup path for active nexthop failure";
            uses apply-advanced;
          }  // container protection
    
          container egress-protection {
            junos:must "(!(".. .. .. .. type external"))";
            junos:must-message "Egress-protection is valid only for IBGP";
            presence "enable egress-protection";
            description
              "Egress router protection";
            uses apply-advanced;
    
            container context-identifier {
              description "Context identifier";
              uses apply-advanced;
    
              leaf context-id {
                junos:must "("protocols mpls egress-protection context-identifier $$ primary")";
                junos:must-message "context-identifier must be type primary";
                junos:must "("protocols mpls egress-protection context-identifier $$")";
                junos:must-message "same context-identifier must be defined in protocols mpls egress-protection";
                type jt:ipv4addr;
                description "IP address";
              }
            }  // container context-identifier
    
            leaf-list keep-import {
              junos:must "("policy-options policy-statement ")";
              junos:must-message "policy-options policy-statement";
              type jt:policy-algebra;
              ordered-by user;
              description "Import policy";
            }
          }  // container egress-protection
    
          leaf resolve-vpn {
            type empty;
            description
              "Install received NLRI in inet.3 also";
          }
    
          container entropy-label {
            presence "enable entropy-label";
            description
              "Use entropy label for entropy label capable BGP LSPs";
            uses apply-advanced;
    
            leaf-list import {
              type jt:policy-algebra;
              ordered-by user;
              description
                "Policy to select BGP LSPs to use entropy label";
            }
    
            leaf no-next-hop-validation {
              type empty;
              description
                "Don't validate next hop field against route next hop";
            }
          }  // container entropy-label
        }  // grouping bgp-afi-labeled
    
        grouping bgp-afi-srte {
          uses apply-advanced;
    
          container prefix-limit {
            description
              "Limit maximum number of prefixes from a peer";
            uses bgpaf-prefix-limit;
          }  // container prefix-limit
    
          container accepted-prefix-limit {
            description
              "Limit maximum number of prefixes accepted from a peer";
            uses bgpaf-accepted-prefix-limit;
          }  // container accepted-prefix-limit
    
          leaf damping {
            type empty;
            description
              "Enable route flap damping";
          }
    
          container loops {
            description
              "Allow local AS in received AS paths";
            uses bgpaf-loops;
          }  // container loops
    
          container graceful-restart {
            description
              "BGP graceful restart options";
            uses bgp-af-gr;
          }  // container graceful-restart
    
          leaf no-install {
            type empty;
            description
              "Dont install received routes in forwarding";
          }
    
          container output-queue-priority {
            description
              "Default output-queue to assign updates to";
            uses bgp-output-queue-priority-class;
          }  // container output-queue-priority
    
          container route-refresh-priority {
            description
              "Default output-queue to assign route refreshes to";
            uses bgp-output-queue-priority-class;
          }  // container route-refresh-priority
    
          container withdraw-priority {
            description
              "Default output-queue to assign withdrawn routes to";
            uses bgp-output-queue-priority-class;
          }  // container withdraw-priority
        }  // grouping bgp-afi-srte
    
        grouping bgp-afi-topo {
          uses apply-advanced;
    
          container prefix-limit {
            description
              "Limit maximum number of prefixes from a peer";
            uses bgpaf-prefix-limit;
          }  // container prefix-limit
    
          container accepted-prefix-limit {
            description
              "Limit maximum number of prefixes accepted from a peer";
            uses bgpaf-accepted-prefix-limit;
          }  // container accepted-prefix-limit
    
          container rib-group {
            description "Routing table group";
            uses rib_group_inet_type;
          }  // container rib-group
    
          container add-path {
            description
              "Advertise multiple paths to peer";
            uses apath-options;
          }  // container add-path
    
          container aigp {
            presence "enable aigp";
            description
              "Allow sending and receiving of AIGP attribute";
            uses bgpaf-aigp-options;
          }  // container aigp
    
          leaf damping {
            type empty;
            description
              "Enable route flap damping";
          }
    
          leaf local-ipv4-address {
            type jt:ipv4addr;
            description "Local IPv4 address";
          }
    
          container loops {
            description
              "Allow local AS in received AS paths";
            uses bgpaf-loops;
          }  // container loops
    
          container delay-route-advertisements {
            junos:must "(!("system processes routing bgp rib-sharding"))";
            junos:must-message "Can't be configured together with rib-sharding";
            presence
              "enable delay-route-advertisements";
            description
              "Delay route updates for this family until FIB-sync";
            uses apply-advanced;
    
            leaf always-wait-for-krt-drain {
              type empty;
              description
                "Wait for KRT-queue drain for more-specific prefixes";
            }
    
            container minimum-delay {
              description
                "Minumum-delay to ensure KRT sees the route flash";
              uses apply-advanced;
    
              leaf routing-uptime {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "1 .. 36000";
                  }
                }
                description
                  "Min delay(sec) advertisement after RPD start";
              }
    
              leaf inbound-convergence {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "1 .. 36000";
                  }
                }
                description
                  "Min delay(sec) advertisement after source-peer sent all routes";
              }
            }  // container minimum-delay
    
            container maximum-delay {
              description
                "Maximum delay deferring routes";
              uses apply-advanced;
    
              leaf route-age {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "1 .. 36000";
                  }
                }
                description
                  "Max delay(sec) advertisement route age";
              }
    
              leaf routing-uptime {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "1 .. 36000";
                  }
                }
                description
                  "Max delay(sec) advertisement after RPD start";
              }
            }  // container maximum-delay
          }  // container delay-route-advertisements
    
          container nexthop-resolution {
            description
              "Configure nexthop resolution properties";
            uses apply-advanced;
    
            leaf no-resolution {
              type empty;
              description
                "Consider nexthop good without resolution attempt";
            }
    
            leaf preserve-nexthop-hierarchy {
              type empty;
              description
                "Attempt preserving resolved nexthop chain in forwarding";
            }
          }  // container nexthop-resolution
    
          container defer-initial-multipath-build {
            presence
              "enable defer-initial-multipath-build";
            description
              "Defer initial multipath build until EOR is received";
            uses apply-advanced;
    
            leaf maximum-delay {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "1 .. 3600";
                }
              }
              description
                "Max delay(sec) multipath build after peer is up";
            }
          }  // container defer-initial-multipath-build
    
          container graceful-restart {
            description
              "BGP graceful restart options";
            uses bgp-af-gr;
          }  // container graceful-restart
    
          leaf extended-nexthop {
            junos:must "(!("system processes routing bgp rib-sharding"))";
            junos:must-message "Can't be configured together with rib-sharding";
            type empty;
            description
              "Extended nexthop encoding";
          }
    
          leaf extended-nexthop-color {
            type empty;
            description
              "Resolve using extended color nexthop";
          }
    
          leaf extended-nexthop-tunnel {
            type empty;
            description
              "Use BGP tunnel attribute";
          }
    
          leaf no-install {
            type empty;
            description
              "Dont install received routes in forwarding";
          }
    
          leaf route-age-bgp-view {
            type empty;
            description
              "Maintain BGP route's age based on Update messages only";
          }
    
          container output-queue-priority {
            description
              "Default output-queue to assign updates to";
            uses bgp-output-queue-priority-class;
          }  // container output-queue-priority
    
          container route-refresh-priority {
            description
              "Default output-queue to assign route refreshes to";
            uses bgp-output-queue-priority-class;
          }  // container route-refresh-priority
    
          container withdraw-priority {
            description
              "Default output-queue to assign withdrawn routes to";
            uses bgp-output-queue-priority-class;
          }  // container withdraw-priority
    
          leaf advertise-srv6-service {
            type empty;
            description "Advertise SRv6 service";
          }
    
          leaf accept-srv6-service {
            type empty;
            description "Accept SRv6 service";
          }
    
          container protection {
            junos:must "((!(".. .. .. .. type internal") && !(".. .. .. .. .. type internal")))";
            junos:must-message "Protection is valid only for EBGP";
            presence "enable protection";
            description
              "Compute backup path for active nexthop failure";
          }  // container protection
    
          list topology {
            junos:must "(!("system processes routing bgp rib-sharding"))";
            junos:must-message "Can't be configured together with rib-sharding";
            junos:must "(!("routing-options no-multi-topology-routing"))";
            junos:must-message "Multi topology routing is disabled";
            key "name";
            ordered-by user;
            description
              "Multi topology routing tables";
            leaf name {
              type string {
                junos:posix-pattern "!^((.*:.*)|(.{129,}))$";
                junos:pattern-message "Must be a non-reserved string of 128 characters or less";
              }
              description "Topology name";
            }
    
            uses apply-advanced;
    
            leaf community {
              type string;
              description
                "Community to identify multi topology routes";
            }
          }  // list topology
        }  // grouping bgp-afi-topo
    
        grouping bgp-afi-vpn {
          uses apply-advanced;
    
          container prefix-limit {
            description
              "Limit maximum number of prefixes from a peer";
            uses bgpaf-prefix-limit;
          }  // container prefix-limit
    
          container accepted-prefix-limit {
            description
              "Limit maximum number of prefixes accepted from a peer";
            uses bgpaf-accepted-prefix-limit;
          }  // container accepted-prefix-limit
    
          container rib-group {
            description "Routing table group";
            uses rib_group_inet_type;
          }  // container rib-group
    
          container add-path {
            description
              "Advertise multiple paths to peer";
            uses apath-options;
          }  // container add-path
    
          container aigp {
            presence "enable aigp";
            description
              "Allow sending and receiving of AIGP attribute";
            uses bgpaf-aigp-options;
          }  // container aigp
    
          leaf damping {
            type empty;
            description
              "Enable route flap damping";
          }
    
          leaf local-ipv4-address {
            type jt:ipv4addr;
            description "Local IPv4 address";
          }
    
          container loops {
            description
              "Allow local AS in received AS paths";
            uses bgpaf-loops;
          }  // container loops
    
          container delay-route-advertisements {
            junos:must "(!("system processes routing bgp rib-sharding"))";
            junos:must-message "Can't be configured together with rib-sharding";
            presence
              "enable delay-route-advertisements";
            description
              "Delay route updates for this family until FIB-sync";
            uses apply-advanced;
    
            leaf always-wait-for-krt-drain {
              type empty;
              description
                "Wait for KRT-queue drain for more-specific prefixes";
            }
    
            container minimum-delay {
              description
                "Minumum-delay to ensure KRT sees the route flash";
              uses apply-advanced;
    
              leaf routing-uptime {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "1 .. 36000";
                  }
                }
                description
                  "Min delay(sec) advertisement after RPD start";
              }
    
              leaf inbound-convergence {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "1 .. 36000";
                  }
                }
                description
                  "Min delay(sec) advertisement after source-peer sent all routes";
              }
            }  // container minimum-delay
    
            container maximum-delay {
              description
                "Maximum delay deferring routes";
              uses apply-advanced;
    
              leaf route-age {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "1 .. 36000";
                  }
                }
                description
                  "Max delay(sec) advertisement route age";
              }
    
              leaf routing-uptime {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "1 .. 36000";
                  }
                }
                description
                  "Max delay(sec) advertisement after RPD start";
              }
            }  // container maximum-delay
          }  // container delay-route-advertisements
    
          container nexthop-resolution {
            description
              "Configure nexthop resolution properties";
            uses apply-advanced;
    
            leaf no-resolution {
              type empty;
              description
                "Consider nexthop good without resolution attempt";
            }
    
            leaf preserve-nexthop-hierarchy {
              type empty;
              description
                "Attempt preserving resolved nexthop chain in forwarding";
            }
          }  // container nexthop-resolution
    
          container defer-initial-multipath-build {
            presence
              "enable defer-initial-multipath-build";
            description
              "Defer initial multipath build until EOR is received";
            uses apply-advanced;
    
            leaf maximum-delay {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "1 .. 3600";
                }
              }
              description
                "Max delay(sec) multipath build after peer is up";
            }
          }  // container defer-initial-multipath-build
    
          container graceful-restart {
            description
              "BGP graceful restart options";
            uses bgp-af-gr;
          }  // container graceful-restart
    
          leaf extended-nexthop {
            junos:must "(!("system processes routing bgp rib-sharding"))";
            junos:must-message "Can't be configured together with rib-sharding";
            type empty;
            description
              "Extended nexthop encoding";
          }
    
          leaf extended-nexthop-color {
            type empty;
            description
              "Resolve using extended color nexthop";
          }
    
          leaf extended-nexthop-tunnel {
            type empty;
            description
              "Use BGP tunnel attribute";
          }
    
          leaf no-install {
            type empty;
            description
              "Dont install received routes in forwarding";
          }
    
          leaf route-age-bgp-view {
            type empty;
            description
              "Maintain BGP route's age based on Update messages only";
          }
    
          container output-queue-priority {
            description
              "Default output-queue to assign updates to";
            uses bgp-output-queue-priority-class;
          }  // container output-queue-priority
    
          container route-refresh-priority {
            description
              "Default output-queue to assign route refreshes to";
            uses bgp-output-queue-priority-class;
          }  // container route-refresh-priority
    
          container withdraw-priority {
            description
              "Default output-queue to assign withdrawn routes to";
            uses bgp-output-queue-priority-class;
          }  // container withdraw-priority
    
          leaf advertise-srv6-service {
            type empty;
            description "Advertise SRv6 service";
          }
    
          leaf accept-srv6-service {
            type empty;
            description "Accept SRv6 service";
          }
    
          container aggregate-label {
            presence "enable aggregate-label";
            description
              "Aggregate labels of incoming routes with the same FEC";
            uses apply-advanced;
    
            leaf community {
              type string;
              description
                "Community to identify the FEC of incoming routes";
            }
          }  // container aggregate-label
        }  // grouping bgp-afi-vpn
    
        grouping bgp-afi-vpn-protection {
          uses apply-advanced;
    
          container prefix-limit {
            description
              "Limit maximum number of prefixes from a peer";
            uses bgpaf-prefix-limit;
          }  // container prefix-limit
    
          container accepted-prefix-limit {
            description
              "Limit maximum number of prefixes accepted from a peer";
            uses bgpaf-accepted-prefix-limit;
          }  // container accepted-prefix-limit
    
          container rib-group {
            description "Routing table group";
            uses rib_group_inet_type;
          }  // container rib-group
    
          container add-path {
            description
              "Advertise multiple paths to peer";
            uses apath-options;
          }  // container add-path
    
          container aigp {
            presence "enable aigp";
            description
              "Allow sending and receiving of AIGP attribute";
            uses bgpaf-aigp-options;
          }  // container aigp
    
          leaf damping {
            type empty;
            description
              "Enable route flap damping";
          }
    
          leaf local-ipv4-address {
            type jt:ipv4addr;
            description "Local IPv4 address";
          }
    
          container loops {
            description
              "Allow local AS in received AS paths";
            uses bgpaf-loops;
          }  // container loops
    
          container delay-route-advertisements {
            junos:must "(!("system processes routing bgp rib-sharding"))";
            junos:must-message "Can't be configured together with rib-sharding";
            presence
              "enable delay-route-advertisements";
            description
              "Delay route updates for this family until FIB-sync";
            uses apply-advanced;
    
            leaf always-wait-for-krt-drain {
              type empty;
              description
                "Wait for KRT-queue drain for more-specific prefixes";
            }
    
            container minimum-delay {
              description
                "Minumum-delay to ensure KRT sees the route flash";
              uses apply-advanced;
    
              leaf routing-uptime {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "1 .. 36000";
                  }
                }
                description
                  "Min delay(sec) advertisement after RPD start";
              }
    
              leaf inbound-convergence {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "1 .. 36000";
                  }
                }
                description
                  "Min delay(sec) advertisement after source-peer sent all routes";
              }
            }  // container minimum-delay
    
            container maximum-delay {
              description
                "Maximum delay deferring routes";
              uses apply-advanced;
    
              leaf route-age {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "1 .. 36000";
                  }
                }
                description
                  "Max delay(sec) advertisement route age";
              }
    
              leaf routing-uptime {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "1 .. 36000";
                  }
                }
                description
                  "Max delay(sec) advertisement after RPD start";
              }
            }  // container maximum-delay
          }  // container delay-route-advertisements
    
          container nexthop-resolution {
            description
              "Configure nexthop resolution properties";
            uses apply-advanced;
    
            leaf no-resolution {
              type empty;
              description
                "Consider nexthop good without resolution attempt";
            }
    
            leaf preserve-nexthop-hierarchy {
              type empty;
              description
                "Attempt preserving resolved nexthop chain in forwarding";
            }
          }  // container nexthop-resolution
    
          container defer-initial-multipath-build {
            presence
              "enable defer-initial-multipath-build";
            description
              "Defer initial multipath build until EOR is received";
            uses apply-advanced;
    
            leaf maximum-delay {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "1 .. 3600";
                }
              }
              description
                "Max delay(sec) multipath build after peer is up";
            }
          }  // container defer-initial-multipath-build
    
          container graceful-restart {
            description
              "BGP graceful restart options";
            uses bgp-af-gr;
          }  // container graceful-restart
    
          leaf extended-nexthop {
            junos:must "(!("system processes routing bgp rib-sharding"))";
            junos:must-message "Can't be configured together with rib-sharding";
            type empty;
            description
              "Extended nexthop encoding";
          }
    
          leaf extended-nexthop-color {
            type empty;
            description
              "Resolve using extended color nexthop";
          }
    
          leaf extended-nexthop-tunnel {
            type empty;
            description
              "Use BGP tunnel attribute";
          }
    
          leaf no-install {
            type empty;
            description
              "Dont install received routes in forwarding";
          }
    
          leaf route-age-bgp-view {
            type empty;
            description
              "Maintain BGP route's age based on Update messages only";
          }
    
          container output-queue-priority {
            description
              "Default output-queue to assign updates to";
            uses bgp-output-queue-priority-class;
          }  // container output-queue-priority
    
          container route-refresh-priority {
            description
              "Default output-queue to assign route refreshes to";
            uses bgp-output-queue-priority-class;
          }  // container route-refresh-priority
    
          container withdraw-priority {
            description
              "Default output-queue to assign withdrawn routes to";
            uses bgp-output-queue-priority-class;
          }  // container withdraw-priority
    
          leaf advertise-srv6-service {
            type empty;
            description "Advertise SRv6 service";
          }
    
          leaf accept-srv6-service {
            type empty;
            description "Accept SRv6 service";
          }
    
          container aggregate-label {
            presence "enable aggregate-label";
            description
              "Aggregate labels of incoming routes with the same FEC";
            uses apply-advanced;
    
            leaf community {
              type string;
              description
                "Community to identify the FEC of incoming routes";
            }
          }  // container aggregate-label
    
          container egress-protection {
            junos:must "(!(".. .. .. .. type external"))";
            junos:must-message "Egress-protection is valid only for IBGP";
            presence "enable egress-protection";
            description
              "Egress router protection";
            uses apply-advanced;
    
            container context-identifier {
              description "Context identifier";
              uses apply-advanced;
    
              leaf context-id {
                junos:must "("protocols mpls egress-protection context-identifier $$ primary")";
                junos:must-message "context-identifier must be type primary";
                junos:must "("protocols mpls egress-protection context-identifier $$")";
                junos:must-message "same context-identifier must be defined in protocols mpls egress-protection";
                type jt:ipv4addr;
                description "IP address";
              }
            }  // container context-identifier
    
            leaf-list keep-import {
              junos:must "("policy-options policy-statement ")";
              junos:must-message "policy-options policy-statement";
              type jt:policy-algebra;
              ordered-by user;
              description "Import policy";
            }
          }  // container egress-protection
        }  // grouping bgp-afi-vpn-protection
    
        grouping bgp-output-queue-priority-class {
          choice class {
            leaf priority {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "1 .. 16";
                }
              }
              description
                "Output queue priority; higher is better";
            }
            leaf expedited {
              type empty;
              description
                "Expedited queue; highest priority";
            }
          }  // choice class
        }  // grouping bgp-output-queue-priority-class
    
        grouping bgp_filter_obj {
          description
            "Filter to apply to tracing";
          leaf match-on {
            type enumeration {
              enum "prefix" {
                value 0;
                description
                  "Filter based on prefix";
              }
            }
            description
              "Argument on which to match";
          }
    
          leaf-list policy {
            type jt:policy-algebra;
            ordered-by user;
            description "Filter policy";
          }
        }  // grouping bgp_filter_obj
    
        grouping bgpaf-accepted-prefix-limit {
          uses apply-advanced;
    
          leaf maximum {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "1 .. 4294967295";
              }
            }
            description
              "Maximum number of prefixes accepted from a peer";
          }
    
          container teardown {
            junos:must "(!(".. hide-excess"))";
            junos:must-message "Can't be configured together with hide-excess";
            junos:must "(!(".. drop-excess"))";
            junos:must-message "Can't be configured together with drop-excess";
            presence "enable teardown";
            description
              "Clear peer connection on reaching limit";
            uses apply-advanced;
    
            leaf limit-threshold {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "1 .. 100";
                }
              }
              description
                "Percentage of prefix-limit to start warnings";
            }
    
            container idle-timeout {
              presence "enable idle-timeout";
              description
                "Timeout before attempting to restart peer";
              choice idle-parm {
                leaf forever {
                  type empty;
                  description
                    "Idle the peer until the user intervenes";
                }
                leaf timeout {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "1 .. 2400";
                    }
                  }
                  description
                    "Timeout value, in minutes, for restarting peer";
                }
              }  // choice idle-parm
            }  // container idle-timeout
          }  // container teardown
    
          container drop-excess {
            junos:must "(!(".. hide-excess"))";
            junos:must-message "Can't be configured together with hide-excess";
            junos:must "(!(".. teardown"))";
            junos:must-message "Can't be configured together with teardown";
            presence "enable drop-excess";
            description
              "Drop routes from peer on reaching limit";
            uses apply-advanced;
    
            leaf limit-threshold {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "1 .. 100";
                }
              }
              description
                "Percentage of prefix-limit to start warnings";
            }
          }  // container drop-excess
    
          container hide-excess {
            junos:must "(!(".. teardown"))";
            junos:must-message "Can't be configured together with teardown";
            junos:must "(!(".. drop-excess"))";
            junos:must-message "Can't be configured together with drop-excess";
            presence "enable hide-excess";
            description
              "Hide routes from peer on reaching limit";
            uses apply-advanced;
    
            leaf limit-threshold {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "1 .. 100";
                }
              }
              description
                "Percentage of prefix-limit to start warnings";
            }
          }  // container hide-excess
        }  // grouping bgpaf-accepted-prefix-limit
    
        grouping bgpaf-aigp-options {
          uses apply-advanced;
    
          leaf disable {
            type empty;
            description
              "Disable sending and receiving of AIGP attribute";
          }
        }  // grouping bgpaf-aigp-options
    
        grouping bgpaf-loops {
          uses apply-advanced;
    
          leaf loops {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type int32 {
                range "1 .. 10";
              }
            }
            description "AS-Path loop count";
          }
        }  // grouping bgpaf-loops
    
        grouping bgpaf-prefix-limit {
          uses apply-advanced;
    
          leaf maximum {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "1 .. 4294967295";
              }
            }
            description
              "Maximum number of prefixes from a peer";
          }
    
          container teardown {
            junos:must "(!(".. hide-excess"))";
            junos:must-message "Can't be configured together with hide-excess";
            junos:must "(!(".. drop-excess"))";
            junos:must-message "Can't be configured together with drop-excess";
            presence "enable teardown";
            description
              "Clear peer connection on reaching limit";
            uses apply-advanced;
    
            leaf limit-threshold {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "1 .. 100";
                }
              }
              description
                "Percentage of prefix-limit to start warnings";
            }
    
            container idle-timeout {
              presence "enable idle-timeout";
              description
                "Timeout before attempting to restart peer";
              choice idle-parm {
                leaf forever {
                  type empty;
                  description
                    "Idle the peer until the user intervenes";
                }
                leaf timeout {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "1 .. 2400";
                    }
                  }
                  description
                    "Timeout value, in minutes, for restarting peer";
                }
              }  // choice idle-parm
            }  // container idle-timeout
          }  // container teardown
    
          container drop-excess {
            junos:must "(!(".. hide-excess"))";
            junos:must-message "Can't be configured together with hide-excess";
            junos:must "(!(".. teardown"))";
            junos:must-message "Can't be configured together with teardown";
            presence "enable drop-excess";
            description
              "Drop routes from peer on reaching limit";
            uses apply-advanced;
    
            leaf limit-threshold {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "1 .. 100";
                }
              }
              description
                "Percentage of prefix-limit to start warnings";
            }
          }  // container drop-excess
    
          container hide-excess {
            junos:must "(!(".. teardown"))";
            junos:must-message "Can't be configured together with teardown";
            junos:must "(!(".. drop-excess"))";
            junos:must-message "Can't be configured together with drop-excess";
            presence "enable hide-excess";
            description
              "Hide routes from peer on reaching limit";
            uses apply-advanced;
    
            leaf limit-threshold {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "1 .. 100";
                }
              }
              description
                "Percentage of prefix-limit to start warnings";
            }
          }  // container hide-excess
        }  // grouping bgpaf-prefix-limit
    
        grouping bgpaf-traffic-statistics {
          uses apply-advanced;
    
          leaf labeled-path {
            type empty;
            description
              "Ingress labeled path statistics";
          }
    
          container file {
            description
              "Statistics file options";
            leaf filename {
              type string {
                junos:posix-pattern "![/ %]";
                junos:pattern-message "Must not contain '/', % or a space";
                length "1 .. 1024";
              }
              description
                "Name of file in which to write trace information";
            }
    
            leaf replace {
              type empty;
              status deprecated;
              description
                "Replace trace file rather than appending to it";
            }
    
            leaf size {
              type string;
              description
                "Maximum trace file size";
            }
    
            leaf files {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "2 .. 1000";
                }
              }
              default "10";
              description
                "Maximum number of trace files";
            }
    
            leaf no-stamp {
              type empty;
              status deprecated;
              description
                "Do not timestamp trace file";
            }
    
            choice world-readable-choice {
              leaf world-readable {
                type empty;
                description
                  "Allow any user to read the log file";
              }
              leaf no-world-readable {
                type empty;
                description
                  "Don't allow any user to read the log file";
              }
            }  // choice world-readable-choice
          }  // container file
    
          leaf interval {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type int32 {
                range "60 .. 65535";
              }
            }
            description
              "Time to collect statistics (seconds)";
          }
        }  // grouping bgpaf-traffic-statistics
    
        grouping juniper-protocols-bgpmcast {
          description
            "BGP Multicast configuration";
          uses apply-advanced;
    
          container traceoptions {
            description
              "Trace options for BGP Multicast";
            uses apply-advanced;
    
            container file {
              description "Trace file options";
              leaf filename {
                type string {
                  junos:posix-pattern "![/ %]";
                  junos:pattern-message "Must not contain '/', % or a space";
                  length "1 .. 1024";
                }
                description
                  "Name of file in which to write trace information";
              }
    
              leaf replace {
                type empty;
                status deprecated;
                description
                  "Replace trace file rather than appending to it";
              }
    
              leaf size {
                type string;
                description
                  "Maximum trace file size";
              }
    
              leaf files {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "2 .. 1000";
                  }
                }
                default "10";
                description
                  "Maximum number of trace files";
              }
    
              leaf no-stamp {
                type empty;
                status deprecated;
                description
                  "Do not timestamp trace file";
              }
    
              choice world-readable-choice {
                leaf world-readable {
                  type empty;
                  description
                    "Allow any user to read the log file";
                }
                leaf no-world-readable {
                  type empty;
                  description
                    "Don't allow any user to read the log file";
                }
              }  // choice world-readable-choice
            }  // container file
    
            list flag {
              key "name";
              ordered-by user;
              description "Tracing parameters";
              leaf name {
                type enumeration {
                  enum "route" {
                    value 0;
                    description
                      "Trace routing information";
                  }
                  enum "normal" {
                    value 1;
                    description
                      "Trace normal events";
                  }
                  enum "general" {
                    value 2;
                    description
                      "Trace general events";
                  }
                  enum "state" {
                    value 3;
                    description
                      "Trace state transitions";
                  }
                  enum "policy" {
                    value 4;
                    description
                      "Trace policy processing";
                  }
                  enum "task" {
                    value 5;
                    description
                      "Trace routing protocol task processing";
                  }
                  enum "timer" {
                    value 6;
                    description
                      "Trace routing protocol timer processing";
                  }
                  enum "all" {
                    value 7;
                    description
                      "Trace everything";
                  }
                }
              }
    
              leaf send {
                type empty;
                description
                  "Trace transmitted packets";
              }
    
              leaf receive {
                type empty;
                description
                  "Trace received packets";
              }
    
              leaf detail {
                type empty;
                description
                  "Trace detailed information";
              }
    
              leaf disable {
                type empty;
                description
                  "Disable this trace flag";
              }
            }  // list flag
          }  // container traceoptions
        }  // grouping juniper-protocols-bgpmcast
    
        grouping juniper-protocols-bridge {
          uses apply-advanced;
    
          container traceoptions {
            description
              "Trace options for Layer 2 address service";
            uses apply-advanced;
    
            leaf no-remote-trace {
              junos:must "("system tracing")";
              junos:must-message "'no-remote-trace' is valid only when [system tracing] is configured";
              type empty;
              description
                "Disable remote tracing";
            }
    
            container file {
              description
                "Trace file information";
              leaf filename {
                type string {
                  junos:posix-pattern "![/ %]";
                  junos:pattern-message "Must not contain '/', % or a space";
                  length "1 .. 1024";
                }
                description
                  "Name of file in which to write trace information";
              }
    
              leaf size {
                type string;
                description
                  "Maximum trace file size";
              }
    
              leaf files {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "2 .. 1000";
                  }
                }
                default "3";
                description
                  "Maximum number of trace files";
              }
    
              choice world-readable-choice {
                leaf world-readable {
                  type empty;
                  description
                    "Allow any user to read the log file";
                }
                leaf no-world-readable {
                  type empty;
                  description
                    "Don't allow any user to read the log file";
                }
              }  // choice world-readable-choice
    
              leaf match {
                type jt:regular-expression;
                description
                  "Regular expression for lines to be logged";
              }
            }  // container file
    
            leaf level {
              type enumeration {
                enum "error" {
                  value 0;
                  description
                    "Match error conditions";
                }
                enum "warning" {
                  value 1;
                  description
                    "Match warning messages";
                }
                enum "notice" {
                  value 2;
                  description
                    "Match conditions that should be handled specially";
                }
                enum "info" {
                  value 3;
                  description
                    "Match informational messages";
                }
                enum "verbose" {
                  value 4;
                  description
                    "Match verbose messages";
                }
                enum "all" {
                  value 5;
                  description "Match all levels";
                }
              }
              default "error";
              description
                "Level of debugging output";
            }
    
            list flag {
              key "name";
              ordered-by user;
              description
                "Type of operation or event to include in trace";
              leaf name {
                type enumeration {
                  enum "configuration" {
                    value 0;
                    description
                      "Configuration operations";
                  }
                  enum "routing-socket" {
                    value 1;
                    description
                      "Routing socket operations";
                  }
                  enum "interface-device" {
                    value 2;
                    description
                      "Interface device operations";
                  }
                  enum "interface-logical" {
                    value 3;
                    description
                      "Logical interface operations";
                  }
                  enum "interface-family" {
                    value 4;
                    description
                      "Interface family operations";
                  }
                  enum "bridging-domain" {
                    value 5;
                    description
                      "Bridging domain operations";
                  }
                  enum "routing-instance" {
                    value 6;
                    description
                      "Routing instance operations";
                  }
                  enum "bridge-interface" {
                    value 7;
                    description
                      "Interface bridge operations";
                  }
                  enum "learning-domain" {
                    value 8;
                    description
                      "Learning domain operations";
                  }
                  enum "ipc" {
                    value 9;
                    description
                      "Inter-process communications operations";
                  }
                  enum "mac-learning" {
                    value 10;
                    description
                      "MAC address learning operations";
                  }
                  enum "initialization" {
                    value 11;
                    description
                      "Initialization operations";
                  }
                  enum "flood-next-hop" {
                    value 12;
                    description
                      "Flood next hop operations";
                  }
                  enum "irb" {
                    value 13;
                    description
                      "Integrated routing and bridging operations";
                  }
                  enum "vpls-ping" {
                    value 14;
                    description
                      "VPLS ping operations";
                  }
                  enum "vpls-loop-prev" {
                    value 15;
                    description
                      "VPLS loop prevention";
                  }
                  enum "logical-system" {
                    value 16;
                    description
                      "Logical system operations";
                  }
                  enum "bmac-next-hop" {
                    value 17;
                    description
                      "Backbone Mac Next hop operations ";
                  }
                  enum "bridge-bmac-next-hop" {
                    value 18;
                    description
                      "Bmac Next hop bridge operations";
                  }
                  enum "isid" {
                    value 19;
                    description
                      "I-Tagged Service ID";
                  }
                  enum "mc-ae" {
                    value 20;
                    description
                      "Multi-chassis AE";
                  }
                  enum "kack" {
                    value 21;
                    description
                      "Kernel-acknowledgment";
                  }
                  enum "storm-control" {
                    value 22;
                    description "Storm-control";
                  }
                  enum "redundant-trunk-group" {
                    value 23;
                    description
                      "Redundant trunk group";
                  }
                  enum
                    "unknown-unicast-forwarding" {
                    value 24;
                    description
                      "Trace unknown unicast forwarding events";
                  }
                  enum "vxlan" {
                    value 25;
                    description "VXLAN";
                  }
                  enum "l2-license" {
                    value 26;
                    description
                      "L2 license trace";
                  }
                  enum "telemetry" {
                    value 27;
                    description "Telemetry";
                  }
                  enum "network-isolation" {
                    value 28;
                    description
                      "Network isolation detection";
                  }
                  enum "all" {
                    value 29;
                    description "All operations";
                  }
                }
              }
            }  // list flag
    
            container in-memory-debug {
              presence "enable in-memory-debug";
              description
                "Enable trace parameters in the memory";
            }  // container in-memory-debug
          }  // container traceoptions
    
          container global-mac-move {
            presence "enable global-mac-move";
            description
              "Enable mac move related options at global level";
            uses apply-advanced;
    
            leaf notification-time {
              type union {
                type uint32;
                type string {
                  pattern "<.*>|$.*";
                }
              }
              units "seconds";
              description
                "Periodical time interval in secs during which MAC move notification occurs";
            }
    
            leaf threshold-time {
              type union {
                type uint32;
                type string {
                  pattern "<.*>|$.*";
                }
              }
              units "seconds";
              description
                "Time during which if certain number of MAC moves happen warrant recording";
            }
    
            leaf reopen-time {
              type union {
                type uint32;
                type string {
                  pattern "<.*>|$.*";
                }
              }
              units "seconds";
              description
                "Time after which a blocked interface is reopened";
            }
    
            leaf threshold-count {
              type union {
                type uint32;
                type string {
                  pattern "<.*>|$.*";
                }
              }
              units "seconds";
              description
                "Count of MAC moves which warrant recording when happen in certain time";
            }
    
            container traceoptions {
              description
                "Enable logging for the MAC moves";
              uses apply-advanced;
    
              leaf no-remote-trace {
                junos:must "("system tracing")";
                junos:must-message "'no-remote-trace' is valid only when [system tracing] is configured";
                type empty;
                description
                  "Disable remote tracing";
              }
    
              container file {
                description
                  "Trace file information";
                leaf filename {
                  type string {
                    junos:posix-pattern "![/ %]";
                    junos:pattern-message "Must not contain '/', % or a space";
                    length "1 .. 1024";
                  }
                  description
                    "Name of file in which to write trace information";
                }
    
                leaf size {
                  type string;
                  description
                    "Maximum trace file size";
                }
    
                leaf files {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "2 .. 1000";
                    }
                  }
                  default "3";
                  description
                    "Maximum number of trace files";
                }
    
                choice world-readable-choice {
                  leaf world-readable {
                    type empty;
                    description
                      "Allow any user to read the log file";
                  }
                  leaf no-world-readable {
                    type empty;
                    description
                      "Don't allow any user to read the log file";
                  }
                }  // choice world-readable-choice
    
                leaf match {
                  type jt:regular-expression;
                  description
                    "Regular expression for lines to be logged";
                }
              }  // container file
            }  // container traceoptions
    
            leaf log {
              type empty;
              description
                "Syslog all the MAC moves as stored in the mac-move-buffer";
            }
    
            leaf disable-action {
              type empty;
              description
                "Disable mac move action globally";
            }
    
            list exclusive-mac {
              key "name";
              ordered-by user;
              description
                "MAC addresses to be excluded in mac-move-limit or in VPLS loop prevention algorithm";
              leaf name {
                type jt:mac-addr-prefix;
                description "Source MAC address";
              }
    
              uses apply-advanced;
            }  // list exclusive-mac
          }  // container global-mac-move
    
          leaf global-mac-table-aging-time {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32;
            }
            units "seconds";
            description
              "System level MAC table aging time";
          }
    
          leaf global-mac-ip-table-aging-time {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "60 .. 1000000";
              }
            }
            units "seconds";
            description
              "System level MAC+IP table aging time";
          }
    
          leaf mclag-arpreq-sync {
            type empty;
            description
              "Enable syncing ARP REQ packets to peer MCLAG PE";
          }
    
          leaf global-mac-pinning-discard-notification-interval {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "2 .. 86400";
              }
            }
            units "seconds";
            description
              "Set interval for MAC Pinning discard notification";
          }
    
          container global-ctx-limit {
            presence "enable global-ctx-limit";
            description
              "Debug context history limit";
            uses apply-advanced;
    
            leaf ctx-limit {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "0 .. 5000000";
                }
              }
              description
                "Debug context history limit";
            }
          }  // container global-ctx-limit
    
          container global-mac-limit {
            presence "enable global-mac-limit";
            description
              "System level MAC limit options";
            uses apply-advanced;
    
            leaf mac-limit {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint64;
              }
              description
                "System level MAC limit";
            }
    
            leaf packet-action {
              type enumeration {
                enum "drop" {
                  value 0;
                  description
                    "Enable packet-action drop when MAC limit is reached";
                }
              }
            }
          }  // container global-mac-limit
    
          container global-mac-ip-limit {
            presence
              "enable global-mac-ip-limit";
            description
              "System level MAC+IP limit options";
            uses apply-advanced;
    
            leaf mac-ip-limit {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint64 {
                  range "20 .. 1048575";
                }
              }
              description
                "System level MAC+IP limit";
            }
          }  // container global-mac-ip-limit
    
          leaf global-mac-statistics {
            type empty;
            description
              "Enable MAC address statistics at system level";
          }
    
          leaf global-no-mac-learning {
            type empty;
            description
              "Disable dynamic MAC address learning at system level";
          }
    
          leaf global-no-hw-mac-learning {
            type empty;
            description
              "Disable hardware MAC-address learning at system level";
          }
    
          leaf global-no-control-mac-aging {
            type empty;
            description
              "Disable control MAC-address aging from software";
          }
    
          leaf mclag-arp-nd-sync {
            type empty;
            description
              "Arp and ND entry sync from peer device.";
          }
    
          container crb-proxy-mac {
            description
              "Configure proxy MAC address to be used in MAC-IP refresh";
            uses apply-advanced;
    
            container family {
              description "Address family";
              uses apply-advanced;
    
              container inet {
                description
                  "Inet version 4 family";
                uses apply-advanced;
    
                leaf mac-address {
                  type jt:mac-unicast;
                  description
                    "Proxy MAC address";
                }
              }  // container inet
    
              container inet6 {
                description
                  "Inet version 6 family";
                uses apply-advanced;
    
                leaf mac-address {
                  type jt:mac-unicast;
                  description
                    "Proxy MAC address";
                }
              }  // container inet6
            }  // container family
          }  // container crb-proxy-mac
        }  // grouping juniper-protocols-bridge
    
        grouping juniper-protocols-dot1x {
          uses apply-advanced;
    
          container traceoptions {
            description
              "Trace options for 802.1X";
            uses apply-advanced;
    
            container file {
              description "Trace file options";
              leaf filename {
                type string {
                  junos:posix-pattern "![/ %]";
                  junos:pattern-message "Must not contain '/', % or a space";
                  length "1 .. 1024";
                }
                description
                  "Name of file in which to write trace information";
              }
    
              leaf replace {
                type empty;
                status deprecated;
                description
                  "Replace trace file rather than appending to it";
              }
    
              leaf size {
                type string;
                description
                  "Maximum trace file size";
              }
    
              leaf files {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "2 .. 1000";
                  }
                }
                default "10";
                description
                  "Maximum number of trace files";
              }
    
              leaf no-stamp {
                type empty;
                status deprecated;
                description
                  "Do not timestamp trace file";
              }
    
              choice world-readable-choice {
                leaf world-readable {
                  type empty;
                  description
                    "Allow any user to read the log file";
                }
                leaf no-world-readable {
                  type empty;
                  description
                    "Don't allow any user to read the log file";
                }
              }  // choice world-readable-choice
            }  // container file
    
            list flag {
              junos:must "(".. file")";
              junos:must-message "Trace file name required to enable tracing";
              key "name";
              ordered-by user;
              description "Tracing parameters";
              leaf name {
                type enumeration {
                  enum "dot1x-debug" {
                    junos:must "(!("protocols dot1x traceoptions flag dot1x-event"))";
                    junos:must-message "Can not configure dot1x-event with dot1x-debug flag";
                    value 0;
                    description
                      "Trace dot1x events";
                  }
                  enum "parse" {
                    value 1;
                    description
                      "Trace configuration parsing";
                  }
                  enum "esw-if" {
                    junos:must "(!("protocols dot1x traceoptions flag dot1x-ipc"))";
                    junos:must-message "Can not configure dot1x-ipc with esw-if flag";
                    value 2;
                    description
                      "Trace ESW Interactions";
                  }
                  enum "eapol" {
                    value 3;
                    description
                      "Trace EAPOL Transmit/Receive";
                  }
                  enum "config-internal" {
                    value 4;
                    description
                      "Trace configuration internals";
                  }
                  enum "normal" {
                    value 5;
                    description
                      "Trace normal events";
                  }
                  enum "general" {
                    value 6;
                    description
                      "Trace general events";
                  }
                  enum "state" {
                    value 7;
                    description
                      "Trace state transitions";
                  }
                  enum "task" {
                    value 8;
                    description
                      "Trace routing protocol task processing";
                  }
                  enum "timer" {
                    value 9;
                    description
                      "Trace routing protocol task timer processing";
                  }
                  enum "vlan" {
                    value 10;
                    description
                      "Trace VLAN transactions";
                  }
                  enum "all" {
                    value 11;
                    description
                      "Trace everything";
                  }
                  enum "dot1x-ipc" {
                    value 12;
                    description
                      "Trace dot1x IPC interactions";
                  }
                  enum "dot1x-event" {
                    value 13;
                    description
                      "Trace dot1x events";
                  }
                  enum "iccp" {
                    value 14;
                    description
                      "Trace iccp events";
                  }
                }
              }
    
              leaf disable {
                type empty;
                description
                  "Disable this trace flag";
              }
            }  // list flag
          }  // container traceoptions
    
          leaf ssl-certificate-path {
            type string;
            default "/var/tmp/";
            description
              "Load SSL certificates for authentication";
          }
    
          container authenticator {
            presence "enable authenticator";
            description
              "802.1X authenticator options";
            uses apply-advanced;
    
            leaf authentication-profile-name {
              junos:must "("access profile $$")";
              junos:must-message "Access profile name must be defined in the [edit access profile] hierarchy";
              type string {
                length "1 .. 63";
              }
              description
                "Access profile name to use for authentication";
            }
    
            leaf no-mac-table-binding {
              type empty;
              description
                "Disable association between mac table and dot1x";
            }
    
            leaf ip-mac-session-binding {
              junos:must "(".. no-mac-table-binding")";
              junos:must-message "no-mac-table-binding must be defined in the [edit protocols dot1x authenticator] hierarchy";
              type empty;
              description
                "DHCP or DHCPv6 or SLAAC snooping checking for mac ageout";
            }
    
            leaf dynamic-vlan-cleanup-interval {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "60 .. 86400";
                }
              }
              units "seconds";
              description
                "Dynamic vlan cleanup interval";
            }
    
            container radius-reachability {
              presence
                "enable radius-reachability";
              description
                "Enable radius-rechability feature";
              uses apply-advanced;
    
              leaf query-period {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "20 .. 65535";
                  }
                }
                units "seconds";
                default "120";
                description
                  "Query period interval";
              }
            }  // container radius-reachability
    
            container radius-options {
              presence "enable radius-options";
              description
                "Info sent to radius server";
              uses apply-advanced;
    
              leaf add-interface-text-description {
                type empty;
                description
                  "Appends interface text description to NAS-Port-Id";
              }
    
              choice vlan {
                leaf use-vlan-name {
                  type empty;
                  description "Vlan name";
                }
                leaf use-vlan-id {
                  type empty;
                  description "Vlan id";
                }
              }  // choice vlan
            }  // container radius-options
    
            list static {
              key "name";
              ordered-by user;
              description
                "Static MAC configuration needed to bypass 802.1X";
              leaf name {
                type jt:mac-addr-prefix;
                description
                  "MAC addresses to bypass authentication";
              }
    
              uses apply-advanced;
    
              leaf vlan-assignment {
                junos:must "(!("vlans $$ vlan-id-list"))";
                junos:must-message "vlan with vlan-id-list not supported under static MAC vlan-assignment";
                junos:must "(("vlans $$" || any "vlans <*> vlan-id $$"))";
                junos:must-message "vlan assigned is not configured";
                type string;
                description
                  "VLAN name or 802.1q tag for the MAC address";
              }
    
              leaf interface {
                junos:must "(".. .. interface $$ supplicant multiple")";
                junos:must-message "Static MAC cannot be configured on interface in single or single-secure mode";
                junos:must "((!("interfaces ${interface} vlan-tagging") || (!("interfaces ${interface} flexible-vlan-tagging") || !("interfaces ${interface} stacked-vlan-tagging"))))";
                junos:must-message "Cannot configure dot1x on this interface since flexible-vlan-tagging / vlan-tagging / stacked-vlan-tagging is configured";
                junos:must "(("interfaces $$-IFL family ethernet-switching" || "interfaces $$-IFL family bridge"))";
                junos:must-message "Interface must be defined in the interfaces hierarchy with family ethernet-switching/bridge";
                type union {
                  type jt:interface-name;
                  type string {
                    pattern "<.*>|$.*";
                  }
                }
                description
                  "Interface on which authentication is bypassed";
              }
            }  // list static
    
            list interface {
              key "name";
              description
                "802.1X  interface specific options";
              leaf name {
                junos:must "(!("switch-options interface $$ no-mac-learning"))";
                junos:must-message "no-mac-learning can not be configured on dot1x enabled interface";
                junos:must "(!("switch-options interface $$ persistent-learning"))";
                junos:must-message "persistent learning can not be configured on dot1x enabled interface";
                type string;
              }
    
              uses apply-advanced;
    
              leaf ignore-port-bounce {
                type empty;
                description
                  "To ignore the port-bounce request received from RADIUS server";
              }
    
              leaf-list authentication-order {
                junos:must "((!("interfaces ${interface} family inet") && !("interfaces ${interface} family inet6")))";
                junos:must-message "Cannot be configured on layer-3 intefaces";
                type enumeration {
                  enum "dot1x" {
                    value 0;
                    description "Dot1x mode";
                  }
                  enum "mac-radius" {
                    junos:must "(!("protocols dot1x supplicant interface ${interface}"))";
                    junos:must-message "Must not configure supplicant and mac-radius on same interface";
                    value 1;
                    description
                      "Mac radius mode";
                  }
                  enum "captive-portal" {
                    junos:must "(!("system phone-home"))";
                    junos:must-message "Can't configure captive-portal along with Phone-home. Delete phone-home config to enable captive-portal";
                    junos:must "(!("protocols dot1x supplicant interface ${interface}"))";
                    junos:must-message "Must not configure supplicant and captive-portal on same interface";
                    junos:must "((!("interfaces ${interface} family ethernet-switching interface-mode trunk") && !("interfaces ${interface} family bridge interface-mode trunk")))";
                    junos:must-message "Must not configure captive-portal on trunk interface";
                    value 2;
                    description
                      "Captive portal mode";
                  }
                }
                ordered-by user;
                description
                  "Flexible authentication order";
              }
    
              leaf disable {
                type empty;
                description
                  "Disable 802.1X on this interface";
              }
    
              leaf supplicant {
                type enumeration {
                  enum "single" {
                    value 0;
                    description
                      "Allow multiple clients; authenticate first client only";
                  }
                  enum "single-secure" {
                    junos:must "((!("interfaces ${interface} family inet") && !("interfaces ${interface} family inet6")))";
                    junos:must-message "Cannot be configured on layer-3 intefaces";
                    value 1;
                    description
                      "Allow and authenticate only a single client";
                  }
                  enum "multiple" {
                    junos:must "((!("interfaces ${interface} family ethernet-switching interface-mode trunk") && !("interfaces ${interface} family bridge interface-mode trunk")))";
                    junos:must-message "Must not configure multi supplicant on trunk interface";
                    junos:must "((!("interfaces ${interface} family inet") && !("interfaces ${interface} family inet6")))";
                    junos:must-message "Cannot be configured on layer-3 intefaces";
                    value 2;
                    description
                      "Allow multiple clients; authenticate each individually";
                  }
                }
                default "single";
                description
                  "Set supplicant mode for this interface";
              }
    
              leaf retries {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "0 .. 10";
                  }
                }
                description
                  "Number of retries after which port is placed into wait state";
              }
    
              leaf quiet-period {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "0 .. 65535";
                  }
                }
                units "seconds";
                description
                  "Time to wait after an authentication failure";
              }
    
              leaf transmit-period {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "1 .. 65535";
                  }
                }
                units "seconds";
                description
                  "Interval before retransmitting initial EAPOL PDUs";
              }
    
              container multi-domain {
                junos:must "((!("interfaces ${interface} family inet") && !("interfaces ${interface} family inet6")))";
                junos:must-message "Cannot be configured on layer-3 intefaces";
                junos:must "(".. supplicant multiple")";
                junos:must-message "multi-domain feature cannot be configured with single or single-secure mode";
                presence "enable multi-domain";
                description
                  "Enable multi domain authentication";
                uses apply-advanced;
    
                leaf packet-action {
                  type enumeration {
                    enum "drop-and-log" {
                      value 0;
                      description
                        " Drop the client and generate the log message";
                    }
                    enum "shutdown" {
                      value 1;
                      description
                        "Disable port for excessive client authentication";
                    }
                  }
                  default "drop-and-log";
                  description
                    "Set packet action for this interface";
                }
    
                leaf max-data-session {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "1 .. 1000";
                    }
                  }
                  description
                    "Data session limit in multi domain authentication";
                }
    
                leaf recovery-timeout {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "60 .. 3600";
                    }
                  }
                  units "seconds";
                  description
                    "Multi domain recovery timeout";
                }
              }  // container multi-domain
    
              container mac-radius {
                junos:must "(!("protocols dot1x supplicant interface ${interface}"))";
                junos:must-message "Must not configure supplicant and mac-radius on same interface";
                junos:must "((!("interfaces ${interface} family inet") && !("interfaces ${interface} family inet6")))";
                junos:must-message "Cannot be configured on layer-3 intefaces";
                presence "enable mac-radius";
                description "Enable MAC-RADIUS";
                uses apply-advanced;
    
                leaf restrict {
                  type empty;
                  description
                    "Bypass dot1x authentication, use MAC RADIUS only";
                }
    
                leaf flap-on-disconnect {
                  type empty;
                  description
                    "Reset an interface on receiving a disconnect request";
                }
    
                container authentication-protocol {
                  description
                    "Set mac-radius authentication method";
                  uses apply-advanced;
    
                  choice protocols {
                    leaf eap-md5 {
                      type empty;
                      description
                        "Authentication protocol EAP-MD5";
                    }
                    leaf pap {
                      type empty;
                      description
                        "Authentication protocol PAP";
                    }
                    container eap-peap {
                      presence "enable eap-peap";
                      description
                        "Authentication protocol EAP-PEAP";
                      uses apply-advanced;
    
                      leaf resume {
                        type empty;
                        description
                          "Enable resume functionality for faster authentication";
                      }
                    }  // container eap-peap
                  }  // choice protocols
                }  // container authentication-protocol
              }  // container mac-radius
    
              choice reauthentication-mode {
                leaf no-reauthentication {
                  type empty;
                  description
                    "Disable reauthentication";
                }
                leaf reauthentication {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "1 .. 65535";
                    }
                  }
                  units "seconds";
                  description
                    "Reauthentication interval";
                }
              }  // choice reauthentication-mode
    
              leaf supplicant-timeout {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "1 .. 60";
                  }
                }
                units "seconds";
                description
                  "Time to wait for a client response";
              }
    
              leaf server-timeout {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "1 .. 60";
                  }
                }
                units "seconds";
                description
                  "Authentication server timeout interval";
              }
    
              leaf maximum-requests {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "1 .. 10";
                  }
                }
                description
                  "Number of EAPOL RequestIDs to send before timing out";
              }
    
              leaf request-retry-count {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "1 .. 10";
                  }
                }
                description
                  "Number of requests to send before timing out";
              }
    
              leaf guest-vlan {
                junos:must "(!("vlans $$ vlan-id-list"))";
                junos:must-message "vlan with vlan-id-list not supported under guest-vlan";
                junos:must "(("vlans $$" || any "vlans <*> vlan-id $$"))";
                junos:must-message "vlan assigned is not configured";
                junos:must "(!("interfaces ${interface} family ethernet-switching interface-mode trunk"))";
                junos:must-message "Must not configure on this interface since the interface-mode is defined as trunk";
                junos:must "((!("interfaces ${interface} family inet") && !("interfaces ${interface} family inet6")))";
                junos:must-message "Cannot be configured on layer-3 intefaces";
                type string;
                description
                  "VLAN name or 802.1q tag for unauthenticated or non-responsive hosts";
              }
    
              container server-reject-vlan {
                junos:must "(!("interfaces ${interface} family ethernet-switching interface-mode trunk"))";
                junos:must-message "Must not configure on this interface since the interface-mode is defined as trunk";
                junos:must "((!("interfaces ${interface} family inet") && !("interfaces ${interface} family inet6")))";
                junos:must-message "Cannot be configured on layer-3 intefaces";
                description
                  "VLAN name or 802.1q tag for authentication rejected clients";
                leaf vlan-name {
                  junos:must "(!("vlans $$ vlan-id-list"))";
                  junos:must-message "vlan with vlan-id-list not supported under server-reject-vlan";
                  junos:must "(("vlans $$" || any "vlans <*> vlan-id $$"))";
                  junos:must-message "vlan assigned is not configured";
                  type string;
                  description
                    "VLAN name or VLAN Tag (1..4095)";
                }
    
                leaf block-interval {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "120 .. 65535";
                    }
                  }
                  units "seconds";
                  description
                    "Interval for authenticator to ignore the EAP-Start packets.";
                }
    
                leaf eapol-block {
                  type empty;
                  description
                    "Force the authenticator to ignore EAPOL-Start packets.";
                }
              }  // container server-reject-vlan
    
              container eapol-block {
                junos:must "((!("interfaces ${interface} family inet") && !("interfaces ${interface} family inet6")))";
                junos:must-message "Cannot be configured on layer-3 intefaces";
                description
                  "Force the authenticator to ignore EAPOL-Start packets";
                uses apply-advanced;
    
                container server-fail {
                  junos:must "(".. .. server-fail")";
                  junos:must-message "server-fail action must be configured";
                  presence "enable server-fail";
                  description
                    "Block EAPOL-Start during RADIUS Timeout";
                  uses apply-advanced;
    
                  leaf block-interval {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint32 {
                        range "120 .. 65535";
                      }
                    }
                    units "seconds";
                    description
                      "Interval for authenticator to ignore the EAP-Start packets.";
                  }
                }  // container server-fail
    
                container mac-radius {
                  presence "enable mac-radius";
                  description
                    "Block EAPOL-Start when client is authenticated in mac-radius mode";
                }  // container mac-radius
    
                container captive-portal {
                  presence
                    "enable captive-portal";
                  description
                    "Block EAPOL-Start when client is authenticated in captive-portal mode";
                }  // container captive-portal
              }  // container eapol-block
    
              leaf lldp-med-bypass {
                junos:must "(".. supplicant multiple")";
                junos:must-message "lldp-med-bypass cannot be configured on interface in single or single-secure mode";
                type empty;
                description
                  "Bypass dot1x authentication, use lldp-med based authentication";
              }
    
              container server-fail {
                description
                  "Action to be taken when server is inaccessible";
                choice server-fail-options {
                  leaf deny {
                    type empty;
                    description
                      "Force client authentication to fail";
                  }
                  leaf permit {
                    type empty;
                    description
                      "Force client authentication to succeed";
                  }
                  leaf vlan-name {
                    junos:must "(!("vlans $$ vlan-id-list"))";
                    junos:must-message "vlan with vlan-id-list not supported under server-fail vlan";
                    junos:must "(("vlans $$" || any "vlans <*> vlan-id $$"))";
                    junos:must-message "vlan assigned is not configured";
                    junos:must "(!("interfaces ${interface} family ethernet-switching interface-mode trunk"))";
                    junos:must-message "Must not configure on this interface since the interface-mode is defined as trunk";
                    junos:must "((!("interfaces ${interface} family inet") && !("interfaces ${interface} family inet6")))";
                    junos:must-message "Cannot be configured on layer-3 intefaces";
                    type string;
                    description
                      "VLAN name or 802.1q tag for unreachable servers";
                  }
    
                  case case_4 {
                  }  // case case_4
                  leaf use-cache {
                    type empty;
                    description
                      "Use the previous state of the client";
                  }
                }  // choice server-fail-options
              }  // container server-fail
    
              container server-fail-voip {
                junos:must "((!("interfaces ${interface} family inet") && !("interfaces ${interface} family inet6")))";
                junos:must-message "Cannot be configured on layer-3 intefaces";
                junos:must "((".. server-fail " && !(".. server-fail deny")))";
                junos:must-message "'server-fail permit' or 'vlan-name' or 'use-cache' must be configured";
                description
                  "Action to be taken for VOIP client when server is inaccessible";
                choice server-fail-options {
                  leaf deny {
                    type empty;
                    description
                      "Force VoIP client authentication to fail";
                  }
                  leaf permit {
                    type empty;
                    description
                      "Force VoIP client authentication to succeed";
                  }
                  leaf vlan-name {
                    junos:must "(!("interfaces ${interface} family ethernet-switching interface-mode trunk"))";
                    junos:must-message "Must not configure on this interface since the interface-mode is defined as trunk";
                    type string;
                    description
                      "Configured VoIP VLAN name or 802.1q tag for unreachable servers";
                  }
                  leaf use-cache {
                    type empty;
                    description
                      "Use the previous state of the VoIP client";
                  }
                }  // choice server-fail-options
              }  // container server-fail-voip
    
              leaf redirect-url {
                junos:must "((!("interfaces ${interface} family inet") && !("interfaces ${interface} family inet6")))";
                junos:must-message "Cannot be configured on layer-3 intefaces";
                junos:must "((!("interfaces ${interface} family ethernet-switching interface-mode trunk") && !("interfaces ${interface} family bridge interface-mode trunk")))";
                junos:must-message "Must not configure redirect-url on this interface since the interface-mode is defined as trunk";
                type string {
                  junos:posix-pattern "^((http)|(https))://";
                  junos:pattern-message "URL starts with http or https";
                  length "10 .. 247";
                }
                description
                  "CWA redirect URL to be used for unauthenticated users";
              }
    
              leaf no-tagged-mac-authentication {
                junos:must "((!("interfaces ${interface} family inet") && !("interfaces ${interface} family inet6")))";
                junos:must-message "Cannot be configured on layer-3 intefaces";
                junos:must "("interfaces ${interface} family ethernet-switching interface-mode trunk")";
                junos:must-message "This option is supported only on trunk interface";
                junos:must "(!(".. supplicant single-secure"))";
                junos:must-message "Cannot be configured on single-secure dot1x interface";
                junos:must "(!(".. supplicant multiple"))";
                junos:must-message "Cannot be configured on multiple supplicant dot1x interface";
                type empty;
                description
                  "Don't allow tagged mac for radius authentication";
              }
    
              leaf retain-mac-aged-session {
                type empty;
                description
                  "Retain mac aged out session";
              }
            }  // list interface
          }  // container authenticator
        }  // grouping juniper-protocols-dot1x
    
        grouping juniper-protocols-esis {
          uses apply-advanced;
    
          choice enable-disable {
            leaf disable {
              type empty;
              description "Disable ES-IS";
            }
          }  // choice enable-disable
    
          container traceoptions {
            description
              "Trace options for ES-IS";
            uses apply-advanced;
    
            container file {
              description "Trace file options";
              leaf filename {
                type string {
                  junos:posix-pattern "![/ %]";
                  junos:pattern-message "Must not contain '/', % or a space";
                  length "1 .. 1024";
                }
                description
                  "Name of file in which to write trace information";
              }
    
              leaf replace {
                type empty;
                status deprecated;
                description
                  "Replace trace file rather than appending to it";
              }
    
              leaf size {
                type string;
                description
                  "Maximum trace file size";
              }
    
              leaf files {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "2 .. 1000";
                  }
                }
                default "10";
                description
                  "Maximum number of trace files";
              }
    
              leaf no-stamp {
                type empty;
                status deprecated;
                description
                  "Do not timestamp trace file";
              }
    
              choice world-readable-choice {
                leaf world-readable {
                  type empty;
                  description
                    "Allow any user to read the log file";
                }
                leaf no-world-readable {
                  type empty;
                  description
                    "Don't allow any user to read the log file";
                }
              }  // choice world-readable-choice
            }  // container file
    
            list flag {
              key "name";
              ordered-by user;
              description "Tracing parameters";
              leaf name {
                type enumeration {
                  enum "error" {
                    value 0;
                    description
                      "Trace errored packets";
                  }
                  enum "esh" {
                    value 1;
                    description
                      "Trace end system hello packets";
                  }
                  enum "ish" {
                    value 2;
                    description
                      "Trace intermediate system hello packets";
                  }
                  enum "graceful-restart" {
                    value 3;
                    description
                      "Trace graceful restart events";
                  }
                  enum "route" {
                    value 4;
                    description
                      "Trace routing information";
                  }
                  enum "normal" {
                    value 5;
                    description
                      "Trace normal events";
                  }
                  enum "general" {
                    value 6;
                    description
                      "Trace general events";
                  }
                  enum "state" {
                    value 7;
                    description
                      "Trace state transitions";
                  }
                  enum "policy" {
                    value 8;
                    description
                      "Trace policy processing";
                  }
                  enum "task" {
                    value 9;
                    description
                      "Trace routing protocol task processing";
                  }
                  enum "timer" {
                    value 10;
                    description
                      "Trace routing protocol timer processing";
                  }
                  enum "all" {
                    value 11;
                    description
                      "Trace everything";
                  }
                }
              }
    
              leaf send {
                type empty;
                description
                  "Trace transmitted packets";
              }
    
              leaf receive {
                type empty;
                description
                  "Trace received packets";
              }
    
              leaf detail {
                type empty;
                description
                  "Trace detailed information";
              }
    
              leaf disable {
                type empty;
                description
                  "Disable this trace flag";
              }
            }  // list flag
          }  // container traceoptions
    
          leaf preference {
            type union {
              type uint32;
              type string {
                pattern "<.*>|$.*";
              }
            }
            description "Preference of routes";
          }
    
          container graceful-restart {
            description
              "ES-IS graceful restart options";
            choice enable-disable {
              leaf disable {
                type empty;
                description
                  "Disable graceful restart";
              }
            }  // choice enable-disable
    
            leaf restart-duration {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "30 .. 300";
                }
              }
              units "seconds";
              description
                "Maximum time for graceful restart to finish";
            }
          }  // container graceful-restart
    
          list interface {
            key "name";
            description
              "Interface configuration";
            leaf name {
              type union {
                type jt:interface-name;
                type string {
                  pattern "<.*>|$.*";
                }
              }
              description "Interface name";
            }
    
            uses apply-advanced;
    
            leaf hold-time {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "1 .. 65535";
                }
              }
              units "seconds";
              description
                "Time after which neighbors think the interface is down";
            }
    
            leaf end-system-configuration-timer {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "1 .. 65535";
                }
              }
              units "seconds";
              description
                "Suggested end system configuration timer";
            }
    
            choice enable-disable {
              leaf disable {
                type empty;
                description
                  "Disable ES-IS on this interface";
              }
            }  // choice enable-disable
          }  // list interface
        }  // grouping juniper-protocols-esis
    
        grouping juniper-protocols-evpn-interconnect {
          description
            "Interconnect configuration for the routing instance";
          uses apply-advanced;
    
          leaf-list vrf-import {
            junos:must "(".. route-distinguisher")";
            junos:must-message "route distinguisher must be defined for vrf-import";
            type jt:policy-algebra;
            ordered-by user;
            description
              "Import policy for Interconnect";
          }
    
          leaf-list vrf-export {
            junos:must "(".. route-distinguisher")";
            junos:must-message "route distinguisher must be defined for vrf-export";
            type jt:policy-algebra;
            ordered-by user;
            description
              "Export policy for Interconnect";
          }
    
          container vrf-target {
            junos:must "(".. route-distinguisher")";
            junos:must-message "route distinguisher must be defined for vrf-target";
            description
              "Interconnect target community configuration";
            uses apply-advanced;
    
            leaf community {
              type string {
                junos:posix-pattern "^[a-z]+:[0-9.]+L?:[0-9]+$";
                junos:pattern-message "Use format 'target:x:y' where 'x' is an AS number followed by an optional 'L' (To indicate 4 byte AS), or an IP address and 'y' is a number. e.g. target:123456L:100";
              }
              description
                "Target community to use in import and export";
            }
    
            leaf import {
              type string {
                junos:posix-pattern "^[a-z]+:[0-9.]+L?:[0-9]+$";
                junos:pattern-message "Use format 'target:x:y' where 'x' is an AS number followed by an optional 'L' (To indicate 4 byte AS), or an IP address and 'y' is a number. e.g. target:123456L:100";
              }
              description
                "Target community to use when filtering on import";
            }
    
            leaf export {
              type string {
                junos:posix-pattern "^[a-z]+:[0-9.]+L?:[0-9]+$";
                junos:pattern-message "Use format 'target:x:y' where 'x' is an AS number followed by an optional 'L' (To indicate 4 byte AS), or an IP address and 'y' is a number. e.g. target:123456L:100";
              }
              description
                "Target community to use when marking routes on export";
            }
          }  // container vrf-target
    
          container route-distinguisher {
            description
              "Route distinguisher for this interconnect";
            leaf rd-type {
              type string {
                junos:posix-pattern "^[0-9.]+L?:[0-9]+$";
                junos:pattern-message "Use format 'x:y' where 'x' is an AS number followed by an optional 'L' (To indicate 4 byte AS), or an IP address and 'y' is a number. e.g. 123456L:100";
              }
              description
                "Number in (16 bit:32 bit) or (32 bit 'L':16 bit) or (IP address:16 bit) format";
            }
          }  // container route-distinguisher
    
          container esi {
            description
              "ESI configuration of interconnect";
            uses apply-advanced;
    
            leaf identifier {
              junos:must "(unique "interfaces <*> esi $$")";
              junos:must-message "ESI value must be unique across all IFDs and IFLs";
              type jt:esi;
              description
                "ESI value for interconnect";
            }
    
            choice mode {
              leaf all-active {
                type empty;
                description "All-active mode";
              }
            }  // choice mode
    
            container df-election-type {
              presence "enable df-election-type";
              description "DF Election Type";
              uses apply-advanced;
    
              choice pref_choice {
                container preference {
                  presence "enable preference";
                  description
                    "Preference based DF election";
                  uses apply-advanced;
    
                  leaf value {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint32 {
                        range "0 .. 65535";
                      }
                    }
                    default "32767";
                    description
                      "Preference value for EVPN Multihoming DF election";
                  }
                }  // container preference
              }  // choice pref_choice
    
              choice mod_choice {
                container mod {
                  junos:must "(!(".. preference"))";
                  junos:must-message "preference must not be configured";
                  presence "enable mod";
                  description
                    "MOD based DF election";
                }  // container mod
              }  // choice mod_choice
            }  // container df-election-type
          }  // container esi
    
          leaf-list interconnected-vni-list {
            type string;
            description
              "List of translated VNIs (1..16777214) or all, that are to be EVPN interconnected";
          }
        }  // grouping juniper-protocols-evpn-interconnect
    
        grouping juniper-protocols-isis {
          uses apply-advanced;
    
          list interface {
            key "name";
            description
              "Interface configuration";
            leaf name {
              type union {
                type jt:interface-name;
                type string {
                  pattern "<.*>|$.*";
                }
              }
              description "Interface name";
            }
    
            uses apply-advanced;
    
            container ldp-synchronization {
              presence
                "enable ldp-synchronization";
              description
                "Advertise maximum metric until LDP is operational";
              uses ldp-sync-obj;
            }  // container ldp-synchronization
    
            list level {
              key "name";
              ordered-by user;
              description
                "Configure levels on this interface";
              leaf name {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "1 .. 2";
                  }
                }
                description "IS-IS level number";
              }
    
              uses apply-advanced;
    
              leaf te-metric {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "0 .. 16777215";
                  }
                }
                description
                  "Traffic engineering metric";
              }
    
              leaf no-advertise-adjacency-segment {
                type empty;
                description
                  "Do not advertise an adjacency segment for this level";
              }
    
              container ipv4-adjacency-segment {
                junos:must "(!(".. no-advertise-adjacency-segment"))";
                junos:must-message "ipv4-adjacency-segment can't be configured if no-advertise-adjacency-segment is configured in the level";
                junos:must "(!(".. .. no-advertise-adjacency-segment"))";
                junos:must-message "ipv4-adjacency-segment can't be configured if no-advertise-adjacency-segment is configured in the same interface";
                description
                  "Configure ipv4 adjacency segment";
                uses apply-advanced;
    
                container protected {
                  description
                    "Adjacency SID is eligible for protection";
                  choice adjsid-type {
                    container index {
                      description
                        "Adjacency SID indexed from SRGB";
                      leaf index-number {
                        type union {
                          type string {
                            pattern "<.*>|$.*";
                          }
                          type uint32 {
                            range "0 .. 199999";
                          }
                        }
                      }
                    }  // container index
                    leaf label {
                      type union {
                        type string {
                          pattern "<.*>|$.*";
                        }
                        type uint32 {
                          range "16 .. 1048575";
                        }
                      }
                      description
                        "Adjacency SID from static label pool";
                    }
                    leaf dynamic {
                      type empty;
                      description
                        "Dynamically allocate an adjacency segment";
                    }
                  }  // choice adjsid-type
                }  // container protected
    
                container unprotected {
                  description
                    "Adjacency SID uneligible for protection";
                  choice adjsid-type {
                    container index {
                      description
                        "Adjacency SID indexed from SRGB";
                      leaf index-number {
                        type union {
                          type string {
                            pattern "<.*>|$.*";
                          }
                          type uint32 {
                            range "0 .. 199999";
                          }
                        }
                      }
                    }  // container index
                    leaf label {
                      type union {
                        type string {
                          pattern "<.*>|$.*";
                        }
                        type uint32 {
                          range "16 .. 1048575";
                        }
                      }
                      description
                        "Adjacency SID from static label pool";
                    }
                    leaf dynamic {
                      type empty;
                      description
                        "Dynamically allocate an adjacency segment";
                    }
                  }  // choice adjsid-type
                }  // container unprotected
              }  // container ipv4-adjacency-segment
    
              container ipv6-adjacency-segment {
                junos:must "(!(".. no-advertise-adjacency-segment"))";
                junos:must-message "ipv6-adjacency-segment can't be configured if no-advertise-adjacency-segment is configured in the same level";
                junos:must "(!(".. .. no-advertise-adjacency-segment"))";
                junos:must-message "ipv6-adjacency-segment can't be configured if no-advertise-adjacency-segment is configured in the same interface";
                description
                  "Configure ipv6 adjacency segment";
                uses apply-advanced;
    
                container protected {
                  description
                    "Adjacency SID is eligible for protection";
                  choice adjsid-type {
                    container index {
                      description
                        "Adjacency SID indexed from SRGB";
                      leaf index-number {
                        type union {
                          type string {
                            pattern "<.*>|$.*";
                          }
                          type uint32 {
                            range "0 .. 199999";
                          }
                        }
                      }
                    }  // container index
                    leaf label {
                      type union {
                        type string {
                          pattern "<.*>|$.*";
                        }
                        type uint32 {
                          range "16 .. 1048575";
                        }
                      }
                      description
                        "Adjacency SID from static label pool";
                    }
                    leaf dynamic {
                      type empty;
                      description
                        "Dynamically allocate an adjacency segment";
                    }
                  }  // choice adjsid-type
                }  // container protected
    
                container unprotected {
                  description
                    "Adjacency SID uneligible for protection";
                  choice adjsid-type {
                    container index {
                      description
                        "Adjacency SID indexed from SRGB";
                      leaf index-number {
                        type union {
                          type string {
                            pattern "<.*>|$.*";
                          }
                          type uint32 {
                            range "0 .. 199999";
                          }
                        }
                      }
                    }  // container index
                    leaf label {
                      type union {
                        type string {
                          pattern "<.*>|$.*";
                        }
                        type uint32 {
                          range "16 .. 1048575";
                        }
                      }
                      description
                        "Adjacency SID from static label pool";
                    }
                    leaf dynamic {
                      type empty;
                      description
                        "Dynamically allocate an adjacency segment";
                    }
                  }  // choice adjsid-type
                }  // container unprotected
              }  // container ipv6-adjacency-segment
    
              container srm6-adjacency-segment {
                description
                  "Configure srm6 adjacency segment";
                uses apply-advanced;
    
                container unprotected {
                  description
                    "Adjacency SID uneligible for protection";
                  leaf sid {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint32 {
                        range "1 .. 65535";
                      }
                    }
                    description
                      "Set Adjacency SID Value";
                  }
                }  // container unprotected
              }  // container srm6-adjacency-segment
    
              container srv6-adjacency-segment {
                description
                  "Configure srv6 adjacency segment";
                uses apply-advanced;
    
                container protected {
                  presence "enable protected";
                  description
                    "SRv6 Adjacency segment is eligible for protection";
                  uses apply-advanced;
    
                  list locator {
                    key "name";
                    ordered-by user;
                    description
                      "Locator to bind SRv6 adjacency segment";
                    leaf name {
                      junos:must "("routing-options source-packet-routing srv6 locator $$")";
                      junos:must-message "Referenced source-packet-routing srv6 must be defined";
                      type string;
                      description "Locator name";
                    }
    
                    uses apply-advanced;
    
                    list end-x-sid {
                      key "name";
                      ordered-by user;
                      description
                        "Endpoint 128 bit address";
                      leaf name {
                        type jt:ipv6addr;
                      }
    
                      uses apply-advanced;
    
                      container flavor {
                        presence "enable flavor";
                        uses apply-advanced;
    
                        leaf psp {
                          type empty;
                          description
                            "Penultimate segment pop of the SRH";
                        }
    
                        leaf usp {
                          type empty;
                          description
                            "Ultimate segment pop of the SRH";
                        }
    
                        leaf usd {
                          type empty;
                          description
                            "Ultimate segment decapsulation";
                        }
                      }  // container flavor
                    }  // list end-x-sid
                  }  // list locator
                }  // container protected
    
                container unprotected {
                  presence "enable unprotected";
                  description
                    "SRv6 Adjacency segment is uneligible for protection";
                  uses apply-advanced;
    
                  list locator {
                    key "name";
                    ordered-by user;
                    description
                      "Locator to bind SRv6 adjacency segment";
                    leaf name {
                      junos:must "("routing-options source-packet-routing srv6 locator $$")";
                      junos:must-message "Referenced source-packet-routing srv6 must be defined";
                      type string;
                      description "Locator name";
                    }
    
                    uses apply-advanced;
    
                    list end-x-sid {
                      key "name";
                      ordered-by user;
                      description
                        "Endpoint 128 bit address";
                      leaf name {
                        type jt:ipv6addr;
                      }
    
                      uses apply-advanced;
    
                      container flavor {
                        presence "enable flavor";
                        uses apply-advanced;
    
                        leaf psp {
                          type empty;
                          description
                            "Penultimate segment pop of the SRH";
                        }
    
                        leaf usp {
                          type empty;
                          description
                            "Ultimate segment pop of the SRH";
                        }
    
                        leaf usd {
                          type empty;
                          description
                            "Ultimate segment decapsulation";
                        }
                      }  // container flavor
                    }  // list end-x-sid
                  }  // list locator
                }  // container unprotected
              }  // container srv6-adjacency-segment
    
              list lan-neighbor {
                junos:must "(!(".. ipv6-adjacency-segment"))";
                junos:must-message "lan-neighbor can't be configured if ipv6-adjacency-segment is configured in the same interface";
                junos:must "(!(".. ipv4-adjacency-segment"))";
                junos:must-message "lan-neighbor can't be configured if ipv4-adjacency-segment is configured in the same interface";
                junos:must "(!(".. no-advertise-adjacency-segment"))";
                junos:must-message "lan-neighbor can't be configured if no-advertise-adjacency-segment is configured in the same level";
                junos:must "(!(".. .. no-advertise-adjacency-segment"))";
                junos:must-message "lan-neighbor can't be configured if  no-advertise-adjacency-segment is configured in the same interface";
                junos:must "(!(".. .. point-to-point"))";
                junos:must-message "lan-neighbor can't be configured for point-to-point interfaces";
                key "name";
                ordered-by user;
                description
                  "Configuration specific to a LAN neighbor";
                leaf name {
                  type jt:sysid;
                  description "Neighbor's sysid";
                }
    
                uses apply-advanced;
    
                container ipv4-adjacency-segment {
                  junos:must "(!(".. no-advertise-adjacency-segment"))";
                  junos:must-message "ipv4-adjacency-segment can't be configured if no-advertise-adjacency-segment is configured in the level";
                  junos:must "(!(".. .. no-advertise-adjacency-segment"))";
                  junos:must-message "ipv4-adjacency-segment can't be configured if no-advertise-adjacency-segment is configured in the same interface";
                  description
                    "Configure ipv4 adjacency segment";
                  uses apply-advanced;
    
                  container protected {
                    description
                      "Adjacency SID is eligible for protection";
                    choice adjsid-type {
                      container index {
                        description
                          "Adjacency SID indexed from SRGB";
                        leaf index-number {
                          type union {
                            type string {
                              pattern "<.*>|$.*";
                            }
                            type uint32 {
                              range
                                "0 .. 199999";
                            }
                          }
                        }
                      }  // container index
                      leaf label {
                        type union {
                          type string {
                            pattern "<.*>|$.*";
                          }
                          type uint32 {
                            range
                              "16 .. 1048575";
                          }
                        }
                        description
                          "Adjacency SID from static label pool";
                      }
                      leaf dynamic {
                        type empty;
                        description
                          "Dynamically allocate an adjacency segment";
                      }
                    }  // choice adjsid-type
                  }  // container protected
    
                  container unprotected {
                    description
                      "Adjacency SID uneligible for protection";
                    choice adjsid-type {
                      container index {
                        description
                          "Adjacency SID indexed from SRGB";
                        leaf index-number {
                          type union {
                            type string {
                              pattern "<.*>|$.*";
                            }
                            type uint32 {
                              range
                                "0 .. 199999";
                            }
                          }
                        }
                      }  // container index
                      leaf label {
                        type union {
                          type string {
                            pattern "<.*>|$.*";
                          }
                          type uint32 {
                            range
                              "16 .. 1048575";
                          }
                        }
                        description
                          "Adjacency SID from static label pool";
                      }
                      leaf dynamic {
                        type empty;
                        description
                          "Dynamically allocate an adjacency segment";
                      }
                    }  // choice adjsid-type
                  }  // container unprotected
                }  // container ipv4-adjacency-segment
    
                container ipv6-adjacency-segment {
                  junos:must "(!(".. no-advertise-adjacency-segment"))";
                  junos:must-message "ipv6-adjacency-segment can't be configured if no-advertise-adjacency-segment is configured in the same level";
                  junos:must "(!(".. .. no-advertise-adjacency-segment"))";
                  junos:must-message "ipv6-adjacency-segment can't be configured if no-advertise-adjacency-segment is configured in the same interface";
                  description
                    "Configure ipv6 adjacency segment";
                  uses apply-advanced;
    
                  container protected {
                    description
                      "Adjacency SID is eligible for protection";
                    choice adjsid-type {
                      container index {
                        description
                          "Adjacency SID indexed from SRGB";
                        leaf index-number {
                          type union {
                            type string {
                              pattern "<.*>|$.*";
                            }
                            type uint32 {
                              range
                                "0 .. 199999";
                            }
                          }
                        }
                      }  // container index
                      leaf label {
                        type union {
                          type string {
                            pattern "<.*>|$.*";
                          }
                          type uint32 {
                            range
                              "16 .. 1048575";
                          }
                        }
                        description
                          "Adjacency SID from static label pool";
                      }
                      leaf dynamic {
                        type empty;
                        description
                          "Dynamically allocate an adjacency segment";
                      }
                    }  // choice adjsid-type
                  }  // container protected
    
                  container unprotected {
                    description
                      "Adjacency SID uneligible for protection";
                    choice adjsid-type {
                      container index {
                        description
                          "Adjacency SID indexed from SRGB";
                        leaf index-number {
                          type union {
                            type string {
                              pattern "<.*>|$.*";
                            }
                            type uint32 {
                              range
                                "0 .. 199999";
                            }
                          }
                        }
                      }  // container index
                      leaf label {
                        type union {
                          type string {
                            pattern "<.*>|$.*";
                          }
                          type uint32 {
                            range
                              "16 .. 1048575";
                          }
                        }
                        description
                          "Adjacency SID from static label pool";
                      }
                      leaf dynamic {
                        type empty;
                        description
                          "Dynamically allocate an adjacency segment";
                      }
                    }  // choice adjsid-type
                  }  // container unprotected
                }  // container ipv6-adjacency-segment
    
                container srm6-adjacency-segment {
                  description
                    "Configure srm6 adjacency segment";
                  uses apply-advanced;
    
                  container unprotected {
                    description
                      "Adjacency SID uneligible for protection";
                    leaf sid {
                      type union {
                        type string {
                          pattern "<.*>|$.*";
                        }
                        type uint32 {
                          range "1 .. 65535";
                        }
                      }
                      description
                        "Set Adjacency SID Value";
                    }
                  }  // container unprotected
                }  // container srm6-adjacency-segment
    
                container srv6-adjacency-segment {
                  description
                    "Configure srv6 adjacency segment";
                  uses apply-advanced;
    
                  container protected {
                    presence "enable protected";
                    description
                      "SRv6 Adjacency segment is eligible for protection";
                    uses apply-advanced;
    
                    list locator {
                      key "name";
                      ordered-by user;
                      description
                        "Locator to bind SRv6 adjacency segment";
                      leaf name {
                        junos:must "("routing-options source-packet-routing srv6 locator $$")";
                        junos:must-message "Referenced source-packet-routing srv6 must be defined";
                        type string;
                        description
                          "Locator name";
                      }
    
                      uses apply-advanced;
    
                      list end-x-sid {
                        key "name";
                        ordered-by user;
                        description
                          "Endpoint 128 bit address";
                        leaf name {
                          type jt:ipv6addr;
                        }
    
                        uses apply-advanced;
    
                        container flavor {
                          presence
                            "enable flavor";
                          uses apply-advanced;
    
                          leaf psp {
                            type empty;
                            description
                              "Penultimate segment pop of the SRH";
                          }
    
                          leaf usp {
                            type empty;
                            description
                              "Ultimate segment pop of the SRH";
                          }
    
                          leaf usd {
                            type empty;
                            description
                              "Ultimate segment decapsulation";
                          }
                        }  // container flavor
                      }  // list end-x-sid
                    }  // list locator
                  }  // container protected
    
                  container unprotected {
                    presence
                      "enable unprotected";
                    description
                      "SRv6 Adjacency segment is uneligible for protection";
                    uses apply-advanced;
    
                    list locator {
                      key "name";
                      ordered-by user;
                      description
                        "Locator to bind SRv6 adjacency segment";
                      leaf name {
                        junos:must "("routing-options source-packet-routing srv6 locator $$")";
                        junos:must-message "Referenced source-packet-routing srv6 must be defined";
                        type string;
                        description
                          "Locator name";
                      }
    
                      uses apply-advanced;
    
                      list end-x-sid {
                        key "name";
                        ordered-by user;
                        description
                          "Endpoint 128 bit address";
                        leaf name {
                          type jt:ipv6addr;
                        }
    
                        uses apply-advanced;
    
                        container flavor {
                          presence
                            "enable flavor";
                          uses apply-advanced;
    
                          leaf psp {
                            type empty;
                            description
                              "Penultimate segment pop of the SRH";
                          }
    
                          leaf usp {
                            type empty;
                            description
                              "Ultimate segment pop of the SRH";
                          }
    
                          leaf usd {
                            type empty;
                            description
                              "Ultimate segment decapsulation";
                          }
                        }  // container flavor
                      }  // list end-x-sid
                    }  // list locator
                  }  // container unprotected
                }  // container srv6-adjacency-segment
              }  // list lan-neighbor
    
              container post-convergence-lfa {
                junos:must "(".. .. .. backup-spf-options use-post-convergence-lfa")";
                junos:must-message "Not allowed without 'protocols isis backup-spf-options use-post-convergence-lfa'";
                presence
                  "enable post-convergence-lfa";
                description
                  "Configure backup along post convergence on this interface";
                uses apply-advanced;
    
                container node-protection {
                  presence
                    "enable node-protection";
                  description
                    "Enable node protection";
                  uses apply-advanced;
    
                  leaf cost {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint32 {
                        range "0 .. 16777215";
                      }
                    }
                    description
                      "Cost for node protection";
                  }
                }  // container node-protection
    
                leaf srlg-protection {
                  type empty;
                  description
                    "Enable srlg protection";
                }
    
                leaf fate-sharing-protection {
                  type empty;
                  description
                    "Enable fate-sharing protection";
                }
              }  // container post-convergence-lfa
    
              container application-specific {
                description
                  "Advertise application-specific TE attributes";
                uses apply-advanced;
    
                list attribute-group {
                  key "name";
                  max-elements 1;
                  ordered-by user;
                  description
                    "Link attribute group name";
                  leaf name {
                    type string;
                    description
                      "Link attribute group name";
                  }
    
                  uses apply-advanced;
    
                  leaf te-metric {
                    junos:must "(".. application")";
                    junos:must-message "Atleast one application is must";
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint32 {
                        range "0 .. 16777215";
                      }
                    }
                    description
                      "Traffic engineering metric for this attribute group";
                  }
    
                  leaf-list admin-group {
                    type string;
                    max-elements 16;
                    ordered-by user;
                    description
                      "Administrative groups for this attribute-group";
                  }
    
                  container application {
                    junos:must "((".. delay-metric" || (".. admin-group" || (".. te-metric" || (".. admin-groups" || (".. legacy" || ".. advertise-delay-metric"))))))";
                    junos:must-message "Atleast one attribute must be configured";
                    description
                      "Standard Applications part of this attribute-group";
                    uses apply-advanced;
    
                    leaf flex-algorithm {
                      type empty;
                      description
                        "Set X flag in standard application bit mask";
                    }
                  }  // container application
                }  // list attribute-group
              }  // container application-specific
    
              choice enable-disable {
                leaf disable {
                  type empty;
                  description
                    "Disable IS-IS for this level";
                }
              }  // choice enable-disable
    
              leaf metric {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "0 .. 16777215";
                  }
                }
                description
                  "Metric for this level";
              }
    
              leaf ipv4-multicast-metric {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "0 .. 16777215";
                  }
                }
                description
                  "IPv4 multicast metric for this level";
              }
    
              leaf ipv6-unicast-metric {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "0 .. 16777215";
                  }
                }
                description
                  "IPv6 unicast metric for this level";
              }
    
              leaf ipv6-multicast-metric {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "0 .. 16777215";
                  }
                }
                description
                  "IPv6 multicast metric for this level";
              }
    
              list topology {
                key "name";
                ordered-by user;
                description
                  "Topology specific attributes";
                leaf name {
                  type enumeration {
                    enum "default" {
                      value 0;
                      description
                        "Default topology";
                    }
                    enum "ipv4-multicast" {
                      value 1;
                      description
                        "IPv4 multicast topology";
                    }
                    enum "ipv6-unicast" {
                      value 2;
                      description
                        "IPv6 unicast topology";
                    }
                    enum "ipv6-multicast" {
                      value 3;
                      description
                        "IPv6 multicast topology";
                    }
                  }
                  description "Topology name";
                }
    
                uses apply-advanced;
    
                leaf metric {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "0 .. 16777215";
                    }
                  }
                  description "Topology metric";
                }
    
                container bandwidth-based-metrics {
                  junos:must "(".. metric")";
                  junos:must-message "Metric must be configured";
                  description
                    "Configure bandwidth based metrics";
                  uses apply-advanced;
    
                  list bandwidth {
                    key "name";
                    description
                      "Bandwidth threshold";
                    leaf name {
                      type string;
                    }
    
                    leaf metric {
                      type union {
                        type string {
                          pattern "<.*>|$.*";
                        }
                        type uint32 {
                          range "0 .. 16777215";
                        }
                      }
                      description
                        "Metric associated with specified bandwidth";
                    }
                  }  // list bandwidth
                }  // container bandwidth-based-metrics
              }  // list topology
    
              leaf authentication-key {
                type jt:unreadable;
                status deprecated;
                description
                  "Authentication key (password)";
              }
    
              leaf authentication-type {
                type enumeration {
                  enum "md5" {
                    value 0;
                    status deprecated;
                    description
                      "MD5 authentication";
                  }
                  enum "simple" {
                    value 1;
                    status deprecated;
                    description
                      "Simple password authentication";
                  }
                }
                status deprecated;
                description
                  "Authentication type";
              }
    
              leaf hello-authentication-key {
                type jt:unreadable;
                description
                  "Authentication key (password) for hello packets";
              }
    
              leaf hello-authentication-type {
                type enumeration {
                  enum "md5" {
                    value 0;
                    description
                      "MD5 authentication";
                  }
                  enum "simple" {
                    value 1;
                    description
                      "Simple password authentication";
                  }
                }
                description
                  "Authentication type for hello packets";
              }
    
              leaf hello-authentication-key-chain {
                junos:must "(!(".. hello-authentication-type"))";
                junos:must-message "May not be configured with hello-authentication-type";
                junos:must "(!(".. hello-authentication-key"))";
                junos:must-message "May not be configured with hello-authentication-key";
                junos:must "(!(".. authentication-key"))";
                junos:must-message "May not be configured with authentication-key";
                junos:must "("security authentication-key-chains key-chain $$")";
                junos:must-message "Referenced key-chain must be defined";
                type string {
                  junos:posix-pattern "[A-za-z]$";
                  junos:pattern-message "Keychain name must not end with number.";
                  length "1 .. 128";
                }
                description "Key chain name";
              }
    
              leaf hello-interval {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "1 .. 21845";
                  }
                }
                units "seconds";
                description
                  "Interval between hello packet transmissions";
              }
    
              leaf hold-time {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "1 .. 65535";
                  }
                }
                units "seconds";
                description
                  "Time after which neighbors think the interface is down";
              }
    
              leaf priority {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "0 .. 127";
                  }
                }
                description
                  "Designated router election priority";
              }
    
              container flood-reflector {
                junos:must "(".. .. level 1 disable")";
                junos:must-message "flood-reflector cannot be enabled on level 1 interface";
                junos:must "(("protocols isis level 2 flood-reflector" && !(".. .. level 1 flood-reflector")))";
                junos:must-message "flood-reflector is only supported on level 2 interfaces";
                presence
                  "enable flood-reflector";
                description
                  "Configure interface as flood-reflector";
                uses apply-advanced;
    
                leaf cluster-id {
                  junos:must "("protocols isis level 2 flood-reflector client")";
                  junos:must-message "flood-reflector client is not configured at isis level";
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "1 .. 4294967295";
                    }
                  }
                  description "Cluster-ID";
                }
              }  // container flood-reflector
    
              container passive {
                presence "enable passive";
                description
                  "Do not run IS-IS at this level, but advertise it";
                uses apply-advanced;
    
                leaf remote-node-iso {
                  junos:must "(".. remote-node-id")";
                  junos:must-message "remote-node-id must be configured";
                  type jt:sysid;
                  description
                    "ISO System-ID of the remote node";
                }
    
                leaf remote-node-id {
                  junos:must "(".. remote-node-iso")";
                  junos:must-message "remote-node-iso must be configured";
                  type jt:ipv4addr;
                  description
                    "Remote address of the link";
                }
              }  // container passive
            }  // list level
    
            leaf delay-metric {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "0 .. 16777215";
                }
              }
              units "microseconds";
              description "Delay metric";
            }
    
            container delay-measurement {
              presence
                "enable delay-measurement";
              description
                "Enable delay measurement";
              uses apply-advanced;
    
              leaf probe-interval {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "1 .. 255";
                  }
                }
                units "seconds";
                description "Probe interval";
              }
    
              leaf probe-count {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "1 .. 15";
                  }
                }
                units "seconds";
                description "Probe count";
              }
    
              container advertisement {
                description
                  "Delay advertisement";
                uses apply-advanced;
    
                container periodic {
                  description
                    "Periodic advertisement parameters";
                  uses apply-advanced;
    
                  leaf threshold {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint32 {
                        range "0 .. 100";
                      }
                    }
                    units "percentage";
                    description "Threshold";
                  }
    
                  leaf interval {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint32 {
                        range "30 .. 3600";
                      }
                    }
                    units "seconds";
                    description "Interval";
                  }
                }  // container periodic
    
                container accelerated {
                  presence "enable accelerated";
                  description
                    "Accelerated advertisement parameters";
                  uses apply-advanced;
    
                  leaf threshold {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint32 {
                        range "0 .. 100";
                      }
                    }
                    units "percentage";
                    description "Threshold";
                  }
                }  // container accelerated
              }  // container advertisement
            }  // container delay-measurement
    
            leaf no-advertise-adjacency-segment {
              type empty;
              description
                "Do not advertise an adjacency segment for this interface";
            }
    
            container auto-bandwidth {
              description
                "Auto bandwidth configuration";
              uses apply-advanced;
    
              leaf template-name {
                junos:must "("protocols isis source-packet-routing traffic-statistics statistics-granularity per-interface")";
                junos:must-message "Config protocols isis source-packet-routing traffic-statistics statistics-granularity per-interface is must";
                junos:must "("routing-options auto-bandwidth template $$")";
                junos:must-message "Referenced auto-bandwidth template must be defined";
                type string;
                description
                  "Auto bandwidth template name";
              }
    
              choice enable-disable {
                leaf disable {
                  type empty;
                  description
                    "Disable Auto bandwidth on this interface";
                }
              }  // choice enable-disable
            }  // container auto-bandwidth
    
            choice protection-type {
              leaf link-protection {
                type empty;
                description
                  "Protect interface from link faults only";
              }
              leaf node-link-protection {
                type empty;
                description
                  "Protect interface from both link and node faults";
              }
            }  // choice protection-type
    
            leaf no-eligible-backup {
              type empty;
              description
                "Not eligible for backup traffic from protected interfaces";
            }
    
            leaf no-eligible-remote-backup {
              type empty;
              description
                "Not eligible for Remote-LFA backup traffic from protected interfaces";
            }
    
            container link-degradation-threshold {
              presence
                "enable link-degradation-threshold";
              description
                "Link up and down thresholds (in %) for proactive link protection";
              leaf link-down {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "0 .. 100";
                  }
                }
                description
                  "Signal degradation threshold above which link marked down";
              }
    
              leaf link-up {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "0 .. 100";
                  }
                }
                description
                  "Signal degradation threshold below which link is marked up.";
              }
            }  // container link-degradation-threshold
    
            choice enable-disable {
              leaf disable {
                type empty;
                description
                  "Disable IS-IS on this interface";
              }
            }  // choice enable-disable
    
            leaf authentication-key {
              type jt:unreadable;
              status deprecated;
              description
                "Authentication key (password)";
            }
    
            leaf authentication-type {
              type enumeration {
                enum "md5" {
                  value 0;
                  status deprecated;
                  description
                    "MD5 authentication";
                }
                enum "simple" {
                  value 1;
                  status deprecated;
                  description
                    "Simple password authentication";
                }
              }
              status deprecated;
              description "Authentication type";
            }
    
            leaf flood-group {
              type string {
                junos:posix-pattern "^[[:xdigit:]]{2}.(([[:xdigit:]]){2}){1,2}((.(([[:xdigit:]]){2}){1,2}){0,1}){0,5}$";
                junos:pattern-message "At max 26 hexa decimal digits, standard ISO area ID format";
              }
              description
                "ISO Area that this interface should send LSPs to";
            }
    
            leaf hello-authentication-key {
              type jt:unreadable;
              status deprecated;
              description
                "Authentication key (password) for hello packets";
            }
    
            leaf hello-authentication-type {
              type enumeration {
                enum "md5" {
                  value 0;
                  status deprecated;
                  description
                    "MD5 authentication";
                }
                enum "simple" {
                  value 1;
                  status deprecated;
                  description
                    "Simple password authentication";
                }
              }
              status deprecated;
              description
                "Authentication type for hello packets";
            }
    
            leaf hello-padding-type {
              type enumeration {
                enum "strict" {
                  value 0;
                  description
                    "Padding for all adjacency states";
                }
                enum "adaptive" {
                  value 1;
                  description
                    "Padding until state of neighbor adjacency is 'up'";
                }
                enum "loose" {
                  value 2;
                  description
                    "Padding until state of adjacency is 'initializing'";
                }
                enum "disable" {
                  value 3;
                  description
                    "Do not add any padding for hello packets";
                }
              }
              default "loose";
              description
                "Type of padding for hello packets";
            }
    
            leaf interface-group-holddown-delay {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "0 .. 60";
                }
              }
              units "seconds";
              description
                "Time to wait before including in BBM calculation";
            }
    
            choice layer2-map-choice {
              leaf layer2-map {
                type empty;
                description
                  "Kernel ARP/ND creation for nexthops";
              }
              leaf no-layer2-map {
                type empty;
                description
                  "Don't kernel ARP/ND creation for nexthops";
              }
            }  // choice layer2-map-choice
    
            leaf max-hello-size {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "512 .. 16000";
                }
              }
              description
                "Maximum size allowed for ISIS Hello PDUs";
            }
    
            leaf lsp-interval {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "1 .. 1000";
                }
              }
              units "milliseconds";
              default "100";
              description
                "Interval between LSP transmissions";
            }
    
            container csnp-interval {
              description
                "Rate of CSN packets (for LAN interfaces only)";
              choice csnp_interval_option {
                leaf csnp-interval-number {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "1 .. 65535";
                    }
                  }
                  units "seconds";
                  description
                    "Interval between CSN packets";
                }
                leaf disable {
                  type empty;
                  description
                    "Do not send CSN packets on this interface";
                }
              }  // choice csnp_interval_option
            }  // container csnp-interval
    
            container strict-dual-isis {
              junos:must "(!(".. .. topologies"))";
              junos:must-message "strict-dual-isis is not allowed with multi-topologies";
              presence "enable strict-dual-isis";
              description
                "Ensure both ipv4 and ipv6 connectivity for adjacencies on this interface";
              uses apply-advanced;
    
              leaf holdown {
                type union {
                  type uint32;
                  type string {
                    pattern "<.*>|$.*";
                  }
                }
                default "12";
                description
                  "Set the holddown timer for strict spf computation";
              }
            }  // container strict-dual-isis
    
            container mesh-group {
              description
                "Add the interface to a mesh group";
              choice mesh_group_option {
                leaf mesh-group-number {
                  type union {
                    type uint32;
                    type string {
                      pattern "<.*>|$.*";
                    }
                  }
                  description
                    "Mesh group number for this interface";
                }
                leaf blocked {
                  type empty;
                  description
                    "Do not flood new LSPs on this interface";
                }
              }  // choice mesh_group_option
            }  // container mesh-group
    
            leaf point-to-point {
              type empty;
              description
                "Treat interface as point to point";
            }
    
            container passive {
              presence "enable passive";
              description
                "Do not run IS-IS, but advertise it";
              uses apply-advanced;
    
              leaf remote-node-iso {
                junos:must "(".. remote-node-id")";
                junos:must-message "remote-node-id must be configured";
                type jt:sysid;
                description
                  "ISO System-ID of the remote node";
              }
    
              leaf remote-node-id {
                junos:must "(".. remote-node-iso")";
                junos:must-message "remote-node-iso must be configured";
                type jt:ipv4addr;
                description
                  "Remote address of the link";
              }
            }  // container passive
    
            leaf checksum {
              type empty;
              description
                "Enable checksum for packets on this interface";
            }
    
            leaf no-unicast-topology {
              type empty;
              description
                "Do not include this interface in the unicast topology";
            }
    
            leaf no-ipv4-multicast {
              type empty;
              description
                "Do not include this interface in the IPv4 multicast topology";
            }
    
            leaf no-ipv6-unicast {
              type empty;
              description
                "Do not include this interface in the IPv6 unicast topology";
            }
    
            leaf no-ipv6-multicast {
              type empty;
              description
                "Do not include this interface in the IPv6 multicast topology";
            }
    
            leaf no-adjacency-down-notification {
              type empty;
              description
                "Do not inform other protocols about adjacency down events";
            }
    
            container bfd-liveness-detection {
              junos:must "(!(".. family inet bfd-liveness-detection"))";
              junos:must-message "To configure bfd-liveness-detection, 'family inet bfd-liveness-detection' must not be configured";
              status deprecated;
              description
                "Bidirectional Forwarding Detection options";
              uses apply-advanced;
    
              leaf version {
                type enumeration {
                  enum "0" {
                    value 0;
                    description
                      "BFD version 0 (deprecated)";
                  }
                  enum "1" {
                    value 1;
                    description "BFD version 1";
                  }
                  enum "automatic" {
                    value 2;
                    description
                      "Choose BFD version automatically";
                  }
                }
                default "automatic";
                description
                  "BFD protocol version number";
              }
    
              leaf minimum-interval {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "1 .. 255000";
                  }
                }
                units "milliseconds";
                description
                  "Minimum transmit and receive interval";
              }
    
              leaf minimum-transmit-interval {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "1 .. 255000";
                  }
                }
                units "milliseconds";
                status deprecated;
                description
                  "Minimum transmit interval";
              }
    
              leaf minimum-receive-interval {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "1 .. 255000";
                  }
                }
                units "milliseconds";
                description
                  "Minimum receive interval";
              }
    
              leaf multiplier {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "1 .. 255";
                  }
                }
                default "3";
                description
                  "Detection time multiplier";
              }
    
              choice adaptation-choice {
                leaf no-adaptation {
                  type empty;
                  description
                    "Disable adaptation";
                }
              }  // choice adaptation-choice
    
              container transmit-interval {
                description
                  "Transmit-interval options";
                uses apply-advanced;
    
                leaf minimum-interval {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "1 .. 255000";
                    }
                  }
                  units "milliseconds";
                  description
                    "Minimum transmit interval";
                }
    
                leaf threshold {
                  type union {
                    type uint32;
                    type string {
                      pattern "<.*>|$.*";
                    }
                  }
                  units "milliseconds";
                  description
                    "High transmit interval triggering a trap";
                }
              }  // container transmit-interval
    
              container detection-time {
                description
                  "Detection-time options";
                uses apply-advanced;
    
                leaf threshold {
                  type union {
                    type uint32;
                    type string {
                      pattern "<.*>|$.*";
                    }
                  }
                  units "milliseconds";
                  description
                    "High detection-time triggering a trap";
                }
              }  // container detection-time
    
              container authentication {
                description
                  "Authentication options";
                uses apply-advanced;
    
                leaf key-chain {
                  junos:must "(".. algorithm")";
                  junos:must-message "May not be configured without algorithm";
                  junos:must "("security authentication-key-chains key-chain $$")";
                  junos:must-message "Referenced key-chain must be defined";
                  type string;
                  description "Key chain name";
                }
    
                leaf algorithm {
                  junos:must "(".. key-chain")";
                  junos:must-message "May not be configured without key-chain";
                  type enumeration {
                    enum "simple-password" {
                      value 0;
                      description
                        "Simple password";
                    }
                    enum "keyed-md5" {
                      value 1;
                      description
                        "Keyed message Digest 5";
                    }
                    enum "meticulous-keyed-md5" {
                      value 2;
                      description
                        "Meticulous keyed message Digest 5";
                    }
                    enum "keyed-sha-1" {
                      value 3;
                      description
                        "Keyed secure hash algorithm (SHA1) ";
                    }
                    enum
                      "meticulous-keyed-sha-1" {
                      value 4;
                      description
                        "Meticulous keyed secure hash algorithm (SHA1) ";
                    }
                  }
                  description "Algorithm name";
                }
    
                leaf loose-check {
                  type empty;
                  description
                    "Verify authentication only if authentication is negotiated";
                }
              }  // container authentication
            }  // container bfd-liveness-detection
    
            list family {
              key "name";
              ordered-by user;
              description
                "Address family specific interface attributes";
              leaf name {
                type enumeration {
                  enum "inet" {
                    value 0;
                    description "IPv4 family";
                  }
                  enum "inet6" {
                    value 1;
                    description "IPv6 family";
                  }
                }
              }
    
              uses apply-advanced;
    
              container bfd-liveness-detection {
                junos:must "(!((".. .. bfd-liveness-detection" && ".. .. family inet bfd-liveness-detection")))";
                junos:must-message "bfd-liveness-detection and 'family inet bfd-liveness-detection' cannot be configured at the same time";
                description
                  "Bidirectional Forwarding Detection options";
                uses apply-advanced;
    
                leaf version {
                  type enumeration {
                    enum "0" {
                      value 0;
                      description
                        "BFD version 0 (deprecated)";
                    }
                    enum "1" {
                      value 1;
                      description
                        "BFD version 1";
                    }
                    enum "automatic" {
                      value 2;
                      description
                        "Choose BFD version automatically";
                    }
                  }
                  default "automatic";
                  description
                    "BFD protocol version number";
                }
    
                leaf minimum-interval {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "1 .. 255000";
                    }
                  }
                  units "milliseconds";
                  description
                    "Minimum transmit and receive interval";
                }
    
                leaf minimum-transmit-interval {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "1 .. 255000";
                    }
                  }
                  units "milliseconds";
                  status deprecated;
                  description
                    "Minimum transmit interval";
                }
    
                leaf minimum-receive-interval {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "1 .. 255000";
                    }
                  }
                  units "milliseconds";
                  description
                    "Minimum receive interval";
                }
    
                leaf multiplier {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "1 .. 255";
                    }
                  }
                  default "3";
                  description
                    "Detection time multiplier";
                }
    
                choice adaptation-choice {
                  leaf no-adaptation {
                    type empty;
                    description
                      "Disable adaptation";
                  }
                }  // choice adaptation-choice
    
                container transmit-interval {
                  description
                    "Transmit-interval options";
                  uses apply-advanced;
    
                  leaf minimum-interval {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint32 {
                        range "1 .. 255000";
                      }
                    }
                    units "milliseconds";
                    description
                      "Minimum transmit interval";
                  }
    
                  leaf threshold {
                    type union {
                      type uint32;
                      type string {
                        pattern "<.*>|$.*";
                      }
                    }
                    units "milliseconds";
                    description
                      "High transmit interval triggering a trap";
                  }
                }  // container transmit-interval
    
                container detection-time {
                  description
                    "Detection-time options";
                  uses apply-advanced;
    
                  leaf threshold {
                    type union {
                      type uint32;
                      type string {
                        pattern "<.*>|$.*";
                      }
                    }
                    units "milliseconds";
                    description
                      "High detection-time triggering a trap";
                  }
                }  // container detection-time
    
                container authentication {
                  description
                    "Authentication options";
                  uses apply-advanced;
    
                  leaf key-chain {
                    junos:must "(".. algorithm")";
                    junos:must-message "May not be configured without algorithm";
                    junos:must "("security authentication-key-chains key-chain $$")";
                    junos:must-message "Referenced key-chain must be defined";
                    type string;
                    description "Key chain name";
                  }
    
                  leaf algorithm {
                    junos:must "(".. key-chain")";
                    junos:must-message "May not be configured without key-chain";
                    type enumeration {
                      enum "simple-password" {
                        value 0;
                        description
                          "Simple password";
                      }
                      enum "keyed-md5" {
                        value 1;
                        description
                          "Keyed message Digest 5";
                      }
                      enum
                        "meticulous-keyed-md5" {
                        value 2;
                        description
                          "Meticulous keyed message Digest 5";
                      }
                      enum "keyed-sha-1" {
                        value 3;
                        description
                          "Keyed secure hash algorithm (SHA1) ";
                      }
                      enum
                        "meticulous-keyed-sha-1" {
                        value 4;
                        description
                          "Meticulous keyed secure hash algorithm (SHA1) ";
                      }
                    }
                    description "Algorithm name";
                  }
    
                  leaf loose-check {
                    type empty;
                    description
                      "Verify authentication only if authentication is negotiated";
                  }
                }  // container authentication
              }  // container bfd-liveness-detection
            }  // list family
          }  // list interface
    
          container source-packet-routing {
            junos:must "(!(".. srm6"))";
            junos:must-message "must not have 'protocols isis srm6' configured";
            presence
              "enable source-packet-routing";
            description
              "Enable Source Packet Routing (SPRING)";
            uses apply-advanced;
    
            container adjacency-segment {
              junos:must "(!(".. .. .. .. protocols mpls disable"))";
              junos:must-message "SPRING configuration is not allowed with 'protocols mpls disable'";
              description
                "Configure attributes for Adjacency Segments in SPRING";
              uses apply-advanced;
    
              leaf hold-time {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "180000 .. 900000";
                  }
                }
                description
                  "Duration(ms) for which adjacency segments will be retained after isolating from an interface";
              }
            }  // container adjacency-segment
    
            container udp-tunneling {
              junos:must "(!(".. .. .. .. protocols mpls disable"))";
              junos:must-message "SPRING configuration is not allowed with 'protocols mpls disable'";
              description
                "Enable SR over UDP feature";
              uses apply-advanced;
    
              leaf encapsulation {
                type empty;
                description
                  "Enable UDP Tunnel Encapsulation";
              }
    
              leaf decapsulation {
                type empty;
                description
                  "Enable UDP Tunnel decapsulation";
              }
            }  // container udp-tunneling
    
            container srgb {
              junos:must "(!(".. node-segment index-range"))";
              junos:must-message "May not be confiugred with node-segment index-range";
              junos:must "(!(".. .. .. .. protocols mpls disable"))";
              junos:must-message "SPRING configuration is not allowed with 'protocols mpls disable'";
              description
                "Set the SRGB global block in SPRING";
              leaf start-label {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32;
                }
                description
                  "Start range for SRGB label block";
              }
    
              leaf index-range {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32;
                }
                description
                  "Index to the SRGB start label block";
              }
            }  // container srgb
    
            container node-segment {
              junos:must "(!(".. .. .. .. protocols mpls disable"))";
              junos:must-message "SPRING configuration is not allowed with 'protocols mpls disable'";
              description
                "Enable support for Node segments in SPRING";
              uses apply-advanced;
    
              leaf ipv4-index {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "0 .. 199999";
                  }
                }
                description
                  "Set IPv4 Node Segment index";
              }
    
              leaf ipv6-index {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "0 .. 199999";
                  }
                }
                description
                  "Set IPv6 Node Segment index";
              }
    
              leaf index-range {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "32 .. 16385";
                  }
                }
                description
                  "Set Range of Node Segment indices allowed";
              }
            }  // container node-segment
    
            leaf-list flex-algorithm {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "128 .. 255";
                }
              }
              max-elements 16;
              description
                "Flex-algorithms we would like to participate in";
            }
    
            leaf use-flex-algorithm-metric-always {
              type empty;
              description
                "Use flex-algo prefix metric whenever available";
            }
    
            leaf strict-asla-based-flex-algorithm {
              type empty;
              description
                "Flex-Algorithm to ignore links not having ASLA sub-TLVs";
            }
    
            leaf new-capability-subtlv {
              junos:must "(!(".. .. .. .. protocols mpls disable"))";
              junos:must-message "SPRING configuration is not allowed with 'protocols mpls disable'";
              type empty;
              description
                "Advertise all ranges in single spring capability subtlv";
            }
    
            leaf explicit-null {
              junos:must "(!(".. .. .. .. protocols mpls disable"))";
              junos:must-message "SPRING configuration is not allowed with 'protocols mpls disable'";
              type empty;
              description
                "Set E and P bits in all Prefix SID advertisements";
            }
    
            leaf mapping-server {
              junos:must "(!(".. .. .. .. protocols mpls disable"))";
              junos:must-message "SPRING configuration is not allowed with 'protocols mpls disable'";
              junos:must "("routing-options source-packet-routing mapping-server-entry $$")";
              junos:must-message "Referenced source-packet-routing mapping-server-entry must be defined";
              type string;
              description "Mapping server name";
            }
    
            leaf no-strict-spf {
              type empty;
              description
                " Disable strict spf algo 1 advertisement";
            }
    
            leaf ldp-stitching {
              junos:must "(!(".. .. .. .. protocols mpls disable"))";
              junos:must-message "SPRING configuration is not allowed with 'protocols mpls disable'";
              type empty;
              description
                "Enable SR to LDP stitching";
            }
    
            container srv6 {
              presence "enable srv6";
              description
                "Enable IPv6 Segment Routing (SRv6)";
              uses apply-advanced;
    
              list locator {
                key "name";
                ordered-by user;
                description "SRv6 Locator";
                leaf name {
                  junos:must "("routing-options source-packet-routing srv6 locator $$")";
                  junos:must-message "Referenced source-packet-routing srv6 must be defined";
                  type string;
                  description "Locator name";
                }
    
                uses apply-advanced;
    
                list end-sid {
                  key "name";
                  ordered-by user;
                  leaf name {
                    type jt:ipv6addr;
                  }
    
                  uses apply-advanced;
    
                  container flavor {
                    presence "enable flavor";
                    uses apply-advanced;
    
                    leaf psp {
                      type empty;
                      description
                        "Penultimate segment pop of the SRH";
                    }
    
                    leaf usp {
                      type empty;
                      description
                        "Ultimate segment pop of the SRH";
                    }
    
                    leaf usd {
                      type empty;
                      description
                        "Ultimate segment decapsulation";
                    }
                  }  // container flavor
                }  // list end-sid
              }  // list locator
            }  // container srv6
    
            container sensor-based-stats {
              junos:must "(!(".. .. .. .. protocols mpls disable"))";
              junos:must-message "SPRING configuration is not allowed with 'protocols mpls disable'";
              description
                "Configure sensor based stats in SPRING";
              uses apply-advanced;
    
              container per-interface-per-member-link {
                description
                  "Configure sensor based stats per nexthop";
                leaf ingress {
                  type empty;
                  description
                    "Enable sensor based stats on ingress interface";
                }
    
                leaf egress {
                  type empty;
                  description
                    "Enable sensor based stats on egress interface";
                }
              }  // container per-interface-per-member-link
    
              container per-sid {
                description
                  "Configure sensor based stats per spring route";
                leaf ingress {
                  type empty;
                  description
                    "Enable sensor based stats for per-sid ingress accounting";
                }
    
                leaf egress {
                  type empty;
                  description
                    "Enable sensor based stats for IP-MPLS egress accounting";
                }
              }  // container per-sid
            }  // container sensor-based-stats
    
            container traffic-statistics {
              junos:must "(!(".. .. .. .. protocols mpls disable"))";
              junos:must-message "SPRING configuration is not allowed with 'protocols mpls disable'";
              description
                "Enable support for traffic statistics in SPRING";
              uses apply-advanced;
    
              container statistics-granularity {
                description
                  "Granularity for traffic statistics in SPRING";
                uses apply-advanced;
    
                leaf per-interface {
                  type empty;
                  description
                    "Interface Based traffic statistics in SPRING";
                }
              }  // container statistics-granularity
    
              leaf auto-bandwidth {
                junos:must "("protocols isis source-packet-routing traffic-statistics statistics-granularity per-interface")";
                junos:must-message "Config protocols isis source-packet-routing traffic-statistics statistics-granularity per-interface is must";
                junos:must "("routing-options auto-bandwidth template $$")";
                junos:must-message "Referenced auto-bandwidth template must be defined";
                type string;
                description
                  "Auto bandwidth name";
              }
            }  // container traffic-statistics
          }  // container source-packet-routing
    
          container srm6 {
            junos:must "(!(".. source-packet-routing"))";
            junos:must-message "must not have 'protocols isis source-packet-routing' configured";
            presence "enable srm6";
            description "Enable SRm6";
            uses apply-advanced;
    
            container sid {
              description
                "Configure attributes for SID in srm6";
              uses apply-advanced;
    
              leaf node-sid {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "1 .. 65535";
                  }
                }
                description "Set Node SID Value";
              }
    
              leaf address {
                type jt:ipv6addr;
                description
                  "IPv6 address corresponding to SID";
              }
            }  // container sid
          }  // container srm6
    
          list level {
            key "name";
            ordered-by user;
            description
              "Configure global level attributes";
            leaf name {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "1 .. 2";
                }
              }
              description "IS-IS level number";
            }
    
            uses apply-advanced;
    
            leaf labeled-preference {
              junos:must "(".. .. source-packet-routing")";
              junos:must-message "labeled-preference cannot be specified without 'protocols isis source-packet-routing'";
              type union {
                type uint32;
                type string {
                  pattern "<.*>|$.*";
                }
              }
              description
                "Preference of labeled IS-IS routes";
            }
    
            leaf srv6-preference {
              junos:must "(".. .. source-packet-routing")";
              junos:must-message "srv6-preference cannot be specified without 'protocols isis source-packet-routing'";
              type union {
                type uint32;
                type string {
                  pattern "<.*>|$.*";
                }
              }
              description
                "Preference of SRV6 IS-IS routes";
            }
    
            leaf flex-algorithm-preference {
              junos:must "(".. .. source-packet-routing")";
              junos:must-message "flex-algorithm-preference cannot be specified without 'protocols isis source-packet-routing'";
              type union {
                type uint32;
                type string {
                  pattern "<.*>|$.*";
                }
              }
              description
                "Preference of flex-algorithm L-ISIS routes";
            }
    
            container source-packet-routing {
              presence
                "enable source-packet-routing";
              description
                "Enable Source Packet Routing (SPRING)";
              uses apply-advanced;
    
              choice enable-disable {
                leaf disable {
                  type empty;
                  description
                    "Disable Source Packet Routing on this level";
                }
              }  // choice enable-disable
    
              leaf srms-preference {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "0 .. 255";
                  }
                }
                description
                  "Set SRMS preference value";
              }
            }  // container source-packet-routing
    
            choice enable-disable {
              leaf disable {
                type empty;
                description
                  "Disable IS-IS on this level";
              }
            }  // choice enable-disable
    
            leaf authentication-key {
              type jt:unreadable;
              description
                "Authentication key (password)";
            }
    
            leaf authentication-type {
              type enumeration {
                enum "md5" {
                  value 0;
                  description
                    "MD5 authentication";
                }
                enum "simple" {
                  value 1;
                  description
                    "Simple password authentication";
                }
              }
              description "Authentication type";
            }
    
            leaf purge-originator {
              type enumeration {
                enum "self" {
                  value 0;
                  description
                    "Add POI only for self-originated purge LSPs";
                }
                enum "empty" {
                  value 1;
                  description
                    "Add POI for purge LSPs who do not have POI information";
                }
              }
              description
                "Add Purge Originator information";
            }
    
            leaf no-hello-authentication {
              type empty;
              description
                "Disable authentication for hello packets";
            }
    
            leaf no-csnp-authentication {
              type empty;
              description
                "Disable authentication for CSN packets";
            }
    
            leaf no-psnp-authentication {
              type empty;
              description
                "Disable authentication for PSN packets";
            }
    
            leaf authentication-key-chain {
              junos:must "(!(".. authentication-type"))";
              junos:must-message "May not be configured with authentication-type";
              junos:must "(!(".. authentication-key"))";
              junos:must-message "May not be configured with authentication-key";
              junos:must "("security authentication-key-chains key-chain $$")";
              junos:must-message "Referenced key-chain must be defined";
              type string {
                junos:posix-pattern "[A-za-z]$";
                junos:pattern-message "Keychain name must not end with number.";
                length "1 .. 128";
              }
              description "Key chain name";
            }
    
            leaf wide-metrics-only {
              junos:must "(!(".. .. clns-routing"))";
              junos:must-message "wide-metrics-only cannot be specified with clns-routing";
              type empty;
              description
                "Generate wide metrics only";
            }
    
            leaf preference {
              type union {
                type uint32;
                type string {
                  pattern "<.*>|$.*";
                }
              }
              description
                "Preference of internal routes";
            }
    
            leaf external-preference {
              type union {
                type uint32;
                type string {
                  pattern "<.*>|$.*";
                }
              }
              description
                "Preference of external routes";
            }
    
            leaf prefix-export-limit {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "0 .. 4294967295";
                }
              }
              description
                "Maximum number of external prefixes that can be exported";
            }
    
            container flood-reflector {
              junos:must "(!(".. .. level 1 flood-reflector"))";
              junos:must-message "Flood-reflector is supported only in level 2";
              description
                "Enable flood-reflector";
              uses apply-advanced;
    
              container reflector {
                junos:must "(!(".. client"))";
                junos:must-message "flood-reflector and client can't be configured together";
                description
                  "Configure this as a flood-reflector";
                uses apply-advanced;
    
                leaf cluster-id {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "1 .. 4294967295";
                    }
                  }
                  description "Cluster-ID";
                }
              }  // container reflector
    
              leaf client {
                type empty;
                description
                  "Configure interface as flood-reflector client";
              }
            }  // container flood-reflector
          }  // list level
    
          list interface-group {
            key "name";
            description
              "Interface grouping configuration";
            leaf name {
              type string;
              description "Interface group name";
            }
    
            uses apply-advanced;
    
            list level {
              key "name";
              ordered-by user;
              description
                "Configure levels on this interface-group";
              leaf name {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "1 .. 2";
                  }
                }
                description "IS-IS level number";
              }
    
              uses apply-advanced;
    
              container ipv4-adjacency-segment {
                junos:must "(!(".. no-advertise-adjacency-segment"))";
                junos:must-message "ipv4-adjacency-segment can't be configured if no-advertise-adjacency-segment is configured in the level";
                junos:must "(!(".. .. no-advertise-adjacency-segment"))";
                junos:must-message "ipv4-adjacency-segment can't be configured if no-advertise-adjacency-segment is configured in the same interface";
                description
                  "Configure ipv4 adjacency segment";
                uses apply-advanced;
    
                container protected {
                  description
                    "Adjacency SID is eligible for protection";
                  choice adjsid-type {
                    container index {
                      description
                        "Adjacency SID indexed from SRGB";
                      leaf index-number {
                        type union {
                          type string {
                            pattern "<.*>|$.*";
                          }
                          type uint32 {
                            range "0 .. 199999";
                          }
                        }
                      }
                    }  // container index
                    leaf label {
                      type union {
                        type string {
                          pattern "<.*>|$.*";
                        }
                        type uint32 {
                          range "16 .. 1048575";
                        }
                      }
                      description
                        "Adjacency SID from static label pool";
                    }
                    leaf dynamic {
                      type empty;
                      description
                        "Dynamically allocate an adjacency segment";
                    }
                  }  // choice adjsid-type
                }  // container protected
    
                container unprotected {
                  description
                    "Adjacency SID uneligible for protection";
                  choice adjsid-type {
                    container index {
                      description
                        "Adjacency SID indexed from SRGB";
                      leaf index-number {
                        type union {
                          type string {
                            pattern "<.*>|$.*";
                          }
                          type uint32 {
                            range "0 .. 199999";
                          }
                        }
                      }
                    }  // container index
                    leaf label {
                      type union {
                        type string {
                          pattern "<.*>|$.*";
                        }
                        type uint32 {
                          range "16 .. 1048575";
                        }
                      }
                      description
                        "Adjacency SID from static label pool";
                    }
                    leaf dynamic {
                      type empty;
                      description
                        "Dynamically allocate an adjacency segment";
                    }
                  }  // choice adjsid-type
                }  // container unprotected
              }  // container ipv4-adjacency-segment
    
              container ipv6-adjacency-segment {
                junos:must "(!(".. no-advertise-adjacency-segment"))";
                junos:must-message "ipv6-adjacency-segment can't be configured if no-advertise-adjacency-segment is configured in the same level";
                junos:must "(!(".. .. no-advertise-adjacency-segment"))";
                junos:must-message "ipv6-adjacency-segment can't be configured if no-advertise-adjacency-segment is configured in the same interface";
                description
                  "Configure ipv6 adjacency segment";
                uses apply-advanced;
    
                container protected {
                  description
                    "Adjacency SID is eligible for protection";
                  choice adjsid-type {
                    container index {
                      description
                        "Adjacency SID indexed from SRGB";
                      leaf index-number {
                        type union {
                          type string {
                            pattern "<.*>|$.*";
                          }
                          type uint32 {
                            range "0 .. 199999";
                          }
                        }
                      }
                    }  // container index
                    leaf label {
                      type union {
                        type string {
                          pattern "<.*>|$.*";
                        }
                        type uint32 {
                          range "16 .. 1048575";
                        }
                      }
                      description
                        "Adjacency SID from static label pool";
                    }
                    leaf dynamic {
                      type empty;
                      description
                        "Dynamically allocate an adjacency segment";
                    }
                  }  // choice adjsid-type
                }  // container protected
    
                container unprotected {
                  description
                    "Adjacency SID uneligible for protection";
                  choice adjsid-type {
                    container index {
                      description
                        "Adjacency SID indexed from SRGB";
                      leaf index-number {
                        type union {
                          type string {
                            pattern "<.*>|$.*";
                          }
                          type uint32 {
                            range "0 .. 199999";
                          }
                        }
                      }
                    }  // container index
                    leaf label {
                      type union {
                        type string {
                          pattern "<.*>|$.*";
                        }
                        type uint32 {
                          range "16 .. 1048575";
                        }
                      }
                      description
                        "Adjacency SID from static label pool";
                    }
                    leaf dynamic {
                      type empty;
                      description
                        "Dynamically allocate an adjacency segment";
                    }
                  }  // choice adjsid-type
                }  // container unprotected
              }  // container ipv6-adjacency-segment
    
              container srm6-adjacency-segment {
                description
                  "Configure srm6 adjacency segment";
                uses apply-advanced;
    
                container unprotected {
                  description
                    "Adjacency SID uneligible for protection";
                  leaf sid {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint32 {
                        range "1 .. 65535";
                      }
                    }
                    description
                      "Set Adjacency SID Value";
                  }
                }  // container unprotected
              }  // container srm6-adjacency-segment
    
              list topology {
                key "name";
                ordered-by user;
                description
                  "Topology specific attributes";
                leaf name {
                  type enumeration {
                    enum "default" {
                      value 0;
                      description
                        "Default topology";
                    }
                    enum "ipv4-multicast" {
                      value 1;
                      description
                        "IPv4 multicast topology";
                    }
                    enum "ipv6-unicast" {
                      value 2;
                      description
                        "IPv6 unicast topology";
                    }
                    enum "ipv6-multicast" {
                      value 3;
                      description
                        "IPv6 multicast topology";
                    }
                  }
                  description "Topology name";
                }
    
                uses apply-advanced;
    
                leaf metric {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "0 .. 16777215";
                    }
                  }
                  description "Topology metric";
                }
    
                container bandwidth-based-metrics {
                  junos:must "(".. metric")";
                  junos:must-message "Metric must be configured";
                  description
                    "Configure bandwidth based metrics";
                  uses apply-advanced;
    
                  list bandwidth {
                    key "name";
                    description
                      "Bandwidth threshold";
                    leaf name {
                      type string;
                    }
    
                    leaf metric {
                      type union {
                        type string {
                          pattern "<.*>|$.*";
                        }
                        type uint32 {
                          range "0 .. 16777215";
                        }
                      }
                      description
                        "Metric associated with specified bandwidth";
                    }
                  }  // list bandwidth
                }  // container bandwidth-based-metrics
              }  // list topology
            }  // list level
    
            container link-group-protection {
              junos:must "(!(".. .. backup-spf-options"))";
              junos:must-message "Backup SPF options can't be configured";
              description
                "Configure link group protection";
              uses apply-advanced;
    
              leaf minimum-bandwidth {
                type string;
                description
                  "Minimum bandwidth to carry traffic";
              }
    
              leaf revert-bandwidth {
                type string;
                description
                  "Revert bandwidth to carry traffic";
              }
            }  // container link-group-protection
    
            list interface {
              key "name";
              description
                "List interfaces for this group";
              leaf name {
                type union {
                  type jt:interface-name;
                  type string {
                    pattern "<.*>|$.*";
                  }
                }
                description "Interface name";
              }
    
              uses apply-advanced;
    
              leaf weight {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "1 .. 255";
                  }
                }
                description
                  "Interface weight for adjacency set";
              }
            }  // list interface
          }  // list interface-group
    
          container spf-options {
            description
              "Configure SPF attributes";
            uses apply-advanced;
    
            container microloop-avoidance {
              description
                "Configure microloop avoidance mechanisms";
              uses apply-advanced;
    
              container post-convergence-path {
                junos:must "(!(".. use-route-convergence-delay"))";
                junos:must-message "use-route-convergence-delay is not allowed with post-convergence-path";
                presence
                  "enable post-convergence-path";
                description
                  "Temporarily install post-convergence path for routes potentially affected by microloops";
                uses apply-advanced;
    
                leaf delay {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "500 .. 60000";
                    }
                  }
                  units "milliseconds";
                  description
                    "Time after which temporary post-convergence paths are removed";
                }
    
                leaf maximum-labels {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "2 .. 8";
                    }
                  }
                  description
                    "Set maximum number of label supported for Micro-Loop-Avoidance calculations";
                }
    
                leaf maximum-srv6-sids {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "2 .. 6";
                    }
                  }
                  description
                    "Set maximum number of SRV6 SIDs supported for Micro-Loop-Avoidance calculations";
                }
              }  // container post-convergence-path
            }  // container microloop-avoidance
    
            leaf delay {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "50 .. 1000";
                }
              }
              units "milliseconds";
              description
                "Time to wait before running an SPF";
            }
    
            leaf holddown {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "2000 .. 10000";
                }
              }
              units "milliseconds";
              description
                "Time to hold down before running an SPF";
            }
    
            leaf rapid-runs {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "1 .. 5";
                }
              }
              description
                "Number of rapid SPF runs before SPF holddown";
            }
    
            container multipath {
              description
                "Configure multipath options";
              uses apply-advanced;
    
              container weighted {
                description
                  "Weighted multipath options";
                uses apply-advanced;
    
                leaf one-hop {
                  type empty;
                  description
                    "Enable load balancing on onehop multipath based on interface bandwidth";
                }
              }  // container weighted
            }  // container multipath
          }  // container spf-options
    
          container traceoptions {
            description
              "Trace options for IS-IS";
            uses apply-advanced;
    
            list flag {
              key "name";
              ordered-by user;
              description "Tracing parameters";
              leaf name {
                type enumeration {
                  enum "traffic-statistics" {
                    value 0;
                    description
                      "Trace traffic-statistics related events";
                  }
                  enum "post-convergence-lfa" {
                    value 1;
                    description
                      "Trace post-convergence-lfa related events";
                  }
                  enum "error" {
                    value 2;
                    description
                      "Trace errored packets";
                  }
                  enum "spf" {
                    value 3;
                    description
                      "Trace SPF events";
                  }
                  enum "packets" {
                    value 4;
                    description
                      "Trace IS-IS packets";
                  }
                  enum "hello" {
                    value 5;
                    description
                      "Trace hello packets";
                  }
                  enum "lsp" {
                    value 6;
                    description
                      "Trace link-state packets";
                  }
                  enum "psn" {
                    value 7;
                    description
                      "Trace partial sequence number (PSN) packets";
                  }
                  enum "csn" {
                    value 8;
                    description
                      "Trace complete sequence number (CSN) packets";
                  }
                  enum "layer2-map" {
                    value 9;
                    description
                      "Trace ARP/ND kernel state manipulation";
                  }
                  enum "lsp-generation" {
                    value 10;
                    description
                      "Trace LSP generation";
                  }
                  enum "graceful-restart" {
                    value 11;
                    description
                      "Trace graceful restart events";
                  }
                  enum "ldp-synchronization" {
                    value 12;
                    description
                      "Trace synchronization between IS-IS and LDP";
                  }
                  enum "nsr-synchronization" {
                    value 13;
                    description
                      "Trace NSR synchronization events";
                  }
                  enum "spring" {
                    value 14;
                    description
                      "Trace source packet routing";
                  }
                  enum "prefix-sid" {
                    value 15;
                    description
                      "Trace source packet routing, prefix-sids";
                  }
                  enum "flex-algorithm" {
                    value 16;
                    description
                      "Trace flex-algorithm related events";
                  }
                  enum "adj-sid" {
                    value 17;
                    description
                      "Trace adj-sid related events";
                  }
                  enum "route" {
                    value 18;
                    description
                      "Trace routing information";
                  }
                  enum "normal" {
                    value 19;
                    description
                      "Trace normal events";
                  }
                  enum "general" {
                    value 20;
                    description
                      "Trace general events";
                  }
                  enum "state" {
                    value 21;
                    description
                      "Trace state transitions";
                  }
                  enum "policy" {
                    value 22;
                    description
                      "Trace policy processing";
                  }
                  enum "task" {
                    value 23;
                    description
                      "Trace routing protocol task processing";
                  }
                  enum "timer" {
                    value 24;
                    description
                      "Trace routing protocol timer processing";
                  }
                  enum "srv6" {
                    value 25;
                    description
                      "Trace srv6 related events";
                  }
                  enum "rmopd" {
                    value 26;
                    description
                      "Trace rmopd interactions";
                  }
                  enum "all" {
                    value 27;
                    description
                      "Trace everything";
                  }
                }
              }
    
              leaf send {
                type empty;
                description
                  "Trace transmitted packets";
              }
    
              leaf receive {
                type empty;
                description
                  "Trace received packets";
              }
    
              leaf detail {
                type empty;
                description
                  "Trace detailed information";
              }
    
              leaf disable {
                type empty;
                description
                  "Disable this trace flag";
              }
            }  // list flag
    
            container file {
              description "Trace file options";
              leaf filename {
                type string {
                  junos:posix-pattern "![/ %]";
                  junos:pattern-message "Must not contain '/', % or a space";
                  length "1 .. 1024";
                }
                description
                  "Name of file in which to write trace information";
              }
    
              leaf replace {
                type empty;
                status deprecated;
                description
                  "Replace trace file rather than appending to it";
              }
    
              leaf size {
                type string;
                description
                  "Maximum trace file size";
              }
    
              leaf files {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "2 .. 1000";
                  }
                }
                default "10";
                description
                  "Maximum number of trace files";
              }
    
              leaf no-stamp {
                type empty;
                status deprecated;
                description
                  "Do not timestamp trace file";
              }
    
              choice world-readable-choice {
                leaf world-readable {
                  type empty;
                  description
                    "Allow any user to read the log file";
                }
                leaf no-world-readable {
                  type empty;
                  description
                    "Don't allow any user to read the log file";
                }
              }  // choice world-readable-choice
            }  // container file
          }  // container traceoptions
    
          container backup-spf-options {
            description
              "Configure backup SPF attributes";
            uses apply-advanced;
    
            container remote-backup-calculation {
              junos:must "(!(".. .. backup-spf-options use-post-convergence-lfa"))";
              junos:must-message "Not allowed with 'protocols isis backup-spf-options use-post-convergence-lfa'";
              presence
                "enable remote-backup-calculation";
              description
                "Calculate Remote LFA backup nexthops";
              uses apply-advanced;
            }  // container remote-backup-calculation
    
            container use-post-convergence-lfa {
              junos:must "(".. .. source-packet-routing")";
              junos:must-message "Configuration of 'protocols isis source-packet-routing' is must";
              presence
                "enable use-post-convergence-lfa";
              description
                "Calculate Post Convergence Backup Nexthops";
              uses apply-advanced;
    
              leaf maximum-labels {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "2 .. 8";
                  }
                }
                description
                  "Set maximum number of label supported for post convergence path calculations";
              }
    
              leaf maximum-srv6-sids {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "2 .. 6";
                  }
                }
                description
                  "Set maximum number of SRV6 SIDs for post convergence path calculations";
              }
    
              leaf maximum-backup-paths {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "1 .. 8";
                  }
                }
                description
                  "Set maximum equal cost backup post convergence paths";
              }
            }  // container use-post-convergence-lfa
    
            container use-source-packet-routing {
              junos:must "(".. .. source-packet-routing")";
              junos:must-message "Use of SPRING paths as backup can't be configured without configuring 'protocols isis source-packet-routing'";
              presence
                "enable use-source-packet-routing";
              description
                "Use SPRING routed paths for protection";
              uses apply-advanced;
            }  // container use-source-packet-routing
    
            leaf per-prefix-calculation {
              type empty;
              description
                "Calculate backup nexthops for non-best prefix originators";
            }
    
            leaf node-link-degradation {
              junos:must "(!(".. .. backup-spf-options use-post-convergence-lfa"))";
              junos:must-message "Not allowed with 'protocols isis backup-spf-options use-post-convergence-lfa'";
              type empty;
              description
                "Degrade to link protection when nodelink protection not available";
            }
          }  // container backup-spf-options
    
          list context-identifier {
            key "name";
            ordered-by user;
            description
              "Configuration for advertisement of a context-identifier ";
            leaf name {
              type jt:ipprefix;
              description
                "Context identifier range";
            }
    
            uses apply-advanced;
    
            list level {
              key "name";
              ordered-by user;
              description
                "Configure global level attributes";
              leaf name {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "1 .. 2";
                  }
                }
                description "IS-IS level number";
              }
    
              uses apply-advanced;
    
              choice enable-disable {
                leaf disable {
                  type empty;
                  description
                    "Disable advertisements to this level";
                }
              }  // choice enable-disable
            }  // list level
          }  // list context-identifier
    
          container traffic-engineering {
            description
              "Configure traffic engineering attributes";
            uses apply-advanced;
    
            choice enable-disable {
              leaf disable {
                type empty;
                description
                  "Disable traffic engineering";
              }
            }  // choice enable-disable
    
            leaf l3-unicast-topology {
              type empty;
              description
                "Download IGP topology into TED";
            }
    
            leaf ipv6 {
              type empty;
              description "Enable TEDv6";
            }
    
            leaf credibility-protocol-preference {
              type empty;
              description
                "Follow IGP protocol preference for TED protocol credibility";
            }
    
            leaf ipv4-multicast-rpf-routes {
              junos:must "(!(".. .. topologies ipv4-multicast"))";
              junos:must-message "ipv4-multicast-rpf-routes cannot be used with the ipv4-multicast topology";
              junos:must "(!(".. .. multicast-topology"))";
              junos:must-message "ipv4-multicast-rpf-routes cannot be used with multicast-topology";
              junos:must "(".. shortcuts")";
              junos:must-message "ipv4-multicast-rpf-routes cannot be used without shortcuts";
              type empty;
              status deprecated;
              description
                "Install IPv4 routes for multicast RPF checks into inet.2";
            }
    
            leaf ignore-lsp-metrics {
              type empty;
              description
                "Ignore label-switched path metrics when doing shortcuts";
            }
    
            container tunnel-source-protocol {
              description
                "Protocols from which to pick label-switched paths";
              uses apply-advanced;
    
              container rsvp {
                presence "enable rsvp";
                description
                  "Pick label-switched paths from rsvp";
                uses apply-advanced;
    
                leaf preference {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "1 .. 255";
                    }
                  }
                  description
                    "Preference for label-switched paths from this protocol";
                }
              }  // container rsvp
    
              container spring-te {
                presence "enable spring-te";
                description
                  "Pick label-switched paths from spring-te";
                uses apply-advanced;
    
                leaf preference {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "1 .. 255";
                    }
                  }
                  description
                    "Preference for label-switched paths from this protocol";
                }
              }  // container spring-te
            }  // container tunnel-source-protocol
    
            list family {
              key "name";
              ordered-by user;
              description
                "Address family specific traffic-engineering attributes";
              leaf name {
                type enumeration {
                  enum "inet" {
                    value 0;
                    description "IPv4 family";
                  }
                  enum "inet6" {
                    value 1;
                    description "IPv6 family";
                  }
                  enum "inet-mpls" {
                    value 2;
                    description
                      "IPv4-MPLS family";
                  }
                  enum "inet6-mpls" {
                    value 3;
                    description
                      "IPv6-MPLS family";
                  }
                }
              }
    
              uses apply-advanced;
    
              container shortcuts {
                junos:must "(!(".. .. no-ldp-shortcuts"))";
                junos:must-message "Shortcuts configuration cannot be used with no-ldp-shortcuts";
                junos:must "(!(".. .. shortcuts"))";
                junos:must-message "per-family shortcuts configuration cannot be used with global shortcuts enabled";
                junos:must "(!(".. .. disable"))";
                junos:must-message "shortcuts cannot be used without traffic-engineering enabled";
                presence "enable shortcuts";
                description
                  "Use label-switched paths as next hops, if possible";
                uses apply-advanced;
    
                leaf multicast-rpf-routes {
                  junos:must "(!(".. .. .. .. multicast-topology"))";
                  junos:must-message "ipv4 multicast-rpf-routes cannot be used with the multicast-topology";
                  junos:must "(!(".. .. .. .. topologies ipv4-multicast"))";
                  junos:must-message "ipv4 multicast-rpf-routes cannot be used with the ipv4-multicast topology";
                  type empty;
                  description
                    "Install routes for multicast RPF checks into multicast RIB";
                }
    
                leaf-list import {
                  type jt:policy-algebra;
                  ordered-by user;
                  description
                    "Import policy for shortcut";
                }
              }  // container shortcuts
            }  // list family
    
            container shortcuts {
              presence "enable shortcuts";
              status deprecated;
              description
                "Use label-switched paths as next hops, if possible";
              uses apply-advanced;
    
              leaf ignore-lsp-metrics {
                type empty;
                status deprecated;
                description
                  "Ignore label-switched path metrics when doing shortcuts";
              }
            }  // container shortcuts
    
            container multipath {
              description
                "Configure label-switched-path multipath behavior";
              uses apply-advanced;
    
              leaf lsp-equal-cost {
                junos:must "((".. .. shortcuts" || (".. .. family $$={inet} shortcuts" || (".. .. family $$={inet6} shortcuts" || ".. .. family $$={iso} shortcuts"))))";
                junos:must-message "Traffic engineering shortcuts for inet, inet6 or iso family must be configured.";
                type empty;
                description
                  "Include equal cost label-switched-paths";
              }
            }  // container multipath
    
            container advertisement {
              description
                "Configure traffic engineering attribute advertisements";
              uses apply-advanced;
    
              leaf always {
                type empty;
                description
                  "Advertise applicable legacy TE attributes always";
              }
    
              container application-specific {
                description
                  "Advertise application-specific TE attributes";
                uses apply-advanced;
    
                container all-applications {
                  presence
                    "enable all-applications";
                  description
                    "Advertise common application-specific link attributes";
                  uses apply-advanced;
    
                  leaf legacy {
                    type empty;
                    description
                      "Use legacy TE attributes for this application";
                  }
                }  // container all-applications
              }  // container application-specific
            }  // container advertisement
          }  // container traffic-engineering
    
          list label-switched-path {
            junos:must "(!(".. traffic-engineering ipv4-multicast-rpf-routes"))";
            junos:must-message "cannot advertise LSPs when using ipv4-multicast-rpf-routes";
            key "name";
            ordered-by user;
            description
              "Configuration for advertisement of a label-switched path";
            leaf name {
              type string {
                length "1 .. 64";
              }
              description
                "Name of label-switched path to be advertised";
            }
    
            uses apply-advanced;
    
            list level {
              key "name";
              ordered-by user;
              description
                "Configure global level attributes";
              leaf name {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "1 .. 2";
                  }
                }
                description "IS-IS level number";
              }
    
              uses apply-advanced;
    
              choice enable-disable {
                leaf disable {
                  type empty;
                  description
                    "Disable advertisements to this level";
                }
              }  // choice enable-disable
    
              leaf metric {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "0 .. 16777215";
                  }
                }
                description
                  "SPF metric for this level";
              }
            }  // list level
          }  // list label-switched-path
    
          choice enable-disable {
            leaf disable {
              type empty;
              description "Disable IS-IS";
            }
          }  // choice enable-disable
    
          leaf-list export {
            type jt:policy-algebra;
            ordered-by user;
            description "Export policy";
          }
    
          leaf-list import {
            type jt:policy-algebra;
            ordered-by user;
            description "Import policy";
          }
    
          leaf reference-bandwidth {
            type string;
            description
              "Bandwidth for calculating metric defaults";
          }
    
          choice layer2-map-choice {
            leaf layer2-map {
              type empty;
              description
                "Kernel ARP/ND creation for nexthops";
            }
            leaf no-layer2-map {
              type empty;
              description
                "Don't kernel ARP/ND creation for nexthops";
            }
          }  // choice layer2-map-choice
    
          leaf job-stats {
            type empty;
            description "Collect job statistics";
          }
    
          leaf lsp-lifetime {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "350 .. 65535";
              }
            }
            units "seconds";
            description "Lifetime of LSPs";
          }
    
          leaf max-lsp-size {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "512 .. 1492";
              }
            }
            default "1492";
            description
              "Maximum size allowed for LSPs";
          }
    
          leaf max-hello-size {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "512 .. 16000";
              }
            }
            default "1492";
            description
              "Maximum size allowed for ISIS Hello PDUs";
          }
    
          leaf max-snp-size {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "512 .. 1400";
              }
            }
            default "1400";
            description
              "Maximum size allowed for Sequence Number (Complete/Partial) PDUs";
          }
    
          leaf spf-delay {
            junos:must "(!(".. spf-options delay"))";
            junos:must-message "You can only configure either spf-delay or delay under spf-options";
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "50 .. 120000";
              }
            }
            units "milliseconds";
            status deprecated;
            description
              "Time to wait before running an SPF";
          }
    
          leaf authentication-key {
            type jt:unreadable;
            status deprecated;
            description
              "Authentication key (password)";
          }
    
          leaf authentication-type {
            type enumeration {
              enum "md5" {
                value 0;
                status deprecated;
                description "MD5 authentication";
              }
              enum "simple" {
                value 1;
                status deprecated;
                description
                  "Simple password authentication";
              }
            }
            status deprecated;
            description "Authentication type";
          }
    
          leaf loose-authentication-check {
            type empty;
            description
              "Verify authentication only if PDU has authentication TLV";
          }
    
          leaf max-areas {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "3 .. 36";
              }
            }
            default "3";
            description
              "Maximum number of advertised Areas";
          }
    
          leaf no-authentication-check {
            type empty;
            description
              "Disable authentication checking";
          }
    
          leaf no-ipv4-routing {
            type empty;
            description "Disable IPv4 routing";
          }
    
          leaf no-ipv6-routing {
            type empty;
            description "Disable IPv6 routing";
          }
    
          leaf no-adjacency-holddown {
            type empty;
            description
              "Disable adjacency hold down";
          }
    
          leaf multicast-topology {
            type empty;
            status deprecated;
            description
              "Enable multicast topology";
          }
    
          leaf ignore-attached-bit {
            type empty;
            description
              "Ignore the attached bit in Level 1 LSPs";
          }
    
          container rib-group {
            description
              "Routing table group for importing IS-IS routes";
            uses rib_group_type;
          }  // container rib-group
    
          container strict-dual-isis {
            junos:must "(!(".. topologies"))";
            junos:must-message "strict-dual-isis is not allowed with multi-topologies";
            presence "enable strict-dual-isis";
            description
              "Ensure both ipv4 and ipv6 connectivity for all adjacencies";
            uses apply-advanced;
    
            leaf holdown {
              type union {
                type uint32;
                type string {
                  pattern "<.*>|$.*";
                }
              }
              default "12";
              description
                "Set the holddown timer for strict spf computation";
            }
          }  // container strict-dual-isis
    
          container topologies {
            description "Enable topologies";
            uses apply-advanced;
    
            leaf ipv4-multicast {
              type empty;
              description
                "Enable IPv4-multicast topology";
            }
    
            leaf ipv6-unicast {
              type empty;
              description
                "Enable IPv6-unicast topology";
            }
    
            leaf ipv6-multicast {
              type empty;
              description
                "Enable IPv6-multicast topology";
            }
          }  // container topologies
    
          container overload {
            presence "enable overload";
            description
              "Set the overload bit (no transit traffic)";
            uses apply-advanced;
    
            leaf timeout {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "60 .. 3600";
                }
              }
              units "seconds";
              description
                "Time after which overload bit is reset";
            }
    
            leaf advertise-high-metrics {
              type empty;
              description
                "Advertise high metrics instead of setting the overload bit";
            }
    
            leaf allow-route-leaking {
              type empty;
              description
                "Allow routes to be leaked when overload is configured";
            }
    
            leaf internal-prefixes {
              type empty;
              description
                "Allow internal prefixes to be advertised with high metric";
            }
    
            leaf external-prefixes {
              type empty;
              description
                "Allow external prefixes to be advertised with high metric";
            }
          }  // container overload
    
          container graceful-restart {
            description
              "IS-IS graceful restart options";
            choice enable-disable {
              leaf disable {
                type empty;
                description
                  "Disable graceful restart";
              }
            }  // choice enable-disable
    
            leaf helper-disable {
              type empty;
              description
                "Disable graceful restart helper capability";
            }
    
            leaf restart-duration {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "30 .. 300";
                }
              }
              units "seconds";
              description
                "Maximum time for graceful restart to finish";
            }
          }  // container graceful-restart
        }  // grouping juniper-protocols-isis
    
        grouping juniper-protocols-l2control {
          uses apply-advanced;
    
          container traceoptions {
            description
              "Global tracing options for STP";
            uses apply-advanced;
    
            container file {
              description "Trace file options";
              leaf filename {
                type string {
                  junos:posix-pattern "![/ %]";
                  junos:pattern-message "Must not contain '/', % or a space";
                  length "1 .. 1024";
                }
                description
                  "Name of file in which to write trace information";
              }
    
              leaf replace {
                type empty;
                status deprecated;
                description
                  "Replace trace file rather than appending to it";
              }
    
              leaf size {
                type string;
                description
                  "Maximum trace file size";
              }
    
              leaf files {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "2 .. 1000";
                  }
                }
                default "10";
                description
                  "Maximum number of trace files";
              }
    
              leaf no-stamp {
                type empty;
                status deprecated;
                description
                  "Do not timestamp trace file";
              }
    
              choice world-readable-choice {
                leaf world-readable {
                  type empty;
                  description
                    "Allow any user to read the log file";
                }
                leaf no-world-readable {
                  type empty;
                  description
                    "Don't allow any user to read the log file";
                }
              }  // choice world-readable-choice
            }  // container file
    
            list flag {
              key "name";
              ordered-by user;
              description "Tracing parameters";
              leaf name {
                type enumeration {
                  enum "parse" {
                    value 0;
                    description
                      "Trace configuration parsing";
                  }
                  enum "regex-parse" {
                    value 1;
                    description
                      "Trace regular-expression parsing";
                  }
                  enum "config-internal" {
                    value 2;
                    description
                      "Trace configuration internals";
                  }
                  enum "normal" {
                    value 3;
                    description
                      "Trace normal events";
                  }
                  enum "general" {
                    value 4;
                    description
                      "Trace general events";
                  }
                  enum "state" {
                    value 5;
                    description
                      "Trace state transitions";
                  }
                  enum "task" {
                    value 6;
                    description
                      "Trace routing protocol task processing";
                  }
                  enum "timer" {
                    value 7;
                    description
                      "Trace routing protocol task timer processing";
                  }
                  enum "ppmlite" {
                    value 8;
                    description
                      "Trace libppmlite processing";
                  }
                  enum "all" {
                    value 9;
                    description
                      "Trace everything";
                  }
                }
              }
    
              leaf disable {
                type empty;
                description
                  "Disable this trace flag";
              }
            }  // list flag
          }  // container traceoptions
    
          leaf nonstop-bridging {
            junos:must "("chassis redundancy graceful-switchover")";
            junos:must-message "Graceful switchover needs to be configured";
            type empty;
            description
              "Enable nonstop operation";
          }
    
          container bpdu-block {
            presence "enable bpdu-block";
            description
              "Block BPDU on interface (BPDU Protect)";
            uses apply-advanced;
    
            list interface {
              key "name";
              ordered-by user;
              description
                "Interface name to block BPDU on";
              leaf name {
                type string;
              }
    
              uses apply-advanced;
    
              leaf disable {
                type empty;
                description
                  "Disable bpdu-block on a port";
              }
    
              leaf drop {
                junos:must "((((!("protocols rstp interface ${interface}") && !("protocols rstp interface all")) || "protocols rstp interface ${interface} disable") && ((((!("protocols vstp interface ${interface}") && !("protocols vstp interface all")) && (!("protocols vstp vlan all interface all") && (!(any "protocols vstp vlan <*> interface ${interface}") && !(any "protocols vstp vlan <*> interface all")))) || "protocols vstp interface ${interface} disable") && ((!("protocols mstp interface ${interface}") && !("protocols mstp interface all")) || "protocols mstp interface ${interface} disable"))))";
                junos:must-message "Cannot configure bpdu-block with xSTP protocol";
                type empty;
                description "Drop xSTP BPDUs";
              }
            }  // list interface
    
            leaf disable-timeout {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type int32 {
                  range "10 .. 3600";
                }
              }
              units "seconds";
              description
                "Disable timeout for BPDU Protect";
            }
          }  // container bpdu-block
    
          container mac-rewrite {
            description
              "Mac rewrite functionality";
            uses apply-advanced;
    
            list interface {
              key "name";
              ordered-by user;
              leaf name {
                type union {
                  type jt:interface-device;
                  type string {
                    pattern "<.*>|$.*";
                  }
                }
              }
    
              uses apply-advanced;
    
              leaf enable-all-ifl {
                type empty;
                description
                  "Enable tunneling for all the IFLs under the interface";
              }
    
              container protocol {
                presence "enable protocol";
                description
                  "Protocols for which mac rewrite need to be enabled";
                uses apply-advanced;
    
                container stp {
                  presence "enable stp";
                  description
                    "Enable mac rewrite for STP";
                }  // container stp
    
                container vtp {
                  presence "enable vtp";
                  description
                    "Enable mac rewrite for VTP";
                }  // container vtp
    
                container cdp {
                  presence "enable cdp";
                  description
                    "Enable mac rewrite for CDP";
                }  // container cdp
    
                container pvstp {
                  presence "enable pvstp";
                  description
                    "Enable mac rewrite for PVSTP+";
                }  // container pvstp
              }  // container protocol
            }  // list interface
          }  // container mac-rewrite
        }  // grouping juniper-protocols-l2control
    
        grouping juniper-protocols-ldp {
          uses apply-advanced;
    
          container traceoptions {
            description "Trace options for LDP";
            uses apply-advanced;
    
            container file {
              description "Trace file options";
              leaf filename {
                type string {
                  junos:posix-pattern "![/ %]";
                  junos:pattern-message "Must not contain '/', % or a space";
                  length "1 .. 1024";
                }
                description
                  "Name of file in which to write trace information";
              }
    
              leaf replace {
                type empty;
                status deprecated;
                description
                  "Replace trace file rather than appending to it";
              }
    
              leaf size {
                type string;
                description
                  "Maximum trace file size";
              }
    
              leaf files {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "2 .. 1000";
                  }
                }
                default "10";
                description
                  "Maximum number of trace files";
              }
    
              leaf no-stamp {
                type empty;
                status deprecated;
                description
                  "Do not timestamp trace file";
              }
    
              choice world-readable-choice {
                leaf world-readable {
                  type empty;
                  description
                    "Allow any user to read the log file";
                }
                leaf no-world-readable {
                  type empty;
                  description
                    "Don't allow any user to read the log file";
                }
              }  // choice world-readable-choice
            }  // container file
    
            list flag {
              key "name";
              ordered-by user;
              description "Tracing parameters";
              leaf name {
                type enumeration {
                  enum "error" {
                    value 0;
                    description
                      "Trace errored packets";
                  }
                  enum "event" {
                    value 1;
                    description
                      "Trace LDP state machine events";
                  }
                  enum "packet-dump" {
                    value 2;
                    description
                      "Dump the contents of selected packet types";
                  }
                  enum "packets" {
                    value 3;
                    description
                      "Trace all LDP packets";
                  }
                  enum "periodic" {
                    value 4;
                    description
                      "Trace periodic (hello and keepalive) packets";
                  }
                  enum "initialization" {
                    value 5;
                    description
                      "Trace initialization packets";
                  }
                  enum "notification" {
                    value 6;
                    description
                      "Trace notification packets";
                  }
                  enum "address" {
                    value 7;
                    description
                      "Trace address packets";
                  }
                  enum "label" {
                    value 8;
                    description
                      "Trace label packets";
                  }
                  enum "binding" {
                    value 9;
                    description
                      "Trace label binding state";
                  }
                  enum "path" {
                    value 10;
                    description
                      "Trace label path state";
                  }
                  enum "ppmd" {
                    value 11;
                    description
                      "Trace state and events for ppmd process";
                  }
                  enum "nsr-synchronization" {
                    value 12;
                    description
                      "Trace NSR synchronization events";
                  }
                  enum "link-protection" {
                    value 13;
                    description
                      "Trace link protection events";
                  }
                  enum
                    "p2mp-nsr-synchronization" {
                    value 14;
                    description
                      "Trace p2mp NSR synchronization events";
                  }
                  enum "route" {
                    value 15;
                    description
                      "Trace routing information";
                  }
                  enum "normal" {
                    value 16;
                    description
                      "Trace normal events";
                  }
                  enum "general" {
                    value 17;
                    description
                      "Trace general events";
                  }
                  enum "state" {
                    value 18;
                    description
                      "Trace state transitions";
                  }
                  enum "policy" {
                    value 19;
                    description
                      "Trace policy processing";
                  }
                  enum "task" {
                    value 20;
                    description
                      "Trace routing protocol task processing";
                  }
                  enum "timer" {
                    value 21;
                    description
                      "Trace routing protocol timer processing";
                  }
                  enum "all" {
                    value 22;
                    description
                      "Trace everything";
                  }
                }
              }
    
              leaf send {
                type empty;
                description
                  "Trace transmitted packets";
              }
    
              leaf receive {
                type empty;
                description
                  "Trace received packets";
              }
    
              leaf detail {
                type empty;
                description
                  "Trace detailed information";
              }
    
              leaf disable {
                type empty;
                description
                  "Disable this trace flag";
              }
    
              container filter {
                presence "enable filter";
                description
                  "Filter to apply to this flag";
                uses ldp_filter_obj;
              }  // container filter
            }  // list flag
          }  // container traceoptions
    
          container traffic-statistics {
            description
              "Collect statistics for LDP label-switched paths";
            uses apply-advanced;
    
            container file {
              description
                "Statistics file options";
              leaf filename {
                type string {
                  junos:posix-pattern "![/ %]";
                  junos:pattern-message "Must not contain '/', % or a space";
                  length "1 .. 1024";
                }
                description
                  "Name of file in which to write trace information";
              }
    
              leaf replace {
                type empty;
                status deprecated;
                description
                  "Replace trace file rather than appending to it";
              }
    
              leaf size {
                type string;
                description
                  "Maximum trace file size";
              }
    
              leaf files {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "2 .. 1000";
                  }
                }
                default "10";
                description
                  "Maximum number of trace files";
              }
    
              leaf no-stamp {
                type empty;
                status deprecated;
                description
                  "Do not timestamp trace file";
              }
    
              choice world-readable-choice {
                leaf world-readable {
                  type empty;
                  description
                    "Allow any user to read the log file";
                }
                leaf no-world-readable {
                  type empty;
                  description
                    "Don't allow any user to read the log file";
                }
              }  // choice world-readable-choice
            }  // container file
    
            leaf interval {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type int32 {
                  range "60 .. 65535";
                }
              }
              description
                "Time to collect statistics (seconds)";
            }
    
            leaf no-penultimate-hop {
              type empty;
              description
                "No penultimate hop statistics collection";
            }
          }  // container traffic-statistics
    
          container graceful-restart {
            description
              "Configure graceful restart attributes";
            uses apply-advanced;
    
            choice enable-disable {
              leaf disable {
                type empty;
                description
                  "Disable graceful restart";
              }
            }  // choice enable-disable
    
            leaf helper-disable {
              type empty;
              description
                "Disable the graceful restart helper capability";
            }
    
            leaf recovery-time {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "120 .. 1800";
                }
              }
              units "seconds";
              description
                "Time required for recovery";
            }
    
            leaf maximum-neighbor-recovery-time {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "140 .. 1900";
                }
              }
              units "seconds";
              description
                "Maximum time stale mappings are maintained";
            }
    
            leaf reconnect-time {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "30 .. 300";
                }
              }
              units "seconds";
              description
                "Time required to reestablish session after graceful restart";
            }
    
            leaf maximum-neighbor-reconnect-time {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "30 .. 300";
                }
              }
              units "seconds";
              description
                "Maximum reconnect time allowed from a restarting neighbor";
            }
          }  // container graceful-restart
    
          container auto-targeted-session {
            presence
              "enable auto-targeted-session";
            description
              "Configure auto targeted session parameters";
            uses apply-advanced;
    
            leaf teardown-delay {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "1 .. 300";
                }
              }
              units "seconds";
              default "90";
              description
                "Auto targeted session tear down delay";
            }
    
            leaf maximum-sessions {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "1 .. 1000";
                }
              }
              default "100";
              description
                "Auto targeted maximum sessions";
            }
    
            leaf no-rlfa {
              type empty;
              description
                "Do not allow RLFA in auto targeted sessions";
            }
    
            leaf no-dynamic-tunnels {
              type empty;
              description
                "Do not allow dynamic tunnels in auto targeted sessions";
            }
          }  // container auto-targeted-session
    
          leaf preference {
            type union {
              type uint32;
              type string {
                pattern "<.*>|$.*";
              }
            }
            description "Route preference";
          }
    
          leaf no-forwarding {
            type empty;
            description
              "Do not use LDP ingress routes for forwarding";
          }
    
          leaf rib-group {
            junos:must "("routing-options rib-groups $$")";
            junos:must-message "Referenced rib-group must be defined";
            type string;
            description
              "Routing table group for importing ingress routes";
          }
    
          leaf rib-group6 {
            junos:must "("routing-options rib-groups $$")";
            junos:must-message "Referenced rib-group must be defined";
            type string;
            description
              "Routing table group for importing ingress v6 routes";
          }
    
          leaf l2-smart-policy {
            type empty;
            description
              "Do not export or import Layer 3 FECs for Layer 2 sessions";
          }
    
          leaf track-igp-metric {
            type empty;
            description "Track the IGP metric";
          }
    
          leaf strict-targeted-hellos {
            type empty;
            description
              "Do not send targeted hellos to unconfigured neighbors";
          }
    
          container longest-match {
            presence "enable longest-match";
            description
              "Configure longest match";
            uses apply-advanced;
    
            leaf-list policy {
              type jt:policy-algebra;
              ordered-by user;
              description
                "Longest match import policy";
            }
          }  // container longest-match
    
          leaf-list color-import-policy {
            type jt:policy-algebra;
            ordered-by user;
            description "Import color policy";
          }
    
          leaf-list import {
            type jt:policy-algebra;
            ordered-by user;
            description "Import policy";
          }
    
          leaf-list export {
            type jt:policy-algebra;
            ordered-by user;
            description "Export policy";
          }
    
          leaf-list egress-policy {
            type jt:policy-algebra;
            ordered-by user;
            description
              "Configure LSP egress policy";
          }
    
          leaf-list dod-request-policy {
            type jt:policy-algebra;
            ordered-by user;
            description
              "Configure DoD label request policy";
          }
    
          container next-hop {
            description "LDP next-hop control";
            uses apply-advanced;
    
            container merged {
              junos:must "("protocols ldp deaggregate")";
              junos:must-message "next-hop merged policy requires deaggregate to be enabled.";
              description "Merged next hop";
              uses apply-advanced;
    
              leaf-list policy {
                type jt:policy-algebra;
                ordered-by user;
                description
                  "Merged next-hop policy";
              }
            }  // container merged
    
            container no-rsvp-tunneling {
              junos:must "("protocols ldp deaggregate")";
              junos:must-message "next-hop no-rsvp-tunneling policy requires deaggregate to be enabled.";
              description "No rsvp tunneling";
              uses apply-advanced;
    
              leaf-list policy {
                type jt:policy-algebra;
                ordered-by user;
                description
                  "No rsvp tunneling next-hop policy";
              }
            }  // container no-rsvp-tunneling
          }  // container next-hop
    
          choice mtu-discovery-choice {
            leaf mtu-discovery {
              type empty;
              description
                "Enable TCP path MTU discovery";
            }
            leaf no-mtu-discovery {
              type empty;
              description
                "Don't enable TCP path MTU discovery";
            }
          }  // choice mtu-discovery-choice
    
          choice deaggregate-choice {
            leaf deaggregate {
              type empty;
              description
                "Deaggregate FECs into separate labels";
            }
            leaf no-deaggregate {
              type empty;
              description
                "Don't deaggregate FECs into separate labels";
            }
          }  // choice deaggregate-choice
    
          leaf explicit-null {
            type empty;
            description
              "Advertise the EXPLICIT_NULL label for egress FECs";
          }
    
          leaf label-withdrawal-delay {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "0 .. 120";
              }
            }
            units "seconds";
            default "60";
            description
              "Delay label withdrawal for FECs to avoid label churn";
          }
    
          container make-before-break {
            presence "enable make-before-break";
            description
              "Configure make before break";
            uses apply-advanced;
    
            leaf timeout {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "1 .. 300";
                }
              }
              units "seconds";
              default "30";
              description
                "Make before break timeout";
            }
    
            leaf switchover-delay {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "1 .. 300";
                }
              }
              units "seconds";
              default "3";
              description
                "Make before break switchover delay";
            }
          }  // container make-before-break
    
          container transport-address {
            description
              "Address used for TCP sessions";
            choice address-choice {
              leaf router-id {
                type empty;
                description
                  "Use router ID for TCP connections";
              }
              leaf interface {
                type empty;
                description
                  "Use interface address for TCP connections";
              }
              leaf address {
                type jt:ipaddr;
                description
                  "Use specified address for TCP connections";
              }
            }  // choice address-choice
          }  // container transport-address
    
          leaf keepalive-interval {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "1 .. 65535";
              }
            }
            description
              "Keepalive interval (seconds)";
          }
    
          leaf keepalive-timeout {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "1 .. 65535";
              }
            }
            description
              "Keepalive timeout (seconds)";
          }
    
          list interface {
            key "name";
            description
              "Enable LDP on this interface";
            leaf name {
              type union {
                type jt:interface-name;
                type string {
                  pattern "<.*>|$.*";
                }
              }
              description "Interface name";
            }
    
            uses apply-advanced;
    
            choice enable-disable {
              leaf disable {
                type empty;
                description
                  "Disable LDP on this interface";
              }
            }  // choice enable-disable
    
            leaf hello-interval {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "1 .. 65535";
                }
              }
              description
                "Hello interval (seconds)";
            }
    
            leaf hold-time {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "1 .. 65535";
                }
              }
              description
                "Hello hold time (seconds)";
            }
    
            container link-protection {
              presence "enable link-protection";
              description
                "Enable link protection to protect interface for link faults only";
              uses apply-advanced;
    
              choice enable-disable {
                leaf disable {
                  type empty;
                  description
                    "Disable link-protection";
                }
              }  // choice enable-disable
    
              leaf dynamic-rsvp-lsp {
                type empty;
                description
                  "Enable setup of dynamic rsvp lsp for link protection";
              }
            }  // container link-protection
    
            container transport-address {
              description
                "Address used for TCP sessions";
              choice address-choice {
                leaf router-id {
                  type empty;
                  description
                    "Use router ID for TCP connections";
                }
                leaf interface {
                  type empty;
                  description
                    "Use interface address for TCP connections";
                }
                leaf address {
                  type jt:ipaddr;
                  description
                    "Use specified address for TCP connections";
                }
              }  // choice address-choice
            }  // container transport-address
    
            choice allow-subnet-mismatch-choice {
              leaf allow-subnet-mismatch {
                type empty;
                description
                  "Allow subnet mismatch for source address in hello packet";
              }
              leaf no-allow-subnet-mismatch {
                type empty;
                description
                  "Don't allow subnet mismatch for source address in hello packet";
              }
            }  // choice allow-subnet-mismatch-choice
          }  // list interface
    
          list neighbor {
            key "name";
            description
              "Configure a remote LDP neighbor";
            leaf name {
              type jt:ipaddr;
              description "Neighbor address";
            }
    
            uses apply-advanced;
          }  // list neighbor
    
          list session {
            key "name";
            description
              "Configure session parameters";
            leaf name {
              type jt:ipaddr;
              description
                "Session destination address";
            }
    
            uses apply-advanced;
    
            leaf authentication-key {
              type string {
                length "1 .. 126";
              }
              description
                "MD5 authentication key";
            }
    
            leaf authentication-algorithm {
              junos:must "(".. authentication-key-chain")";
              junos:must-message "May not be configured without authentication-key-chain";
              junos:must "(!(".. authentication-key"))";
              junos:must-message "May not be configured with authentication-key";
              type enumeration {
                enum "md5" {
                  value 0;
                  description "Message Digest 5";
                }
                enum "hmac-sha-1-96" {
                  value 1;
                  description
                    "Hash-based Message Authentication Code (SHA1) (96 bits)";
                }
                enum "aes-128-cmac-96" {
                  value 2;
                  description
                    "Cipher-based Message Authentication Code (AES128) (96 bits)";
                }
                enum "ao" {
                  value 3;
                  description
                    "TCP Authentication Option";
                }
              }
              default "hmac-sha-1-96";
              description
                "Authentication algorithm name";
            }
    
            leaf tcpao-handling-with-digest-mismatch {
              junos:must "(!(".. authentication-key"))";
              junos:must-message "May not be configured with authentication-key";
              type enumeration {
                enum "drop-if-no-tcpao" {
                  value 0;
                  description
                    "Drop the connection if Digest mismatched";
                }
                enum "allow-without-tcpao" {
                  value 1;
                  description
                    "Allow the connection establishment without TCP-AO";
                }
              }
              description
                "Drop or continue without TCP-AO with digest mismatch with TCP-AO";
            }
    
            leaf authentication-key-chain {
              junos:must "(!(".. authentication-key"))";
              junos:must-message "May not be configured with authentication-key";
              junos:must "("security authentication-key-chains key-chain $$")";
              junos:must-message "Referenced key-chain must be defined";
              type string {
                length "1 .. 128";
              }
              description "Key chain name";
            }
    
            leaf downstream-on-demand {
              type empty;
              description
                "Configure downstream on demand label distribution mode";
            }
    
            leaf transport-address {
              type jt:ipaddr;
              description
                "Address used for TCP sessions to the neighbor";
            }
    
            choice mtu-discovery-choice {
              leaf mtu-discovery {
                type empty;
                description
                  "Enable TCP path MTU discovery";
              }
              leaf no-mtu-discovery {
                type empty;
                description
                  "Don't enable TCP path MTU discovery";
              }
            }  // choice mtu-discovery-choice
          }  // list session
    
          list session-group {
            key "name";
            description
              "Configure session group parameters";
            leaf name {
              type jt:ipprefix;
              description
                "Session destination address/prefix length";
            }
    
            uses apply-advanced;
    
            leaf authentication-key {
              type string {
                length "1 .. 126";
              }
              description
                "MD5 authentication key";
            }
    
            leaf authentication-algorithm {
              junos:must "(".. authentication-key-chain")";
              junos:must-message "May not be configured without authentication-key-chain";
              junos:must "(!(".. authentication-key"))";
              junos:must-message "May not be configured with authentication-key";
              type enumeration {
                enum "md5" {
                  value 0;
                  description "Message Digest 5";
                }
                enum "hmac-sha-1-96" {
                  value 1;
                  description
                    "Hash-based Message Authentication Code (SHA1) (96 bits)";
                }
                enum "aes-128-cmac-96" {
                  value 2;
                  description
                    "Cipher-based Message Authentication Code (AES128) (96 bits)";
                }
                enum "ao" {
                  value 3;
                  description
                    "TCP Authentication Option";
                }
              }
              default "hmac-sha-1-96";
              description
                "Authentication algorithm name";
            }
    
            leaf tcpao-handling-with-digest-mismatch {
              junos:must "(!(".. authentication-key"))";
              junos:must-message "May not be configured with authentication-key";
              type enumeration {
                enum "drop-if-no-tcpao" {
                  value 0;
                  description
                    "Drop the connection if Digest mismatched";
                }
                enum "allow-without-tcpao" {
                  value 1;
                  description
                    "Allow the connection establishment without TCP-AO";
                }
              }
              description
                "Drop or continue without TCP-AO with digest mismatch with TCP-AO";
            }
    
            leaf authentication-key-chain {
              junos:must "(!(".. authentication-key"))";
              junos:must-message "May not be configured with authentication-key";
              junos:must "("security authentication-key-chains key-chain $$")";
              junos:must-message "Referenced key-chain must be defined";
              type string {
                length "1 .. 128";
              }
              description "Key chain name";
            }
    
            leaf downstream-on-demand {
              type empty;
              description
                "Configure downstream on demand label distribution mode";
            }
    
            leaf transport-address {
              type jt:ipaddr;
              description
                "Address used for TCP sessions to the neighbor";
            }
    
            choice mtu-discovery-choice {
              leaf mtu-discovery {
                type empty;
                description
                  "Enable TCP path MTU discovery";
              }
              leaf no-mtu-discovery {
                type empty;
                description
                  "Don't enable TCP path MTU discovery";
              }
            }  // choice mtu-discovery-choice
          }  // list session-group
    
          container session-protection {
            presence "enable session-protection";
            description
              "Configure session protection";
            leaf timeout {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint16 {
                  range "1 .. 65535";
                }
              }
              units "seconds";
              description
                "Session protection timeout";
            }
          }  // container session-protection
    
          container igp-synchronization {
            description
              "Configure IGP synchronization parameters";
            uses apply-advanced;
    
            leaf holddown-interval {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "10 .. 300";
                }
              }
              units "seconds";
              description
                "Time to hold the up notification to the IGPs";
            }
          }  // container igp-synchronization
    
          container log-updown {
            description
              "Logging actions for LSP up/down events";
            uses apply-advanced;
    
            container trap {
              description "SNMP traps options";
              choice enable-disable {
                leaf disable {
                  type empty;
                  description
                    "Disable LDP LSP up/down trap";
                }
              }  // choice enable-disable
            }  // container trap
          }  // container log-updown
    
          container policing {
            description
              "Configure policing for an LDP FEC";
            uses apply-advanced;
    
            list fec {
              key "name";
              ordered-by user;
              description
                "Forwarding equivalence class";
              leaf name {
                type jt:ipv4prefix;
                description
                  "Forwarding equivalence class address";
              }
    
              uses apply-advanced;
    
              leaf ingress-traffic {
                junos:must "(("firewall family any filter $$" || (!("firewall") && ".. .. .. .. .. .. .. .. firewall family any filter $$")))";
                junos:must-message "referenced filter must be defined under firewall family any";
                type string {
                  junos:posix-pattern "!^((__.*)|(.{65,}))$";
                  junos:pattern-message "Must be a non-reserved string of 64 characters or less";
                }
                description
                  "Name of filter to use for policing ingress LDP traffic";
              }
    
              leaf transit-traffic {
                junos:must "(("firewall family any filter $$" || (!("firewall") && ".. .. .. .. .. .. .. .. firewall family any filter $$")))";
                junos:must-message "referenced filter must be defined under firewall family any";
                type string {
                  junos:posix-pattern "!^((__.*)|(.{65,}))$";
                  junos:pattern-message "Must be a non-reserved string of 64 characters or less";
                }
                description
                  "Name of filter to use for policing transit LDP traffic";
              }
            }  // list fec
          }  // container policing
    
          container entropy-label {
            description
              "Insert entropy label for  a LDP FEC";
            uses apply-advanced;
    
            leaf-list ingress-policy {
              type jt:policy-algebra;
              ordered-by user;
              description
                "Entropy label ingress policy";
            }
          }  // container entropy-label
    
          container oam {
            description
              "Configure periodic OAM for a LDP FEC";
            uses apply-advanced;
    
            leaf-list ingress-policy {
              type jt:policy-algebra;
              ordered-by user;
              description "OAM ingress policy";
            }
    
            leaf-list bfd-port-egress-policy {
              type jt:policy-algebra;
              ordered-by user;
              description "OAM egress policy";
            }
    
            list fec {
              key "name";
              ordered-by user;
              description
                "Forwarding equivalence class";
              leaf name {
                type jt:ipv4prefix;
                description
                  "Forwarding equivalence class address";
              }
    
              uses apply-advanced;
    
              choice bfd_liveness_detection_type {
                container bfd-liveness-detection {
                  description
                    "Bidirectional Forwarding Detection (BFD) options";
                  uses apply-advanced;
    
                  leaf version {
                    type enumeration {
                      enum "0" {
                        value 0;
                        description
                          "BFD version 0 (deprecated)";
                      }
                      enum "1" {
                        value 1;
                        description
                          "BFD version 1";
                      }
                      enum "automatic" {
                        value 2;
                        description
                          "Choose BFD version automatically";
                      }
                    }
                    default "automatic";
                    description
                      "BFD protocol version number";
                  }
    
                  leaf minimum-interval {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint32 {
                        range "1 .. 255000";
                      }
                    }
                    units "milliseconds";
                    description
                      "Minimum transmit and receive interval";
                  }
    
                  leaf minimum-transmit-interval {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint32 {
                        range "1 .. 255000";
                      }
                    }
                    units "milliseconds";
                    status deprecated;
                    description
                      "Minimum transmit interval";
                  }
    
                  leaf minimum-receive-interval {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint32 {
                        range "1 .. 255000";
                      }
                    }
                    units "milliseconds";
                    description
                      "Minimum receive interval";
                  }
    
                  leaf multiplier {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint32 {
                        range "1 .. 255";
                      }
                    }
                    default "3";
                    description
                      "Detection time multiplier";
                  }
    
                  choice adaptation-choice {
                    leaf no-adaptation {
                      type empty;
                      description
                        "Disable adaptation";
                    }
                  }  // choice adaptation-choice
    
                  container transmit-interval {
                    description
                      "Transmit-interval options";
                    uses apply-advanced;
    
                    leaf minimum-interval {
                      type union {
                        type string {
                          pattern "<.*>|$.*";
                        }
                        type uint32 {
                          range "1 .. 255000";
                        }
                      }
                      units "milliseconds";
                      description
                        "Minimum transmit interval";
                    }
    
                    leaf threshold {
                      type union {
                        type uint32;
                        type string {
                          pattern "<.*>|$.*";
                        }
                      }
                      units "milliseconds";
                      description
                        "High transmit interval triggering a trap";
                    }
                  }  // container transmit-interval
    
                  container detection-time {
                    description
                      "Detection-time options";
                    uses apply-advanced;
    
                    leaf threshold {
                      type union {
                        type uint32;
                        type string {
                          pattern "<.*>|$.*";
                        }
                      }
                      units "milliseconds";
                      description
                        "High detection-time triggering a trap";
                    }
                  }  // container detection-time
    
                  leaf ecmp {
                    type empty;
                    description
                      "Enable equal cost multipath (ECMP) support for BFD";
                  }
    
                  container failure-action {
                    description
                      "Action to take when BFD session goes down";
                    choice action-choice {
                      leaf remove-route {
                        type empty;
                        description
                          "Remove LDP route from the ribs";
                      }
                      leaf remove-nexthop {
                        type empty;
                        description
                          "Remove LDP nexthop from the route";
                      }
                    }  // choice action-choice
                  }  // container failure-action
    
                  leaf holddown-interval {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint32 {
                        range "0 .. 255000";
                      }
                    }
                    units "milliseconds";
                    default "0";
                    description
                      "Time to hold the session-UP notification to the client";
                  }
    
                  leaf no-router-alert-option {
                    type empty;
                    description
                      "Do not set Router-Alert options in IP header for MPLS-BFD";
                  }
    
                  leaf use-ip-ttl-1 {
                    type empty;
                    description
                      "Set TTL value to 1 in IP header for MPLS-BFD";
                  }
                }  // container bfd-liveness-detection
                leaf no-bfd-liveness-detection {
                  type empty;
                  description
                    "Disable BFD liveness detection";
                }
              }  // choice bfd_liveness_detection_type
    
              container periodic-traceroute {
                presence
                  "enable periodic-traceroute";
                description
                  "Configure periodic traceroute";
                uses apply-advanced;
    
                leaf frequency {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint16 {
                      range "15 .. 120";
                    }
                  }
                  units "minutes";
                  description
                    "Time between traceroute attempts";
                }
    
                leaf ttl {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint16 {
                      range "1 .. 255";
                    }
                  }
                  description
                    "Maximum time-to-live value";
                }
    
                leaf retries {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint16 {
                      range "1 .. 9";
                    }
                  }
                  description
                    "Number of times to resend probe";
                }
    
                leaf wait {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint16 {
                      range "5 .. 15";
                    }
                  }
                  units "seconds";
                  description
                    "Time to wait before resending probe";
                }
    
                leaf paths {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint16 {
                      range "1 .. 255";
                    }
                  }
                  description
                    "Maximum number of paths to traverse";
                }
    
                leaf source {
                  type jt:ipv4addr;
                  description
                    "Source address to use when sending probes";
                }
    
                leaf exp {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint16 {
                      range "0 .. 7";
                    }
                  }
                  description
                    "Class-of-service value to use when sending probes";
                }
    
                leaf fanout {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint16 {
                      range "1 .. 64";
                    }
                  }
                  description
                    "Maximum number of nexthops to search per node";
                }
    
                leaf disable {
                  type empty;
                  description
                    "Disable periodic traceroute for a FEC";
                }
              }  // container periodic-traceroute
            }  // list fec
    
            container bfd-liveness-detection {
              description
                "Bidirectional Forwarding Detection (BFD) options";
              uses apply-advanced;
    
              leaf version {
                type enumeration {
                  enum "0" {
                    value 0;
                    description
                      "BFD version 0 (deprecated)";
                  }
                  enum "1" {
                    value 1;
                    description "BFD version 1";
                  }
                  enum "automatic" {
                    value 2;
                    description
                      "Choose BFD version automatically";
                  }
                }
                default "automatic";
                description
                  "BFD protocol version number";
              }
    
              leaf minimum-interval {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "1 .. 255000";
                  }
                }
                units "milliseconds";
                description
                  "Minimum transmit and receive interval";
              }
    
              leaf minimum-transmit-interval {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "1 .. 255000";
                  }
                }
                units "milliseconds";
                status deprecated;
                description
                  "Minimum transmit interval";
              }
    
              leaf minimum-receive-interval {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "1 .. 255000";
                  }
                }
                units "milliseconds";
                description
                  "Minimum receive interval";
              }
    
              leaf multiplier {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "1 .. 255";
                  }
                }
                default "3";
                description
                  "Detection time multiplier";
              }
    
              choice adaptation-choice {
                leaf no-adaptation {
                  type empty;
                  description
                    "Disable adaptation";
                }
              }  // choice adaptation-choice
    
              container transmit-interval {
                description
                  "Transmit-interval options";
                uses apply-advanced;
    
                leaf minimum-interval {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "1 .. 255000";
                    }
                  }
                  units "milliseconds";
                  description
                    "Minimum transmit interval";
                }
    
                leaf threshold {
                  type union {
                    type uint32;
                    type string {
                      pattern "<.*>|$.*";
                    }
                  }
                  units "milliseconds";
                  description
                    "High transmit interval triggering a trap";
                }
              }  // container transmit-interval
    
              container detection-time {
                description
                  "Detection-time options";
                uses apply-advanced;
    
                leaf threshold {
                  type union {
                    type uint32;
                    type string {
                      pattern "<.*>|$.*";
                    }
                  }
                  units "milliseconds";
                  description
                    "High detection-time triggering a trap";
                }
              }  // container detection-time
    
              leaf ecmp {
                type empty;
                description
                  "Enable equal cost multipath (ECMP) support for BFD";
              }
    
              container failure-action {
                description
                  "Action to take when BFD session goes down";
                choice action-choice {
                  leaf remove-route {
                    type empty;
                    description
                      "Remove LDP route from the ribs";
                  }
                  leaf remove-nexthop {
                    type empty;
                    description
                      "Remove LDP nexthop from the route";
                  }
                }  // choice action-choice
              }  // container failure-action
    
              leaf holddown-interval {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "0 .. 255000";
                  }
                }
                units "milliseconds";
                default "0";
                description
                  "Time to hold the session-UP notification to the client";
              }
    
              leaf no-router-alert-option {
                type empty;
                description
                  "Do not set Router-Alert options in IP header for MPLS-BFD";
              }
    
              leaf use-ip-ttl-1 {
                type empty;
                description
                  "Set TTL value to 1 in IP header for MPLS-BFD";
              }
            }  // container bfd-liveness-detection
    
            container periodic-traceroute {
              presence
                "enable periodic-traceroute";
              description
                "Configure periodic traceroute";
              uses apply-advanced;
    
              leaf frequency {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint16 {
                    range "15 .. 120";
                  }
                }
                units "minutes";
                description
                  "Time between traceroute attempts";
              }
    
              leaf ttl {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint16 {
                    range "1 .. 255";
                  }
                }
                description
                  "Maximum time-to-live value";
              }
    
              leaf retries {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint16 {
                    range "1 .. 9";
                  }
                }
                description
                  "Number of times to resend probe";
              }
    
              leaf wait {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint16 {
                    range "5 .. 15";
                  }
                }
                units "seconds";
                description
                  "Time to wait before resending probe";
              }
    
              leaf paths {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint16 {
                    range "1 .. 255";
                  }
                }
                description
                  "Maximum number of paths to traverse";
              }
    
              leaf source {
                type jt:ipv4addr;
                description
                  "Source address to use when sending probes";
              }
    
              leaf exp {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint16 {
                    range "0 .. 7";
                  }
                }
                description
                  "Class-of-service value to use when sending probes";
              }
    
              leaf fanout {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint16 {
                    range "1 .. 64";
                  }
                }
                description
                  "Maximum number of nexthops to search per node";
              }
            }  // container periodic-traceroute
    
            leaf lsp-ping-interval {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint16 {
                  range "30 .. 3600";
                }
              }
              units "seconds";
              default "60";
              description
                "Time interval between LSP ping messages";
            }
    
            leaf lsp-ping-multiplier {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint8 {
                  range "1 .. 5";
                }
              }
              description
                "Number of ping reply missed before declaring BFD down";
            }
          }  // container oam
    
          container targeted-hello {
            description
              "Configure targeted hello parameters";
            uses apply-advanced;
    
            leaf hello-interval {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "1 .. 65535";
                }
              }
              description
                "Hello interval (seconds)";
            }
    
            leaf hold-time {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "1 .. 65535";
                }
              }
              description
                "Hold interval (seconds)";
            }
          }  // container targeted-hello
    
          container p2mp {
            presence "enable p2mp";
            description
              "Advertise P2MP capability to peers";
            uses apply-advanced;
    
            container recursive {
              description
                "Configure P2MP recursive parameters";
              uses apply-advanced;
    
              leaf route {
                type empty;
                description
                  "Allow recursive route resolution to signal P2MP FEC";
              }
            }  // container recursive
    
            list root-address {
              key "name";
              description
                "Configure the root address of P2MP LSP";
              leaf name {
                type jt:ipaddr;
                description
                  "Root address of the P2MP LSP";
              }
    
              uses apply-advanced;
    
              list lsp-id {
                key "name";
                description
                  "Configure the generic LSP identifier";
                leaf name {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "1 .. 65535";
                    }
                  }
                  description
                    "Generic LSP identifier value";
                }
    
                uses apply-advanced;
              }  // list lsp-id
    
              list group-address {
                key "name";
                description
                  "IPv4/Ipv6 group address for mLDP LSP";
                leaf name {
                  type jt:ipaddr;
                  description
                    "IPv4/Ipv6 group address";
                }
    
                uses apply-advanced;
    
                list source-address {
                  key "name";
                  description
                    "IPv4/Ipv6 source address";
                  leaf name {
                    type jt:ipaddr;
                    description
                      "IPv4/Ipv6 source address for mLDP LSP";
                  }
    
                  uses apply-advanced;
                }  // list source-address
              }  // list group-address
            }  // list root-address
    
            leaf no-rsvp-tunneling {
              type empty;
              description
                "Do not allow LDP P2MP to use RSVP-TE LSPs for tunneling";
            }
          }  // container p2mp
    
          container sr-mapping-client {
            presence "enable sr-mapping-client";
            description
              "Enable LDP to SR mapping-client functionality";
            uses apply-advanced;
    
            leaf-list policy {
              type jt:policy-algebra;
              ordered-by user;
              description
                "SR mapping-client policy";
            }
          }  // container sr-mapping-client
    
          leaf upstream-label-assignment {
            type empty;
            description
              "Allow Upstream Label Assignment capability";
          }
    
          list family {
            key "name";
            ordered-by user;
            description "Address family";
            leaf name {
              type enumeration {
                enum "inet" {
                  value 0;
                  description "IPv4 family";
                }
                enum "inet6" {
                  value 1;
                  description "IPv6 family";
                }
              }
            }
    
            uses apply-advanced;
          }  // list family
    
          leaf transport-preference {
            type enumeration {
              enum "ipv4" {
                value 0;
                description
                  "Use IPv4 for TCP connections";
              }
              enum "ipv6" {
                value 1;
                description
                  "Use IPv6 for TCP connections";
              }
            }
            description
              "TCP transport preference";
          }
    
          container dual-transport {
            presence "enable dual-transport";
            description
              "Use separate IPv4 and IPv6 TCP transport";
            uses apply-advanced;
    
            leaf inet-lsr-id {
              type jt:ipv4addr;
              description
                "LSR identifier for address family inet";
            }
    
            leaf inet6-lsr-id {
              type jt:ipv4addr;
              description
                "LSR identifier for address family inet6";
            }
          }  // container dual-transport
        }  // grouping juniper-protocols-ldp
    
        grouping juniper-protocols-lmp {
          uses apply-advanced;
    
          list te-link {
            key "name";
            ordered-by user;
            description
              "Traffic engineering link";
            leaf name {
              type string;
              description "Name of TE link";
            }
    
            uses apply-advanced;
    
            leaf local-address {
              junos:must "(!(".. remote-address $$"))";
              junos:must-message "Local and remote addresses of the TE link must be different";
              junos:must "(".. remote-address")";
              junos:must-message "Remote address of the TE link must be configured";
              type jt:ipaddr;
              description
                "Address of the local end of the link";
            }
    
            leaf remote-address {
              junos:must "(!(".. local-address $$"))";
              junos:must-message "Local and remote addresses of the TE link must be different";
              junos:must "(".. local-address")";
              junos:must-message "Local address of the TE link must be configured";
              type jt:ipaddr;
              description
                "Address of the remote end of the link";
            }
    
            leaf remote-id {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "1 .. 4294967295";
                }
              }
              description
                "Link ID for the remote end of the link";
            }
    
            leaf te-metric {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "1 .. 65535";
                }
              }
              description
                "Traffic engineering metric of the link";
            }
    
            choice enable-disable {
              leaf disable {
                type empty;
                description "Disable TE link";
              }
            }  // choice enable-disable
    
            container ethernet-vlan {
              presence "enable ethernet-vlan";
              description
                "TE link used for setup of  L2 VLAN LSP";
              uses apply-advanced;
    
              leaf-list vlan-id-range {
                type jt:vlan-range;
                max-elements 1;
                description "VLAN id";
              }
            }  // container ethernet-vlan
    
            choice resource-option {
              list interface {
                key "name";
                ordered-by user;
                description
                  "Member interface of TE link";
                leaf name {
                  type union {
                    type jt:interface-device;
                    type string {
                      pattern "<.*>|$.*";
                    }
                  }
                  description "Interface name";
                }
    
                uses apply-advanced;
    
                leaf local-address {
                  junos:must "(!(".. remote-address $$"))";
                  junos:must-message "Local and remote addresses of the resource must be different";
                  junos:must "(".. remote-address")";
                  junos:must-message "Remote address of the resource must be configured";
                  type jt:ipaddr;
                  description
                    "Local address of the resource";
                }
    
                leaf remote-address {
                  junos:must "(!(".. local-address $$"))";
                  junos:must-message "Local and remote addresses of the resource must be different";
                  junos:must "(".. local-address")";
                  junos:must-message "Local address of the resource must be configured";
                  type jt:ipaddr;
                  description
                    "Remote address of the resource";
                }
    
                leaf remote-id {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "1 .. 4294967295";
                    }
                  }
                  description
                    "Interface ID for the remote end of the resource";
                }
    
                choice enable-disable {
                  leaf disable {
                    type empty;
                    description
                      "Disable resource on this TE link";
                  }
                }  // choice enable-disable
              }  // list interface
              list label-switched-path {
                key "name";
                max-elements 1;
                ordered-by user;
                description
                  "Member forwarding adjacency LSP of TE link";
                leaf name {
                  type string;
                  description
                    "Name of label-switched path";
                }
    
                uses apply-advanced;
    
                leaf local-address {
                  junos:must "(!(".. remote-address $$"))";
                  junos:must-message "Local and remote addresses of the resource must be different";
                  junos:must "(".. remote-address")";
                  junos:must-message "Remote address of the resource must be configured";
                  type jt:ipaddr;
                  description
                    "Local address of the resource";
                }
    
                leaf remote-address {
                  junos:must "(!(".. local-address $$"))";
                  junos:must-message "Local and remote addresses of the resource must be different";
                  junos:must "(".. local-address")";
                  junos:must-message "Local address of the resource must be configured";
                  type jt:ipaddr;
                  description
                    "Remote address of the resource";
                }
    
                leaf remote-id {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "1 .. 4294967295";
                    }
                  }
                  description
                    "Interface ID for the remote end of the resource";
                }
    
                choice enable-disable {
                  leaf disable {
                    type empty;
                    description
                      "Disable resource on this TE link";
                  }
                }  // choice enable-disable
              }  // list label-switched-path
            }  // choice resource-option
          }  // list te-link
    
          list peer {
            key "name";
            ordered-by user;
            description
              "Define a network or LMP peer";
            leaf name {
              type string;
              description "Name of peer";
            }
    
            uses apply-advanced;
    
            leaf address {
              type jt:ipaddr;
              description "Address of peer";
            }
    
            container lmp-protocol {
              presence "enable lmp-protocol";
              description
                "LMP protocol attributes";
              uses apply-advanced;
    
              leaf hello-interval {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "150 .. 21845";
                  }
                }
                units "milliseconds";
                description
                  "Interval between Hello messages";
              }
    
              leaf hello-dead-interval {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "500 .. 65535";
                  }
                }
                units "milliseconds";
                description
                  "Delay for control channel shutdown when no Hello received";
              }
    
              leaf retransmission-interval {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "500 .. 300000";
                  }
                }
                units "milliseconds";
                description
                  "Minimum time before retransmitting a message";
              }
    
              leaf retry-limit {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "3 .. 1000";
                  }
                }
                description
                  "Number of times to retransmit a message";
              }
    
              leaf passive {
                type empty;
                description
                  "Do not send Config messages to peer";
              }
            }  // container lmp-protocol
    
            leaf-list control-channel {
              type union {
                type jt:interface-name;
                type string {
                  pattern "<.*>|$.*";
                }
              }
              ordered-by user;
              description
                "Control channel interfaces by priority";
            }
    
            list lmp-control-channel {
              junos:must "(!(".. control-channel"))";
              junos:must-message "control-channel and lmp-control-channel are mutually exclusive";
              key "name";
              ordered-by user;
              description "Control channel IDs";
              uses lmp_control_channel_type;
            }  // list lmp-control-channel
    
            leaf-list te-link {
              type string;
              ordered-by user;
              description
                "List of TE links managed by this peer";
            }
          }  // list peer
    
          container traceoptions {
            description "LMP trace options";
            uses apply-advanced;
    
            container file {
              description "Trace file options";
              leaf filename {
                type string {
                  junos:posix-pattern "![/ %]";
                  junos:pattern-message "Must not contain '/', % or a space";
                  length "1 .. 1024";
                }
                description
                  "Name of file in which to write trace information";
              }
    
              leaf replace {
                type empty;
                status deprecated;
                description
                  "Replace trace file rather than appending to it";
              }
    
              leaf size {
                type string;
                description
                  "Maximum trace file size";
              }
    
              leaf files {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "2 .. 1000";
                  }
                }
                default "10";
                description
                  "Maximum number of trace files";
              }
    
              leaf no-stamp {
                type empty;
                status deprecated;
                description
                  "Do not timestamp trace file";
              }
    
              choice world-readable-choice {
                leaf world-readable {
                  type empty;
                  description
                    "Allow any user to read the log file";
                }
                leaf no-world-readable {
                  type empty;
                  description
                    "Don't allow any user to read the log file";
                }
              }  // choice world-readable-choice
            }  // container file
    
            list flag {
              key "name";
              ordered-by user;
              description "Tracing parameters";
              leaf name {
                type enumeration {
                  enum "init" {
                    value 0;
                    description
                      "Trace initialization events";
                  }
                  enum "show" {
                    value 1;
                    description
                      "Trace show command servicing";
                  }
                  enum "route-socket" {
                    value 2;
                    description
                      "Trace route-socket events";
                  }
                  enum "parse" {
                    value 3;
                    description
                      "Trace parser processing";
                  }
                  enum "process" {
                    value 4;
                    description
                      "Trace general configuration processing";
                  }
                  enum "server" {
                    value 5;
                    description
                      "Trace server processing";
                  }
                  enum "routing" {
                    value 6;
                    description
                      "Trace routing protocols interworking";
                  }
                  enum "packets" {
                    value 7;
                    description
                      "Trace packet processing";
                  }
                  enum "hello-packets" {
                    value 8;
                    description
                      "Trace hello packet processing";
                  }
                  enum "state" {
                    value 9;
                    description
                      "Trace state transitions";
                  }
                  enum "nsr-synchronization" {
                    value 10;
                    description
                      "Trace mirror and nsr transitions";
                  }
                  enum "all" {
                    value 11;
                    description
                      "Trace everything";
                  }
                }
              }
    
              leaf send {
                type empty;
                status deprecated;
                description
                  "Trace transmitted packets";
              }
    
              leaf receive {
                type empty;
                status deprecated;
                description
                  "Trace received packets";
              }
    
              leaf detail {
                type empty;
                status deprecated;
                description
                  "Trace detailed information";
              }
    
              leaf disable {
                type empty;
                status deprecated;
                description
                  "Disable this trace flag";
              }
            }  // list flag
          }  // container traceoptions
        }  // grouping juniper-protocols-lmp
    
        grouping juniper-protocols-mpls {
          description
            "Multiprotocol Label Switching options";
          uses apply-advanced;
    
          list lsp-external-controller {
            key "name";
            ordered-by user;
            description
              "External path computing entity";
            leaf name {
              type string {
                junos:posix-pattern "^.{1,64}$";
                junos:pattern-message "Must be a string of less than 64 characters";
              }
              description
                "Name of the external path computing entity";
            }
    
            uses apply-advanced;
    
            container label-switched-path-template {
              description
                "Template for externally provisioned LSP parameters";
              uses apply-advanced;
    
              choice dynamic-template {
                leaf template-name {
                  junos:must "(!("protocols mpls label-switched-path $$ p2mp"))";
                  junos:must-message "Referenced template cannot be a p2mp template";
                  junos:must "("protocols mpls label-switched-path $$ template")";
                  junos:must-message "Referenced point-to-point LSP template does not exist";
                  type string {
                    junos:posix-pattern "![*<>]";
                    junos:pattern-message "Template name should not contain '*' and angle brackets";
                    length "1 .. 32";
                  }
                  description
                    "Name of point-to-point LSP template";
                }
                leaf default-template {
                  type empty;
                  description
                    "Use default parameters";
                }
              }  // choice dynamic-template
            }  // container label-switched-path-template
    
            container label-switched-path-p2mp-template {
              description
                "Template for externally provisioned P2MP LSP parameters";
              uses apply-advanced;
    
              choice dynamic-template {
                leaf template-name {
                  junos:must "("protocols mpls label-switched-path $$ p2mp")";
                  junos:must-message "Referenced template should be a p2mp template";
                  junos:must "("protocols mpls label-switched-path $$ template")";
                  junos:must-message "Referenced point-to-multipoint LSP template does not exist";
                  type string {
                    junos:posix-pattern "![*<>]";
                    junos:pattern-message "Template name should not contain '*' and angle brackets";
                    length "1 .. 32";
                  }
                  description
                    "Name of point-to-multipoint LSP template";
                }
                leaf default-template {
                  type empty;
                  description
                    "Use default parameters";
                }
              }  // choice dynamic-template
            }  // container label-switched-path-p2mp-template
    
            list pce-controlled-lsp {
              key "name";
              ordered-by user;
              description
                "Template for externally provisioned LSP using regular expression";
              leaf name {
                type string {
                  junos:posix-pattern "^.{1,64}$";
                  junos:pattern-message "Must be a string of less than 64 characters";
                }
                description
                  "Template regular expression";
              }
    
              uses apply-advanced;
    
              container label-switched-path-template {
                description
                  "Template for externally provisioned LSP parameters";
                uses apply-advanced;
    
                leaf template-name {
                  junos:must "(!("protocols mpls label-switched-path $$ p2mp"))";
                  junos:must-message "Referenced template cannot be a p2mp template";
                  junos:must "("protocols mpls label-switched-path $$ template")";
                  junos:must-message "Referenced point-to-point LSP template does not exist";
                  type string {
                    junos:posix-pattern "![*<>]";
                    junos:pattern-message "Template name should not contain '*' and angle brackets";
                    length "1 .. 64";
                  }
                  description
                    "Name of point-to-point LSP template";
                }
              }  // container label-switched-path-template
    
              container label-switched-path-p2mp-template {
                description
                  "Template for externally provisioned P2MP LSP parameters";
                uses apply-advanced;
    
                leaf template-name {
                  junos:must "("protocols mpls label-switched-path $$ p2mp")";
                  junos:must-message "Referenced template should be a p2mp template";
                  junos:must "("protocols mpls label-switched-path $$ template")";
                  junos:must-message "Referenced point-to-multipoint LSP template does not exist";
                  type string {
                    junos:posix-pattern "![*<>]";
                    junos:pattern-message "Template name should not contain '*' and angle brackets";
                    length "1 .. 64";
                  }
                  description
                    "Name of point-to-multipoint LSP template";
                }
              }  // container label-switched-path-p2mp-template
            }  // list pce-controlled-lsp
          }  // list lsp-external-controller
    
          container path-mtu {
            presence "enable path-mtu";
            description "Path MTU configuration";
            uses apply-advanced;
    
            leaf allow-fragmentation {
              type empty;
              description
                "If needed, fragment IP before encapsulating in MPLS";
            }
    
            container rsvp {
              presence "enable rsvp";
              description
                "RSVP-specific path MTU options";
              uses apply-advanced;
    
              leaf mtu-signaling {
                type empty;
                description
                  "Enable RSVP path MTU signaling";
              }
            }  // container rsvp
          }  // container path-mtu
    
          container diffserv-te {
            description
              "Global diffserv-traffic-engineering options";
            uses apply-advanced;
    
            leaf bandwidth-model {
              type enumeration {
                enum "extended-mam" {
                  value 0;
                  description
                    "Maximum allocation model with support for E-LSPs";
                }
                enum "mam" {
                  value 1;
                  description
                    "Maximum allocation model";
                }
                enum "rdm" {
                  value 2;
                  description
                    "Russian dolls model";
                }
              }
              description
                "Bandwidth constraint model supported";
            }
    
            container te-class-matrix {
              description
                "Supported combinations of traffic-class and preemption";
              uses apply-advanced;
    
              container te0 {
                description
                  "Definition for traffic-engineering class te0";
                uses te-class-object;
              }  // container te0
    
              container te1 {
                description
                  "Definition for traffic-engineering class te1";
                uses te-class-object;
              }  // container te1
    
              container te2 {
                description
                  "Definition for traffic-engineering class te2";
                uses te-class-object;
              }  // container te2
    
              container te3 {
                description
                  "Definition for traffic-engineering class te3";
                uses te-class-object;
              }  // container te3
    
              container te4 {
                description
                  "Definition for traffic-engineering class te4";
                uses te-class-object;
              }  // container te4
    
              container te5 {
                description
                  "Definition for traffic-engineering class te5";
                uses te-class-object;
              }  // container te5
    
              container te6 {
                description
                  "Definition for traffic-engineering class te6";
                uses te-class-object;
              }  // container te6
    
              container te7 {
                description
                  "Definition for traffic-engineering class te7";
                uses te-class-object;
              }  // container te7
            }  // container te-class-matrix
          }  // container diffserv-te
    
          container auto-policing {
            description
              "Automatic policing of LSPs";
            uses apply-advanced;
    
            list class {
              key "name";
              ordered-by user;
              description "Forwarding class";
              leaf name {
                type enumeration {
                  enum "all" {
                    value 0;
                    description
                      "All forwarding classes";
                  }
                  enum "ct0" {
                    value 1;
                    description
                      "Forwarding class 0";
                  }
                  enum "ct1" {
                    value 2;
                    description
                      "Forwarding class 1";
                  }
                  enum "ct2" {
                    value 3;
                    description
                      "Forwarding class 2";
                  }
                  enum "ct3" {
                    value 4;
                    description
                      "Forwarding class 3";
                  }
                }
              }
    
              uses apply-advanced;
    
              choice policing-action {
                leaf drop {
                  type empty;
                  description
                    "Drop packets if bandwidth is exceeded";
                }
                leaf loss-priority-high {
                  type empty;
                  description
                    "Set loss priority to high if bandwidth is exceeded";
                }
                leaf loss-priority-low {
                  type empty;
                  description
                    "Set loss priority to low if bandwidth is exceeded";
                }
              }  // choice policing-action
            }  // list class
          }  // container auto-policing
    
          container statistics {
            description
              "Collect statistics for signaled label-switched paths";
            uses apply-advanced;
    
            container file {
              presence "enable file";
              description
                "Statistics file options";
              leaf filename {
                type string {
                  junos:posix-pattern "![/ %]";
                  junos:pattern-message "Must not contain '/', % or a space";
                  length "1 .. 1024";
                }
                description
                  "Name of file in which to write trace information";
              }
    
              leaf replace {
                type empty;
                status deprecated;
                description
                  "Replace trace file rather than appending to it";
              }
    
              leaf size {
                type string;
                description
                  "Maximum trace file size";
              }
    
              leaf files {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "2 .. 1000";
                  }
                }
                default "10";
                description
                  "Maximum number of trace files";
              }
    
              leaf no-stamp {
                type empty;
                status deprecated;
                description
                  "Do not timestamp trace file";
              }
    
              choice world-readable-choice {
                leaf world-readable {
                  type empty;
                  description
                    "Allow any user to read the log file";
                }
                leaf no-world-readable {
                  type empty;
                  description
                    "Don't allow any user to read the log file";
                }
              }  // choice world-readable-choice
            }  // container file
    
            leaf interval {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type int32 {
                  range "1 .. 65535";
                }
              }
              description
                "Time to collect statistics (seconds)";
            }
    
            leaf auto-bandwidth {
              type empty;
              description
                "Enable auto bandwidth allocation";
            }
    
            leaf no-transit-statistics {
              type empty;
              description
                "Disable transit LSP statistics collection";
            }
    
            choice transit-polling-type {
              leaf no-transit-statistics-polling {
                type empty;
                status deprecated;
                description
                  "Disable polling and display of transit lsp statistics";
              }
              leaf transit-statistics-polling {
                junos:must "(!(" .. no-transit-statistics"))";
                junos:must-message "no-transit-statistics and transit-statistics-polling cannot coexist";
                type empty;
                description
                  "Enable polling and display of transit lsp statistics";
              }
            }  // choice transit-polling-type
    
            leaf no-bypass-statistics-polling {
              type empty;
              description
                "Disable polling and display of bypass lsp statistics";
            }
    
            leaf statistics-query-batch-size {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type int32 {
                  range "1 .. 25";
                }
              }
              description
                "Number of LSPs for which statistics will be queried together";
            }
          }  // container statistics
    
          container p2mp-lsp {
            description
              "P2MP LSP control configuration";
            uses apply-advanced;
    
            leaf single-abr {
              type empty;
              description
                "Try to use same exit node for all inter-domain sub LSPs";
            }
    
            leaf no-re-merge {
              type empty;
              description
                "Avoid LSP CSPF creating remerge";
            }
          }  // container p2mp-lsp
    
          container log-updown {
            description
              "Logging actions for LSP up/down events";
            uses apply-advanced;
    
            choice syslog-choice {
              leaf syslog {
                type empty;
                description
                  "Send syslog messages";
              }
              leaf no-syslog {
                type empty;
                description
                  "Don't send syslog messages";
              }
            }  // choice syslog-choice
    
            choice trap-choice {
              leaf trap {
                type empty;
                description "Send SNMP traps";
              }
              container no-trap {
                presence "enable no-trap";
                description
                  "Don't send SNMP traps";
                uses apply-advanced;
    
                leaf mpls-lsp-traps {
                  type empty;
                  description
                    "Dont send mpls lsp up/down traps";
                }
    
                leaf rfc3812-traps {
                  type empty;
                  description
                    "Dont send rfc3812 traps";
                }
              }  // container no-trap
            }  // choice trap-choice
    
            leaf trap-path-down {
              type empty;
              description
                "Send SNMP traps when a path goes down";
            }
    
            leaf trap-path-up {
              type empty;
              description
                "Send SNMP traps when a path goes up";
            }
          }  // container log-updown
    
          container optimize-adaptive-teardown {
            description
              "Post make before break adaptive teardown";
            uses apply-advanced;
    
            leaf p2p {
              type empty;
              description
                "Turn on post make before break adaptive teardown for p2p";
            }
    
            leaf timeout {
              junos:must "(".. p2p")";
              junos:must-message "adaptive-teardown must include 'p2p' attribute";
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type int32 {
                  range "1 .. 65535";
                }
              }
              units "seconds";
              description
                "Timeout for adaptive teardown to clean up LSP";
            }
    
            container delay {
              junos:must "(".. p2p")";
              junos:must-message "adaptive-teardown must include 'p2p' attribute";
              description
                "Delay tearing down old optimized path after adaptive-teardown kicks in";
              uses apply-advanced;
    
              leaf delay-value {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type int32 {
                    range "3 .. 65535";
                  }
                }
                units "seconds";
                description
                  "Delay tearing down old optimized path after adaptive-teardown kicks in";
              }
            }  // container delay
          }  // container optimize-adaptive-teardown
    
          container traffic-engineering {
            presence
              "enable traffic-engineering";
            description
              "Traffic-engineering control";
            uses apply-advanced;
    
            choice protocols {
              leaf bgp {
                type empty;
                description
                  "BGP destinations only";
              }
              leaf bgp-igp {
                type empty;
                description
                  "BGP and IGP destinations";
              }
              leaf bgp-igp-both-ribs {
                type empty;
                description
                  "BGP and IGP destinations with routes in both routing tables";
              }
              leaf mpls-forwarding {
                type empty;
                description
                  "Use MPLS routes for forwarding, not routing";
              }
            }  // choice protocols
    
            container database {
              description
                "Traffic engineering database";
              uses apply-advanced;
    
              container import {
                description
                  "Configure TED import parameters";
                uses apply-advanced;
    
                container l3-unicast-topology {
                  presence
                    "enable l3-unicast-topology";
                  description
                    "Download L3-Unicast topology into RIB";
                  uses apply-advanced;
    
                  leaf bgp-link-state {
                    type empty;
                    description
                      "Export L3-Unicast topology, instead of TE topology, into BGP-LS";
                  }
                }  // container l3-unicast-topology
    
                leaf-list policy {
                  type jt:policy-algebra;
                  ordered-by user;
                  description
                    "Configure import policy";
                }
    
                leaf identifier {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint64 {
                      range
                        "2 .. 18446744073709551615";
                    }
                  }
                  description
                    "BGP-TE identifier";
                }
    
                leaf bgp-ls-identifier {
                  type union {
                    type uint32;
                    type string {
                      pattern "<.*>|$.*";
                    }
                  }
                  description
                    "BGP-TE domain identifier";
                }
    
                leaf ipv6 {
                  type empty;
                  description
                    "Import ipv6 addresses";
                }
              }  // container import
    
              container export {
                description
                  "Configure TED export related parameters";
                uses apply-advanced;
    
                leaf-list policy {
                  type jt:policy-algebra;
                  ordered-by user;
                  description "Export policy";
                }
    
                container credibility {
                  description
                    "TED credibility value for entries from BGP-TE";
                  uses apply-advanced;
    
                  leaf unknown {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint32 {
                        range "0 .. 512";
                      }
                    }
                    description
                      "Entries sourced from unknown entities";
                  }
    
                  leaf direct {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint32 {
                        range "0 .. 512";
                      }
                    }
                    description
                      "Entries sourced from directly connected links";
                  }
    
                  leaf static {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint32 {
                        range "0 .. 512";
                      }
                    }
                    description
                      "Entries sourced from static configuration";
                  }
    
                  leaf ospf {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint32 {
                        range "0 .. 512";
                      }
                    }
                    description
                      "Entries sourced from ospf";
                  }
    
                  leaf isis-level-1 {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint32 {
                        range "0 .. 512";
                      }
                    }
                    description
                      "Entries sourced from ISIS Level 1";
                  }
    
                  leaf isis-level-2 {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint32 {
                        range "0 .. 512";
                      }
                    }
                    description
                      "Entries sourced from ISIS Level 2";
                  }
    
                  leaf bgp {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint32 {
                        range "0 .. 512";
                      }
                    }
                    description
                      "Entries sourced from BGP";
                  }
                }  // container credibility
    
                leaf l3-unicast-topology {
                  type empty;
                  description
                    "Download RIB entries into L3-Unicast topology";
                }
              }  // container export
            }  // container database
          }  // container traffic-engineering
    
          list admin-groups {
            key "name";
            ordered-by user;
            description "Administrative groups";
            leaf name {
              type string;
              description "Group name";
            }
    
            uses apply-advanced;
    
            leaf group-value {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "0 .. 31";
                }
              }
              description "Group bit position";
            }
          }  // list admin-groups
    
          leaf advertisement-hold-time {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "0 .. 65535";
              }
            }
            units "seconds";
            default "5";
            description
              "Time that an 'LSP down' advertisement will be delayed";
          }
    
          leaf rsvp-error-hold-time {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "0 .. 240";
              }
            }
            units "seconds";
            default "25";
            description
              "Time that RSVP PathErr events will be remembered";
          }
    
          leaf optimize-aggressive {
            type empty;
            description
              "Run aggressive optimization algorithm based on IGP metric only";
          }
    
          leaf smart-optimize-timer {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type int32 {
                range "0 .. 65535";
              }
            }
            units "seconds";
            description
              "Path optimization interval after a link traversed by the path goes down";
          }
    
          leaf optimize-switchover-delay {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type int32 {
                range "1 .. 900";
              }
            }
            units "seconds";
            description
              "Delay before switching LSP to newly optimized path";
          }
    
          leaf no-propagate-ttl {
            type empty;
            description
              "Disable TTL propagation from IP to MPLS (on push) and MPLS to IP (on pop)";
          }
    
          leaf explicit-null {
            type empty;
            description
              "Advertise the EXPLICIT_NULL label when the router is the egress";
          }
    
          leaf icmp-tunneling {
            type empty;
            description
              "Allow MPLS LSPs to be used for tunneling ICMP error packets";
          }
    
          leaf revert-timer {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type int32 {
                range "0 .. 65535";
              }
            }
            units "seconds";
            description
              "Hold-down window before reverting back to primary path, 0 means disable";
          }
    
          leaf optimize-hold-dead-delay {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type int32 {
                range "0 .. 65535";
              }
            }
            units "seconds";
            description
              "Delay before tearing down the old optimized path";
          }
    
          leaf cspf-backoff-time {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type int32 {
                range "0 .. 65535";
              }
            }
            units "seconds";
            description
              "Delay before CSPF, when there is PathErr on backup path";
          }
    
          leaf expand-loose-hop {
            type empty;
            description
              "Perform CSPF path computation to expand loose hops";
          }
    
          leaf mib-mpls-show-p2mp {
            type empty;
            description
              "Show p2mp tunnels entries in mpls mib walk";
          }
    
          container bandwidth {
            description
              "Bandwidth to reserve (bps)";
            uses bandwidth-type;
          }  // container bandwidth
    
          container admin-group {
            description
              "Administrative group policy";
            uses admin_group_include_exclude;
          }  // container admin-group
    
          container admin-group-extended {
            description
              "Extended administrative group policy";
            uses admin_group_include_exclude;
          }  // container admin-group-extended
    
          container priority {
            presence "enable priority";
            description "Preemption priorities";
          }  // container priority
    
          leaf setup-priority {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "0 .. 7";
              }
            }
            description "Set-up priority";
          }
    
          leaf reservation-priority {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "0 .. 7";
              }
            }
            description "Reservation priority";
          }
    
          container oam {
            description "Periodic OAM";
            uses periodic_oam;
          }  // container oam
    
          leaf class-of-service {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type int32 {
                range "0 .. 7";
              }
            }
            description "Class-of-service value";
          }
    
          leaf no-decrement-ttl {
            type empty;
            description
              "Do not decrement the TTL within an LSP";
          }
    
          leaf hop-limit {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type int32 {
                range "2 .. 255";
              }
            }
            description
              "Maximum allowed router hops";
          }
    
          leaf no-cspf {
            type empty;
            description
              "Disable automatic path computation";
          }
    
          leaf admin-down {
            type empty;
            description
              "Set GMPLS LSP to administrative down state";
          }
    
          leaf optimize-timer {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type int32 {
                range "0 .. 65535";
              }
            }
            units "seconds";
            description
              "Periodical path reoptimizations";
          }
    
          leaf preference {
            type union {
              type uint32;
              type string {
                pattern "<.*>|$.*";
              }
            }
            description "Preference value";
          }
    
          choice record-choice {
            leaf record {
              type empty;
              description
                "Record transit routers";
            }
            leaf no-record {
              type empty;
              description
                "Don't record transit routers";
            }
          }  // choice record-choice
    
          leaf standby {
            type empty;
            description
              "Keep backup paths in continuous standby";
          }
    
          leaf exclude-srlg {
            type empty;
            description
              "Exclude SRLG links for secondary path";
          }
    
          leaf ultimate-hop-popping {
            type empty;
            description
              "Request ultimate hop popping from egress";
          }
    
          leaf sync-active-path-bandwidth {
            type empty;
            description
              "Signal standby path with bandwidth obtained from active path";
          }
    
          leaf cross-credibility-cspf {
            type empty;
            description
              "Compute paths across multi-protocol links and nodes";
          }
    
          list label-switched-path {
            key "name";
            ordered-by user;
            description "Label-switched path";
            leaf name {
              type string {
                length "1 .. 64";
              }
              description "Name of path";
            }
    
            uses apply-advanced;
    
            choice enable-disable {
              leaf disable {
                type empty;
                description
                  "Disable MPLS label-switched path";
              }
            }  // choice enable-disable
    
            container traceoptions {
              description
                "Trace options for MPLS label-switched path";
              uses apply-advanced;
    
              container file {
                description "Trace file options";
                leaf filename {
                  type string {
                    junos:posix-pattern "![/ %]";
                    junos:pattern-message "Must not contain '/', % or a space";
                    length "1 .. 1024";
                  }
                  description
                    "Name of file in which to write trace information";
                }
    
                leaf replace {
                  type empty;
                  status deprecated;
                  description
                    "Replace trace file rather than appending to it";
                }
    
                leaf size {
                  type string;
                  description
                    "Maximum trace file size";
                }
    
                leaf files {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "2 .. 1000";
                    }
                  }
                  default "10";
                  description
                    "Maximum number of trace files";
                }
    
                leaf no-stamp {
                  type empty;
                  status deprecated;
                  description
                    "Do not timestamp trace file";
                }
    
                choice world-readable-choice {
                  leaf world-readable {
                    type empty;
                    description
                      "Allow any user to read the log file";
                  }
                  leaf no-world-readable {
                    type empty;
                    description
                      "Don't allow any user to read the log file";
                  }
                }  // choice world-readable-choice
              }  // container file
    
              list flag {
                key "name";
                ordered-by user;
                description "Tracing parameters";
                leaf name {
                  type enumeration {
                    enum "cspf" {
                      value 0;
                      description
                        "Trace CSPF computation";
                    }
                    enum "cspf-node" {
                      value 1;
                      description
                        "Trace nodes visited during CSPF";
                    }
                    enum "cspf-link" {
                      value 2;
                      description
                        "Trace links visited during CSPF";
                    }
                    enum "cspf-abstract" {
                      value 3;
                      description
                        "Trace abstract hop based CSPF details";
                    }
                    enum "state" {
                      value 4;
                      description
                        "Trace state transitions";
                    }
                    enum "all" {
                      value 5;
                      description
                        "Trace everything";
                    }
                  }
                }
              }  // list flag
            }  // container traceoptions
    
            leaf no-install-to-address {
              type empty;
              description
                "Don't install host route 'to' address into routing tables";
            }
    
            leaf backup {
              type empty;
              description
                "Use LSP for IGP backup";
            }
    
            leaf from {
              type jt:ipv4addr;
              description
                "Address of ingress router";
            }
    
            container pop-and-forward {
              junos:must "(!(".. lsp-external-controller"))";
              junos:must-message "lsp-external-controller unsupported for pop-and-forward LSP";
              junos:must "(!(".. lsp-attributes"))";
              junos:must-message "lsp-attributes unsupported for pop-and-forward LSP";
              junos:must "(!(".. single-sided-associated-bidirectional"))";
              junos:must-message "single-sided-associated-bidirectional unsupported for pop-and-forward LSP";
              junos:must "(!(".. associate-lsp"))";
              junos:must-message "associate-lsp unsupported for pop-and-forward LSP";
              junos:must "(!(".. corouted-bidirectional-passive"))";
              junos:must-message "corouted-bidirectional-passive unsupported for pop-and-forward LSP";
              junos:must "(!(".. corouted-bidirectional"))";
              junos:must-message "corouted-bidirectional unsupported for pop-and-forward LSP";
              junos:must "(!(".. backup"))";
              junos:must-message "backup unsupported for pop-and-forward LSP";
              junos:must "(!(".. no-cspf"))";
              junos:must-message "no-cspf unsupported for pop-and-forward LSP";
              junos:must "(!((".. ultimate-hop-popping" || ".. .. ultimate-hop-popping")))";
              junos:must-message "ultimate hop popping unsupported for pop-and-forward LSP";
              junos:must "(!(".. p2mp"))";
              junos:must-message "p2mp unsupported for pop-and-forward LSP";
              junos:must "(!(".. node-link-protection"))";
              junos:must-message "link/node protection unsupported for pop-and-forward LSP";
              junos:must "(!(".. fast-reroute"))";
              junos:must-message "fast-reroute unsupported for pop-and-forward LSP";
              presence "enable pop-and-forward";
              description
                "Enable LSP as pop-and-forward with auto-delegation";
            }  // container pop-and-forward
    
            choice label-switched-path-or-template {
              leaf to {
                type jt:ipv4addr;
                description
                  "Address of egress router";
              }
              leaf template {
                junos:must "(!(".. associate-lsp"))";
                junos:must-message "Template cannot have associate-lsp";
                junos:must "(!(".. corouted-bidirectional-passive"))";
                junos:must-message "Template cannot be passive bidirectional";
                junos:must "(!(".. corouted-bidirectional"))";
                junos:must-message "Template cannot be active bidirectional";
                junos:must "(!(".. lsp-external-controller"))";
                junos:must-message "Can't configure external controller in template";
                junos:must "(!(".. disable"))";
                junos:must-message "Not applicable for template";
                junos:must "(!((".. primary" || ".. secondary")))";
                junos:must-message "Template cannot include 'path' statement";
                type empty;
                description
                  "Template for dynamic lsp paramaters";
              }
            }  // choice label-switched-path-or-template
    
            leaf corouted-bidirectional {
              junos:must "(!(".. p2mp"))";
              junos:must-message "p2mp unsupported for bidirectional LSP";
              junos:must "(!(".. auto-bandwidth"))";
              junos:must-message "auto-bandwidth unsupported for bidirectional LSP";
              junos:must "(!((".. link-protection" || ".. node-link-protection")))";
              junos:must-message "link/node protection unsupported for bidirectional LSP";
              junos:must "(!(".. fast-reroute"))";
              junos:must-message "fast-reroute unsupported for bidirectional LSP";
              junos:must "(!(".. corouted-bidirectional-passive"))";
              junos:must-message "Passive and active bidirectional attributes cannot coexist";
              type empty;
              description
                "Setup the LSP as a corouted bidirectional LSP";
            }
    
            leaf corouted-bidirectional-passive {
              junos:must "(!(".. p2mp"))";
              junos:must-message "p2mp unsupported for bidirectional LSP";
              junos:must "(!(".. auto-bandwidth"))";
              junos:must-message "auto-bandwidth unsupported for bidirectional LSP";
              junos:must "(!((".. link-protection" || ".. node-link-protection")))";
              junos:must-message "link/node protection unsupported for bidirectional LSP";
              junos:must "(!(".. fast-reroute"))";
              junos:must-message "fast-reroute unsupported for bidirectional LSP";
              junos:must "(!((".. standby" || ".. .. standby")))";
              junos:must-message "standby unsupported for passive bidirectional LSP";
              junos:must "(!(".. soft-preemption"))";
              junos:must-message "soft-preemption unsupported for passive bidirectional LSP";
              junos:must "(!((".. oam bfd-liveness-detection" || ".. .. oam bfd-liveness-detection")))";
              junos:must-message "oam bfd-liveness-detection unsupported for passive bidirectional LSP";
              junos:must "(!((".. no-decrement-ttl" || ".. .. no-decrement-ttl")))";
              junos:must-message "no-decrement-ttl unsupported for passive bidirectional LSP";
              junos:must "(!((".. exclude-srlg" || ".. .. exclude-srlg")))";
              junos:must-message "exclude-srlg unsupported for passive bidirectional LSP";
              junos:must "(!((".. bandwidth" || ".. .. bandwidth")))";
              junos:must-message "bandwidth unsupported for passive bidirectional LSP";
              junos:must "(!((".. admin-group-extended" || ".. .. admin-group-extended")))";
              junos:must-message "admin-group-extended unsupported for passive bidirectional LSP";
              junos:must "(!((".. admin-group" || ".. .. admin-group")))";
              junos:must-message "admin-group unsupported for passive bidirectional LSP";
              junos:must "(!(".. adaptive"))";
              junos:must-message "adaptive unsupported for passive bidirectional LSP";
              junos:must "(!(".. lsp-attributes"))";
              junos:must-message "Passive bidirectional LSP cannot include 'lsp-attributes' statement";
              junos:must "(!((".. primary" || ".. secondary")))";
              junos:must-message "Passive bidirectional LSP cannot include 'path' statement";
              type empty;
              description
                "Associate LSP with incoming corouted bidirectional LSP";
            }
    
            leaf metric {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "1 .. 16777215";
                }
              }
              description "Metric value";
            }
    
            leaf ldp-tunneling {
              type empty;
              description
                "Allow LDP to use this LSP for tunneling";
            }
    
            leaf soft-preemption {
              junos:must "(!(".. fast-reroute"))";
              junos:must-message "soft-preemption is unsupported when fast-reroute is desired";
              type empty;
              description
                "Attempt make-before-break service while preempting this LSP";
            }
    
            list install {
              key "name";
              ordered-by user;
              description "Install prefix";
              leaf name {
                type jt:ipprefix;
                description "Destination prefix";
              }
    
              leaf active {
                type empty;
                description
                  "Install prefix into forwarding table";
              }
            }  // list install
    
            leaf retry-timer {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "1 .. 600";
                }
              }
              units "seconds";
              description
                "Time before retrying the primary path";
            }
    
            leaf retry-limit {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "0 .. 10000";
                }
              }
              description
                "Maximum number of times to retry primary path";
            }
    
            container lsp-attributes {
              description
                "Attributes for generalized LSP";
              uses apply-advanced;
    
              leaf signal-bandwidth {
                junos:must "(!((".. switching-type l2sc" || (".. switching-type psc-1" || ".. switching-type ethernet-vlan"))))";
                junos:must-message "signal-bandwidth invalid for VLAN LSP and Packet LSP";
                type enumeration {
                  enum "ds1" {
                    value 0;
                    description "1.544 Mbps";
                  }
                  enum "vt1-5" {
                    value 1;
                    description "1.728 Mbps";
                  }
                  enum "e1" {
                    value 2;
                    description "2.048 Mbps";
                  }
                  enum "vt2" {
                    value 3;
                    description "2.304 Mbps";
                  }
                  enum "ethernet" {
                    value 4;
                    description "10 Mbps";
                  }
                  enum "e3" {
                    value 5;
                    description "34.368 Mbps";
                  }
                  enum "ds3" {
                    value 6;
                    description "44.736 Mbps";
                  }
                  enum "sts-1" {
                    value 7;
                    description "51.84 Mbps";
                  }
                  enum "fastether" {
                    value 8;
                    description "100.00 Mbps";
                  }
                  enum "stm-1" {
                    value 9;
                    description "155.52 Mbps";
                  }
                  enum "stm-4" {
                    value 10;
                    description "622.08 Mbps";
                  }
                  enum "gigether" {
                    value 11;
                    description "1000.00 Mbps";
                  }
                  enum "stm-16" {
                    value 12;
                    description "2488.32 Mbps";
                  }
                  enum "stm-64" {
                    value 13;
                    description "9953.28 Mbps";
                  }
                  enum "10gigether" {
                    value 14;
                    description "10000.00 Mbps";
                  }
                  enum "stm-256" {
                    value 15;
                    description "39813.12 Mbps";
                  }
                  enum "100gige" {
                    value 16;
                    description "100000.00 Mbps";
                  }
                }
                description
                  "Signal bandwidth for the LSP";
              }
    
              leaf switching-type {
                type enumeration {
                  enum "psc-1" {
                    value 0;
                    description
                      "Packet switching";
                  }
                  enum "lambda" {
                    value 1;
                    description
                      "Lambda switching";
                  }
                  enum "fiber" {
                    value 2;
                    description
                      "Fiber switching";
                  }
                  enum "tdm" {
                    value 3;
                    description "TDM switching";
                  }
                  enum "ethernet-vlan" {
                    junos:must "((!(".. encoding-type") || ".. encoding-type ethernet"))";
                    junos:must-message "Only ethernet encoding supported for VLAN LSP";
                    value 4;
                    description
                      "Ethernet VLAN switching";
                  }
                }
                description
                  "LSP switching type desired";
              }
    
              leaf encoding-type {
                type enumeration {
                  enum "packet" {
                    value 0;
                    description
                      "Packet encoding";
                  }
                  enum "ethernet" {
                    value 1;
                    description
                      "Ethernet encoding";
                  }
                  enum "pdh" {
                    value 2;
                    description "PDH encoding";
                  }
                  enum "sonet-sdh" {
                    value 3;
                    description
                      "SONET-SDH encoding";
                  }
                }
                description
                  "LSP encoding type desired";
              }
    
              leaf gpid {
                type enumeration {
                  enum "ipv4" {
                    value 0;
                  }
                  enum "ethernet" {
                    value 1;
                  }
                  enum "ppp" {
                    value 2;
                  }
                  enum "hdlc" {
                    value 3;
                  }
                  enum
                    "pos-no-scrambling-crc-16" {
                    value 4;
                  }
                  enum
                    "pos-no-scrambling-crc-32" {
                    value 5;
                  }
                  enum "pos-scrambling-crc-16" {
                    value 6;
                  }
                  enum "pos-scrambling-crc-32" {
                    value 7;
                  }
                }
                description "Generalized PID";
              }
    
              container upstream-label {
                description
                  "Upstream Label for the bidirectional label-switched path";
                uses apply-advanced;
    
                leaf vlan-id {
                  junos:must "(".. .. switching-type ethernet-vlan")";
                  junos:must-message "VLAN label is valid only for VLAN LSP";
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "1 .. 4094";
                    }
                  }
                  description
                    "VLAN ID label for the label-switched path";
                }
              }  // container upstream-label
            }  // container lsp-attributes
    
            leaf revert-timer {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type int32 {
                  range "0 .. 65535";
                }
              }
              units "seconds";
              description
                "Hold-down window before reverting back to primary path, 0 means disable";
            }
    
            leaf optimize-hold-dead-delay {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type int32 {
                  range "0 .. 65535";
                }
              }
              units "seconds";
              description
                "Delay before tearing down the old optimized path";
            }
    
            leaf cspf-backoff-time {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type int32 {
                  range "0 .. 65535";
                }
              }
              units "seconds";
              description
                "Delay before CSPF, when there is PathErr on backup path";
            }
    
            container bandwidth {
              description
                "Bandwidth to reserve (bps)";
              uses bandwidth-type;
            }  // container bandwidth
    
            container admin-group {
              description
                "Administrative group policy";
              uses admin_group_include_exclude;
            }  // container admin-group
    
            container admin-group-extended {
              description
                "Extended administrative group policy";
              uses admin_group_include_exclude;
            }  // container admin-group-extended
    
            container priority {
              presence "enable priority";
              description
                "Preemption priorities";
            }  // container priority
    
            leaf setup-priority {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "0 .. 7";
                }
              }
              description "Set-up priority";
            }
    
            leaf reservation-priority {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "0 .. 7";
                }
              }
              description "Reservation priority";
            }
    
            container oam {
              description "Periodic OAM";
              uses periodic_oam;
            }  // container oam
    
            leaf class-of-service {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type int32 {
                  range "0 .. 7";
                }
              }
              description
                "Class-of-service value";
            }
    
            leaf no-decrement-ttl {
              type empty;
              description
                "Do not decrement the TTL within an LSP";
            }
    
            leaf hop-limit {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type int32 {
                  range "2 .. 255";
                }
              }
              description
                "Maximum allowed router hops";
            }
    
            leaf no-cspf {
              type empty;
              description
                "Disable automatic path computation";
            }
    
            leaf admin-down {
              type empty;
              description
                "Set GMPLS LSP to administrative down state";
            }
    
            leaf optimize-timer {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type int32 {
                  range "0 .. 65535";
                }
              }
              units "seconds";
              description
                "Periodical path reoptimizations";
            }
    
            leaf preference {
              type union {
                type uint32;
                type string {
                  pattern "<.*>|$.*";
                }
              }
              description "Preference value";
            }
    
            choice record-choice {
              leaf record {
                type empty;
                description
                  "Record transit routers";
              }
              leaf no-record {
                type empty;
                description
                  "Don't record transit routers";
              }
            }  // choice record-choice
    
            leaf standby {
              type empty;
              description
                "Keep backup paths in continuous standby";
            }
    
            leaf exclude-srlg {
              type empty;
              description
                "Exclude SRLG links for secondary path";
            }
    
            leaf ultimate-hop-popping {
              type empty;
              description
                "Request ultimate hop popping from egress";
            }
    
            leaf sync-active-path-bandwidth {
              type empty;
              description
                "Signal standby path with bandwidth obtained from active path";
            }
    
            leaf cross-credibility-cspf {
              type empty;
              description
                "Compute paths across multi-protocol links and nodes";
            }
    
            leaf entropy-label {
              type empty;
              description "Enable entropy label";
            }
    
            leaf self-ping-duration {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type int32 {
                  range "1 .. 65535";
                }
              }
              units "seconds";
              description
                "Duration over which to run self-ping (65535 = until success). Default = 1800s";
            }
    
            leaf no-self-ping {
              type empty;
              description
                "Do not run self-ping for this LSP";
            }
    
            choice cspf-attribute {
              leaf random {
                type empty;
                description
                  "Randomly select among equal-cost paths";
              }
              leaf least-fill {
                type empty;
                description
                  "Select the least filled among equal-cost paths";
              }
              leaf most-fill {
                type empty;
                description
                  "Select the most filled among equal-cost paths";
              }
            }  // choice cspf-attribute
    
            leaf description {
              type string {
                length "1 .. 80";
              }
              description
                "Text description of label-switched path";
            }
    
            choice lp-type {
              leaf link-protection {
                type empty;
                description
                  "Protect LSP from link faults only";
              }
              leaf node-link-protection {
                type empty;
                description
                  "Protect LSP from both link and node faults";
              }
            }  // choice lp-type
    
            leaf intra-domain {
              type empty;
              status deprecated;
              description "Intra-domain LSP";
            }
    
            leaf inter-domain {
              type empty;
              description "Inter-domain LSP";
            }
    
            leaf adaptive {
              type empty;
              description
                "Have the LSP smoothly cut over to new routes";
            }
    
            container in-place-lsp-bandwidth-update {
              junos:must "(!(".. fast-reroute"))";
              junos:must-message "In-place update unsupported for LSPs requesting detour protection";
              junos:must "(!((".. lsp-external-controller" || ".. .. lsp-external-controller")))";
              junos:must-message "In-place update unsupported for externally controlled LSPs";
              junos:must "(!(".. single-sided-associated-bidirectional"))";
              junos:must-message "In-place update unsupported for single-sided-associated-bidirectional LSPs";
              junos:must "(!(".. corouted-bidirectional-passive"))";
              junos:must-message "In-place update unsupported for corouted-bidirectional-passive LSPs";
              junos:must "(!(".. corouted-bidirectional"))";
              junos:must-message "In-place update unsupported for corouted-bidirectional LSPs";
              junos:must "(!((".. no-cspf" || ".. .. no-cspf")))";
              junos:must-message "In-place update unsupported for no-cspf LSPs";
              junos:must "(!(".. p2mp"))";
              junos:must-message "In-place update unsupported for p2mp sub-LSPs";
              presence
                "enable in-place-lsp-bandwidth-update";
              description
                "Update LSP in-place re-using the same LSP identifier";
            }  // container in-place-lsp-bandwidth-update
    
            container fast-reroute {
              presence "enable fast-reroute";
              description "Fast reroute";
              uses apply-advanced;
    
              leaf hop-limit {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type int32 {
                    range "0 .. 255";
                  }
                }
                description
                  "Maximum allowed router hops";
              }
    
              choice bw-attribute {
                leaf bandwidth {
                  type string;
                  description
                    "Bandwidth to reserve (bps)";
                }
                leaf bandwidth-percent {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type int32 {
                      range "1 .. 100";
                    }
                  }
                  description
                    "Percentage of main path bandwidth to reserve";
                }
              }  // choice bw-attribute
    
              choice include_any_or_no_include_any {
                leaf no-include-any {
                  type empty;
                  description
                    "Disable include-any checking";
                }
                leaf-list include-any {
                  type string;
                  ordered-by user;
                  description
                    "Groups, one or more of which must be present";
                }
              }  // choice include_any_or_no_include_any
    
              choice include_all_or_no_include_all {
                leaf no-include-all {
                  type empty;
                  description
                    "Disable include-all checking";
                }
                leaf-list include-all {
                  type string;
                  ordered-by user;
                  description
                    "Groups, all of which must be present";
                }
              }  // choice include_all_or_no_include_all
    
              choice exclude_or_no_exclude {
                leaf no-exclude {
                  type empty;
                  description
                    "Disable exclude checking";
                }
                leaf-list exclude {
                  type string;
                  ordered-by user;
                  description
                    "Groups, all of which must be absent";
                }
              }  // choice exclude_or_no_exclude
            }  // container fast-reroute
    
            container p2mp {
              junos:must "(!(".. associate-backup-pe-groups"))";
              junos:must-message "backup-pe-group cannot be associated with P2MP LSP";
              junos:must "(!(".. egress-protection"))";
              junos:must-message "egress-protection unsupported for P2MP LSP branch";
              junos:must "(!(any ".. primary <*> adaptive"))";
              junos:must-message "adaptive unsupported for P2MP LSP branch path";
              junos:must "(!(".. adaptive"))";
              junos:must-message "adaptive unsupported for P2MP LSP branch";
              junos:must "(!(".. install"))";
              junos:must-message "install prefixes invalid for P2MP LSP branch";
              junos:must "(!(".. ldp-tunneling"))";
              junos:must-message "ldp-tunneling unsupported for P2MP LSP branch";
              junos:must "(!(".. backup"))";
              junos:must-message "backup invalid for P2MP LSP branch";
              junos:must "(!(".. no-install-to-address"))";
              junos:must-message "no-install-to-address invalid for P2MP LSP branch";
              junos:must "(!(".. node-link-protection"))";
              junos:must-message "node protection unsupported for P2MP LSP branch";
              junos:must "(!(".. fast-reroute"))";
              junos:must-message "fast-reroute unsupported for P2MP LSP branch";
              junos:must "(!(".. secondary"))";
              junos:must-message "secondary paths unsupported for P2MP LSP branch";
              junos:must "(!(".. ultimate-hop-popping"))";
              junos:must-message "For point-to-multipoint LSP, ultimate hop popping cannot be configured";
              junos:must "(!(".. lsp-external-controller"))";
              junos:must-message "Can't configure lsp-external-controller knob in p2mp LSPs";
              junos:must "((!(".. .. .. .. .. logical-systems") || !(".. .. ipv6-tunneling")))";
              junos:must-message "In logical systems, IPv6 tunneling cannot be configured with P2MP LSPs";
              junos:must "((any ".. p2mp <*>" || ".. template"))";
              junos:must-message "For S2L point-to-multipoint LSP, parent point-to-multipoint LSP name must be configured";
              presence "enable p2mp";
              description
                "Point-to-multipoint label-switched path";
              leaf path_name {
                junos:must "(!(".. .. .. label-switched-path $$"))";
                junos:must-message "The P2MP name is the same as an existing LSP name";
                junos:must "(!(".. .. template"))";
                junos:must-message "Name not applicable for point-to-multipoint template";
                type string {
                  junos:posix-pattern "^.{1,64}$";
                  junos:pattern-message "Must be a string of less than 64 characters";
                }
                description
                  "Name of point-to-multipoint LSP";
              }
            }  // container p2mp
    
            container auto-bandwidth {
              junos:must "(!(".. p2mp"))";
              junos:must-message "Cannot do auto-bandwidth for P2MP LSP branch";
              junos:must "((!(".. lsp-attributes") || (".. lsp-attributes switching-type psc-1" && (!(".. lsp-attributes encoding-type") || ".. lsp-attributes encoding-type packet"))))";
              junos:must-message "Cannot do auto-bandwidth for non-packet LSP";
              presence "enable auto-bandwidth";
              description
                "Do auto bandwidth allocation for this LSP";
              uses apply-advanced;
    
              leaf adjust-interval {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "300 .. 315360000";
                  }
                }
                units "seconds";
                default "86400";
                description
                  "Time to adjust LSP bandwidth";
              }
    
              leaf adjust-threshold {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "0 .. 50";
                  }
                }
                units "percent";
                default "0";
                description
                  "Percentage change in average LSP utilization to trigger auto-adjustment";
              }
    
              leaf adjust-threshold-absolute {
                type string;
                units "bps";
                default "0";
                description
                  "Change in average LSP utilization to trigger auto-adjustment";
              }
    
              leaf adjust-threshold-activate-bandwidth {
                type string;
                units "bps";
                description
                  "Adjusts signaled bw if greater than this value";
              }
    
              leaf minimum-bandwidth {
                type string;
                units "bps";
                description
                  "Minimum LSP bandwidth";
              }
    
              leaf maximum-bandwidth {
                type string;
                units "bps";
                description
                  "Maximum LSP bandwidth";
              }
    
              leaf minimum-bandwidth-adjust-interval {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "300 .. 31536000";
                  }
                }
                units "seconds";
                description
                  "Duration for which minimum bandwidth will be frozen";
              }
    
              leaf minimum-bandwidth-adjust-threshold-change {
                junos:must "(".. minimum-bandwidth-adjust-interval")";
                junos:must-message "minimum-bandwidth-adjust-interval must be configured";
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "0 .. 100";
                  }
                }
                units "percent";
                description
                  "Change in max average bandwidth to freeze min bandwidth";
              }
    
              leaf minimum-bandwidth-adjust-threshold-value {
                junos:must "(!(".. minimum-bandwidth-adjust-threshold-change"))";
                junos:must-message "minimum-bandwidth-adjust-threshold-change cannot be configured with minimum-bandwidth-adjust-threshold-value";
                junos:must "(".. minimum-bandwidth-adjust-interval")";
                junos:must-message "minimum-bandwidth-adjust-interval must be configured";
                type string;
                units "bps";
                status deprecated;
                description
                  "Freeze min bandwidth if max average bandwidth falls below this bw";
              }
    
              leaf monitor-bandwidth {
                type empty;
                description
                  "Monitor LSP bandwidth without adjustments";
              }
    
              leaf adjust-threshold-overflow-limit {
                junos:must "(((".. adjust-threshold" && ".. maximum-bandwidth") && (!(".. adjust-threshold $$={0}") && !(".. maximum-bandwidth $$={0}"))))";
                junos:must-message "Non-zero adjust-threshold and maximum-bandwidth MUST be configured";
                junos:must "(!(".. monitor-bandwidth"))";
                junos:must-message "adjust-threshold-overflow-limit cannot be used with monitor-bandwidth";
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "1 .. 65535";
                  }
                }
                description
                  "Number of consecutive overflow samples to trigger auto-adjustment";
              }
    
              leaf adjust-threshold-underflow-limit {
                junos:must "((".. adjust-threshold" && !(".. adjust-threshold 0")))";
                junos:must-message "Non-zero adjust-threshold must be configured";
                junos:must "(!(".. monitor-bandwidth"))";
                junos:must-message "adjust-threshold-underflow-limit cannot be used with monitor-bandwidth";
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "1 .. 65535";
                  }
                }
                description
                  "Number of consecutive underflow samples to trigger auto-adjustment";
              }
    
              leaf resignal-minimum-bandwidth {
                type empty;
                description
                  "Resignal the LSP using minimum-bandwidth";
              }
    
              leaf sync-active-path-bandwidth {
                type empty;
                description
                  "Signal standby path with bandwidth obtained from active path";
              }
            }  // container auto-bandwidth
    
            container optimize-on-change {
              description
                "Specify additional re-optimization triggers for this LSP";
              uses apply-advanced;
    
              leaf link-congestion {
                type empty;
                description
                  "Optimize when a link becomes congested";
              }
            }  // container optimize-on-change
    
            container deselect-on-bandwidth-failure {
              presence
                "enable deselect-on-bandwidth-failure";
              description
                "Deselect active path if it cannot meet the bandwidth constraint";
              uses apply-advanced;
    
              leaf tear-lsp {
                type empty;
                description
                  "Bring down active path when all paths fail to reserve required bandwidth";
              }
            }  // container deselect-on-bandwidth-failure
    
            container track-igp-metric {
              description
                "Track IGP metric for LSP install prefixes";
              uses apply-advanced;
    
              leaf install-v4-prefixes {
                type empty;
                description
                  "Track IGP metric for IPV4 prefixes";
              }
    
              leaf install-v6-prefixes {
                type empty;
                description
                  "Track IGP metric for IPV6 prefixes";
              }
            }  // container track-igp-metric
    
            container associate-lsp {
              junos:must "((".. oam mpls-tp-mode" || ".. .. oam mpls-tp-mode"))";
              junos:must-message "mpls-tp-mode must be configured for associate-lsp";
              description
                "Associate the LSP for OAM";
              uses apply-advanced;
    
              leaf lsp-name {
                type string {
                  junos:posix-pattern "^.{1,64}$";
                  junos:pattern-message "Must be a string of 64 characters or less";
                }
                description
                  "Name of assocation LSP";
              }
    
              leaf from {
                type jt:ipv4addr;
                description
                  "Address of ingress router of associated LSP";
              }
            }  // container associate-lsp
    
            list primary {
              key "name";
              ordered-by user;
              description "Preferred path";
              leaf name {
                type string {
                  length "1 .. 64";
                }
                description "Name of path";
              }
    
              uses apply-advanced;
    
              container bandwidth {
                description
                  "Bandwidth to reserve (bps)";
                uses bandwidth-type;
              }  // container bandwidth
    
              container admin-group {
                description
                  "Administrative group policy";
                uses admin_group_include_exclude;
              }  // container admin-group
    
              container admin-group-extended {
                description
                  "Extended administrative group policy";
                uses admin_group_include_exclude;
              }  // container admin-group-extended
    
              container priority {
                presence "enable priority";
                description
                  "Preemption priorities";
              }  // container priority
    
              leaf setup-priority {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "0 .. 7";
                  }
                }
                description "Set-up priority";
              }
    
              leaf reservation-priority {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "0 .. 7";
                  }
                }
                description
                  "Reservation priority";
              }
    
              container oam {
                description "Periodic OAM";
                uses periodic_oam;
              }  // container oam
    
              leaf class-of-service {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type int32 {
                    range "0 .. 7";
                  }
                }
                description
                  "Class-of-service value";
              }
    
              leaf no-decrement-ttl {
                type empty;
                description
                  "Do not decrement the TTL within an LSP";
              }
    
              leaf hop-limit {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type int32 {
                    range "2 .. 255";
                  }
                }
                description
                  "Maximum allowed router hops";
              }
    
              leaf no-cspf {
                type empty;
                description
                  "Disable automatic path computation";
              }
    
              leaf admin-down {
                type empty;
                description
                  "Set GMPLS LSP to administrative down state";
              }
    
              leaf optimize-timer {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type int32 {
                    range "0 .. 65535";
                  }
                }
                units "seconds";
                description
                  "Periodical path reoptimizations";
              }
    
              leaf preference {
                type union {
                  type uint32;
                  type string {
                    pattern "<.*>|$.*";
                  }
                }
                description "Preference value";
              }
    
              choice record-choice {
                leaf record {
                  type empty;
                  description
                    "Record transit routers";
                }
                leaf no-record {
                  type empty;
                  description
                    "Don't record transit routers";
                }
              }  // choice record-choice
    
              leaf standby {
                type empty;
                description
                  "Keep backup paths in continuous standby";
              }
    
              leaf exclude-srlg {
                type empty;
                description
                  "Exclude SRLG links for secondary path";
              }
    
              leaf ultimate-hop-popping {
                type empty;
                description
                  "Request ultimate hop popping from egress";
              }
    
              leaf sync-active-path-bandwidth {
                type empty;
                description
                  "Signal standby path with bandwidth obtained from active path";
              }
    
              leaf cross-credibility-cspf {
                type empty;
                description
                  "Compute paths across multi-protocol links and nodes";
              }
    
              leaf adaptive {
                type empty;
                description
                  "Have the LSP smoothly cut over to new routes";
              }
    
              leaf select {
                type enumeration {
                  enum "manual" {
                    value 0;
                    description
                      "Manual override as preferred active path, if up and stable";
                  }
                  enum "unconditional" {
                    value 1;
                    description
                      "Unconditional override as preferred active path, regardless of up/down status";
                  }
                }
              }
    
              container upstream-label {
                description
                  "Upstream Label for the bidirectional label-switched path";
                uses apply-advanced;
    
                leaf vlan-id {
                  junos:must "(".. .. .. lsp-attributes switching-type ethernet-vlan")";
                  junos:must-message "VLAN label is valid only for VLAN LSP";
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "1 .. 4094";
                    }
                  }
                  description
                    "VLAN ID label for the label-switched path";
                }
              }  // container upstream-label
    
              container optimize-on-change {
                junos:must "(!("protocols mpls label-switched-path $$ optimize-on-change"))";
                junos:must-message "LSP already has optimize-on-change";
                description
                  "Specify additional re-optimization triggers for this path";
                uses apply-advanced;
    
                leaf link-congestion {
                  type empty;
                  description
                    "Optimize when a link becomes congested";
                }
              }  // container optimize-on-change
            }  // list primary
    
            list secondary {
              key "name";
              ordered-by user;
              description "Backup path";
              leaf name {
                type string {
                  length "1 .. 64";
                }
                description "Name of path";
              }
    
              uses apply-advanced;
    
              container bandwidth {
                description
                  "Bandwidth to reserve (bps)";
                uses bandwidth-type;
              }  // container bandwidth
    
              container admin-group {
                description
                  "Administrative group policy";
                uses admin_group_include_exclude;
              }  // container admin-group
    
              container admin-group-extended {
                description
                  "Extended administrative group policy";
                uses admin_group_include_exclude;
              }  // container admin-group-extended
    
              container priority {
                presence "enable priority";
                description
                  "Preemption priorities";
              }  // container priority
    
              leaf setup-priority {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "0 .. 7";
                  }
                }
                description "Set-up priority";
              }
    
              leaf reservation-priority {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "0 .. 7";
                  }
                }
                description
                  "Reservation priority";
              }
    
              container oam {
                description "Periodic OAM";
                uses periodic_oam;
              }  // container oam
    
              leaf class-of-service {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type int32 {
                    range "0 .. 7";
                  }
                }
                description
                  "Class-of-service value";
              }
    
              leaf no-decrement-ttl {
                type empty;
                description
                  "Do not decrement the TTL within an LSP";
              }
    
              leaf hop-limit {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type int32 {
                    range "2 .. 255";
                  }
                }
                description
                  "Maximum allowed router hops";
              }
    
              leaf no-cspf {
                type empty;
                description
                  "Disable automatic path computation";
              }
    
              leaf admin-down {
                type empty;
                description
                  "Set GMPLS LSP to administrative down state";
              }
    
              leaf optimize-timer {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type int32 {
                    range "0 .. 65535";
                  }
                }
                units "seconds";
                description
                  "Periodical path reoptimizations";
              }
    
              leaf preference {
                type union {
                  type uint32;
                  type string {
                    pattern "<.*>|$.*";
                  }
                }
                description "Preference value";
              }
    
              choice record-choice {
                leaf record {
                  type empty;
                  description
                    "Record transit routers";
                }
                leaf no-record {
                  type empty;
                  description
                    "Don't record transit routers";
                }
              }  // choice record-choice
    
              leaf standby {
                type empty;
                description
                  "Keep backup paths in continuous standby";
              }
    
              leaf exclude-srlg {
                type empty;
                description
                  "Exclude SRLG links for secondary path";
              }
    
              leaf ultimate-hop-popping {
                type empty;
                description
                  "Request ultimate hop popping from egress";
              }
    
              leaf sync-active-path-bandwidth {
                type empty;
                description
                  "Signal standby path with bandwidth obtained from active path";
              }
    
              leaf cross-credibility-cspf {
                type empty;
                description
                  "Compute paths across multi-protocol links and nodes";
              }
    
              leaf adaptive {
                type empty;
                description
                  "Have the LSP smoothly cut over to new routes";
              }
    
              leaf select {
                type enumeration {
                  enum "manual" {
                    value 0;
                    description
                      "Manual override as preferred active path, if up and stable";
                  }
                  enum "unconditional" {
                    value 1;
                    description
                      "Unconditional override as preferred active path, regardless of up/down status";
                  }
                }
              }
    
              container upstream-label {
                description
                  "Upstream Label for the bidirectional label-switched path";
                uses apply-advanced;
    
                leaf vlan-id {
                  junos:must "(".. .. .. lsp-attributes switching-type ethernet-vlan")";
                  junos:must-message "VLAN label is valid only for VLAN LSP";
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "1 .. 4094";
                    }
                  }
                  description
                    "VLAN ID label for the label-switched path";
                }
              }  // container upstream-label
    
              container optimize-on-change {
                junos:must "(!("protocols mpls label-switched-path $$ optimize-on-change"))";
                junos:must-message "LSP already has optimize-on-change";
                description
                  "Specify additional re-optimization triggers for this path";
                uses apply-advanced;
    
                leaf link-congestion {
                  type empty;
                  description
                    "Optimize when a link becomes congested";
                }
              }  // container optimize-on-change
    
              container non-active-hold-priority {
                description
                  "Non-active hold priority";
                leaf non-active-hold-prio-value {
                  junos:must "(!((".. .. no-cspf" || (".. .. .. no-cspf" || ".. .. .. .. no-cspf"))))";
                  junos:must-message "Non-active hold priority unsupported for no-cspf LSPs";
                  junos:must "((".. .. standby" || (".. .. .. standby" || ".. .. .. .. standby")))";
                  junos:must-message "Non-active hold priority supported only for standby path";
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "0 .. 7";
                    }
                  }
                  description
                    "Non-active hold priority value";
                }
              }  // container non-active-hold-priority
            }  // list secondary
    
            container policing {
              description
                "Traffic policing for this LSP";
              leaf filter {
                junos:must "(!("firewall family any filter $$ interface-specific"))";
                junos:must-message "LSP policing filter must not be interface-specific";
                junos:must "(("firewall family any filter $$" || (!("firewall") && ".. .. .. .. .. .. .. .. firewall family any filter $$")))";
                junos:must-message "referenced filter must be defined under firewall family any";
                type string {
                  junos:posix-pattern "!^((__.*)|(.{65,}))$";
                  junos:pattern-message "Must be a non-reserved string of 64 characters or less";
                }
                description
                  "Name of filter to use for policing LSP traffic";
              }
    
              leaf no-auto-policing {
                type empty;
                description
                  "Turn off automatic policing for this LSP";
              }
            }  // container policing
    
            leaf lsp-external-controller {
              junos:must "(!(".. single-sided-associated-bidirectional"))";
              junos:must-message "Single-sided associated bidir LSP cannot be externally controlled";
              junos:must "(!(".. corouted-bidirectional"))";
              junos:must-message "Externally controlled LSP cannot be corouted bidirectional";
              junos:must "(!(".. corouted-bidirectional-passive"))";
              junos:must-message "Externally controlled LSP cannot be corouted bidirectional";
              junos:must "("protocols mpls lsp-external-controller $$")";
              junos:must-message "Referenced lsp-external-controller is not defined";
              type string {
                junos:posix-pattern "^.{1,64}$";
                junos:pattern-message "Must be a string of less than 64 characters";
              }
              description
                "Name of the external path computing entity";
            }
    
            leaf associate-backup-pe-groups {
              junos:must "(".. oam bfd-liveness-detection")";
              junos:must-message "bfd-liveness-detection must be configured for this feature.";
              type empty;
              description
                "Associate this LSP with backup-pe groups";
            }
    
            leaf egress-protection {
              junos:must "(!(".. install"))";
              junos:must-message "Cannot install routes for an egress protection LSP";
              type empty;
              description
                "Use this LSP for egress protection data transport";
            }
    
            leaf transport-class {
              junos:must "("routing-options transport-class name $$")";
              junos:must-message "Referenced transport class is not defined";
              type string {
                junos:posix-pattern "^.{1,64}$";
                junos:pattern-message "Must be a string of less than 64 characters";
              }
              description
                "Transport class this LSP belongs to";
            }
          }  // list label-switched-path
    
          container deselect-on-bandwidth-failure {
            presence
              "enable deselect-on-bandwidth-failure";
            description
              "Deselect active path if it cannot meet the bandwidth constraint";
            uses apply-advanced;
    
            leaf tear-lsp {
              type empty;
              description
                "Bring down active path when all paths fail to reserve required bandwidth";
            }
          }  // container deselect-on-bandwidth-failure
    
          container track-igp-metric {
            description
              "Track IGP metric for LSP install prefixes";
            uses apply-advanced;
    
            leaf install-v4-prefixes {
              type empty;
              description
                "Track IGP metric for IPV4 prefixes";
            }
    
            leaf install-v6-prefixes {
              type empty;
              description
                "Track IGP metric for IPV6 prefixes";
            }
          }  // container track-igp-metric
    
          list container-label-switched-path {
            key "name";
            ordered-by user;
            leaf name {
              junos:must "(!(".. .. label-switched-path $$"))";
              junos:must-message "The Container LSP name is the same as an existing LSP name";
              type string {
                junos:posix-pattern "^.{1,64}$";
                junos:pattern-message "Must be a string of 64 characters or less";
              }
              description
                "Name of container-lsp";
            }
    
            uses apply-advanced;
    
            choice enable-disable {
              leaf disable {
                type empty;
                description
                  "Disable MPLS container-label-switched path";
              }
            }  // choice enable-disable
    
            leaf description {
              type string {
                length "1 .. 80";
              }
              description
                "Text description of label-switched path";
            }
    
            container label-switched-path-template {
              description
                "Template for dynamic point-to-point LSP parameters";
              uses apply-advanced;
    
              choice dynamic-template {
                leaf template-name {
                  junos:must "(!("protocols mpls label-switched-path $$ egress-protection"))";
                  junos:must-message "Referenced point-to-point LSP template cannot have egress-protection";
                  junos:must "(!("protocols mpls label-switched-path $$ p2mp"))";
                  junos:must-message "Referenced point-to-point LSP template cannot be p2mp sub LSP";
                  junos:must "(!("protocols mpls label-switched-path $$ bandwidth"))";
                  junos:must-message "Referenced point-to-point LSP template cannot have static bandwidth";
                  junos:must "(!("protocols mpls label-swithced-path $$ policing"))";
                  junos:must-message "Referenced point-to-point LSP template cannot have policing";
                  junos:must "(("protocols mpls label-switched-path $$" && ("protocols mpls label-switched-path $$ template" && !("protocols mpls label-switched-path $$ no-cspf"))))";
                  junos:must-message "Referenced point-to-point LSP template cannot have no-cspf";
                  junos:must "(("protocols mpls label-switched-path $$" && "protocols mpls label-switched-path $$ template"))";
                  junos:must-message "Referenced point-to-point LSP template does not exist";
                  type string {
                    junos:posix-pattern "![*<>]";
                    junos:pattern-message "Template name should not contain '*' and angle brackets";
                    length "1 .. 64";
                  }
                  description
                    "Name of point-to-point LSP template";
                }
                leaf default-template {
                  type empty;
                  description
                    "Use default parameters";
                }
              }  // choice dynamic-template
            }  // container label-switched-path-template
    
            leaf to {
              type jt:ipv4addr;
              description
                "Address of egress router";
            }
    
            leaf suffix {
              type string {
                length "1 .. 64";
              }
              description
                "Suffix to generate names of members of container LSP";
            }
    
            container splitting-merging {
              description
                "Do splitting and merging";
              uses apply-advanced;
    
              leaf maximum-member-lsps {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type int32 {
                    range "1 .. 64";
                  }
                }
                description
                  "Maximum number of LSPs";
              }
    
              leaf minimum-member-lsps {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type int32 {
                    range "1 .. 64";
                  }
                }
                description
                  "Minimum number of LSPs";
              }
    
              leaf splitting-bandwidth {
                type string;
                units "bps";
                description
                  "Maximum bandwidth threshold for splitting";
              }
    
              leaf merging-bandwidth {
                type string;
                units "bps";
                description
                  "Minimum bandwidth threshold for merging";
              }
    
              leaf maximum-signaling-bandwidth {
                type string;
                units "bps";
                description
                  "Maximum bandwidth for signaling during normalization";
              }
    
              leaf minimum-signaling-bandwidth {
                type string;
                units "bps";
                description
                  "Minimum bandwidth for signaling during normalization";
              }
    
              leaf splitting-merging-threshold {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "0 .. 100";
                  }
                }
                units "percent";
                default "10";
                description
                  "Change in aggregate LSP utilization to trigger splitting or merging";
              }
    
              container normalization {
                description "Do normalization";
                uses apply-advanced;
    
                leaf normalize-interval {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "300 .. 315360000";
                    }
                  }
                  units "seconds";
                  default "86400";
                  description
                    "Time to normalize container LSP";
                }
    
                leaf failover-normalization {
                  type empty;
                  description
                    "Do pre-mature normalization in case some LSPs go down before next normalization";
                }
    
                leaf no-incremental-normalize {
                  type empty;
                  description
                    "Do not normalize unless all LSPs are successfully signaled";
                }
    
                leaf normalization-retry-duration {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "1 .. 86400";
                    }
                  }
                  units "seconds";
                  description
                    "Time before retrying the container LSP normalization";
                }
    
                leaf normalization-retry-limits {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "1 .. 1000";
                    }
                  }
                  description
                    "Maximum number of times to retry container LSP normalization";
                }
              }  // container normalization
    
              container sampling {
                description
                  "Sampling information";
                uses apply-advanced;
    
                leaf cut-off-threshold {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "0 .. 100";
                    }
                  }
                  default "0";
                  description
                    "Cut-off percentile to remove outliers from aggregate samples";
                }
    
                choice sampling-mode {
                  leaf use-average-aggregate {
                    type empty;
                    description
                      "Use average of the samples";
                  }
                  leaf use-percentile {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint32 {
                        range "0 .. 100";
                      }
                    }
                    default "100";
                    description
                      "Use a percentile of the samples";
                  }
                }  // choice sampling-mode
              }  // container sampling
            }  // container splitting-merging
    
            leaf lsp-external-controller {
              junos:must "("protocols mpls lsp-external-controller $$")";
              junos:must-message "Referenced lsp-external-controller is not defined";
              type string {
                junos:posix-pattern "^.{1,64}$";
                junos:pattern-message "Must be a string of less than 64 characters";
              }
              description
                "Name of the external path computing entity";
            }
          }  // list container-label-switched-path
    
          list transit-lsp-association {
            key "name";
            ordered-by user;
            description
              "Transit label switch path assoication";
            leaf name {
              type string {
                junos:posix-pattern "^.{1,64}$";
                junos:pattern-message "Must be a string of 64 characters or less";
              }
              description
                "Name of transit assocation LSP group";
            }
    
            uses apply-advanced;
    
            leaf lsp-name-1 {
              type string {
                junos:posix-pattern "^.{1,64}$";
                junos:pattern-message "Must be a string of 64 characters or less";
              }
              description
                "Name of assocation LSP 1";
            }
    
            leaf from-1 {
              type jt:ipv4addr;
              description
                "Address of associated LSP 1";
            }
    
            leaf lsp-name-2 {
              type string {
                junos:posix-pattern "^.{1,64}$";
                junos:pattern-message "Must be a string of 64 characters or less";
              }
              description
                "Name of assocation LSP 2";
            }
    
            leaf from-2 {
              type jt:ipv4addr;
              description
                "Address of associated LSP 2";
            }
          }  // list transit-lsp-association
    
          list path {
            key "name";
            ordered-by user;
            description
              "Route of a label-switched path";
            leaf name {
              type string {
                junos:posix-pattern "^.{1,64}$";
                junos:pattern-message "Must be a string of less than 64 characters";
              }
              description
                "Name of label-switched path";
            }
    
            uses apply-advanced;
    
            list path-list {
              key "name";
              ordered-by user;
              description
                "List of routers in the label-switched path";
              leaf name {
                type string {
                  junos:posix-pattern "^.{1,64}$";
                  junos:pattern-message "Must be a string of less than 64 characters";
                }
                description
                  "Address of next system in path";
              }
    
              leaf abstract {
                junos:must "(".. .. .. abstract-hop ${path-list}")";
                junos:must-message "Referenced abstart hop must be configured";
                type empty;
                description
                  "Next system in path is abstract";
              }
    
              choice loose_strict_none {
                leaf loose {
                  type empty;
                  description
                    "Next hop might not be adjacent";
                }
                leaf loose-link {
                  type empty;
                  description
                    "Next hop link might not be adjacent";
                }
                leaf strict {
                  type empty;
                  description
                    "Next hop must be adjacent";
                }
              }  // choice loose_strict_none
            }  // list path-list
          }  // list path
    
          list constituent-list {
            key "name";
            ordered-by user;
            description
              "MPLS constituent list for abstract hops";
            leaf name {
              type string {
                junos:posix-pattern "^.{1,64}$";
                junos:pattern-message "Must be a string of 64 characters or less";
              }
              description
                "Constituent list name";
            }
    
            uses apply-advanced;
    
            leaf-list srlg {
              type string;
              max-elements 16;
              ordered-by user;
              description "SRLG Name";
            }
    
            leaf-list admin-group {
              type string;
              max-elements 16;
              ordered-by user;
              description
                "Administrative groups";
            }
    
            leaf-list admin-group-extended {
              type string;
              max-elements 16;
              ordered-by user;
              description
                "Extended administrative groups";
            }
          }  // list constituent-list
    
          list abstract-hop {
            key "name";
            ordered-by user;
            description "MPLS abstract hop";
            leaf name {
              type string {
                junos:posix-pattern "^.{1,64}$";
                junos:pattern-message "Must be a string of 64 characters or less";
              }
              description "Abstract hop name";
            }
    
            uses apply-advanced;
    
            leaf operator {
              type enumeration {
                enum "AND" {
                  value 0;
                  description "AND";
                }
                enum "OR" {
                  value 1;
                  description "OR";
                }
              }
              description
                "Operation among constituent lists";
            }
    
            list constituent-list {
              key "name";
              ordered-by user;
              description
                "Building abstract hop using constituent lists";
              leaf name {
                junos:must "("protocols mpls constituent-list $$")";
                junos:must-message "Referenced constituent list does not exist";
                type string {
                  length "1 .. 64";
                }
                description
                  "Constituent list name";
              }
    
              uses apply-advanced;
    
              choice list-type {
                leaf include-any-list {
                  type empty;
                  description "Include any";
                }
                leaf include-all-list {
                  type empty;
                  description "Include all";
                }
                leaf exclude-any-list {
                  type empty;
                  description "Exclude any";
                }
                leaf exclude-all-list {
                  type empty;
                  description "Exclude all";
                }
              }  // choice list-type
            }  // list constituent-list
          }  // list abstract-hop
    
          container egress-protection {
            description
              "Egress router protection";
            uses apply-advanced;
    
            list context-identifier {
              key "name";
              description "Context identifier";
              leaf name {
                type jt:ipv4addr;
                description "IP address";
              }
    
              uses apply-advanced;
    
              choice context-type {
                leaf primary {
                  type empty;
                  description "Primary";
                }
                leaf protector {
                  type empty;
                  description "Protector";
                }
              }  // choice context-type
    
              leaf metric {
                junos:must "(!(" .. advertise-mode stub-alias"))";
                junos:must-message "Metric configuration is not supported with stub-alias mode";
                junos:must "(".. protector")";
                junos:must-message "Configurable only for protector context identifiers";
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "2 .. 16777215";
                  }
                }
                description "IGP metric";
              }
    
              leaf advertise-mode {
                type enumeration {
                  enum "stub-proxy" {
                    value 0;
                    description "Proxy";
                  }
                  enum "stub-alias" {
                    value 1;
                    description "Alias";
                  }
                }
                description "Advertise mode";
              }
    
              leaf-list admin-group {
                junos:must "((".. protector" && ".. advertise-mode stub-proxy"))";
                junos:must-message "Configurable only for protector with proxy mode";
                type string;
                ordered-by user;
                description
                  "Administrative groups";
              }
            }  // list context-identifier
    
            container traceoptions {
              description
                "Trace options for egress-protection";
              uses apply-advanced;
    
              container file {
                description "Trace file options";
                leaf filename {
                  type string {
                    junos:posix-pattern "![/ %]";
                    junos:pattern-message "Must not contain '/', % or a space";
                    length "1 .. 1024";
                  }
                  description
                    "Name of file in which to write trace information";
                }
    
                leaf replace {
                  type empty;
                  status deprecated;
                  description
                    "Replace trace file rather than appending to it";
                }
    
                leaf size {
                  type string;
                  description
                    "Maximum trace file size";
                }
    
                leaf files {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "2 .. 1000";
                    }
                  }
                  default "10";
                  description
                    "Maximum number of trace files";
                }
    
                leaf no-stamp {
                  type empty;
                  status deprecated;
                  description
                    "Do not timestamp trace file";
                }
    
                choice world-readable-choice {
                  leaf world-readable {
                    type empty;
                    description
                      "Allow any user to read the log file";
                  }
                  leaf no-world-readable {
                    type empty;
                    description
                      "Don't allow any user to read the log file";
                  }
                }  // choice world-readable-choice
              }  // container file
    
              list flag {
                key "name";
                ordered-by user;
                description "Tracing parameters";
                leaf name {
                  type enumeration {
                    enum "state" {
                      value 0;
                      description
                        "Trace state transitions";
                    }
                    enum "route" {
                      value 1;
                      description
                        "Trace route transitions";
                    }
                    enum "error" {
                      value 2;
                      description
                        "Trace error conditions";
                    }
                    enum "all" {
                      value 3;
                      description
                        "Trace everything";
                    }
                  }
                }
              }  // list flag
            }  // container traceoptions
          }  // container egress-protection
    
          container label-range {
            description "MPLS labels ranges";
            uses apply-advanced;
    
            list lsi-label-range {
              key "name";
              ordered-by user;
              description "LSI-label-range";
              leaf name {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "16 .. 1048575";
                  }
                }
                description "Label_range_start";
              }
    
              leaf range-end {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "16 .. 1048575";
                  }
                }
                description "Label_range_end";
              }
            }  // list lsi-label-range
    
            list dynamic-label-range {
              key "name";
              ordered-by user;
              description "Dynamic-label-range";
              leaf name {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "16 .. 1048575";
                  }
                }
                description "Label_range_start";
              }
    
              leaf range-end {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "16 .. 1048575";
                  }
                }
                description "Label_range_end";
              }
            }  // list dynamic-label-range
    
            list block-label-range {
              key "name";
              ordered-by user;
              description "Block-label-range";
              leaf name {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "16 .. 1048575";
                  }
                }
                description "Label_range_start";
              }
    
              leaf range-end {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "16 .. 1048575";
                  }
                }
                description "Label_range_end";
              }
            }  // list block-label-range
    
            list srgb-label-range {
              key "name";
              max-elements 1;
              ordered-by user;
              description "SRGB-label-range";
              leaf name {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "16 .. 1048575";
                  }
                }
                description "Label_range_start";
              }
    
              leaf range-end {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "16 .. 1048575";
                  }
                }
                description "Label_range_end";
              }
            }  // list srgb-label-range
    
            leaf label-limit {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32;
              }
              description
                "Limit for the number of concurrent active labels";
            }
    
            list static-label-range {
              key "name";
              ordered-by user;
              description "Static-label-range";
              leaf name {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "16 .. 1048575";
                  }
                }
                description "Label_range_start";
              }
    
              leaf range-end {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "16 .. 1048575";
                  }
                }
                description "Label_range_end";
              }
            }  // list static-label-range
          }  // container label-range
    
          choice enable-disable {
            leaf disable {
              type empty;
              description "Disable MPLS";
            }
          }  // choice enable-disable
    
          container label-history {
            presence "enable label-history";
            description
              "MPLS label history recording";
            uses apply-advanced;
    
            leaf max-entries {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32;
              }
              description
                "Limit for the number of history entry per label";
            }
          }  // container label-history
    
          container traceoptions {
            description "Trace options for MPLS";
            uses apply-advanced;
    
            container file {
              description "Trace file options";
              leaf filename {
                type string {
                  junos:posix-pattern "![/ %]";
                  junos:pattern-message "Must not contain '/', % or a space";
                  length "1 .. 1024";
                }
                description
                  "Name of file in which to write trace information";
              }
    
              leaf replace {
                type empty;
                status deprecated;
                description
                  "Replace trace file rather than appending to it";
              }
    
              leaf size {
                type string;
                description
                  "Maximum trace file size";
              }
    
              leaf files {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "2 .. 1000";
                  }
                }
                default "10";
                description
                  "Maximum number of trace files";
              }
    
              leaf no-stamp {
                type empty;
                status deprecated;
                description
                  "Do not timestamp trace file";
              }
    
              choice world-readable-choice {
                leaf world-readable {
                  type empty;
                  description
                    "Allow any user to read the log file";
                }
                leaf no-world-readable {
                  type empty;
                  description
                    "Don't allow any user to read the log file";
                }
              }  // choice world-readable-choice
            }  // container file
    
            list flag {
              key "name";
              ordered-by user;
              description "Tracing parameters";
              leaf name {
                type enumeration {
                  enum "connection" {
                    value 0;
                    description
                      "Trace CCC activity";
                  }
                  enum "connection-detail" {
                    value 1;
                    description
                      "Trace CCC activity in detail";
                  }
                  enum "cspf" {
                    value 2;
                    description
                      "Trace CSPF computation";
                  }
                  enum "cspf-node" {
                    value 3;
                    description
                      "Trace nodes visited during CSPF";
                  }
                  enum "cspf-link" {
                    value 4;
                    description
                      "Trace links visited during CSPF";
                  }
                  enum "cspf-abstract" {
                    value 5;
                    description
                      "Trace abstract hop based CSPF details";
                  }
                  enum "state" {
                    value 6;
                    description
                      "Trace state transitions";
                  }
                  enum "error" {
                    value 7;
                    description
                      "Trace error conditions";
                  }
                  enum "lsping" {
                    value 8;
                    description
                      "Trace LSP ping packets received";
                  }
                  enum "graceful-restart" {
                    value 9;
                    description
                      "Trace graceful-restart-related events";
                  }
                  enum "nsr-synchronization" {
                    value 10;
                    description
                      "Trace NSR synchronization events";
                  }
                  enum
                    "nsr-synchronization-detail" {
                    value 11;
                    description
                      "Trace NSR synchronization events in detail";
                  }
                  enum "static" {
                    value 12;
                    description
                      "Trace static label-switched path";
                  }
                  enum "egress-protection" {
                    value 13;
                    description
                      "Trace egress protection events";
                  }
                  enum "all" {
                    value 14;
                    description
                      "Trace everything";
                  }
                  enum "autobw-state" {
                    value 15;
                    description
                      "Trace autobandwidth events in mpls trace";
                  }
                  enum
                    "externally-controlled-lsp" {
                    value 16;
                    description
                      "Trace externally controlled LSP events in mpls trace";
                  }
                  enum "ted-import" {
                    value 17;
                    description
                      "Trace leaking TED entries into lsdist.0 table";
                  }
                  enum "ted-export" {
                    value 18;
                    description
                      "Trace leaking of entries from lsdist.0 table into TED";
                  }
                  enum "lsp-history" {
                    value 19;
                    description
                      "Trace LSP history events";
                  }
                  enum "abstract-hop" {
                    value 20;
                    description
                      "Trace abstract hop related events";
                  }
                }
              }
            }  // list flag
          }  // container traceoptions
    
          leaf ipv6-tunneling {
            type empty;
            description
              "Allow MPLS LSPs to be used for tunneling IPv6 traffic";
          }
    
          list interface {
            key "name";
            ordered-by user;
            description "MPLS interface options";
            uses juniper-protocols-mpls-interface;
          }  // list interface
    
          list static-label-switched-path {
            key "name";
            ordered-by user;
            description
              "Static label-switched path";
            leaf name {
              type string {
                length "1 .. 64";
              }
              description "Name of path";
            }
    
            uses apply-advanced;
    
            choice lsp-type {
              container bypass {
                description
                  "Bypass ingress label-switched path";
                uses apply-advanced;
    
                leaf bandwidth {
                  type string;
                  units "bps";
                  description
                    "Bandwidth to reserve";
                }
    
                leaf description {
                  type string {
                    length "1 .. 80";
                  }
                  description
                    "Text description of label-switched path";
                }
    
                leaf next-hop {
                  type union {
                    type jt:ipaddr-or-interface;
                    type string {
                      pattern "<.*>|$.*";
                    }
                  }
                  description
                    "IPv4 or IPv6 address or interface of next-hop router";
                }
    
                leaf next-table {
                  type string;
                  description
                    "Next-table for lookup";
                }
    
                leaf push {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "0 .. 1048575";
                    }
                  }
                  description "Label to push";
                }
    
                leaf to {
                  type jt:ipaddr;
                  description
                    "Address of egress router";
                }
              }  // container bypass
              list transit {
                key "name";
                ordered-by user;
                description
                  "Transit label-switched path";
                leaf name {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "16 .. 1048575";
                    }
                  }
                  description
                    "Incoming label value";
                }
    
                uses apply-advanced;
    
                leaf bandwidth {
                  type string;
                  units "bps";
                  description
                    "Bandwidth to reserve";
                }
    
                leaf description {
                  type string {
                    length "1 .. 80";
                  }
                  description
                    "Text description of label-switched path";
                }
    
                container link-protection {
                  description
                    "Bypass link protection";
                  leaf bypass-name {
                    type string {
                      length "1 .. 64";
                    }
                    description
                      "Bypass label-switched path name";
                  }
                }  // container link-protection
    
                leaf next-hop {
                  type union {
                    type jt:ipaddr-or-interface;
                    type string {
                      pattern "<.*>|$.*";
                    }
                  }
                  description
                    "IPv4 or IPv6 address or interface of next-hop router";
                }
    
                leaf member-interface {
                  type union {
                    type jt:interface-unit;
                    type string {
                      pattern "<.*>|$.*";
                    }
                  }
                  description
                    "AE member interface name";
                }
    
                container node-protection {
                  description
                    "Bypass node protection";
                  leaf bypass-name {
                    type string {
                      length "1 .. 64";
                    }
                    description
                      "Bypass label-switched path name";
                  }
    
                  leaf next-next-label {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint32 {
                        range "0 .. 1048575";
                      }
                    }
                    description
                      "Label expected by next-next-hop";
                  }
                }  // container node-protection
    
                choice label-action {
                  leaf swap {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint32 {
                        range "0 .. 1048575";
                      }
                    }
                    description
                      "Swap top label with this label";
                  }
                  leaf pop {
                    type empty;
                    description
                      "Pop the top label";
                  }
                  leaf stitch {
                    junos:must "(!((".. link-protection" || ".. node-protection")))";
                    junos:must-message "Link-protection and node-protection are invalid for LSP stitching";
                    type empty;
                    description
                      "Swap top label with the resolved LSP";
                  }
                }  // choice label-action
              }  // list transit
              container ingress {
                description
                  "Ingress LSR configuration for a static LSP";
                uses apply-advanced;
    
                leaf bandwidth {
                  type string;
                  units "bps";
                  description
                    "Bandwidth to reserve";
                }
    
                leaf class-of-service {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type int32 {
                      range "0 .. 7";
                    }
                  }
                  description
                    "Class-of-service value";
                }
    
                leaf description {
                  type string {
                    length "1 .. 80";
                  }
                  description
                    "Text description of label-switched path";
                }
    
                list install {
                  key "name";
                  ordered-by user;
                  description "Install prefix";
                  leaf name {
                    type jt:ipv4prefix;
                    description
                      "Destination prefix";
                  }
    
                  leaf active {
                    type empty;
                    description
                      "Install prefix into forwarding table";
                  }
                }  // list install
    
                leaf metric {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "1 .. 16777215";
                    }
                  }
                  description "Metric value";
                }
    
                leaf next-hop {
                  type union {
                    type jt:ipv4addr-or-interface;
                    type string {
                      pattern "<.*>|$.*";
                    }
                  }
                  description
                    "IPv4 address or interface of next-hop router";
                }
    
                container link-protection {
                  description
                    "Bypass link protection";
                  leaf bypass-name {
                    type string {
                      length "1 .. 64";
                    }
                    description
                      "Bypass label-switched path name";
                  }
                }  // container link-protection
    
                container node-protection {
                  description
                    "Bypass node protection";
                  leaf bypass-name {
                    type string {
                      length "1 .. 64";
                    }
                    description
                      "Bypass label-switched path name";
                  }
    
                  leaf next-next-label {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint32 {
                        range "0 .. 1048575";
                      }
                    }
                    description
                      "Label expected by next-next-hop";
                  }
                }  // container node-protection
    
                leaf no-install-to-address {
                  type empty;
                  description
                    "Don't install host route 'to' address into routing tables";
                }
    
                container policing {
                  description
                    "Traffic policing for this LSP";
                  leaf filter {
                    junos:must "(!("firewall family any filter $$ interface-specific"))";
                    junos:must-message "LSP policing filter must not be interface-specific";
                    junos:must "(("firewall family any filter $$" || (!("firewall") && ".. .. .. .. .. .. .. .. firewall family any filter $$")))";
                    junos:must-message "referenced filter must be defined under firewall family any";
                    type string {
                      junos:posix-pattern "!^((__.*)|(.{65,}))$";
                      junos:pattern-message "Must be a non-reserved string of 64 characters or less";
                    }
                    description
                      "Name of filter to use for policing LSP traffic";
                  }
    
                  leaf no-auto-policing {
                    type empty;
                    description
                      "Turn off automatic policing for this LSP";
                  }
                }  // container policing
    
                leaf preference {
                  type union {
                    type uint32;
                    type string {
                      pattern "<.*>|$.*";
                    }
                  }
                  description "Preference value";
                }
    
                leaf to {
                  type jt:ipv4addr;
                  description
                    "Address of egress router";
                }
    
                leaf push {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "0 .. 1048575";
                    }
                  }
                  description "Label to push";
                }
    
                leaf entropy-label {
                  type empty;
                  description
                    "Enable entropy label";
                }
              }  // container ingress
              container segment {
                description
                  "Segment for segment routing";
                uses apply-advanced;
    
                leaf sid-label {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "16 .. 1048575";
                    }
                  }
                  description
                    "Segment identifier (SID) label";
                }
    
                leaf description {
                  type string {
                    length "1 .. 80";
                  }
                  description
                    "Text description of label-switched path";
                }
    
                leaf next-hop {
                  type union {
                    type jt:ipv4addr-or-interface;
                    type string {
                      pattern "<.*>|$.*";
                    }
                  }
                  description
                    "IPv4 address or interface of next-hop router";
                }
    
                choice label-action {
                  leaf swap {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint32 {
                        range "0 .. 1048575";
                      }
                    }
                    description
                      "Swap the SID label to this label";
                  }
                  leaf pop {
                    type empty;
                    description
                      "Pop the SID label";
                  }
                }  // choice label-action
              }  // container segment
            }  // choice lsp-type
          }  // list static-label-switched-path
        }  // grouping juniper-protocols-mpls
    
        grouping juniper-protocols-mpls-interface {
          leaf name {
            type union {
              type jt:interface-name;
              type string {
                pattern "<.*>|$.*";
              }
            }
            description "Interface name";
          }
    
          uses apply-advanced;
    
          choice enable-disable {
            leaf disable {
              type empty;
              description
                "Disable MPLS on this interface";
            }
          }  // choice enable-disable
    
          leaf-list srlg {
            type string;
            max-elements 64;
            ordered-by user;
            description "SRLG Name";
          }
    
          leaf always-mark-connection-protection-tlv {
            type empty;
            description
              "Mark connection protection tlv on this interface";
          }
    
          leaf switch-away-lsps {
            type empty;
            description
              "Switch away protected LSPs to their bypass LSPs";
          }
    
          leaf-list admin-group {
            type string;
            ordered-by user;
            description "Administrative groups";
          }
    
          leaf-list admin-group-extended {
            type string;
            ordered-by user;
            description
              "Extended administrative groups";
          }
    
          container static {
            description
              "Static label-switch path related configurations";
            uses apply-advanced;
    
            leaf protection-revert-time {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "0 .. 65535";
                }
              }
              units "seconds";
              description
                "FRR revert wait time, 0 means disable";
            }
          }  // container static
        }  // grouping juniper-protocols-mpls-interface
    
        grouping juniper-protocols-msdp {
          uses apply-advanced;
    
          leaf data-encapsulation {
            type enumeration {
              enum "disable" {
                value 0;
                description
                  "Disable data encapsulation";
              }
              enum "enable" {
                value 1;
                description
                  "Enable data encapsulation";
              }
            }
            description
              "Set encapsulation of data packets";
          }
    
          container rib-group {
            description "Routing table group";
            uses rib_group_inet_type;
          }  // container rib-group
    
          container active-source-limit {
            description
              "Limit the number of active sources accepted";
            uses apply-advanced;
    
            leaf maximum {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "1 .. 1000000";
                }
              }
              default "25000";
              description
                "Maximum number of active sources accepted";
            }
    
            leaf threshold {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "1 .. 1000000";
                }
              }
              default "24000";
              description
                "RED threshold for active source acceptance";
            }
    
            leaf log-warning {
              junos:must "(".. maximum")";
              junos:must-message "Maximum must be configured to configure log-warning";
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "1 .. 100";
                }
              }
              default "100";
              description
                "Percentage of maximum at which to start generating warnings";
            }
    
            leaf log-interval {
              junos:must "(".. maximum")";
              junos:must-message "Maximum must be configured to configure log-interval";
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "6 .. 32767";
                }
              }
              description
                "Time between log messages";
            }
          }  // container active-source-limit
    
          choice enable-disable {
            leaf disable {
              type empty;
              description "Disable MSDP";
            }
          }  // choice enable-disable
    
          leaf-list export {
            type jt:policy-algebra;
            ordered-by user;
            description "Export policy";
          }
    
          leaf-list import {
            type jt:policy-algebra;
            ordered-by user;
            description "Import policy";
          }
    
          leaf local-address {
            type jt:ipv4addr;
            description "Local address";
          }
    
          container traceoptions {
            description "Trace options for MSDP";
            uses apply-advanced;
    
            container file {
              description "Trace file options";
              leaf filename {
                type string {
                  junos:posix-pattern "![/ %]";
                  junos:pattern-message "Must not contain '/', % or a space";
                  length "1 .. 1024";
                }
                description
                  "Name of file in which to write trace information";
              }
    
              leaf replace {
                type empty;
                status deprecated;
                description
                  "Replace trace file rather than appending to it";
              }
    
              leaf size {
                type string;
                description
                  "Maximum trace file size";
              }
    
              leaf files {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "2 .. 1000";
                  }
                }
                default "10";
                description
                  "Maximum number of trace files";
              }
    
              leaf no-stamp {
                type empty;
                status deprecated;
                description
                  "Do not timestamp trace file";
              }
    
              choice world-readable-choice {
                leaf world-readable {
                  type empty;
                  description
                    "Allow any user to read the log file";
                }
                leaf no-world-readable {
                  type empty;
                  description
                    "Don't allow any user to read the log file";
                }
              }  // choice world-readable-choice
            }  // container file
    
            list flag {
              key "name";
              ordered-by user;
              description "Tracing parameters";
              leaf name {
                type enumeration {
                  enum "packets" {
                    value 0;
                    description
                      "Trace all MSDP packets";
                  }
                  enum "route" {
                    value 1;
                    description
                      "Trace routing information";
                  }
                  enum "nsr-synchronization" {
                    value 2;
                    description
                      "Trace NSR synchronization events";
                  }
                  enum "source-active" {
                    value 3;
                    description
                      "Trace source-active messages";
                  }
                  enum "source-active-request" {
                    value 4;
                    description
                      "Trace source-active request messages";
                  }
                  enum "source-active-response" {
                    value 5;
                    description
                      "Trace source-active response messages";
                  }
                  enum "keepalive" {
                    value 6;
                    description
                      "Trace keepalive messages";
                  }
                  enum "normal" {
                    value 7;
                    description
                      "Trace normal events";
                  }
                  enum "general" {
                    value 8;
                    description
                      "Trace general events";
                  }
                  enum "state" {
                    value 9;
                    description
                      "Trace state transitions";
                  }
                  enum "policy" {
                    value 10;
                    description
                      "Trace policy processing";
                  }
                  enum "task" {
                    value 11;
                    description
                      "Trace routing protocol task processing";
                  }
                  enum "timer" {
                    value 12;
                    description
                      "Trace routing protocol timer processing";
                  }
                  enum "all" {
                    value 13;
                    description
                      "Trace everything";
                  }
                }
              }
    
              leaf send {
                type empty;
                description
                  "Trace transmitted packets";
              }
    
              leaf receive {
                type empty;
                description
                  "Trace received packets";
              }
    
              leaf detail {
                type empty;
                description
                  "Trace detailed information";
              }
    
              leaf disable {
                type empty;
                description
                  "Disable this trace flag";
              }
            }  // list flag
          }  // container traceoptions
    
          list peer {
            key "name";
            ordered-by user;
            description "Configure an MSDP peer";
            leaf name {
              type jt:ipv4addr;
              description "Peer address";
            }
    
            uses apply-advanced;
    
            choice enable-disable {
              leaf disable {
                type empty;
                description "Disable MSDP";
              }
            }  // choice enable-disable
    
            leaf-list export {
              type jt:policy-algebra;
              ordered-by user;
              description "Export policy";
            }
    
            leaf-list import {
              type jt:policy-algebra;
              ordered-by user;
              description "Import policy";
            }
    
            leaf local-address {
              type jt:ipv4addr;
              description "Local address";
            }
    
            container traceoptions {
              description
                "Trace options for MSDP";
              uses apply-advanced;
    
              container file {
                description "Trace file options";
                leaf filename {
                  type string {
                    junos:posix-pattern "![/ %]";
                    junos:pattern-message "Must not contain '/', % or a space";
                    length "1 .. 1024";
                  }
                  description
                    "Name of file in which to write trace information";
                }
    
                leaf replace {
                  type empty;
                  status deprecated;
                  description
                    "Replace trace file rather than appending to it";
                }
    
                leaf size {
                  type string;
                  description
                    "Maximum trace file size";
                }
    
                leaf files {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "2 .. 1000";
                    }
                  }
                  default "10";
                  description
                    "Maximum number of trace files";
                }
    
                leaf no-stamp {
                  type empty;
                  status deprecated;
                  description
                    "Do not timestamp trace file";
                }
    
                choice world-readable-choice {
                  leaf world-readable {
                    type empty;
                    description
                      "Allow any user to read the log file";
                  }
                  leaf no-world-readable {
                    type empty;
                    description
                      "Don't allow any user to read the log file";
                  }
                }  // choice world-readable-choice
              }  // container file
    
              list flag {
                key "name";
                ordered-by user;
                description "Tracing parameters";
                leaf name {
                  type enumeration {
                    enum "packets" {
                      value 0;
                      description
                        "Trace all MSDP packets";
                    }
                    enum "route" {
                      value 1;
                      description
                        "Trace routing information";
                    }
                    enum "nsr-synchronization" {
                      value 2;
                      description
                        "Trace NSR synchronization events";
                    }
                    enum "source-active" {
                      value 3;
                      description
                        "Trace source-active messages";
                    }
                    enum "source-active-request" {
                      value 4;
                      description
                        "Trace source-active request messages";
                    }
                    enum
                      "source-active-response" {
                      value 5;
                      description
                        "Trace source-active response messages";
                    }
                    enum "keepalive" {
                      value 6;
                      description
                        "Trace keepalive messages";
                    }
                    enum "normal" {
                      value 7;
                      description
                        "Trace normal events";
                    }
                    enum "general" {
                      value 8;
                      description
                        "Trace general events";
                    }
                    enum "state" {
                      value 9;
                      description
                        "Trace state transitions";
                    }
                    enum "policy" {
                      value 10;
                      description
                        "Trace policy processing";
                    }
                    enum "task" {
                      value 11;
                      description
                        "Trace routing protocol task processing";
                    }
                    enum "timer" {
                      value 12;
                      description
                        "Trace routing protocol timer processing";
                    }
                    enum "all" {
                      value 13;
                      description
                        "Trace everything";
                    }
                  }
                }
    
                leaf send {
                  type empty;
                  description
                    "Trace transmitted packets";
                }
    
                leaf receive {
                  type empty;
                  description
                    "Trace received packets";
                }
    
                leaf detail {
                  type empty;
                  description
                    "Trace detailed information";
                }
    
                leaf disable {
                  type empty;
                  description
                    "Disable this trace flag";
                }
              }  // list flag
            }  // container traceoptions
    
            container active-source-limit {
              description
                "Limit the number of active sources accepted";
              uses apply-advanced;
    
              leaf maximum {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "1 .. 1000000";
                  }
                }
                default "25000";
                description
                  "Maximum number of active sources accepted";
              }
    
              leaf threshold {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "1 .. 1000000";
                  }
                }
                default "24000";
                description
                  "RED threshold for active source acceptance";
              }
    
              leaf log-warning {
                junos:must "(".. maximum")";
                junos:must-message "Maximum must be configured to configure log-warning";
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "1 .. 100";
                  }
                }
                default "100";
                description
                  "Percentage of maximum at which to start generating warnings";
              }
    
              leaf log-interval {
                junos:must "(".. maximum")";
                junos:must-message "Maximum must be configured to configure log-interval";
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "6 .. 32767";
                  }
                }
                description
                  "Time between log messages";
              }
            }  // container active-source-limit
    
            leaf keep-alive {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "10 .. 60";
                }
              }
              units "seconds";
              description
                "Time limit for sending out periodic keep alive to peer";
            }
    
            leaf hold-time {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "15 .. 150";
                }
              }
              units "seconds";
              description
                "Max time to terminating a peer for having not received any message from ";
            }
    
            leaf sa-hold-time {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "75 .. 300";
                }
              }
              units "seconds";
              description
                "Max time for holding a sa message before timing out";
            }
    
            leaf default-peer {
              type empty;
              description "Default RPF peer";
            }
    
            leaf authentication-key {
              type string {
                length "1 .. 126";
              }
              description
                "MD5 authentication key";
            }
          }  // list peer
    
          leaf keep-alive {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "10 .. 60";
              }
            }
            units "seconds";
            description
              "Time limit for sending out periodic keep alive to peer";
          }
    
          leaf hold-time {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "15 .. 150";
              }
            }
            units "seconds";
            description
              "Max time to terminating a peer for having not received any message from ";
          }
    
          leaf sa-hold-time {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "75 .. 300";
              }
            }
            units "seconds";
            description
              "Max time for holding a sa message before timing out";
          }
    
          list source {
            key "name";
            ordered-by user;
            description
              "Configure parameters for each source";
            leaf name {
              type jt:ipprefix;
              description
                "Source address or prefix";
            }
    
            uses apply-advanced;
    
            container active-source-limit {
              description
                "Limit the number of active sources accepted";
              uses apply-advanced;
    
              leaf maximum {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "1 .. 1000000";
                  }
                }
                default "25000";
                description
                  "Maximum number of active sources accepted";
              }
    
              leaf threshold {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "1 .. 1000000";
                  }
                }
                default "24000";
                description
                  "RED threshold for active source acceptance";
              }
    
              leaf log-warning {
                junos:must "(".. maximum")";
                junos:must-message "Maximum must be configured to configure log-warning";
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "1 .. 100";
                  }
                }
                default "100";
                description
                  "Percentage of maximum at which to start generating warnings";
              }
    
              leaf log-interval {
                junos:must "(".. maximum")";
                junos:must-message "Maximum must be configured to configure log-interval";
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "6 .. 32767";
                  }
                }
                description
                  "Time between log messages";
              }
            }  // container active-source-limit
          }  // list source
    
          list group {
            key "name";
            ordered-by user;
            description
              "Configure MSDP peer groups";
            leaf name {
              type string;
              description "MSDP peer group name";
            }
    
            uses apply-advanced;
    
            leaf mode {
              type enumeration {
                enum "standard" {
                  value 0;
                  description
                    "Use standard MSDP source-active flooding rules";
                }
                enum "mesh-group" {
                  value 1;
                  description
                    "Group peers are mesh group members";
                }
              }
              default "standard";
              description
                "MSDP group source-active flooding mode";
            }
    
            choice enable-disable {
              leaf disable {
                type empty;
                description "Disable MSDP";
              }
            }  // choice enable-disable
    
            leaf-list export {
              type jt:policy-algebra;
              ordered-by user;
              description "Export policy";
            }
    
            leaf-list import {
              type jt:policy-algebra;
              ordered-by user;
              description "Import policy";
            }
    
            leaf local-address {
              type jt:ipv4addr;
              description "Local address";
            }
    
            container traceoptions {
              description
                "Trace options for MSDP";
              uses apply-advanced;
    
              container file {
                description "Trace file options";
                leaf filename {
                  type string {
                    junos:posix-pattern "![/ %]";
                    junos:pattern-message "Must not contain '/', % or a space";
                    length "1 .. 1024";
                  }
                  description
                    "Name of file in which to write trace information";
                }
    
                leaf replace {
                  type empty;
                  status deprecated;
                  description
                    "Replace trace file rather than appending to it";
                }
    
                leaf size {
                  type string;
                  description
                    "Maximum trace file size";
                }
    
                leaf files {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "2 .. 1000";
                    }
                  }
                  default "10";
                  description
                    "Maximum number of trace files";
                }
    
                leaf no-stamp {
                  type empty;
                  status deprecated;
                  description
                    "Do not timestamp trace file";
                }
    
                choice world-readable-choice {
                  leaf world-readable {
                    type empty;
                    description
                      "Allow any user to read the log file";
                  }
                  leaf no-world-readable {
                    type empty;
                    description
                      "Don't allow any user to read the log file";
                  }
                }  // choice world-readable-choice
              }  // container file
    
              list flag {
                key "name";
                ordered-by user;
                description "Tracing parameters";
                leaf name {
                  type enumeration {
                    enum "packets" {
                      value 0;
                      description
                        "Trace all MSDP packets";
                    }
                    enum "route" {
                      value 1;
                      description
                        "Trace routing information";
                    }
                    enum "nsr-synchronization" {
                      value 2;
                      description
                        "Trace NSR synchronization events";
                    }
                    enum "source-active" {
                      value 3;
                      description
                        "Trace source-active messages";
                    }
                    enum "source-active-request" {
                      value 4;
                      description
                        "Trace source-active request messages";
                    }
                    enum
                      "source-active-response" {
                      value 5;
                      description
                        "Trace source-active response messages";
                    }
                    enum "keepalive" {
                      value 6;
                      description
                        "Trace keepalive messages";
                    }
                    enum "normal" {
                      value 7;
                      description
                        "Trace normal events";
                    }
                    enum "general" {
                      value 8;
                      description
                        "Trace general events";
                    }
                    enum "state" {
                      value 9;
                      description
                        "Trace state transitions";
                    }
                    enum "policy" {
                      value 10;
                      description
                        "Trace policy processing";
                    }
                    enum "task" {
                      value 11;
                      description
                        "Trace routing protocol task processing";
                    }
                    enum "timer" {
                      value 12;
                      description
                        "Trace routing protocol timer processing";
                    }
                    enum "all" {
                      value 13;
                      description
                        "Trace everything";
                    }
                  }
                }
    
                leaf send {
                  type empty;
                  description
                    "Trace transmitted packets";
                }
    
                leaf receive {
                  type empty;
                  description
                    "Trace received packets";
                }
    
                leaf detail {
                  type empty;
                  description
                    "Trace detailed information";
                }
    
                leaf disable {
                  type empty;
                  description
                    "Disable this trace flag";
                }
              }  // list flag
            }  // container traceoptions
    
            list peer {
              key "name";
              ordered-by user;
              description
                "Configure an MSDP peer";
              leaf name {
                type jt:ipv4addr;
                description "Peer address";
              }
    
              uses apply-advanced;
    
              choice enable-disable {
                leaf disable {
                  type empty;
                  description "Disable MSDP";
                }
              }  // choice enable-disable
    
              leaf-list export {
                type jt:policy-algebra;
                ordered-by user;
                description "Export policy";
              }
    
              leaf-list import {
                type jt:policy-algebra;
                ordered-by user;
                description "Import policy";
              }
    
              leaf local-address {
                type jt:ipv4addr;
                description "Local address";
              }
    
              container traceoptions {
                description
                  "Trace options for MSDP";
                uses apply-advanced;
    
                container file {
                  description
                    "Trace file options";
                  leaf filename {
                    type string {
                      junos:posix-pattern "![/ %]";
                      junos:pattern-message "Must not contain '/', % or a space";
                      length "1 .. 1024";
                    }
                    description
                      "Name of file in which to write trace information";
                  }
    
                  leaf replace {
                    type empty;
                    status deprecated;
                    description
                      "Replace trace file rather than appending to it";
                  }
    
                  leaf size {
                    type string;
                    description
                      "Maximum trace file size";
                  }
    
                  leaf files {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint32 {
                        range "2 .. 1000";
                      }
                    }
                    default "10";
                    description
                      "Maximum number of trace files";
                  }
    
                  leaf no-stamp {
                    type empty;
                    status deprecated;
                    description
                      "Do not timestamp trace file";
                  }
    
                  choice world-readable-choice {
                    leaf world-readable {
                      type empty;
                      description
                        "Allow any user to read the log file";
                    }
                    leaf no-world-readable {
                      type empty;
                      description
                        "Don't allow any user to read the log file";
                    }
                  }  // choice world-readable-choice
                }  // container file
    
                list flag {
                  key "name";
                  ordered-by user;
                  description
                    "Tracing parameters";
                  leaf name {
                    type enumeration {
                      enum "packets" {
                        value 0;
                        description
                          "Trace all MSDP packets";
                      }
                      enum "route" {
                        value 1;
                        description
                          "Trace routing information";
                      }
                      enum "nsr-synchronization" {
                        value 2;
                        description
                          "Trace NSR synchronization events";
                      }
                      enum "source-active" {
                        value 3;
                        description
                          "Trace source-active messages";
                      }
                      enum
                        "source-active-request" {
                        value 4;
                        description
                          "Trace source-active request messages";
                      }
                      enum
                        "source-active-response" {
                        value 5;
                        description
                          "Trace source-active response messages";
                      }
                      enum "keepalive" {
                        value 6;
                        description
                          "Trace keepalive messages";
                      }
                      enum "normal" {
                        value 7;
                        description
                          "Trace normal events";
                      }
                      enum "general" {
                        value 8;
                        description
                          "Trace general events";
                      }
                      enum "state" {
                        value 9;
                        description
                          "Trace state transitions";
                      }
                      enum "policy" {
                        value 10;
                        description
                          "Trace policy processing";
                      }
                      enum "task" {
                        value 11;
                        description
                          "Trace routing protocol task processing";
                      }
                      enum "timer" {
                        value 12;
                        description
                          "Trace routing protocol timer processing";
                      }
                      enum "all" {
                        value 13;
                        description
                          "Trace everything";
                      }
                    }
                  }
    
                  leaf send {
                    type empty;
                    description
                      "Trace transmitted packets";
                  }
    
                  leaf receive {
                    type empty;
                    description
                      "Trace received packets";
                  }
    
                  leaf detail {
                    type empty;
                    description
                      "Trace detailed information";
                  }
    
                  leaf disable {
                    type empty;
                    description
                      "Disable this trace flag";
                  }
                }  // list flag
              }  // container traceoptions
    
              container active-source-limit {
                description
                  "Limit the number of active sources accepted";
                uses apply-advanced;
    
                leaf maximum {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "1 .. 1000000";
                    }
                  }
                  default "25000";
                  description
                    "Maximum number of active sources accepted";
                }
    
                leaf threshold {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "1 .. 1000000";
                    }
                  }
                  default "24000";
                  description
                    "RED threshold for active source acceptance";
                }
    
                leaf log-warning {
                  junos:must "(".. maximum")";
                  junos:must-message "Maximum must be configured to configure log-warning";
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "1 .. 100";
                    }
                  }
                  default "100";
                  description
                    "Percentage of maximum at which to start generating warnings";
                }
    
                leaf log-interval {
                  junos:must "(".. maximum")";
                  junos:must-message "Maximum must be configured to configure log-interval";
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "6 .. 32767";
                    }
                  }
                  description
                    "Time between log messages";
                }
              }  // container active-source-limit
    
              leaf keep-alive {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "10 .. 60";
                  }
                }
                units "seconds";
                description
                  "Time limit for sending out periodic keep alive to peer";
              }
    
              leaf hold-time {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "15 .. 150";
                  }
                }
                units "seconds";
                description
                  "Max time to terminating a peer for having not received any message from ";
              }
    
              leaf sa-hold-time {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "75 .. 300";
                  }
                }
                units "seconds";
                description
                  "Max time for holding a sa message before timing out";
              }
    
              leaf default-peer {
                type empty;
                description "Default RPF peer";
              }
    
              leaf authentication-key {
                type string {
                  length "1 .. 126";
                }
                description
                  "MD5 authentication key";
              }
            }  // list peer
          }  // list group
        }  // grouping juniper-protocols-msdp
    
        grouping juniper-protocols-mstp {
          uses apply-advanced;
    
          choice enable-disable {
            leaf disable {
              type empty;
              description "Disable MSTP";
            }
          }  // choice enable-disable
    
          leaf bpdu-destination-mac-address {
            type enumeration {
              enum "provider-bridge-group" {
                value 0;
                description
                  "802.1ad provider bridge group address";
              }
            }
            description
              "Destination MAC address in the spanning tree BPDUs";
          }
    
          leaf configuration-name {
            type string {
              length "1 .. 32";
            }
            description
              "Configuration name (part of MST configuration identifier)";
          }
    
          leaf revision-level {
            type union {
              type uint16;
              type string {
                pattern "<.*>|$.*";
              }
            }
            description
              "Revision level (part of MST configuration identifier)";
          }
    
          leaf max-hops {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint16 {
                range "1 .. 255";
              }
            }
            description "Maximum number of hops";
          }
    
          leaf max-age {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint16 {
                range "6 .. 40";
              }
            }
            units "seconds";
            description
              "Maximum age of received protocol bpdu";
          }
    
          leaf hello-time {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint16 {
                range "1 .. 10";
              }
            }
            units "seconds";
            description
              "Time interval between configuration BPDUs";
          }
    
          leaf forward-delay {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint16 {
                range "4 .. 30";
              }
            }
            units "seconds";
            description
              "Time spent in listening or learning state";
          }
    
          leaf system-identifier {
            type jt:mac-unicast;
            description
              "Sytem identifier to represent this node";
          }
    
          container traceoptions {
            description
              "Tracing options for debugging protocol operation";
            uses stp-trace-options;
          }  // container traceoptions
    
          leaf bridge-priority {
            type string {
              junos:posix-pattern "^(0|4k|4096|8k|8192|12k|12288|16k|16384|20k|20480|24k|24576|28k|28672|32k|32768|36k|36864|40k|40960|44k|45056|48k|49512|52k|53248|56k|57344|60k|61440)$";
              junos:pattern-message "Must be a multiple of 4096";
            }
            description
              "Priority of the bridge (in increments of 4k - 0,4k,8k,..60k)";
          }
    
          leaf backup-bridge-priority {
            type string {
              junos:posix-pattern "^(4k|4096|8k|8192|12k|12288|16k|16384|20k|20480|24k|24576|28k|28672|32k|32768|36k|36864|40k|40960|44k|45056|48k|49512|52k|53248|56k|57344|60k|61440)$";
              junos:pattern-message "Must be a multiple of 4096";
            }
            description
              "Priority of the bridge (in increments of 4k - 4k,8k,..60k)";
          }
    
          leaf bpdu-block-on-edge {
            type empty;
            description
              "Block BPDU on all interfaces configured as edge (BPDU Protect)";
          }
    
          leaf vpls-flush-on-topology-change {
            type empty;
            description
              "Enable VPLS MAC flush on root protected CE interface receving topology change";
          }
    
          leaf priority-hold-time {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint16 {
                range "1 .. 255";
              }
            }
            units "seconds";
            description
              "Hold time before switching to primary priority when core domain becomes up";
          }
    
          list system-id {
            key "name";
            ordered-by user;
            description
              "System ID to IP mapping";
            uses system-id-ip-map;
          }  // list system-id
    
          list interface {
            key "name";
            description "Interface options";
            uses mstp-interface;
          }  // list interface
    
          list msti {
            key "name";
            description "Per-MSTI options";
            leaf name {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type int32 {
                  range "1 .. 4094";
                }
              }
            }
    
            uses apply-advanced;
    
            leaf bridge-priority {
              type string {
                junos:posix-pattern "^(0|4k|4096|8k|8192|12k|12288|16k|16384|20k|20480|24k|24576|28k|28672|32k|32768|36k|36864|40k|40960|44k|45056|48k|49512|52k|53248|56k|57344|60k|61440)$";
                junos:pattern-message "Must be a multiple of 4096";
              }
              description
                "Priority of the bridge (in increments of 4k - 0,4k,8k,..60k)";
            }
    
            leaf backup-bridge-priority {
              type string {
                junos:posix-pattern "^(4k|4096|8k|8192|12k|12288|16k|16384|20k|20480|24k|24576|28k|28672|32k|32768|36k|36864|40k|40960|44k|45056|48k|49512|52k|53248|56k|57344|60k|61440)$";
                junos:pattern-message "Must be a multiple of 4096";
              }
              description
                "Priority of the bridge (in increments of 4k - 4k,8k,..60k)";
            }
    
            leaf-list vlan {
              type string;
              ordered-by user;
              description
                "VLAN ID or VLAN ID range [1..4094]";
            }
    
            list interface {
              key "name";
              description "Interface options";
              uses mstp-interface;
            }  // list interface
          }  // list msti
        }  // grouping juniper-protocols-mstp
    
        grouping juniper-protocols-mvpn {
          description "BGP-MVPN configuration";
          uses apply-advanced;
    
          container traceoptions {
            description
              "Trace options for BGP-MVPN";
            uses apply-advanced;
    
            container file {
              description "Trace file options";
              leaf filename {
                type string {
                  junos:posix-pattern "![/ %]";
                  junos:pattern-message "Must not contain '/', % or a space";
                  length "1 .. 1024";
                }
                description
                  "Name of file in which to write trace information";
              }
    
              leaf replace {
                type empty;
                status deprecated;
                description
                  "Replace trace file rather than appending to it";
              }
    
              leaf size {
                type string;
                description
                  "Maximum trace file size";
              }
    
              leaf files {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "2 .. 1000";
                  }
                }
                default "10";
                description
                  "Maximum number of trace files";
              }
    
              leaf no-stamp {
                type empty;
                status deprecated;
                description
                  "Do not timestamp trace file";
              }
    
              choice world-readable-choice {
                leaf world-readable {
                  type empty;
                  description
                    "Allow any user to read the log file";
                }
                leaf no-world-readable {
                  type empty;
                  description
                    "Don't allow any user to read the log file";
                }
              }  // choice world-readable-choice
            }  // container file
    
            list flag {
              key "name";
              ordered-by user;
              description "Tracing parameters";
              leaf name {
                type enumeration {
                  enum "error" {
                    value 0;
                    description "Trace errors";
                  }
                  enum "nlri" {
                    value 1;
                    description
                      "Trace MVPN advertisements";
                  }
                  enum "topology" {
                    value 2;
                    description
                      "Trace MVPN topology changes";
                  }
                  enum "tunnel" {
                    value 3;
                    description
                      "Trace provider tunnel events";
                  }
                  enum "umh" {
                    value 4;
                    description
                      "Trace Upstream Multicast Hop (UMH) events";
                  }
                  enum "intra-as-ad" {
                    value 5;
                    description
                      "Trace MVPN intra-AS auto discovery routes";
                  }
                  enum "inter-as-ad" {
                    value 6;
                    description
                      "Trace MVPN inter-AS auto discovery routes";
                  }
                  enum "spmsi-ad" {
                    value 7;
                    description
                      "Trace MVPN SPMSI auto discovery routes";
                  }
                  enum "leaf-ad" {
                    value 8;
                    description
                      "Trace MVPN leaf auto discovery routes";
                  }
                  enum "source-active" {
                    value 9;
                    description
                      "Trace MVPN source active routes";
                  }
                  enum "cmcast-join" {
                    value 10;
                    description
                      "Trace MVPN c-multicast join routes";
                  }
                  enum "mdt-safi-ad" {
                    value 11;
                    description
                      "Trace MVPN MDT SAFI auto discovery routes";
                  }
                  enum "mvpn-limit" {
                    value 12;
                    description
                      "Trace MVPN spmsi and cmcast limit events";
                  }
                  enum "nsr-synchronization" {
                    value 13;
                    description
                      "Trace NSR synchronization events";
                  }
                  enum "route" {
                    value 14;
                    description
                      "Trace routing information";
                  }
                  enum "normal" {
                    value 15;
                    description
                      "Trace normal events";
                  }
                  enum "general" {
                    value 16;
                    description
                      "Trace general events";
                  }
                  enum "state" {
                    value 17;
                    description
                      "Trace state transitions";
                  }
                  enum "policy" {
                    value 18;
                    description
                      "Trace policy processing";
                  }
                  enum "task" {
                    value 19;
                    description
                      "Trace routing protocol task processing";
                  }
                  enum "timer" {
                    value 20;
                    description
                      "Trace routing protocol timer processing";
                  }
                  enum "all" {
                    value 21;
                    description
                      "Trace everything";
                  }
                }
              }
    
              leaf send {
                type empty;
                description
                  "Trace transmitted packets";
              }
    
              leaf receive {
                type empty;
                description
                  "Trace received packets";
              }
    
              leaf detail {
                type empty;
                description
                  "Trace detailed information";
              }
    
              leaf disable {
                type empty;
                description
                  "Disable this trace flag";
              }
            }  // list flag
          }  // container traceoptions
    
          container autodiscovery-only {
            junos:must "(!(".. route-target"))";
            junos:must-message "MVPN autodiscovery-only mode cannot be used with route-target";
            junos:must "(!(".. sender-site"))";
            junos:must-message "MVPN autodiscovery-only mode cannot be used with sender-site";
            junos:must "(!(".. receiver-site"))";
            junos:must-message "MVPN autodiscovery-only mode cannot be used with receiver-site";
            junos:must "(".. .. .. protocols pim mvpn")";
            junos:must-message "MVPN autodiscovery-only mode requires protocols pim mvpn configuration for the instance.";
            junos:must "(!(".. .. .. provider-tunnel family inet pim-asm"))";
            junos:must-message "MVPN autodiscovery-only mode requires a PIM-SSM provider-tunnel root address.";
            junos:must "((".. .. .. provider-tunnel pim-ssm" || ".. .. .. provider-tunnel family inet pim-ssm"))";
            junos:must-message "MVPN autodiscovery-only mode requires a PIM-SSM provider-tunnel root address.";
            status deprecated;
            description
              "Use MVPN exclusively for PE router autodiscovery";
            uses apply-advanced;
    
            container intra-as {
              description
                "Intra-AS autodiscovery options";
              uses apply-advanced;
    
              leaf inclusive {
                type empty;
                description
                  "Inclusive provider tunnel autodiscovery";
              }
            }  // container intra-as
          }  // container autodiscovery-only
    
          container family {
            description
              "BGP-MVPN address family";
            uses apply-advanced;
    
            container any {
              presence "enable any";
              description
                "BGP-MVPN properties for all families";
              uses apply-advanced;
    
              leaf disable {
                type empty;
                description
                  "Disable all families";
              }
            }  // container any
    
            container inet {
              description
                "IPv4 BGP-MVPN properties";
              uses apply-advanced;
    
              container autodiscovery-only {
                junos:must "(!(".. .. .. route-target"))";
                junos:must-message "MVPN autodiscovery-only mode cannot be used with route-target";
                junos:must "(!(".. .. .. sender-site"))";
                junos:must-message "MVPN autodiscovery-only mode cannot be used with sender-site";
                junos:must "(!(".. .. .. receiver-site"))";
                junos:must-message "MVPN autodiscovery-only mode cannot be used with receiver-site";
                junos:must "(".. .. .. .. .. protocols pim mvpn")";
                junos:must-message "MVPN autodiscovery-only mode requires protocols pim mvpn configuration for the instance.";
                junos:must "(!(".. .. .. .. .. provider-tunnel family inet pim-asm"))";
                junos:must-message "MVPN autodiscovery-only mode requires a PIM-SSM provider-tunnel root address.";
                junos:must "((".. .. .. .. .. provider-tunnel pim-ssm" || ".. .. .. .. .. provider-tunnel family inet pim-ssm"))";
                junos:must-message "MVPN autodiscovery-only mode requires a PIM-SSM provider-tunnel root address.";
                description
                  "Use MVPN exclusively for PE router autodiscovery";
                uses apply-advanced;
    
                container intra-as {
                  description
                    "Intra-AS autodiscovery options";
                  uses apply-advanced;
    
                  leaf inclusive {
                    type empty;
                    description
                      "Inclusive provider tunnel autodiscovery";
                  }
                }  // container intra-as
              }  // container autodiscovery-only
    
              leaf disable {
                type empty;
                description
                  "Disable family IPv4";
              }
            }  // container inet
    
            container inet6 {
              presence "enable inet6";
              description
                "IPv6 BGP-MVPN properties";
              uses apply-advanced;
    
              container autodiscovery-only {
                junos:must "(!(".. .. .. route-target"))";
                junos:must-message "MVPN autodiscovery-only mode cannot be used with route-target";
                junos:must "(!(".. .. .. sender-site"))";
                junos:must-message "MVPN autodiscovery-only mode cannot be used with sender-site";
                junos:must "(!(".. .. .. receiver-site"))";
                junos:must-message "MVPN autodiscovery-only mode cannot be used with receiver-site";
                junos:must "(".. .. .. .. .. protocols pim mvpn")";
                junos:must-message "MVPN autodiscovery-only mode requires protocols pim mvpn configuration for the instance.";
                junos:must "(!(".. .. .. .. .. provider-tunnel family inet pim-asm"))";
                junos:must-message "MVPN autodiscovery-only mode requires a PIM-SSM provider-tunnel root address.";
                junos:must "((".. .. .. .. .. provider-tunnel pim-ssm" || ".. .. .. .. .. provider-tunnel family inet pim-ssm"))";
                junos:must-message "MVPN autodiscovery-only mode requires a PIM-SSM provider-tunnel root address.";
                description
                  "Use MVPN exclusively for PE router autodiscovery";
                uses apply-advanced;
    
                container intra-as {
                  description
                    "Intra-AS autodiscovery options";
                  uses apply-advanced;
    
                  leaf inclusive {
                    type empty;
                    description
                      "Inclusive provider tunnel autodiscovery";
                  }
                }  // container intra-as
              }  // container autodiscovery-only
    
              leaf disable {
                type empty;
                description
                  "Disable family IPv6";
              }
            }  // container inet6
          }  // container family
    
          choice sender-receiver-site-choice {
            leaf receiver-site {
              junos:must "(!(".. .. .. provider-tunnel"))";
              junos:must-message "MVPN instance with only receiver sites cannot be the root of a provider-tunnel";
              type empty;
              description
                "MVPN instance has sites only with multicast receivers";
            }
            leaf sender-site {
              junos:must "(".. .. .. provider-tunnel")";
              junos:must-message "MVPN instance with sources must be the root of a provider-tunnel";
              type empty;
              description
                "MVPN instance has sites only with multicast sources";
            }
          }  // choice sender-receiver-site-choice
    
          leaf unicast-umh-election {
            junos:must "(!(".. mvpn-join-load-balance"))";
            junos:must-message "UMH election based on unicast route cannot be configured with mvpn-join-load-balance";
            junos:must "(!(".. .. .. .. .. protocols bgp path-selection cisco-non-deterministic"))";
            junos:must-message "Upstream Multicast Hop election cannot be used with 'protocols bgp path-selection cisco-non-deterministic'";
            type empty;
            description
              "Upstream Multicast Hop election based on unicast route preference";
          }
    
          container static-umh {
            description
              "Upstream Multicast Hop election based on static configuration";
            uses apply-advanced;
    
            leaf primary {
              type jt:ipv4addr;
              description
                "Primary Upstream Multicast Hop";
            }
    
            leaf backup {
              type jt:ipv4addr;
              description
                "Secondary Upstream Multicast Hop";
            }
    
            choice source-tree_choice {
              leaf source-tree {
                type empty;
                description
                  "Mandatory attribute - static-umh applies only to MVPN source-tree c-multicast joins";
              }
            }  // choice source-tree_choice
          }  // container static-umh
    
          leaf cmcast-joins-limit-inet {
            junos:must "(".. mvpn-mode rpt-spt")";
            junos:must-message "Cmcast limit can only be configured for MVPN rpt-spt mode";
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "0 .. 15000";
              }
            }
            description
              "Maximum number of cmcast entries for v4";
          }
    
          leaf cmcast-joins-limit-inet6 {
            junos:must "(".. mvpn-mode rpt-spt")";
            junos:must-message "Cmcastv6 limit can only be configured for MVPN rpt-spt mode";
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "0 .. 15000";
              }
            }
            description
              "Maximum number of cmcast entries for v6";
          }
    
          container mvpn-mode {
            description "MVPN mode of operation";
            uses apply-advanced;
    
            choice mode {
              container rpt-spt {
                presence "enable rpt-spt";
                description
                  "MVPN works in multicast RPT and SPT mode";
                uses apply-advanced;
    
                leaf spt-switch-timer {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "0 .. 60";
                    }
                  }
                  units "seconds";
                  description
                    "Timeout before a PE router switches between RPT and SPT";
                }
              }  // container rpt-spt
              container spt-only {
                presence "enable spt-only";
                description
                  "MVPN works in multicast SPT only mode (default mode)";
                uses apply-advanced;
    
                container source-active-advertisement {
                  description
                    "Attributes associated with advertising Source-Active A-D routes";
                  uses apply-advanced;
    
                  leaf dampen {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint32 {
                        range "1 .. 30";
                      }
                    }
                    units "minutes";
                    description
                      "Time to wait before re-advertising source-active route";
                  }
    
                  leaf min-rate {
                    type string;
                    units "bits per second";
                    description
                      "Minimum traffic rate required to advertise Source-Active route";
                  }
                }  // container source-active-advertisement
    
                leaf convert-sa-to-msdp {
                  type empty;
                  description
                    "Turn on MVPN SA route to MSDP SA conversion";
                }
              }  // container spt-only
            }  // choice mode
          }  // container mvpn-mode
    
          container route-target {
            description
              "Configure route-targets for MVPN routes";
            uses apply-advanced;
    
            container import-target {
              description
                "Target communities used when importing routes";
              uses apply-advanced;
    
              container unicast {
                presence "enable unicast";
                description
                  "Use the same target community as configured for unicast";
                choice receiver-sender-target-choice {
                  leaf receiver {
                    junos:must "(!(".. .. .. .. receiver-site"))";
                    junos:must-message "MVPN instance with only receivers must not import routes from other receiver only sites";
                    type empty;
                    description
                      "Target community used when importing receiver site routes";
                  }
                  leaf sender {
                    junos:must "(!(".. .. .. .. sender-site"))";
                    junos:must-message "MVPN instance with only sources must not import routes from other sender only sites";
                    type empty;
                    description
                      "Target community used when importing sender site routes";
                  }
                }  // choice receiver-sender-target-choice
              }  // container unicast
    
              container target {
                presence "enable target";
                description "Target community";
                leaf target-value {
                  type string {
                    junos:posix-pattern "^[a-z]+:[0-9.]+L?:[0-9]+$";
                    junos:pattern-message "Use format 'target:x:y' where 'x' is an AS number followed by an optional 'L' (To indicate 4 byte AS), or an IP address and 'y' is a number. e.g. target:123456L:100";
                  }
                }
    
                choice receiver-sender-target-choice {
                  leaf receiver {
                    junos:must "(!(".. .. .. .. receiver-site"))";
                    junos:must-message "MVPN instance with only receivers must not import routes from other receiver only sites";
                    type empty;
                    description
                      "Target community used when importing receiver site routes";
                  }
                  leaf sender {
                    junos:must "(!(".. .. .. .. sender-site"))";
                    junos:must-message "MVPN instance with only sources must not import routes from other sender only sites";
                    type empty;
                    description
                      "Target community used when importing sender site routes";
                  }
                }  // choice receiver-sender-target-choice
              }  // container target
            }  // container import-target
    
            container export-target {
              description
                "Target communities used when exporting routes";
              uses apply-advanced;
    
              leaf unicast {
                type empty;
                description
                  "Use the same target community as configured for unicast";
              }
    
              leaf target {
                type string {
                  junos:posix-pattern "^[a-z]+:[0-9.]+L?:[0-9]+$";
                  junos:pattern-message "Use format 'target:x:y' where 'x' is an AS number followed by an optional 'L' (To indicate 4 byte AS), or an IP address and 'y' is a number. e.g. target:123456L:100";
                }
                description "Target community";
              }
            }  // container export-target
          }  // container route-target
    
          container mvpn-join-load-balance {
            junos:must "(!(".. unicast-umh-election"))";
            junos:must-message "MVPN join load balancing cannot be configured with unicast-umh-election";
            description
              "MVPN Join Load Balancing Algorithm";
            uses apply-advanced;
    
            choice algorithm {
              container bytewise-xor-hash {
                presence
                  "enable bytewise-xor-hash";
                description
                  "Upstream selection using bytewise XOR hash";
              }  // container bytewise-xor-hash
            }  // choice algorithm
          }  // container mvpn-join-load-balance
    
          container hot-root-standby {
            junos:must "(!(".. .. .. instance-type mpls-internet-multicast"))";
            junos:must-message "MVPN live-live - hot-root-standby cannot be configured in mpls-internet-multicast vrf";
            junos:must "(".. sender-based-rpf")";
            junos:must-message "MVPN live-live - hot-root-standby configuration needs sender-based-rpf configuration";
            description
              "MVPN live-live - hot root standby";
            uses apply-advanced;
    
            choice tree {
              container source-tree {
                presence "enable source-tree";
                description
                  "MVPN live-live - hot root standby for source tree";
              }  // container source-tree
            }  // choice tree
    
            container min-rate {
              junos:must "(".. .. hot-root-standby source-tree")";
              junos:must-message "MVPN live-live - min-rate can be configured only if hot-root-standby source-tree is configured";
              description
                "Minimum traffic rate for the provider tunnel below which switchover is initiated (in bps)";
              uses apply-advanced;
    
              leaf rate {
                type string;
                units "bits per second";
                description
                  "Minium traffic rate for the provider tunnel below which switchover is initiated (in bps)";
              }
    
              leaf revert-delay {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "0 .. 20";
                  }
                }
                units "seconds";
                description
                  "Time to delay updating of multicast routes to allow for multicast convergence";
              }
            }  // container min-rate
          }  // container hot-root-standby
    
          container inter-region-template {
            description
              "MVPN inter-region tunnel mapping template";
            uses apply-advanced;
    
            list template {
              key "name";
              ordered-by user;
              description
                "Define a inter-region template";
              leaf name {
                type string;
                description "MVPN Template Name";
              }
    
              uses apply-advanced;
    
              list region {
                key "name";
                ordered-by user;
                description
                  "BGP peer group names used as region";
                leaf name {
                  junos:must "("protocols bgp group $$")";
                  junos:must-message "BGP group must be present";
                  type string;
                  description "Region name";
                }
    
                uses apply-advanced;
    
                choice tunnel-type {
                  container rsvp-te {
                    junos:must "("protocols rsvp")";
                    junos:must-message "RSVP must be configured in the master instance";
                    description
                      "RSVP-TE point-to-multipoint LSP for flooding";
                    uses apply-advanced;
    
                    choice static-or-dynamic {
                      leaf static-lsp {
                        type string {
                          junos:posix-pattern "^.{1,32}$";
                          junos:pattern-message "Must be a string of 32 characters or less";
                        }
                        description
                          "Name of point-to-multipoint LSP";
                      }
                      container label-switched-path-template {
                        description
                          "Template for dynamic point-to-multipoint LSP parameters";
                        uses apply-advanced;
    
                        choice dynamic-template {
                          leaf template-name {
                            junos:must "(("protocols mpls label-switched-path $$" && ("protocols mpls label-switched-path $$ template" && "protocols mpls label-switched-path $$ p2mp")))";
                            junos:must-message "Referenced point-to-multipoint LSP template does not exist";
                            type string {
                              junos:posix-pattern "^.{1,32}$";
                              junos:pattern-message "Must be a string of 32 characters or less";
                            }
                            description
                              "Name of point-to-multipoint LSP template";
                          }
                          leaf default-template {
                            type empty;
                            description
                              "Use default parameters";
                          }
                        }  // choice dynamic-template
                      }  // container label-switched-path-template
                    }  // choice static-or-dynamic
                  }  // container rsvp-te
                  container ldp-p2mp {
                    junos:must "("protocols ldp p2mp")";
                    junos:must-message "LDP P2MP must be configured in the master instance";
                    presence "enable ldp-p2mp";
                    description
                      "LDP point-to-multipoint LSP for flooding";
                  }  // container ldp-p2mp
                  container ingress-replication {
                    description
                      "Ingress replication tunnel";
                    uses apply-advanced;
    
                    leaf create-new-ucast-tunnel {
                      junos:must "(".. label-switched-path label-switched-path-template")";
                      junos:must-message "label-switched-path-template must be defined";
                      type empty;
                      description
                        "Create new unicast tunnel for ingress replication";
                    }
    
                    container label-switched-path {
                      presence
                        "enable label-switched-path";
                      description
                        "Point-to-point LSP unicast tunnel";
                      uses apply-advanced;
    
                      container label-switched-path-template {
                        junos:must "(".. .. create-new-ucast-tunnel")";
                        junos:must-message "Templates must be specified when and only when create-new-ucast-tunnel is defined";
                        description
                          "Template for dynamic point-to-point LSP parameters";
                        uses apply-advanced;
    
                        choice dynamic-template {
                          leaf template-name {
                            junos:must "(("protocols mpls label-switched-path $$" && ("protocols mpls label-switched-path $$ template" && !("protocols mpls label-switched-path $$ p2mp"))))";
                            junos:must-message "Referenced point-to-point LSP template does not exist";
                            type string {
                              junos:posix-pattern "^.{1,32}$";
                              junos:pattern-message "Must be a string of 32 characters or less";
                            }
                            description
                              "Name of point-to-point LSP template";
                          }
                          leaf default-template {
                            type empty;
                            description
                              "Use default parameters";
                          }
                        }  // choice dynamic-template
                      }  // container label-switched-path-template
                    }  // container label-switched-path
                  }  // container ingress-replication
                  leaf incoming {
                    type empty;
                    description
                      "Same as incoming provider tunnel";
                  }
                }  // choice tunnel-type
              }  // list region
    
              container all-regions {
                description
                  "Used for all regions not specified";
                uses apply-advanced;
    
                choice tunnel-type {
                  container rsvp-te {
                    junos:must "("protocols rsvp")";
                    junos:must-message "RSVP must be configured in the master instance";
                    description
                      "RSVP-TE point-to-multipoint LSP for flooding";
                    uses apply-advanced;
    
                    choice static-or-dynamic {
                      leaf static-lsp {
                        type string {
                          junos:posix-pattern "^.{1,32}$";
                          junos:pattern-message "Must be a string of 32 characters or less";
                        }
                        description
                          "Name of point-to-multipoint LSP";
                      }
                      container label-switched-path-template {
                        description
                          "Template for dynamic point-to-multipoint LSP parameters";
                        uses apply-advanced;
    
                        choice dynamic-template {
                          leaf template-name {
                            junos:must "(("protocols mpls label-switched-path $$" && ("protocols mpls label-switched-path $$ template" && "protocols mpls label-switched-path $$ p2mp")))";
                            junos:must-message "Referenced point-to-multipoint LSP template does not exist";
                            type string {
                              junos:posix-pattern "^.{1,32}$";
                              junos:pattern-message "Must be a string of 32 characters or less";
                            }
                            description
                              "Name of point-to-multipoint LSP template";
                          }
                          leaf default-template {
                            type empty;
                            description
                              "Use default parameters";
                          }
                        }  // choice dynamic-template
                      }  // container label-switched-path-template
                    }  // choice static-or-dynamic
                  }  // container rsvp-te
                  container ldp-p2mp {
                    junos:must "("protocols ldp p2mp")";
                    junos:must-message "LDP P2MP must be configured in the master instance";
                    presence "enable ldp-p2mp";
                    description
                      "LDP point-to-multipoint LSP for flooding";
                  }  // container ldp-p2mp
                  container ingress-replication {
                    description
                      "Ingress replication tunnel";
                    uses apply-advanced;
    
                    leaf create-new-ucast-tunnel {
                      junos:must "(".. label-switched-path label-switched-path-template")";
                      junos:must-message "label-switched-path-template must be defined";
                      type empty;
                      description
                        "Create new unicast tunnel for ingress replication";
                    }
    
                    container label-switched-path {
                      presence
                        "enable label-switched-path";
                      description
                        "Point-to-point LSP unicast tunnel";
                      uses apply-advanced;
    
                      container label-switched-path-template {
                        junos:must "(".. .. create-new-ucast-tunnel")";
                        junos:must-message "Templates must be specified when and only when create-new-ucast-tunnel is defined";
                        description
                          "Template for dynamic point-to-point LSP parameters";
                        uses apply-advanced;
    
                        choice dynamic-template {
                          leaf template-name {
                            junos:must "(("protocols mpls label-switched-path $$" && ("protocols mpls label-switched-path $$ template" && !("protocols mpls label-switched-path $$ p2mp"))))";
                            junos:must-message "Referenced point-to-point LSP template does not exist";
                            type string {
                              junos:posix-pattern "^.{1,32}$";
                              junos:pattern-message "Must be a string of 32 characters or less";
                            }
                            description
                              "Name of point-to-point LSP template";
                          }
                          leaf default-template {
                            type empty;
                            description
                              "Use default parameters";
                          }
                        }  // choice dynamic-template
                      }  // container label-switched-path-template
                    }  // container label-switched-path
                  }  // container ingress-replication
                  leaf incoming {
                    type empty;
                    description
                      "Same as incoming provider tunnel";
                  }
                }  // choice tunnel-type
              }  // container all-regions
            }  // list template
          }  // container inter-region-template
    
          leaf source-redundancy {
            type empty;
            description
              "Assume all the sources for a particular group is sending same data";
          }
    
          container umh-selection-additional-input {
            description
              "Additional parameters to consider during UMH";
            uses apply-advanced;
    
            leaf source-active-preference {
              junos:must "(!(".. .. mvpn-mode rpt-spt"))";
              junos:must-message "Source active preference can be configured only for spt only mode";
              type empty;
              description
                "Use the preference set in the source active route";
            }
    
            leaf tunnel-status {
              type empty;
              description
                "Use the RSVP tunnel status";
            }
          }  // container umh-selection-additional-input
        }  // grouping juniper-protocols-mvpn
    
        grouping juniper-protocols-mvrp {
          description "MVRP Configuration";
          uses apply-advanced;
    
          container traceoptions {
            description
              "Tracing options for MVRP";
            uses mrp-trace-options;
          }  // container traceoptions
    
          leaf join-timer {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint16 {
                range "100 .. 500";
              }
            }
            units "milliseconds";
            default "200";
            description "Join timer interval";
          }
    
          leaf leave-timer {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint16 {
                range "300 .. 1000";
              }
            }
            units "milliseconds";
            default "800";
            description "Leave timer interval";
          }
    
          leaf leaveall-timer {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint16 {
                range "10 .. 60";
              }
            }
            units "seconds";
            default "10";
            description
              "Leaveall timer interval";
          }
    
          leaf no-dynamic-vlan {
            type empty;
            description
              "Disable dynamic VLAN creation";
          }
    
          leaf no-attribute-length-in-pdu {
            type empty;
            description
              "No attribute length while sending pdu ";
          }
    
          leaf bpdu-destination-mac-address {
            type enumeration {
              enum "provider-bridge-group" {
                value 0;
                description
                  "802.1ad provider bridge group address";
              }
            }
            description
              "Destination MAC address in the MVRP BPDUs";
          }
    
          list interface {
            key "name";
            ordered-by user;
            description
              "Configure interface options";
            leaf name {
              junos:must "((((".. .. .. rstp interface $$" || ".. .. .. rstp interface all") && !(".. .. .. rstp interface $$ disable")) || ((".. .. .. mstp interface $$" || ".. .. .. mstp interface all") && !(".. .. .. mstp interface $$ disable"))))";
              junos:must-message "rstp/mstp is not enabled on the interface, mvrp is not allowed";
              junos:must "((!("interfaces $$ flexible-vlan-tagging") && (!("interfaces $$ vlan-tagging") && !("interfaces $$ stacked-vlan-tagging"))))";
              junos:must-message "mvrp is not supported on interfaces if flexible-vlan-tagging/vlan-tagging/stacked-vlan-tagging enabled";
              junos:must "(("interfaces $$ unit $$={0} family ethernet-switching interface-mode trunk" || "interfaces $$ unit $$={0} family bridge interface-mode trunk"))";
              junos:must-message "mvrp can be enabled only on interfaces with interface-mode trunk";
              type union {
                type jt:interface-device;
                type string {
                  pattern "<.*>|$.*";
                }
              }
              description "Interface name";
            }
    
            uses apply-advanced;
    
            leaf join-timer {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint16 {
                  range "100 .. 500";
                }
              }
              units "milliseconds";
              description "Join timer interval";
            }
    
            leaf leave-timer {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint16 {
                  range "300 .. 1000";
                }
              }
              units "milliseconds";
              description "Leave timer interval";
            }
    
            leaf leaveall-timer {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint16 {
                  range "10 .. 60";
                }
              }
              units "seconds";
              description
                "Leaveall timer interval";
            }
    
            leaf point-to-point {
              type empty;
              description
                "Port is point to point";
            }
    
            leaf registration {
              type enumeration {
                enum "normal" {
                  value 0;
                  description
                    "Normal registration mode";
                }
                enum "restricted" {
                  value 1;
                  description
                    "Restricted registration mode";
                }
                enum "forbidden" {
                  value 2;
                  description
                    "Forbidden registration mode";
                }
              }
              default "normal";
              description "Registration mode";
            }
          }  // list interface
        }  // grouping juniper-protocols-mvrp
    
        grouping juniper-protocols-openflow {
          uses apply-advanced;
    
          list switch {
            key "name";
            max-elements 1;
            ordered-by user;
            description "OpenFlow switch";
            leaf name {
              type string {
                junos:posix-pattern "^[[:alnum:]._-]+$";
                junos:pattern-message "Must be a string of alphanumericals, dashes or underscores";
                length "1 .. 64";
              }
              description "Switch name";
            }
    
            uses apply-advanced;
    
            container default-action {
              description
                "Action for packets that not have a matching flow entry";
              uses apply-advanced;
    
              choice drop-pktin {
                leaf drop {
                  type empty;
                  description
                    "Drop all packets that do not have a matching flow entry";
                }
                leaf packet-in {
                  type empty;
                  description
                    "Send packets to client if no matching flow entry";
                }
              }  // choice drop-pktin
            }  // container default-action
    
            list interfaces {
              key "name";
              ordered-by user;
              description
                "Interfaces configured for use with Openflow";
              leaf name {
                junos:must "("interfaces $$-IFL")";
                junos:must-message "Interface does not exist";
                type union {
                  type jt:interface-name;
                  type string {
                    pattern "<.*>|$.*";
                  }
                }
                description "Interface name";
              }
    
              leaf port-id {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type int32 {
                    range "1 .. 32640";
                  }
                }
                description "Openflow port ID";
              }
            }  // list interfaces
    
            leaf purge-flow-timer {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "0 .. 300";
                }
              }
              units "seconds";
              description
                "Purge timer value for invalid flows";
            }
    
            container controller {
              description
                "OpenFlow controller's IP address, port and protocol";
              uses apply-advanced;
    
              container protocol {
                description
                  "Protocol type for controller connection";
                uses apply-advanced;
    
                container tcp {
                  description
                    "Set protocol type to 'TCP' (default)";
                  uses apply-advanced;
    
                  leaf port {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type int32 {
                        range "1024 .. 65535";
                      }
                    }
                    description
                      "Controller's port number (default 6633)";
                  }
                }  // container tcp
              }  // container protocol
    
              leaf role {
                type enumeration {
                  enum "equal" {
                    value 0;
                    description
                      "Set role to 'equal'";
                  }
                }
                description "Controller role";
              }
    
              leaf address {
                type jt:ipaddr;
                description
                  "Controller's IPv4 address";
              }
    
              leaf id {
                type union {
                  type uint32;
                  type string {
                    pattern "<.*>|$.*";
                  }
                }
                description "Controller id";
              }
            }  // container controller
          }  // list switch
    
          container traceoptions {
            description
              "OpenFlow switch daemon trace options";
            uses apply-advanced;
    
            leaf no-remote-trace {
              junos:must "("system tracing")";
              junos:must-message "'no-remote-trace' is valid only when [system tracing] is configured";
              type empty;
              description
                "Disable remote tracing";
            }
    
            container file {
              description
                "Trace file information";
              leaf filename {
                type string {
                  junos:posix-pattern "![/ %]";
                  junos:pattern-message "Must not contain '/', % or a space";
                  length "1 .. 1024";
                }
                description
                  "Name of file in which to write trace information";
              }
    
              leaf size {
                type string;
                description
                  "Maximum trace file size";
              }
    
              leaf files {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "2 .. 1000";
                  }
                }
                default "3";
                description
                  "Maximum number of trace files";
              }
    
              choice world-readable-choice {
                leaf world-readable {
                  type empty;
                  description
                    "Allow any user to read the log file";
                }
                leaf no-world-readable {
                  type empty;
                  description
                    "Don't allow any user to read the log file";
                }
              }  // choice world-readable-choice
    
              leaf match {
                type jt:regular-expression;
                description
                  "Regular expression for lines to be logged";
              }
            }  // container file
    
            list flag {
              key "name";
              ordered-by user;
              description
                "Tracing flag parameters";
              leaf name {
                type enumeration {
                  enum "switch" {
                    value 0;
                    description
                      "Trace openflow switch events";
                  }
                  enum "configuration" {
                    value 1;
                    description
                      "Trace openflow configuration events";
                  }
                  enum "flow" {
                    value 2;
                    description
                      "Trace openflow flow events";
                  }
                  enum "filter" {
                    value 3;
                    description
                      "Trace openflow filter events";
                  }
                  enum "function" {
                    value 4;
                    description
                      "Trace openflow function entry/exit events";
                  }
                  enum "packet-io" {
                    value 5;
                    description
                      "Trace openflow packet in/out events";
                  }
                  enum "statistics" {
                    value 6;
                    description
                      "Trace openflow statistics events";
                  }
                  enum "interface" {
                    value 7;
                    description
                      "Trace openflow interface events";
                  }
                  enum "packets" {
                    value 8;
                    description
                      "Trace openflow packets";
                  }
                  enum "barrier" {
                    value 9;
                    description
                      "Trace openflow barrier events";
                  }
                  enum "nh" {
                    value 10;
                    description
                      "Trace openflow next-hop events";
                  }
                  enum "group" {
                    value 11;
                    description
                      "Trace openflow group events";
                  }
                  enum "all" {
                    value 12;
                    description
                      "Trace everything";
                  }
                }
              }
            }  // list flag
          }  // container traceoptions
        }  // grouping juniper-protocols-openflow
    
        grouping juniper-protocols-ospf {
          uses apply-advanced;
    
          list topology {
            key "name";
            ordered-by user;
            description "Topology parameters";
            leaf name {
              type string;
              description "Topology name";
            }
    
            uses apply-advanced;
    
            leaf disable {
              type empty;
              description
                "Disable this topology";
            }
    
            leaf topology-id {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint8 {
                  range "32 .. 127";
                }
              }
              description "Topology identifier";
            }
    
            leaf overload {
              type empty;
              description
                "Set the overload mode (repel transit traffic)";
            }
    
            leaf rib-group {
              junos:must "("routing-options rib-groups $$")";
              junos:must-message "Referenced rib-group must be defined";
              type string;
              description
                "Routing table group for importing routes";
            }
    
            container spf-options {
              description
                "Configure options for SPF";
              uses apply-advanced;
    
              leaf delay {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "50 .. 8000";
                  }
                }
                units "milliseconds";
                description
                  "Time to wait before running an SPF";
              }
    
              leaf holddown {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "2000 .. 20000";
                  }
                }
                units "milliseconds";
                description
                  "Time to hold down before running an SPF";
              }
    
              leaf rapid-runs {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "1 .. 10";
                  }
                }
                description
                  "Number of maximum rapid SPF runs before holddown";
              }
    
              leaf no-ignore-our-externals {
                type empty;
                description
                  "Do not ignore self-generated external and NSSA LSAs";
              }
            }  // container spf-options
    
            container backup-spf-options {
              description
                "Configure options for backup SPF";
              uses apply-advanced;
    
              container remote-backup-calculation {
                junos:must "(!("protocols ospf backup-spf-options use-post-convergence-lfa"))";
                junos:must-message "Not allowed with 'protocols ospf backup-spf-options use-post-convergence-lfa'";
                presence
                  "enable remote-backup-calculation";
                description
                  "Calculate Remote LFA backup nexthops";
                uses apply-advanced;
    
                container pq-nodes-nearest-to-source {
                  description
                    "PQ nodes selection based upon nearest to source";
                  uses apply-advanced;
    
                  leaf percent {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint32 {
                        range "10 .. 100";
                      }
                    }
                    description
                      "Selection percentage for nearest to source";
                  }
                }  // container pq-nodes-nearest-to-source
              }  // container remote-backup-calculation
    
              container use-post-convergence-lfa {
                junos:must "("protocols ospf source-packet-routing")";
                junos:must-message "Configuration of 'protocols ospf source-packet-routing' is required";
                presence
                  "enable use-post-convergence-lfa";
                description
                  "Calculate post-convergence backup paths";
                uses apply-advanced;
    
                leaf maximum-labels {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "2 .. 8";
                    }
                  }
                  description
                    "Maximum number of labels installed for post-convergence paths";
                }
    
                leaf maximum-backup-paths {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "1 .. 8";
                    }
                  }
                  description
                    "Maximum number of equal-cost post-convergence paths installed";
                }
              }  // container use-post-convergence-lfa
    
              leaf use-source-packet-routing {
                junos:must "(".. .. source-packet-routing")";
                junos:must-message "Configuration of 'protocols ospf source-packet-routing' is required";
                junos:must "(!(".. remote-backup-calculation"))";
                junos:must-message "Not allowed with 'protocols ospf backup-spf-options remote-backup-calculation'";
                type empty;
                description
                  "Use spring backup paths for inet.0 routes";
              }
    
              leaf disable {
                junos:must "(!("protocols ospf backup-spf-options use-post-convergence-lfa"))";
                junos:must-message "Not allowed with 'protocols ospf backup-spf-options use-post-convergence-lfa'";
                type empty;
                description
                  "Do not run backup SPF";
              }
    
              leaf no-install {
                type empty;
                description
                  "Do not install backup nexthops into the RIB";
              }
    
              leaf downstream-paths-only {
                junos:must "(!("protocols ospf backup-spf-options use-post-convergence-lfa"))";
                junos:must-message "Not allowed with 'protocols ospf backup-spf-options use-post-convergence-lfa'";
                type empty;
                description
                  "Use only downstream backup paths";
              }
    
              container per-prefix-calculation {
                junos:must "(!("protocols ospf backup-spf-options use-post-convergence-lfa"))";
                junos:must-message "Not allowed with 'protocols ospf backup-spf-options use-post-convergence-lfa'";
                description
                  "Calculate backup nexthops for non-best prefix originators";
                uses apply-advanced;
    
                leaf stubs {
                  type empty;
                  description
                    "Per prefix calculation for stubs only";
                }
    
                leaf summary {
                  type empty;
                  description
                    "Per prefix calculation for summary originators only";
                }
    
                leaf externals {
                  type empty;
                  description
                    "Per prefix calculation for externals";
                }
    
                leaf all {
                  type empty;
                  description
                    "Per prefix calculation for all";
                }
              }  // container per-prefix-calculation
    
              leaf node-link-degradation {
                junos:must "(!("protocols ospf backup-spf-options use-post-convergence-lfa"))";
                junos:must-message "Not allowed with 'protocols ospf backup-spf-options use-post-convergence-lfa'";
                type empty;
                description
                  "Degrade to link protection when nodelink protection not available";
              }
            }  // container backup-spf-options
    
            leaf prefix-export-limit {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "0 .. 4294967295";
                }
              }
              description
                "Maximum number of prefixes that can be exported";
            }
          }  // list topology
    
          container backup-spf-options {
            description
              "Configure options for backup SPF";
            uses apply-advanced;
    
            container remote-backup-calculation {
              junos:must "(!("protocols ospf backup-spf-options use-post-convergence-lfa"))";
              junos:must-message "Not allowed with 'protocols ospf backup-spf-options use-post-convergence-lfa'";
              presence
                "enable remote-backup-calculation";
              description
                "Calculate Remote LFA backup nexthops";
              uses apply-advanced;
    
              container pq-nodes-nearest-to-source {
                description
                  "PQ nodes selection based upon nearest to source";
                uses apply-advanced;
    
                leaf percent {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "10 .. 100";
                    }
                  }
                  description
                    "Selection percentage for nearest to source";
                }
              }  // container pq-nodes-nearest-to-source
            }  // container remote-backup-calculation
    
            container use-post-convergence-lfa {
              junos:must "("protocols ospf source-packet-routing")";
              junos:must-message "Configuration of 'protocols ospf source-packet-routing' is required";
              presence
                "enable use-post-convergence-lfa";
              description
                "Calculate post-convergence backup paths";
              uses apply-advanced;
    
              leaf maximum-labels {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "2 .. 8";
                  }
                }
                description
                  "Maximum number of labels installed for post-convergence paths";
              }
    
              leaf maximum-backup-paths {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "1 .. 8";
                  }
                }
                description
                  "Maximum number of equal-cost post-convergence paths installed";
              }
            }  // container use-post-convergence-lfa
    
            leaf use-source-packet-routing {
              junos:must "(".. .. source-packet-routing")";
              junos:must-message "Configuration of 'protocols ospf source-packet-routing' is required";
              junos:must "(!(".. remote-backup-calculation"))";
              junos:must-message "Not allowed with 'protocols ospf backup-spf-options remote-backup-calculation'";
              type empty;
              description
                "Use spring backup paths for inet.0 routes";
            }
    
            leaf disable {
              junos:must "(!("protocols ospf backup-spf-options use-post-convergence-lfa"))";
              junos:must-message "Not allowed with 'protocols ospf backup-spf-options use-post-convergence-lfa'";
              type empty;
              description
                "Do not run backup SPF";
            }
    
            leaf no-install {
              type empty;
              description
                "Do not install backup nexthops into the RIB";
            }
    
            leaf downstream-paths-only {
              junos:must "(!("protocols ospf backup-spf-options use-post-convergence-lfa"))";
              junos:must-message "Not allowed with 'protocols ospf backup-spf-options use-post-convergence-lfa'";
              type empty;
              description
                "Use only downstream backup paths";
            }
    
            container per-prefix-calculation {
              junos:must "(!("protocols ospf backup-spf-options use-post-convergence-lfa"))";
              junos:must-message "Not allowed with 'protocols ospf backup-spf-options use-post-convergence-lfa'";
              description
                "Calculate backup nexthops for non-best prefix originators";
              uses apply-advanced;
    
              leaf stubs {
                type empty;
                description
                  "Per prefix calculation for stubs only";
              }
    
              leaf summary {
                type empty;
                description
                  "Per prefix calculation for summary originators only";
              }
    
              leaf externals {
                type empty;
                description
                  "Per prefix calculation for externals";
              }
    
              leaf all {
                type empty;
                description
                  "Per prefix calculation for all";
              }
            }  // container per-prefix-calculation
    
            leaf node-link-degradation {
              junos:must "(!("protocols ospf backup-spf-options use-post-convergence-lfa"))";
              junos:must-message "Not allowed with 'protocols ospf backup-spf-options use-post-convergence-lfa'";
              type empty;
              description
                "Degrade to link protection when nodelink protection not available";
            }
          }  // container backup-spf-options
    
          container traffic-engineering {
            presence
              "enable traffic-engineering";
            description
              "Configure traffic engineering attributes";
            uses apply-advanced;
    
            leaf no-topology {
              type empty;
              description
                "Disable dissemination of TE link-state topology information";
            }
    
            leaf multicast-rpf-routes {
              junos:must "(!(".. .. topology $$={ipv4-multicast}"))";
              junos:must-message "multicast-rpf-routes cannot be used with topology ipv4-multicast";
              junos:must "(".. shortcuts")";
              junos:must-message "multicast-rpf-routes cannot be used without shortcuts";
              type empty;
              description
                "Install routes for multicast RPF checks into inet.2";
            }
    
            leaf l3-unicast-topology {
              type empty;
              description
                "Download IGP topology into TED";
            }
    
            container ignore-lsp-metrics {
              presence
                "enable ignore-lsp-metrics";
              description
                "Ignore label-switched path metrics when doing shortcuts";
              uses apply-advanced;
    
              leaf unconfigured-only {
                type empty;
                description
                  "Ignore lsp metrics for unconfigured only";
              }
            }  // container ignore-lsp-metrics
    
            container shortcuts {
              presence "enable shortcuts";
              description
                "Use label-switched paths as next hops, if possible";
              uses apply-advanced;
    
              leaf ignore-lsp-metrics {
                type empty;
                status deprecated;
                description
                  "Ignore label-switched path metrics when doing shortcuts";
              }
    
              leaf lsp-metric-into-summary {
                type empty;
                description
                  "Advertise LSP metric into summary LSAs";
              }
    
              list family {
                key "name";
                ordered-by user;
                description
                  "Address family specific traffic-engineering attributes";
                leaf name {
                  type enumeration {
                    enum "inet" {
                      value 0;
                      description "IPv4 family";
                    }
                    enum "inet-mpls" {
                      value 1;
                      description
                        "IPv4-MPLS family";
                    }
                  }
                }
    
                uses apply-advanced;
              }  // list family
            }  // container shortcuts
    
            leaf advertise-unnumbered-interfaces {
              type empty;
              description
                "Advertise unnumbered interfaces";
            }
    
            leaf credibility-protocol-preference {
              type empty;
              description
                "TED protocol credibility follows protocol preference";
            }
    
            container advertisement {
              description
                "Advertise TE parameters even if RSVP is not turned on";
              uses apply-advanced;
    
              leaf always {
                type empty;
                description
                  "Advertise TE parameters in TE LSAs";
              }
            }  // container advertisement
          }  // container traffic-engineering
    
          container source-packet-routing {
            junos:must "(!(".. .. .. protocols mpls disable"))";
            junos:must-message "SPRING configuration is not allowed with 'protocols mpls disable'";
            junos:must "(".. .. .. protocols mpls ")";
            junos:must-message "SPRING configuration is not allowed without 'protocols mpls'";
            presence
              "enable source-packet-routing";
            description
              "Enable source packet routing (SPRING)";
            uses apply-advanced;
    
            container adjacency-segment {
              description
                "Attributes for adjacency segments in spring";
              uses apply-advanced;
    
              leaf hold-time {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "180000 .. 900000";
                  }
                }
                description
                  "Retain time of Adjacency segment after isolating from an interface";
              }
            }  // container adjacency-segment
    
            leaf-list prefix-segment {
              type jt:policy-algebra;
              ordered-by user;
              description
                "Prefix Segment policy";
            }
    
            leaf explicit-null {
              type empty;
              description
                "Set E and P bits in all Prefix SID advertisements";
            }
    
            container node-segment {
              presence "enable node-segment";
              description
                "Enable support for Node segments in SPRING";
              uses apply-advanced;
    
              leaf ipv4-index {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "0 .. 199999";
                  }
                }
                description
                  "Set ipv4 node segment index";
              }
    
              leaf index-range {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "32 .. 16385";
                  }
                }
                description
                  "Set range of node segment indices allowed";
              }
            }  // container node-segment
    
            container srgb {
              junos:must "(!(".. node-segment index-range"))";
              junos:must-message "Can not be configured with node-segment index-range";
              description
                "Set the SRGB global block in SPRING";
              leaf start-label {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32;
                }
                description
                  "Start range for SRGB label block";
              }
    
              leaf index-range {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32;
                }
                description
                  "Index to the SRGB start label block";
              }
            }  // container srgb
    
            leaf mapping-server {
              junos:must "(".. node-segment")";
              junos:must-message "protocols ospf source-packet-routing node-segment must be defined";
              junos:must "("routing-options source-packet-routing mapping-server-entry $$")";
              junos:must-message "Referenced source-packet-routing mapping-server-entry must be defined";
              type string;
              description "Mapping server name";
            }
    
            leaf install-prefix-sid-for-best-route {
              type empty;
              description
                "For best route install a exact prefix sid route";
            }
    
            leaf ldp-stitching {
              type empty;
              description
                "Enable SR to LDP stitching";
            }
    
            leaf-list flex-algorithm {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "128 .. 255";
                }
              }
              max-elements 16;
              description
                "Flex-algorithms we would like to participate in";
            }
          }  // container source-packet-routing
    
          list area {
            key "name";
            ordered-by user;
            description "Configure an OSPF area";
            leaf name {
              type jt:areaid;
              description "Area ID";
            }
    
            uses apply-advanced;
    
            choice stub-option {
              container stub {
                presence "enable stub";
                description
                  "Configure a stub area";
                leaf default-metric {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "1 .. 16777215";
                    }
                  }
                  description
                    "Metric for the default route in this stub area";
                }
    
                choice summaries-choice {
                  leaf summaries {
                    type empty;
                    description
                      "Flood summary LSAs into this stub area";
                  }
                  leaf no-summaries {
                    type empty;
                    description
                      "Don't flood summary LSAs into this stub area";
                  }
                }  // choice summaries-choice
              }  // container stub
              container nssa {
                presence "enable nssa";
                description
                  "Configure a not-so-stubby area";
                uses apply-advanced;
    
                container default-lsa {
                  presence "enable default-lsa";
                  description
                    "Configure a default LSA";
                  uses apply-advanced;
    
                  leaf default-metric {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint32 {
                        range "1 .. 16777215";
                      }
                    }
                    description
                      "Metric for the default route in this area";
                  }
    
                  leaf metric-type {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint32 {
                        range "1 .. 2";
                      }
                    }
                    description
                      "External metric type for the default type 7 LSA";
                  }
    
                  leaf type-7 {
                    type empty;
                    description
                      "Flood type 7 default LSA if no-summaries is configured";
                  }
                }  // container default-lsa
    
                leaf default-metric {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "1 .. 16777215";
                    }
                  }
                  status deprecated;
                  description
                    "Metric for the default route in this area";
                }
    
                leaf metric-type {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "1 .. 2";
                    }
                  }
                  status deprecated;
                  description
                    "External metric type for the default type 7 LSA";
                }
    
                choice summaries-choice {
                  leaf summaries {
                    type empty;
                    description
                      "Flood summary LSAs into this NSSA area";
                  }
                  leaf no-summaries {
                    type empty;
                    description
                      "Don't flood summary LSAs into this NSSA area";
                  }
                }  // choice summaries-choice
    
                list area-range {
                  key "name";
                  ordered-by user;
                  description
                    "Configure NSSA area ranges";
                  leaf name {
                    type jt:ipprefix;
                    description
                      "Range to summarize NSSA routes in this area";
                  }
    
                  uses apply-advanced;
    
                  leaf restrict {
                    type empty;
                    description
                      "Restrict advertisement of this area range";
                  }
    
                  leaf exact {
                    type empty;
                    description
                      "Enforce exact match for advertisement of this area range";
                  }
    
                  container override-metric {
                    presence
                      "enable override-metric";
                    description
                      "Override the dynamic metric for this area-range";
                    uses apply-advanced;
    
                    leaf metric {
                      type union {
                        type string {
                          pattern "<.*>|$.*";
                        }
                        type uint32 {
                          range "1 .. 16777215";
                        }
                      }
                      description "Metric value";
                    }
    
                    leaf metric-type {
                      type union {
                        type string {
                          pattern "<.*>|$.*";
                        }
                        type uint32 {
                          range "1 .. 2";
                        }
                      }
                      default "1";
                      description
                        "Set the metric type for the override metric";
                    }
                  }  // container override-metric
                }  // list area-range
              }  // container nssa
            }  // choice stub-option
    
            list area-range {
              key "name";
              ordered-by user;
              description
                "Configure area ranges";
              leaf name {
                type jt:ipprefix;
                description
                  "Range to summarize routes in this area";
              }
    
              uses apply-advanced;
    
              leaf restrict {
                type empty;
                description
                  "Restrict advertisement of this area range";
              }
    
              leaf exact {
                type empty;
                description
                  "Enforce exact match for advertisement of this area range";
              }
    
              leaf override-metric {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "1 .. 16777215";
                  }
                }
                description
                  "Override the dynamic metric for this area-range";
              }
            }  // list area-range
    
            leaf-list network-summary-export {
              type jt:policy-algebra;
              ordered-by user;
              description
                "Export policy for Type 3 Summary LSAs";
            }
    
            leaf-list network-summary-import {
              type jt:policy-algebra;
              ordered-by user;
              description
                "Import policy for Type 3 Summary LSAs";
            }
    
            leaf-list inter-area-prefix-export {
              type jt:policy-algebra;
              ordered-by user;
              description
                "Export policy for Inter Area Prefix LSAs";
            }
    
            leaf-list inter-area-prefix-import {
              type jt:policy-algebra;
              ordered-by user;
              description
                "Import policy for Inter Area Prefix LSAs";
            }
    
            leaf authentication-type {
              type enumeration {
                enum "none" {
                  value 0;
                  status deprecated;
                  description
                    "No authentication";
                }
                enum "simple" {
                  value 1;
                  status deprecated;
                  description
                    "Simple password authentication";
                }
                enum "md5" {
                  value 2;
                  status deprecated;
                  description
                    "MD5 authentication";
                }
              }
              status deprecated;
              description "Authentication type";
            }
    
            list virtual-link {
              junos:must "(".. .. area $$={0.0.0.0}")";
              junos:must-message "virtual link can be configured only under backbone area";
              key "neighbor-id transit-area";
              ordered-by user;
              description
                "Configure virtual links";
              leaf neighbor-id {
                type jt:ipv4addr;
                description
                  "Router ID of a virtual neighbor";
              }
    
              leaf transit-area {
                type jt:areaid;
                description
                  "Transit area in common with virtual neighbor";
              }
    
              uses apply-advanced;
    
              choice enable-disable {
                leaf disable {
                  type empty;
                  description
                    "Disable this virtual link";
                }
              }  // choice enable-disable
    
              leaf retransmit-interval {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "1 .. 65535";
                  }
                }
                description
                  "Retransmission interval (seconds)";
              }
    
              leaf transit-delay {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "1 .. 65535";
                  }
                }
                description
                  "Transit delay (seconds)";
              }
    
              leaf hello-interval {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "1 .. 255";
                  }
                }
                description
                  "Hello interval (seconds)";
              }
    
              leaf dead-interval {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "1 .. 65535";
                  }
                }
                description
                  "Dead interval (seconds)";
              }
    
              leaf mtu {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "128 .. 65535";
                  }
                }
                description
                  "Maximum OSPF packet size";
              }
    
              choice auth {
                container authentication {
                  uses juniper-ospf-authentication;
                }  // container authentication
                container authentication-key {
                  status deprecated;
                  description
                    "Authentication key";
                  leaf keyname {
                    type jt:unreadable;
                    description
                      "Authentication key value";
                  }
    
                  leaf key-id {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint32 {
                        range "0 .. 255";
                      }
                    }
                    description
                      "Key ID for MD5 authentication";
                  }
                }  // container authentication-key
              }  // choice auth
    
              leaf demand-circuit {
                type empty;
                description
                  "Interface functions as a demand circuit";
              }
    
              leaf flood-reduction {
                type empty;
                description
                  "Enable flood reduction";
              }
    
              leaf no-neighbor-down-notification {
                type empty;
                description
                  "Don't inform other protocols about neighbor down events";
              }
    
              leaf ipsec-sa {
                junos:must "(!(any ".. .. interface <st*> ipsec-sa $$"))";
                junos:must-message "Must not configure ipsec-sa for st0 interface";
                junos:must "("security ipsec security-association $$ manual")";
                junos:must-message "Referenced IPSec security association must be a manual SA";
                junos:must "("security ipsec security-association $$ mode transport")";
                junos:must-message "Referenced IPSec security association must be in transport mode";
                junos:must "("security ipsec security-association $$")";
                junos:must-message "Referenced IPSec security association must be defined";
                type string {
                  length "1 .. 32";
                }
                description
                  "IPSec security association name";
              }
    
              list topology {
                key "name";
                ordered-by user;
                description
                  "Topology specific attributes";
                leaf name {
                  type string;
                  description "Topology name";
                }
    
                uses apply-advanced;
    
                leaf disable {
                  type empty;
                  description
                    "Disable this topology";
                }
    
                leaf metric {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint16 {
                      range "1 .. 65535";
                    }
                  }
                  description "Topology metric";
                }
    
                container bandwidth-based-metrics {
                  junos:must "(".. metric")";
                  junos:must-message "Metric must be configured";
                  description
                    "Configure bandwidth based metrics";
                  uses apply-advanced;
    
                  list bandwidth {
                    key "name";
                    description
                      "Bandwidth threshold";
                    leaf name {
                      type string;
                    }
    
                    leaf metric {
                      type union {
                        type string {
                          pattern "<.*>|$.*";
                        }
                        type uint16 {
                          range "1 .. 65535";
                        }
                      }
                      description
                        "Metric associated with specified bandwidth";
                    }
                  }  // list bandwidth
                }  // container bandwidth-based-metrics
              }  // list topology
            }  // list virtual-link
    
            list sham-link-remote {
              key "name";
              ordered-by user;
              description
                "Configure parameters for remote sham link endpoint";
              leaf name {
                junos:must "(!(".. .. .. sham-link local $$"))";
                junos:must-message "Local and remote sham link endpoint addresses must be different";
                junos:must "(".. .. .. sham-link local")";
                junos:must-message "Local sham link endpoint must be configured";
                type jt:ipaddr;
                description
                  "Remote sham link endpoint address";
              }
    
              uses apply-advanced;
    
              leaf metric {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint16 {
                    range "1 .. 65535";
                  }
                }
                description "Sham link metric";
              }
    
              leaf ipsec-sa {
                junos:must "(!(any ".. .. interface <st*> ipsec-sa $$"))";
                junos:must-message "Must not configure ipsec-sa for st0 interface";
                junos:must "("security ipsec security-association $$ manual")";
                junos:must-message "Referenced IPSec security association must be a manual SA";
                junos:must "("security ipsec security-association $$ mode transport")";
                junos:must-message "Referenced IPSec security association must be in transport mode";
                junos:must "("security ipsec security-association $$")";
                junos:must-message "Referenced IPSec security association must be defined";
                type string {
                  length "1 .. 32";
                }
                description
                  "IPSec security association name";
              }
    
              leaf demand-circuit {
                type empty;
                description
                  "Interface functions as a demand circuit";
              }
    
              leaf flood-reduction {
                type empty;
                description
                  "Enable flood reduction";
              }
    
              list topology {
                key "name";
                ordered-by user;
                description
                  "Topology specific attributes";
                leaf name {
                  type string;
                  description "Topology name";
                }
    
                uses apply-advanced;
    
                leaf disable {
                  type empty;
                  description
                    "Disable this topology";
                }
    
                leaf metric {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint16 {
                      range "1 .. 65535";
                    }
                  }
                  description "Topology metric";
                }
    
                container bandwidth-based-metrics {
                  junos:must "(".. metric")";
                  junos:must-message "Metric must be configured";
                  description
                    "Configure bandwidth based metrics";
                  uses apply-advanced;
    
                  list bandwidth {
                    key "name";
                    description
                      "Bandwidth threshold";
                    leaf name {
                      type string;
                    }
    
                    leaf metric {
                      type union {
                        type string {
                          pattern "<.*>|$.*";
                        }
                        type uint16 {
                          range "1 .. 65535";
                        }
                      }
                      description
                        "Metric associated with specified bandwidth";
                    }
                  }  // list bandwidth
                }  // container bandwidth-based-metrics
              }  // list topology
            }  // list sham-link-remote
    
            list interface {
              key "name";
              ordered-by user;
              description
                "Include an interface in this area";
              leaf name {
                junos:must "((!(".. interface-type nbma") || (!(("interfaces $$" || any "logical-systems <*> interfaces $$")) || (any "interfaces $$-IFL family inet address <*>" || any "logical-systems <*> interfaces $$-IFL family inet address <*>"))))";
                junos:must-message "IPv4 address must be configured on the interface for nbma mode";
                type union {
                  type jt:ipv4addr-or-interface;
                  type string {
                    pattern "<.*>|$.*";
                  }
                }
                description "Interface name";
              }
    
              uses apply-advanced;
    
              choice enable-disable {
                leaf disable {
                  type empty;
                  description
                    "Disable OSPF on this interface";
                }
              }  // choice enable-disable
    
              leaf interface-type {
                type enumeration {
                  enum "nbma" {
                    value 0;
                    description
                      "Nonbroadcast multiaccess";
                  }
                  enum "p2mp" {
                    value 1;
                    description
                      "Point-to-multipoint NBMA";
                  }
                  enum "p2p" {
                    value 2;
                    description "Point-to-point";
                  }
                  enum "p2mp-over-lan" {
                    value 3;
                    description
                      "Point-to-multipoint over LAN mode";
                  }
                }
                description "Type of interface";
              }
    
              choice protection-type {
                leaf link-protection {
                  type empty;
                  description
                    "Protect interface from link faults only";
                }
                leaf node-link-protection {
                  type empty;
                  description
                    "Protect interface from both link and node faults";
                }
              }  // choice protection-type
    
              leaf no-eligible-backup {
                type empty;
                description
                  "Not eligible to backup traffic from protected interfaces";
              }
    
              leaf no-eligible-remote-backup {
                type empty;
                description
                  "Not eligible for Remote-LFA backup traffic from protected interfaces";
              }
    
              container passive {
                presence "enable passive";
                description
                  "Do not run OSPF, but advertise it";
                uses apply-advanced;
    
                container traffic-engineering {
                  description
                    "Advertise TE link information";
                  uses apply-advanced;
    
                  leaf remote-node-id {
                    type jt:ipaddr;
                    description
                      "Remote address of the link";
                  }
    
                  leaf remote-node-router-id {
                    junos:must "(".. remote-node-id")";
                    junos:must-message "remote-node-id must be configured";
                    type jt:ipv4addr;
                    description
                      "TE Router-ID of the remote node";
                  }
                }  // container traffic-engineering
              }  // container passive
    
              leaf secondary {
                junos:must "(!(" .. ipsec-sa"))";
                junos:must-message "secondary interface cannot have ipsec-sa configured";
                junos:must "(!(" .. dynamic-neighbors"))";
                junos:must-message "secondary interface cannot have dynamic-neighbors configured";
                junos:must "(!(" .. neighbor"))";
                junos:must-message "secondary interface cannot have configured neighbors";
                junos:must "(!(" .. interface-type p2mp"))";
                junos:must-message "secondary interface cannot be set as type p2mp";
                junos:must "(!(" .. interface-type nbma"))";
                junos:must-message "secondary interface cannot be set as type nbma";
                junos:must "(!(" .. passive"))";
                junos:must-message "secondary interface cannot be configured passive";
                type empty;
                description
                  "Treat interface as secondary";
              }
    
              leaf own-router-lsa {
                type empty;
                description
                  "Generate a separate router LSA for this interface";
              }
    
              container bandwidth-based-metrics {
                junos:must "(".. metric")";
                junos:must-message "Metric must be configured";
                description
                  "Configure bandwidth based metrics";
                uses apply-advanced;
    
                list bandwidth {
                  key "name";
                  description
                    "Bandwidth threshold";
                  leaf name {
                    type string;
                  }
    
                  leaf metric {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint16 {
                        range "1 .. 65535";
                      }
                    }
                    description
                      "Metric associated with specified bandwidth";
                  }
                }  // list bandwidth
              }  // container bandwidth-based-metrics
    
              leaf metric {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint16 {
                    range "1 .. 65535";
                  }
                }
                description "Interface metric";
              }
    
              leaf priority {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "0 .. 255";
                  }
                }
                description
                  "Designated router priority";
              }
    
              leaf retransmit-interval {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "1 .. 65535";
                  }
                }
                description
                  "Retransmission interval (seconds)";
              }
    
              leaf transit-delay {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "1 .. 65535";
                  }
                }
                description
                  "Transit delay (seconds)";
              }
    
              leaf hello-interval {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "1 .. 255";
                  }
                }
                description
                  "Hello interval (seconds)";
              }
    
              leaf dead-interval {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "1 .. 65535";
                  }
                }
                description
                  "Dead interval (seconds)";
              }
    
              leaf mtu {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "128 .. 65535";
                  }
                }
                description
                  "Maximum OSPF packet size";
              }
    
              choice auth {
                container authentication {
                  uses juniper-ospf-authentication;
                }  // container authentication
                container authentication-key {
                  status deprecated;
                  description
                    "Authentication key";
                  leaf keyname {
                    type jt:unreadable;
                    description
                      "Authentication key value";
                  }
    
                  leaf key-id {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint32 {
                        range "0 .. 255";
                      }
                    }
                    description
                      "Key ID for MD5 authentication";
                  }
                }  // container authentication-key
              }  // choice auth
    
              leaf demand-circuit {
                type empty;
                description
                  "Interface functions as a demand circuit";
              }
    
              leaf flood-reduction {
                type empty;
                description
                  "Enable flood reduction";
              }
    
              leaf no-neighbor-down-notification {
                type empty;
                description
                  "Don't inform other protocols about neighbor down events";
              }
    
              leaf ipsec-sa {
                junos:must "(!(any ".. .. interface <st*> ipsec-sa $$"))";
                junos:must-message "Must not configure ipsec-sa for st0 interface";
                junos:must "("security ipsec security-association $$ manual")";
                junos:must-message "Referenced IPSec security association must be a manual SA";
                junos:must "("security ipsec security-association $$ mode transport")";
                junos:must-message "Referenced IPSec security association must be in transport mode";
                junos:must "("security ipsec security-association $$")";
                junos:must-message "Referenced IPSec security association must be defined";
                type string {
                  length "1 .. 32";
                }
                description
                  "IPSec security association name";
              }
    
              list topology {
                key "name";
                ordered-by user;
                description
                  "Topology specific attributes";
                leaf name {
                  type string;
                  description "Topology name";
                }
    
                uses apply-advanced;
    
                leaf disable {
                  type empty;
                  description
                    "Disable this topology";
                }
    
                leaf metric {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint16 {
                      range "1 .. 65535";
                    }
                  }
                  description "Topology metric";
                }
    
                container bandwidth-based-metrics {
                  junos:must "(".. metric")";
                  junos:must-message "Metric must be configured";
                  description
                    "Configure bandwidth based metrics";
                  uses apply-advanced;
    
                  list bandwidth {
                    key "name";
                    description
                      "Bandwidth threshold";
                    leaf name {
                      type string;
                    }
    
                    leaf metric {
                      type union {
                        type string {
                          pattern "<.*>|$.*";
                        }
                        type uint16 {
                          range "1 .. 65535";
                        }
                      }
                      description
                        "Metric associated with specified bandwidth";
                    }
                  }  // list bandwidth
                }  // container bandwidth-based-metrics
              }  // list topology
    
              leaf transmit-interval {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "1 .. 4294967295";
                  }
                }
                status deprecated;
                description
                  "OSPF packet transmit interval (milliseconds)";
              }
    
              container bfd-liveness-detection {
                description
                  "Bidirectional Forwarding Detection options";
                uses apply-advanced;
    
                leaf version {
                  type enumeration {
                    enum "0" {
                      value 0;
                      description
                        "BFD version 0 (deprecated)";
                    }
                    enum "1" {
                      value 1;
                      description
                        "BFD version 1";
                    }
                    enum "automatic" {
                      value 2;
                      description
                        "Choose BFD version automatically";
                    }
                  }
                  default "automatic";
                  description
                    "BFD protocol version number";
                }
    
                leaf minimum-interval {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "1 .. 255000";
                    }
                  }
                  units "milliseconds";
                  description
                    "Minimum transmit and receive interval";
                }
    
                leaf minimum-transmit-interval {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "1 .. 255000";
                    }
                  }
                  units "milliseconds";
                  status deprecated;
                  description
                    "Minimum transmit interval";
                }
    
                leaf minimum-receive-interval {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "1 .. 255000";
                    }
                  }
                  units "milliseconds";
                  description
                    "Minimum receive interval";
                }
    
                leaf multiplier {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "1 .. 255";
                    }
                  }
                  default "3";
                  description
                    "Detection time multiplier";
                }
    
                choice adaptation-choice {
                  leaf no-adaptation {
                    type empty;
                    description
                      "Disable adaptation";
                  }
                }  // choice adaptation-choice
    
                container transmit-interval {
                  description
                    "Transmit-interval options";
                  uses apply-advanced;
    
                  leaf minimum-interval {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint32 {
                        range "1 .. 255000";
                      }
                    }
                    units "milliseconds";
                    description
                      "Minimum transmit interval";
                  }
    
                  leaf threshold {
                    type union {
                      type uint32;
                      type string {
                        pattern "<.*>|$.*";
                      }
                    }
                    units "milliseconds";
                    description
                      "High transmit interval triggering a trap";
                  }
                }  // container transmit-interval
    
                container detection-time {
                  description
                    "Detection-time options";
                  uses apply-advanced;
    
                  leaf threshold {
                    type union {
                      type uint32;
                      type string {
                        pattern "<.*>|$.*";
                      }
                    }
                    units "milliseconds";
                    description
                      "High detection-time triggering a trap";
                  }
                }  // container detection-time
    
                container authentication {
                  description
                    "Authentication options";
                  uses apply-advanced;
    
                  leaf key-chain {
                    junos:must "(".. algorithm")";
                    junos:must-message "May not be configured without algorithm";
                    junos:must "("security authentication-key-chains key-chain $$")";
                    junos:must-message "Referenced key-chain must be defined";
                    type string;
                    description "Key chain name";
                  }
    
                  leaf algorithm {
                    junos:must "(".. key-chain")";
                    junos:must-message "May not be configured without key-chain";
                    type enumeration {
                      enum "simple-password" {
                        value 0;
                        description
                          "Simple password";
                      }
                      enum "keyed-md5" {
                        value 1;
                        description
                          "Keyed message Digest 5";
                      }
                      enum
                        "meticulous-keyed-md5" {
                        value 2;
                        description
                          "Meticulous keyed message Digest 5";
                      }
                      enum "keyed-sha-1" {
                        value 3;
                        description
                          "Keyed secure hash algorithm (SHA1) ";
                      }
                      enum
                        "meticulous-keyed-sha-1" {
                        value 4;
                        description
                          "Meticulous keyed secure hash algorithm (SHA1) ";
                      }
                    }
                    description "Algorithm name";
                  }
    
                  leaf loose-check {
                    type empty;
                    description
                      "Verify authentication only if authentication is negotiated";
                  }
                }  // container authentication
    
                leaf full-neighbors-only {
                  type empty;
                  description
                    "Setup BFD sessions only to Full neighbors";
                }
    
                leaf holddown-interval {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "0 .. 255000";
                    }
                  }
                  units "milliseconds";
                  description
                    "Time to hold the session-UP notification to the client";
                }
              }  // container bfd-liveness-detection
    
              leaf dynamic-neighbors {
                junos:must "(" .. interface-type p2mp")";
                junos:must-message "dynamic-neighbors option can be set only if the interface type is p2mp";
                type empty;
                description
                  "Learn neighbors dynamically on a p2mp interface";
              }
    
              leaf no-advertise-adjacency-segment {
                type empty;
                description
                  "Do not advertise an adjacency segment for this interface";
              }
    
              list neighbor {
                junos:must "(!(" .. dynamic-neighbors"))";
                junos:must-message "Neighbors cannot be specified manually if dynamic-neighbors is set";
                key "name";
                ordered-by user;
                description "NBMA neighbor";
                leaf name {
                  type jt:ipaddr;
                  description
                    "Address of neighbor";
                }
    
                leaf eligible {
                  type empty;
                  description
                    "Eligible to be DR on an NBMA network";
                }
              }  // list neighbor
    
              leaf poll-interval {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "1 .. 65535";
                  }
                }
                description
                  "Poll interval for NBMA interfaces";
              }
    
              leaf no-interface-state-traps {
                type empty;
                description
                  "Do not send interface state change traps";
              }
    
              leaf strict-bfd {
                junos:must "(" .. bfd-liveness-detection")";
                junos:must-message "strict bfd cannot be configured without bfd.";
                junos:must "(!(" .. bfd-liveness-detection full-neighbors-only"))";
                junos:must-message "full-neighbors-only and strict-bfd cannot be configured together";
                type empty;
                description
                  "Enable strict bfd over this interface";
              }
    
              container post-convergence-lfa {
                junos:must "("protocols ospf backup-spf-options use-post-convergence-lfa")";
                junos:must-message "Not allowed without 'protocols ospf backup-spf-options use-post-convergence-lfa'";
                presence
                  "enable post-convergence-lfa";
                description
                  "Protect interface using post-convergence backup path";
                uses apply-advanced;
    
                container node-protection {
                  presence
                    "enable node-protection";
                  description
                    "Compute backup path assuming node failure";
                  uses apply-advanced;
    
                  leaf cost {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint16 {
                        range "1 .. 65535";
                      }
                    }
                    description
                      "Cost for node protection";
                  }
                }  // container node-protection
    
                leaf srlg-protection {
                  type empty;
                  description
                    "Compute backup path assuming SRLG failure";
                }
    
                leaf fate-sharing-protection {
                  type empty;
                  description
                    "Compute backup path assuming fate-sharing group failure";
                }
              }  // container post-convergence-lfa
    
              leaf te-metric {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "1 .. 4294967295";
                  }
                }
                description
                  "Traffic engineering metric";
              }
    
              container ldp-synchronization {
                presence
                  "enable ldp-synchronization";
                description
                  "Advertise maximum metric until LDP is operational";
                uses ldp-sync-obj;
              }  // container ldp-synchronization
    
              container ipv4-adjacency-segment {
                junos:must "(!(".. no-advertise-adjacency-segment"))";
                junos:must-message "ipv4-adjacency-segment can't be configured if no-advertise-adjacency-segment is configured in the same interface";
                description
                  "Configure ipv4 adjacency segment";
                uses apply-advanced;
    
                container protected {
                  description
                    "Adjacency SID is eligible for protection";
                  choice adjsid-type {
                    container index {
                      description
                        "Adjacency SID indexed from SRGB";
                      leaf index-number {
                        type union {
                          type string {
                            pattern "<.*>|$.*";
                          }
                          type uint32 {
                            range "0 .. 199999";
                          }
                        }
                      }
                    }  // container index
                    leaf label {
                      type union {
                        type string {
                          pattern "<.*>|$.*";
                        }
                        type uint32 {
                          range "16 .. 1048575";
                        }
                      }
                      description
                        "Adjacency SID from static label pool";
                    }
                    leaf dynamic {
                      type empty;
                      description
                        "Dynamically allocate an adjacency segment";
                    }
                  }  // choice adjsid-type
                }  // container protected
    
                container unprotected {
                  description
                    "Adjacency SID uneligible for protection";
                  choice adjsid-type {
                    container index {
                      description
                        "Adjacency SID indexed from SRGB";
                      leaf index-number {
                        type union {
                          type string {
                            pattern "<.*>|$.*";
                          }
                          type uint32 {
                            range "0 .. 199999";
                          }
                        }
                      }
                    }  // container index
                    leaf label {
                      type union {
                        type string {
                          pattern "<.*>|$.*";
                        }
                        type uint32 {
                          range "16 .. 1048575";
                        }
                      }
                      description
                        "Adjacency SID from static label pool";
                    }
                    leaf dynamic {
                      type empty;
                      description
                        "Dynamically allocate an adjacency segment";
                    }
                  }  // choice adjsid-type
                }  // container unprotected
              }  // container ipv4-adjacency-segment
    
              list lan-neighbor {
                junos:must "(!(".. ipv4-adjacency-segment"))";
                junos:must-message "lan-neighbor can't be configured if ipv4-adjacency-segment is configured in the same interface";
                junos:must "(!(".. no-advertise-adjacency-segment"))";
                junos:must-message "lan-neighbor can't be configured if no-advertise-adjacency-segment is configured in the same interface ";
                junos:must "(!(".. interface-type p2p"))";
                junos:must-message "lan-neighbor can't be configured for point-to-point interfaces";
                key "name";
                ordered-by user;
                description
                  "Configuration specific to a LAN neighbor";
                leaf name {
                  type jt:ipaddr;
                  description
                    "Address of neighbor";
                }
    
                uses apply-advanced;
    
                container ipv4-adjacency-segment {
                  junos:must "(!(".. no-advertise-adjacency-segment"))";
                  junos:must-message "ipv4-adjacency-segment can't be configured if no-advertise-adjacency-segment is configured in the same interface";
                  description
                    "Configure ipv4 adjacency segment";
                  uses apply-advanced;
    
                  container protected {
                    description
                      "Adjacency SID is eligible for protection";
                    choice adjsid-type {
                      container index {
                        description
                          "Adjacency SID indexed from SRGB";
                        leaf index-number {
                          type union {
                            type string {
                              pattern "<.*>|$.*";
                            }
                            type uint32 {
                              range
                                "0 .. 199999";
                            }
                          }
                        }
                      }  // container index
                      leaf label {
                        type union {
                          type string {
                            pattern "<.*>|$.*";
                          }
                          type uint32 {
                            range
                              "16 .. 1048575";
                          }
                        }
                        description
                          "Adjacency SID from static label pool";
                      }
                      leaf dynamic {
                        type empty;
                        description
                          "Dynamically allocate an adjacency segment";
                      }
                    }  // choice adjsid-type
                  }  // container protected
    
                  container unprotected {
                    description
                      "Adjacency SID uneligible for protection";
                    choice adjsid-type {
                      container index {
                        description
                          "Adjacency SID indexed from SRGB";
                        leaf index-number {
                          type union {
                            type string {
                              pattern "<.*>|$.*";
                            }
                            type uint32 {
                              range
                                "0 .. 199999";
                            }
                          }
                        }
                      }  // container index
                      leaf label {
                        type union {
                          type string {
                            pattern "<.*>|$.*";
                          }
                          type uint32 {
                            range
                              "16 .. 1048575";
                          }
                        }
                        description
                          "Adjacency SID from static label pool";
                      }
                      leaf dynamic {
                        type empty;
                        description
                          "Dynamically allocate an adjacency segment";
                      }
                    }  // choice adjsid-type
                  }  // container unprotected
                }  // container ipv4-adjacency-segment
              }  // list lan-neighbor
            }  // list interface
    
            leaf no-context-identifier-advertisement {
              junos:must "(!(".. context-identifier"))";
              junos:must-message "no-context-identifier-advertisement and context-identifier attributes are mutually exclusive";
              type empty;
              description
                "Disable context identifier advertisments in this area";
            }
    
            list peer-interface {
              key "name";
              ordered-by user;
              description
                "Configuration for peer interface";
              leaf name {
                type string;
                description
                  "Name of peer interface";
              }
    
              uses apply-advanced;
    
              choice enable-disable {
                leaf disable {
                  type empty;
                  description
                    "Disable OSPF on this control peer";
                }
              }  // choice enable-disable
    
              leaf retransmit-interval {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "1 .. 65535";
                  }
                }
                description
                  "Retransmission interval (seconds)";
              }
    
              leaf transit-delay {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "1 .. 65535";
                  }
                }
                description
                  "Transit delay (seconds)";
              }
    
              leaf hello-interval {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "1 .. 255";
                  }
                }
                description
                  "Hello interval (seconds)";
              }
    
              leaf dead-interval {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "1 .. 65535";
                  }
                }
                description
                  "Dead interval (seconds)";
              }
    
              leaf mtu {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "128 .. 65535";
                  }
                }
                description
                  "Maximum OSPF packet size";
              }
    
              choice auth {
                container authentication {
                  uses juniper-ospf-authentication;
                }  // container authentication
                container authentication-key {
                  status deprecated;
                  description
                    "Authentication key";
                  leaf keyname {
                    type jt:unreadable;
                    description
                      "Authentication key value";
                  }
    
                  leaf key-id {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint32 {
                        range "0 .. 255";
                      }
                    }
                    description
                      "Key ID for MD5 authentication";
                  }
                }  // container authentication-key
              }  // choice auth
    
              leaf demand-circuit {
                type empty;
                description
                  "Interface functions as a demand circuit";
              }
    
              leaf flood-reduction {
                type empty;
                description
                  "Enable flood reduction";
              }
    
              leaf no-neighbor-down-notification {
                type empty;
                description
                  "Don't inform other protocols about neighbor down events";
              }
            }  // list peer-interface
    
            leaf no-source-packet-routing {
              type empty;
              description
                "Disable SPRING in this area";
            }
    
            list context-identifier {
              junos:must "(!(".. no-context-identifier-advertisement"))";
              junos:must-message "no-context-identifier-advertisement and context-identifier attributes are mutually exclusive";
              key "name";
              ordered-by user;
              description
                "Configure context identifier in support of edge protection";
              leaf name {
                type jt:ipv4addr;
                description "Context identifier";
              }
    
              uses apply-advanced;
            }  // list context-identifier
    
            list label-switched-path {
              junos:must "(!(".. .. traffic-engineering multicast-rpf-routes"))";
              junos:must-message "cannot advertise LSPs when using multicast-rpf-routes";
              key "name";
              ordered-by user;
              description
                "Configuration for advertisement of a label-switched path";
              leaf name {
                type string {
                  length "1 .. 64";
                }
                description
                  "Name of label-switched path to be advertised";
              }
    
              uses apply-advanced;
    
              choice enable-disable {
                leaf disable {
                  type empty;
                  description
                    "Disable OSPF on this label-switched path";
                }
              }  // choice enable-disable
    
              leaf metric {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint16 {
                    range "1 .. 65535";
                  }
                }
                description "Interface metric";
              }
    
              list topology {
                key "name";
                ordered-by user;
                description
                  "Topology specific attributes";
                leaf name {
                  type string;
                  description "Topology name";
                }
    
                uses apply-advanced;
    
                leaf disable {
                  type empty;
                  description
                    "Disable this topology";
                }
    
                leaf metric {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint16 {
                      range "1 .. 65535";
                    }
                  }
                  description "Topology metric";
                }
    
                container bandwidth-based-metrics {
                  junos:must "(".. metric")";
                  junos:must-message "Metric must be configured";
                  description
                    "Configure bandwidth based metrics";
                  uses apply-advanced;
    
                  list bandwidth {
                    key "name";
                    description
                      "Bandwidth threshold";
                    leaf name {
                      type string;
                    }
    
                    leaf metric {
                      type union {
                        type string {
                          pattern "<.*>|$.*";
                        }
                        type uint16 {
                          range "1 .. 65535";
                        }
                      }
                      description
                        "Metric associated with specified bandwidth";
                    }
                  }  // list bandwidth
                }  // container bandwidth-based-metrics
              }  // list topology
            }  // list label-switched-path
          }  // list area
    
          choice enable-disable {
            leaf disable {
              type empty;
              description "Disable OSPF";
            }
          }  // choice enable-disable
    
          container traceoptions {
            description "Trace options for OSPF";
            uses apply-advanced;
    
            container file {
              description "Trace file options";
              leaf filename {
                type string {
                  junos:posix-pattern "![/ %]";
                  junos:pattern-message "Must not contain '/', % or a space";
                  length "1 .. 1024";
                }
                description
                  "Name of file in which to write trace information";
              }
    
              leaf replace {
                type empty;
                status deprecated;
                description
                  "Replace trace file rather than appending to it";
              }
    
              leaf size {
                type string;
                description
                  "Maximum trace file size";
              }
    
              leaf files {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "2 .. 1000";
                  }
                }
                default "10";
                description
                  "Maximum number of trace files";
              }
    
              leaf no-stamp {
                type empty;
                status deprecated;
                description
                  "Do not timestamp trace file";
              }
    
              choice world-readable-choice {
                leaf world-readable {
                  type empty;
                  description
                    "Allow any user to read the log file";
                }
                leaf no-world-readable {
                  type empty;
                  description
                    "Don't allow any user to read the log file";
                }
              }  // choice world-readable-choice
            }  // container file
    
            list flag {
              key "name";
              ordered-by user;
              description "Tracing parameters";
              leaf name {
                type enumeration {
                  enum "spf" {
                    value 0;
                    description
                      "Trace SPF calculations";
                  }
                  enum "error" {
                    value 1;
                    description
                      "Trace errored packets";
                  }
                  enum "event" {
                    value 2;
                    description
                      "Trace OSPF state machine events";
                  }
                  enum "packet-dump" {
                    value 3;
                    description
                      "Dump the contents of selected packet types";
                  }
                  enum "flooding" {
                    value 4;
                    description
                      "Trace LSA flooding";
                  }
                  enum "lsa-analysis" {
                    value 5;
                    description
                      "Trace LSA analysis";
                  }
                  enum "packets" {
                    value 6;
                    description
                      "Trace all OSPF packets";
                  }
                  enum "hello" {
                    value 7;
                    description
                      "Trace hello packets";
                  }
                  enum "database-description" {
                    value 8;
                    description
                      "Trace database description packets";
                  }
                  enum "lsa-request" {
                    value 9;
                    description
                      "Trace LSA request packets";
                  }
                  enum "lsa-update" {
                    value 10;
                    description
                      "Trace LSA update packets";
                  }
                  enum "lsa-ack" {
                    value 11;
                    description
                      "Trace LSA acknowledgment packets";
                  }
                  enum "ldp-synchronization" {
                    value 12;
                    description
                      "Trace synchronization between OSPF and LDP";
                  }
                  enum "on-demand" {
                    value 13;
                    description
                      "Trace demand circuit extensions";
                  }
                  enum "nsr-synchronization" {
                    value 14;
                    description
                      "Trace NSR synchronization events";
                  }
                  enum "graceful-restart" {
                    value 15;
                    description
                      "Trace graceful restart";
                  }
                  enum "restart-signaling" {
                    value 16;
                    description
                      "Trace restart signaling";
                  }
                  enum "backup-spf" {
                    value 17;
                    description
                      "Trace backup SPF (LFA) specific events";
                  }
                  enum "source-packet-routing" {
                    value 18;
                    description
                      "Trace source packet routing (SPRING) events";
                  }
                  enum "post-convergence-lfa" {
                    value 19;
                    description
                      "Trace post-convergence-lfa related events";
                  }
                  enum "flex-algorithm" {
                    value 20;
                    description
                      "Trace flex-algorithm related events";
                  }
                  enum "route" {
                    value 21;
                    description
                      "Trace routing information";
                  }
                  enum "normal" {
                    value 22;
                    description
                      "Trace normal events";
                  }
                  enum "general" {
                    value 23;
                    description
                      "Trace general events";
                  }
                  enum "state" {
                    value 24;
                    description
                      "Trace state transitions";
                  }
                  enum "policy" {
                    value 25;
                    description
                      "Trace policy processing";
                  }
                  enum "task" {
                    value 26;
                    description
                      "Trace routing protocol task processing";
                  }
                  enum "timer" {
                    value 27;
                    description
                      "Trace routing protocol timer processing";
                  }
                  enum "all" {
                    value 28;
                    description
                      "Trace everything";
                  }
                }
              }
    
              leaf send {
                type empty;
                description
                  "Trace transmitted packets";
              }
    
              leaf receive {
                type empty;
                description
                  "Trace received packets";
              }
    
              leaf detail {
                type empty;
                description
                  "Trace detailed information";
              }
    
              leaf disable {
                type empty;
                description
                  "Disable this trace flag";
              }
            }  // list flag
          }  // container traceoptions
    
          container spf-options {
            description
              "Configure options for SPF";
            uses apply-advanced;
    
            leaf delay {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "50 .. 8000";
                }
              }
              units "milliseconds";
              description
                "Time to wait before running an SPF";
            }
    
            leaf holddown {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "2000 .. 20000";
                }
              }
              units "milliseconds";
              description
                "Time to hold down before running an SPF";
            }
    
            leaf rapid-runs {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "1 .. 10";
                }
              }
              description
                "Number of maximum rapid SPF runs before holddown";
            }
    
            leaf no-ignore-our-externals {
              type empty;
              description
                "Do not ignore self-generated external and NSSA LSAs";
            }
          }  // container spf-options
    
          leaf prefix-export-limit {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "0 .. 4294967295";
              }
            }
            description
              "Maximum number of prefixes that can be exported";
          }
    
          container rib-groups {
            description
              "Routing table groups for importing OSPF routes";
            uses apply-advanced;
    
            leaf inet {
              junos:must "("routing-options rib-groups $$")";
              junos:must-message "Referenced rib-groups must be defined";
              junos:must "(!(".. topology $$={default} rib-group"))";
              junos:must-message "rib-group cannot be used with topology default rib-group";
              type string;
              description
                "Name of the IPv4/v6 routing table group";
            }
    
            leaf inet3 {
              junos:must "("routing-options rib-groups $$")";
              junos:must-message "Referenced rib-groups must be defined";
              junos:must "(!(".. topology $$={default} rib-group"))";
              junos:must-message "rib-group cannot be used with topology default rib-group";
              type string;
              description
                "Name of the IPv4/v6 inet.3 routing table group";
            }
          }  // container rib-groups
    
          leaf job-stats {
            type empty;
            description "Collect job statistics";
          }
    
          container overload {
            presence "enable overload";
            description
              "Set the overload mode (repel transit traffic)";
            uses apply-advanced;
    
            leaf timeout {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "60 .. 3600";
                }
              }
              units "seconds";
              description
                "Time after which overload mode is reset";
            }
    
            leaf allow-route-leaking {
              type empty;
              description
                "Allow routes to be leaked when overload is configured";
            }
    
            leaf stub-network {
              type empty;
              description
                "Advertise Stub Network with maximum metric";
            }
    
            leaf intra-area-prefix {
              type empty;
              description
                "Advertise Intra Area Prefix with maximum metric";
            }
    
            leaf as-external {
              type empty;
              description
                "Advertise As External with maximum usable metric";
            }
          }  // container overload
    
          container database-protection {
            presence
              "enable database-protection";
            description
              "Configure database protection attributes";
            uses apply-advanced;
    
            leaf maximum-lsa {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "1 .. 1000000";
                }
              }
              description
                "Maximum allowed non self-generated LSAs";
            }
    
            leaf warning-only {
              type empty;
              description
                "Emit only a warning when LSA maximum limit is exceeded";
            }
    
            leaf warning-threshold {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint8 {
                  range "30 .. 100";
                }
              }
              units "percent";
              description
                "Percentage of LSA maximum above which to trigger warning";
            }
    
            leaf ignore-count {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint8 {
                  range "1 .. 32";
                }
              }
              description
                "Maximum number of times to go into ignore state";
            }
    
            leaf ignore-time {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint16 {
                  range "30 .. 3600";
                }
              }
              units "seconds";
              description
                "Time to stay in ignore state and ignore all neighbors";
            }
    
            leaf reset-time {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "60 .. 86400";
                }
              }
              units "seconds";
              description
                "Time after which the ignore count gets reset to zero";
            }
          }  // container database-protection
    
          container graceful-restart {
            description
              "Configure graceful restart attributes";
            uses apply-advanced;
    
            choice enable-disable {
              leaf disable {
                type empty;
                description
                  "Disable OSPF graceful restart capability";
              }
            }  // choice enable-disable
    
            leaf restart-duration {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "1 .. 3600";
                }
              }
              units "seconds";
              description
                "Time for all neighbors to become full";
            }
    
            leaf notify-duration {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "1 .. 3600";
                }
              }
              units "seconds";
              description
                "Time to send all max-aged grace LSAs";
            }
    
            container helper-disable {
              presence "enable helper-disable";
              description
                "Disable graceful restart helper capability";
              uses apply-advanced;
    
              choice disable-choices {
                leaf standard {
                  type empty;
                  description
                    "Disable helper-mode for rfc3623 based GR";
                }
                leaf restart-signaling {
                  type empty;
                  description
                    "Disable helper mode for restart-signaling ";
                }
                leaf both {
                  type empty;
                  description
                    "Disable helper mode for both the types of GR";
                }
              }  // choice disable-choices
            }  // container helper-disable
    
            leaf no-strict-lsa-checking {
              junos:must "(!(".. helper-disable"))";
              junos:must-message "To configure no-strict-lsa-checking, helper-disable must not be set";
              type empty;
              description
                "Do not abort graceful helper mode upon LSA changes";
            }
          }  // container graceful-restart
    
          leaf route-type-community {
            type enumeration {
              enum "iana" {
                value 0;
                description
                  "BGP extended community value used is 0x0306";
              }
              enum "vendor" {
                value 1;
                description
                  "Vendor BGP extended community value used is 0x8000";
              }
            }
            description
              "Specify BGP extended community value to encode OSPF route type";
          }
    
          container domain-id {
            description "Configure domain ID";
            choice domain_id_or_disable {
              leaf domain-id {
                type string;
                description "Domain ID";
              }
              leaf disable {
                type empty;
                description "Disable domain ID";
              }
            }  // choice domain_id_or_disable
          }  // container domain-id
    
          choice domain_vpn_tag_or_disable {
            leaf domain-vpn-tag {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "0 .. 4294967295";
                }
              }
              description
                "Domain VPN tag for external LSA";
            }
            leaf no-domain-vpn-tag {
              type empty;
              description
                "Disable domain VPN tag";
            }
          }  // choice domain_vpn_tag_or_disable
    
          leaf preference {
            type union {
              type uint32;
              type string {
                pattern "<.*>|$.*";
              }
            }
            description
              "Preference of internal routes";
          }
    
          leaf external-preference {
            type union {
              type uint32;
              type string {
                pattern "<.*>|$.*";
              }
            }
            description
              "Preference of external routes";
          }
    
          leaf labeled-preference {
            type union {
              type uint32;
              type string {
                pattern "<.*>|$.*";
              }
            }
            description
              "Preference of labeled routes";
          }
    
          leaf-list export {
            type jt:policy-algebra;
            ordered-by user;
            description "Export policy";
          }
    
          leaf-list import {
            type jt:policy-algebra;
            ordered-by user;
            description
              "Import policy (for external routes or setting priority)";
          }
    
          leaf reference-bandwidth {
            type string;
            description
              "Bandwidth for calculating metric defaults";
          }
    
          leaf lsa-refresh-interval {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "25 .. 50";
              }
            }
            default "50";
            description
              "LSA refresh interval (minutes)";
          }
    
          leaf spf-delay {
            junos:must "(!(".. spf-options delay"))";
            junos:must-message "You can only configure either spf-delay or delay under spf-options";
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "50 .. 8000";
              }
            }
            units "milliseconds";
            status deprecated;
            description
              "Time to wait before running an SPF";
          }
    
          leaf no-rfc-1583 {
            type empty;
            description
              "Disable RFC1583 compatibility";
          }
    
          leaf forwarding-address-to-broadcast {
            type empty;
            description
              "Set forwarding address in Type 5 LSA in broadcast network";
          }
    
          choice nssa-abr-option {
            leaf no-nssa-abr {
              type empty;
              description
                "Disable full NSSA functionality at ABR";
            }
          }  // choice nssa-abr-option
    
          container sham-link {
            presence "enable sham-link";
            description
              "Configure parameters for sham links";
            uses apply-advanced;
    
            leaf local {
              type jt:ipaddr;
              description
                "Local sham link endpoint address";
            }
    
            leaf no-advertise-local {
              type empty;
              status deprecated;
              description
                "Don't advertise local sham link endpoint as stub in router LSA";
            }
          }  // container sham-link
        }  // grouping juniper-protocols-ospf
    
        grouping juniper-ospf-authentication {
          description
            "Authentication information";
          uses apply-advanced;
    
          choice authentication-type {
            leaf simple-password {
              type jt:unreadable;
              description "Authentication key";
            }
            list md5 {
              key "name";
              ordered-by user;
              description
                "MD5 authentication key";
              leaf name {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "0 .. 255";
                  }
                }
                description
                  "Key ID for MD5 authentication";
              }
    
              leaf key {
                type jt:unreadable;
                description
                  "MD5 authentication key value";
              }
    
              leaf start-time {
                type jt:time;
                description
                  "Start time for key transmission (YYYY-MM-DD.HH:MM)";
              }
            }  // list md5
          }  // choice authentication-type
        }  // grouping juniper-ospf-authentication
    
        grouping juniper-protocols-ospf3 {
          list realm {
            key "name";
            ordered-by user;
            description
              "OSPFv3 realm configuration";
            leaf name {
              type enumeration {
                enum "ipv6-unicast" {
                  value 0;
                  description
                    "IPv6 unicast realm";
                }
                enum "ipv6-multicast" {
                  value 1;
                  description
                    "IPv6 multicast realm";
                }
                enum "ipv4-unicast" {
                  value 2;
                  description
                    "IPv4 unicast realm";
                }
                enum "ipv4-multicast" {
                  value 3;
                  description
                    "IPv4 multicast realm";
                }
              }
              description "OSPFv3 realm name";
            }
    
            uses apply-advanced;
    
            list topology {
              key "name";
              ordered-by user;
              description "Topology parameters";
              leaf name {
                type string;
                description "Topology name";
              }
    
              uses apply-advanced;
    
              leaf disable {
                type empty;
                description
                  "Disable this topology";
              }
    
              leaf topology-id {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint8 {
                    range "32 .. 127";
                  }
                }
                description
                  "Topology identifier";
              }
    
              leaf overload {
                type empty;
                description
                  "Set the overload mode (repel transit traffic)";
              }
    
              leaf rib-group {
                junos:must "("routing-options rib-groups $$")";
                junos:must-message "Referenced rib-group must be defined";
                type string;
                description
                  "Routing table group for importing routes";
              }
    
              container spf-options {
                description
                  "Configure options for SPF";
                uses apply-advanced;
    
                leaf delay {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "50 .. 8000";
                    }
                  }
                  units "milliseconds";
                  description
                    "Time to wait before running an SPF";
                }
    
                leaf holddown {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "2000 .. 20000";
                    }
                  }
                  units "milliseconds";
                  description
                    "Time to hold down before running an SPF";
                }
    
                leaf rapid-runs {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "1 .. 10";
                    }
                  }
                  description
                    "Number of maximum rapid SPF runs before holddown";
                }
    
                leaf no-ignore-our-externals {
                  type empty;
                  description
                    "Do not ignore self-generated external and NSSA LSAs";
                }
              }  // container spf-options
    
              container backup-spf-options {
                description
                  "Configure options for backup SPF";
                uses apply-advanced;
    
                container remote-backup-calculation {
                  junos:must "(!("protocols ospf backup-spf-options use-post-convergence-lfa"))";
                  junos:must-message "Not allowed with 'protocols ospf backup-spf-options use-post-convergence-lfa'";
                  presence
                    "enable remote-backup-calculation";
                  description
                    "Calculate Remote LFA backup nexthops";
                  uses apply-advanced;
    
                  container pq-nodes-nearest-to-source {
                    description
                      "PQ nodes selection based upon nearest to source";
                    uses apply-advanced;
    
                    leaf percent {
                      type union {
                        type string {
                          pattern "<.*>|$.*";
                        }
                        type uint32 {
                          range "10 .. 100";
                        }
                      }
                      description
                        "Selection percentage for nearest to source";
                    }
                  }  // container pq-nodes-nearest-to-source
                }  // container remote-backup-calculation
    
                container use-post-convergence-lfa {
                  junos:must "("protocols ospf source-packet-routing")";
                  junos:must-message "Configuration of 'protocols ospf source-packet-routing' is required";
                  presence
                    "enable use-post-convergence-lfa";
                  description
                    "Calculate post-convergence backup paths";
                  uses apply-advanced;
    
                  leaf maximum-labels {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint32 {
                        range "2 .. 8";
                      }
                    }
                    description
                      "Maximum number of labels installed for post-convergence paths";
                  }
    
                  leaf maximum-backup-paths {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint32 {
                        range "1 .. 8";
                      }
                    }
                    description
                      "Maximum number of equal-cost post-convergence paths installed";
                  }
                }  // container use-post-convergence-lfa
    
                leaf use-source-packet-routing {
                  junos:must "(".. .. source-packet-routing")";
                  junos:must-message "Configuration of 'protocols ospf source-packet-routing' is required";
                  junos:must "(!(".. remote-backup-calculation"))";
                  junos:must-message "Not allowed with 'protocols ospf backup-spf-options remote-backup-calculation'";
                  type empty;
                  description
                    "Use spring backup paths for inet.0 routes";
                }
    
                leaf disable {
                  junos:must "(!("protocols ospf backup-spf-options use-post-convergence-lfa"))";
                  junos:must-message "Not allowed with 'protocols ospf backup-spf-options use-post-convergence-lfa'";
                  type empty;
                  description
                    "Do not run backup SPF";
                }
    
                leaf no-install {
                  type empty;
                  description
                    "Do not install backup nexthops into the RIB";
                }
    
                leaf downstream-paths-only {
                  junos:must "(!("protocols ospf backup-spf-options use-post-convergence-lfa"))";
                  junos:must-message "Not allowed with 'protocols ospf backup-spf-options use-post-convergence-lfa'";
                  type empty;
                  description
                    "Use only downstream backup paths";
                }
    
                container per-prefix-calculation {
                  junos:must "(!("protocols ospf backup-spf-options use-post-convergence-lfa"))";
                  junos:must-message "Not allowed with 'protocols ospf backup-spf-options use-post-convergence-lfa'";
                  description
                    "Calculate backup nexthops for non-best prefix originators";
                  uses apply-advanced;
    
                  leaf stubs {
                    type empty;
                    description
                      "Per prefix calculation for stubs only";
                  }
    
                  leaf summary {
                    type empty;
                    description
                      "Per prefix calculation for summary originators only";
                  }
    
                  leaf externals {
                    type empty;
                    description
                      "Per prefix calculation for externals";
                  }
    
                  leaf all {
                    type empty;
                    description
                      "Per prefix calculation for all";
                  }
                }  // container per-prefix-calculation
    
                leaf node-link-degradation {
                  junos:must "(!("protocols ospf backup-spf-options use-post-convergence-lfa"))";
                  junos:must-message "Not allowed with 'protocols ospf backup-spf-options use-post-convergence-lfa'";
                  type empty;
                  description
                    "Degrade to link protection when nodelink protection not available";
                }
              }  // container backup-spf-options
    
              leaf prefix-export-limit {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "0 .. 4294967295";
                  }
                }
                description
                  "Maximum number of prefixes that can be exported";
              }
            }  // list topology
    
            container backup-spf-options {
              description
                "Configure options for backup SPF";
              uses apply-advanced;
    
              container remote-backup-calculation {
                junos:must "(!("protocols ospf backup-spf-options use-post-convergence-lfa"))";
                junos:must-message "Not allowed with 'protocols ospf backup-spf-options use-post-convergence-lfa'";
                presence
                  "enable remote-backup-calculation";
                description
                  "Calculate Remote LFA backup nexthops";
                uses apply-advanced;
    
                container pq-nodes-nearest-to-source {
                  description
                    "PQ nodes selection based upon nearest to source";
                  uses apply-advanced;
    
                  leaf percent {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint32 {
                        range "10 .. 100";
                      }
                    }
                    description
                      "Selection percentage for nearest to source";
                  }
                }  // container pq-nodes-nearest-to-source
              }  // container remote-backup-calculation
    
              container use-post-convergence-lfa {
                junos:must "("protocols ospf source-packet-routing")";
                junos:must-message "Configuration of 'protocols ospf source-packet-routing' is required";
                presence
                  "enable use-post-convergence-lfa";
                description
                  "Calculate post-convergence backup paths";
                uses apply-advanced;
    
                leaf maximum-labels {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "2 .. 8";
                    }
                  }
                  description
                    "Maximum number of labels installed for post-convergence paths";
                }
    
                leaf maximum-backup-paths {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "1 .. 8";
                    }
                  }
                  description
                    "Maximum number of equal-cost post-convergence paths installed";
                }
              }  // container use-post-convergence-lfa
    
              leaf use-source-packet-routing {
                junos:must "(".. .. source-packet-routing")";
                junos:must-message "Configuration of 'protocols ospf source-packet-routing' is required";
                junos:must "(!(".. remote-backup-calculation"))";
                junos:must-message "Not allowed with 'protocols ospf backup-spf-options remote-backup-calculation'";
                type empty;
                description
                  "Use spring backup paths for inet.0 routes";
              }
    
              leaf disable {
                junos:must "(!("protocols ospf backup-spf-options use-post-convergence-lfa"))";
                junos:must-message "Not allowed with 'protocols ospf backup-spf-options use-post-convergence-lfa'";
                type empty;
                description
                  "Do not run backup SPF";
              }
    
              leaf no-install {
                type empty;
                description
                  "Do not install backup nexthops into the RIB";
              }
    
              leaf downstream-paths-only {
                junos:must "(!("protocols ospf backup-spf-options use-post-convergence-lfa"))";
                junos:must-message "Not allowed with 'protocols ospf backup-spf-options use-post-convergence-lfa'";
                type empty;
                description
                  "Use only downstream backup paths";
              }
    
              container per-prefix-calculation {
                junos:must "(!("protocols ospf backup-spf-options use-post-convergence-lfa"))";
                junos:must-message "Not allowed with 'protocols ospf backup-spf-options use-post-convergence-lfa'";
                description
                  "Calculate backup nexthops for non-best prefix originators";
                uses apply-advanced;
    
                leaf stubs {
                  type empty;
                  description
                    "Per prefix calculation for stubs only";
                }
    
                leaf summary {
                  type empty;
                  description
                    "Per prefix calculation for summary originators only";
                }
    
                leaf externals {
                  type empty;
                  description
                    "Per prefix calculation for externals";
                }
    
                leaf all {
                  type empty;
                  description
                    "Per prefix calculation for all";
                }
              }  // container per-prefix-calculation
    
              leaf node-link-degradation {
                junos:must "(!("protocols ospf backup-spf-options use-post-convergence-lfa"))";
                junos:must-message "Not allowed with 'protocols ospf backup-spf-options use-post-convergence-lfa'";
                type empty;
                description
                  "Degrade to link protection when nodelink protection not available";
              }
            }  // container backup-spf-options
    
            container traffic-engineering {
              presence
                "enable traffic-engineering";
              description
                "Configure traffic engineering attributes";
              uses apply-advanced;
    
              leaf no-topology {
                type empty;
                description
                  "Disable dissemination of TE link-state topology information";
              }
    
              leaf multicast-rpf-routes {
                junos:must "(!(".. .. topology $$={ipv4-multicast}"))";
                junos:must-message "multicast-rpf-routes cannot be used with topology ipv4-multicast";
                junos:must "(".. shortcuts")";
                junos:must-message "multicast-rpf-routes cannot be used without shortcuts";
                type empty;
                description
                  "Install routes for multicast RPF checks into inet.2";
              }
    
              leaf l3-unicast-topology {
                type empty;
                description
                  "Download IGP topology into TED";
              }
    
              container ignore-lsp-metrics {
                presence
                  "enable ignore-lsp-metrics";
                description
                  "Ignore label-switched path metrics when doing shortcuts";
                uses apply-advanced;
    
                leaf unconfigured-only {
                  type empty;
                  description
                    "Ignore lsp metrics for unconfigured only";
                }
              }  // container ignore-lsp-metrics
    
              container shortcuts {
                presence "enable shortcuts";
                description
                  "Use label-switched paths as next hops, if possible";
                uses apply-advanced;
    
                leaf ignore-lsp-metrics {
                  type empty;
                  status deprecated;
                  description
                    "Ignore label-switched path metrics when doing shortcuts";
                }
    
                leaf lsp-metric-into-summary {
                  type empty;
                  description
                    "Advertise LSP metric into summary LSAs";
                }
    
                list family {
                  key "name";
                  ordered-by user;
                  description
                    "Address family specific traffic-engineering attributes";
                  leaf name {
                    type enumeration {
                      enum "inet" {
                        value 0;
                        description
                          "IPv4 family";
                      }
                      enum "inet-mpls" {
                        value 1;
                        description
                          "IPv4-MPLS family";
                      }
                    }
                  }
    
                  uses apply-advanced;
                }  // list family
              }  // container shortcuts
    
              leaf advertise-unnumbered-interfaces {
                type empty;
                description
                  "Advertise unnumbered interfaces";
              }
    
              leaf credibility-protocol-preference {
                type empty;
                description
                  "TED protocol credibility follows protocol preference";
              }
    
              container advertisement {
                description
                  "Advertise TE parameters even if RSVP is not turned on";
                uses apply-advanced;
    
                leaf always {
                  type empty;
                  description
                    "Advertise TE parameters in TE LSAs";
                }
              }  // container advertisement
            }  // container traffic-engineering
    
            container source-packet-routing {
              junos:must "(!(".. .. .. protocols mpls disable"))";
              junos:must-message "SPRING configuration is not allowed with 'protocols mpls disable'";
              junos:must "(".. .. .. protocols mpls ")";
              junos:must-message "SPRING configuration is not allowed without 'protocols mpls'";
              presence
                "enable source-packet-routing";
              description
                "Enable source packet routing (SPRING)";
              uses apply-advanced;
    
              container adjacency-segment {
                description
                  "Attributes for adjacency segments in spring";
                uses apply-advanced;
    
                leaf hold-time {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "180000 .. 900000";
                    }
                  }
                  description
                    "Retain time of Adjacency segment after isolating from an interface";
                }
              }  // container adjacency-segment
    
              leaf-list prefix-segment {
                type jt:policy-algebra;
                ordered-by user;
                description
                  "Prefix Segment policy";
              }
    
              leaf explicit-null {
                type empty;
                description
                  "Set E and P bits in all Prefix SID advertisements";
              }
    
              container node-segment {
                presence "enable node-segment";
                description
                  "Enable support for Node segments in SPRING";
                uses apply-advanced;
    
                leaf ipv4-index {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "0 .. 199999";
                    }
                  }
                  description
                    "Set ipv4 node segment index";
                }
    
                leaf index-range {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "32 .. 16385";
                    }
                  }
                  description
                    "Set range of node segment indices allowed";
                }
              }  // container node-segment
    
              container srgb {
                junos:must "(!(".. node-segment index-range"))";
                junos:must-message "Can not be configured with node-segment index-range";
                description
                  "Set the SRGB global block in SPRING";
                leaf start-label {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32;
                  }
                  description
                    "Start range for SRGB label block";
                }
    
                leaf index-range {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32;
                  }
                  description
                    "Index to the SRGB start label block";
                }
              }  // container srgb
    
              leaf mapping-server {
                junos:must "(".. node-segment")";
                junos:must-message "protocols ospf source-packet-routing node-segment must be defined";
                junos:must "("routing-options source-packet-routing mapping-server-entry $$")";
                junos:must-message "Referenced source-packet-routing mapping-server-entry must be defined";
                type string;
                description
                  "Mapping server name";
              }
    
              leaf install-prefix-sid-for-best-route {
                type empty;
                description
                  "For best route install a exact prefix sid route";
              }
    
              leaf ldp-stitching {
                type empty;
                description
                  "Enable SR to LDP stitching";
              }
    
              leaf-list flex-algorithm {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "128 .. 255";
                  }
                }
                max-elements 16;
                description
                  "Flex-algorithms we would like to participate in";
              }
            }  // container source-packet-routing
    
            list area {
              key "name";
              ordered-by user;
              description
                "Configure an OSPF area";
              leaf name {
                type jt:areaid;
                description "Area ID";
              }
    
              uses apply-advanced;
    
              choice stub-option {
                container stub {
                  presence "enable stub";
                  description
                    "Configure a stub area";
                  leaf default-metric {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint32 {
                        range "1 .. 16777215";
                      }
                    }
                    description
                      "Metric for the default route in this stub area";
                  }
    
                  choice summaries-choice {
                    leaf summaries {
                      type empty;
                      description
                        "Flood summary LSAs into this stub area";
                    }
                    leaf no-summaries {
                      type empty;
                      description
                        "Don't flood summary LSAs into this stub area";
                    }
                  }  // choice summaries-choice
                }  // container stub
                container nssa {
                  presence "enable nssa";
                  description
                    "Configure a not-so-stubby area";
                  uses apply-advanced;
    
                  container default-lsa {
                    presence
                      "enable default-lsa";
                    description
                      "Configure a default LSA";
                    uses apply-advanced;
    
                    leaf default-metric {
                      type union {
                        type string {
                          pattern "<.*>|$.*";
                        }
                        type uint32 {
                          range "1 .. 16777215";
                        }
                      }
                      description
                        "Metric for the default route in this area";
                    }
    
                    leaf metric-type {
                      type union {
                        type string {
                          pattern "<.*>|$.*";
                        }
                        type uint32 {
                          range "1 .. 2";
                        }
                      }
                      description
                        "External metric type for the default type 7 LSA";
                    }
    
                    leaf type-7 {
                      type empty;
                      description
                        "Flood type 7 default LSA if no-summaries is configured";
                    }
                  }  // container default-lsa
    
                  leaf default-metric {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint32 {
                        range "1 .. 16777215";
                      }
                    }
                    status deprecated;
                    description
                      "Metric for the default route in this area";
                  }
    
                  leaf metric-type {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint32 {
                        range "1 .. 2";
                      }
                    }
                    status deprecated;
                    description
                      "External metric type for the default type 7 LSA";
                  }
    
                  choice summaries-choice {
                    leaf summaries {
                      type empty;
                      description
                        "Flood summary LSAs into this NSSA area";
                    }
                    leaf no-summaries {
                      type empty;
                      description
                        "Don't flood summary LSAs into this NSSA area";
                    }
                  }  // choice summaries-choice
    
                  list area-range {
                    key "name";
                    ordered-by user;
                    description
                      "Configure NSSA area ranges";
                    leaf name {
                      type jt:ipprefix;
                      description
                        "Range to summarize NSSA routes in this area";
                    }
    
                    uses apply-advanced;
    
                    leaf restrict {
                      type empty;
                      description
                        "Restrict advertisement of this area range";
                    }
    
                    leaf exact {
                      type empty;
                      description
                        "Enforce exact match for advertisement of this area range";
                    }
    
                    container override-metric {
                      presence
                        "enable override-metric";
                      description
                        "Override the dynamic metric for this area-range";
                      uses apply-advanced;
    
                      leaf metric {
                        type union {
                          type string {
                            pattern "<.*>|$.*";
                          }
                          type uint32 {
                            range
                              "1 .. 16777215";
                          }
                        }
                        description
                          "Metric value";
                      }
    
                      leaf metric-type {
                        type union {
                          type string {
                            pattern "<.*>|$.*";
                          }
                          type uint32 {
                            range "1 .. 2";
                          }
                        }
                        default "1";
                        description
                          "Set the metric type for the override metric";
                      }
                    }  // container override-metric
                  }  // list area-range
                }  // container nssa
              }  // choice stub-option
    
              list area-range {
                key "name";
                ordered-by user;
                description
                  "Configure area ranges";
                leaf name {
                  type jt:ipprefix;
                  description
                    "Range to summarize routes in this area";
                }
    
                uses apply-advanced;
    
                leaf restrict {
                  type empty;
                  description
                    "Restrict advertisement of this area range";
                }
    
                leaf exact {
                  type empty;
                  description
                    "Enforce exact match for advertisement of this area range";
                }
    
                leaf override-metric {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "1 .. 16777215";
                    }
                  }
                  description
                    "Override the dynamic metric for this area-range";
                }
              }  // list area-range
    
              leaf-list network-summary-export {
                type jt:policy-algebra;
                ordered-by user;
                description
                  "Export policy for Type 3 Summary LSAs";
              }
    
              leaf-list network-summary-import {
                type jt:policy-algebra;
                ordered-by user;
                description
                  "Import policy for Type 3 Summary LSAs";
              }
    
              leaf-list inter-area-prefix-export {
                type jt:policy-algebra;
                ordered-by user;
                description
                  "Export policy for Inter Area Prefix LSAs";
              }
    
              leaf-list inter-area-prefix-import {
                type jt:policy-algebra;
                ordered-by user;
                description
                  "Import policy for Inter Area Prefix LSAs";
              }
    
              leaf authentication-type {
                type enumeration {
                  enum "none" {
                    value 0;
                    status deprecated;
                    description
                      "No authentication";
                  }
                  enum "simple" {
                    value 1;
                    status deprecated;
                    description
                      "Simple password authentication";
                  }
                  enum "md5" {
                    value 2;
                    status deprecated;
                    description
                      "MD5 authentication";
                  }
                }
                status deprecated;
                description
                  "Authentication type";
              }
    
              list virtual-link {
                junos:must "(".. .. area $$={0.0.0.0}")";
                junos:must-message "virtual link can be configured only under backbone area";
                key "neighbor-id transit-area";
                ordered-by user;
                description
                  "Configure virtual links";
                leaf neighbor-id {
                  type jt:ipv4addr;
                  description
                    "Router ID of a virtual neighbor";
                }
    
                leaf transit-area {
                  type jt:areaid;
                  description
                    "Transit area in common with virtual neighbor";
                }
    
                uses apply-advanced;
    
                choice enable-disable {
                  leaf disable {
                    type empty;
                    description
                      "Disable this virtual link";
                  }
                }  // choice enable-disable
    
                leaf retransmit-interval {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "1 .. 65535";
                    }
                  }
                  description
                    "Retransmission interval (seconds)";
                }
    
                leaf transit-delay {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "1 .. 65535";
                    }
                  }
                  description
                    "Transit delay (seconds)";
                }
    
                leaf hello-interval {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "1 .. 255";
                    }
                  }
                  description
                    "Hello interval (seconds)";
                }
    
                leaf dead-interval {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "1 .. 65535";
                    }
                  }
                  description
                    "Dead interval (seconds)";
                }
    
                leaf mtu {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "128 .. 65535";
                    }
                  }
                  description
                    "Maximum OSPF packet size";
                }
    
                choice auth {
                  container authentication {
                    uses juniper-ospf-authentication;
                  }  // container authentication
                  container authentication-key {
                    status deprecated;
                    description
                      "Authentication key";
                    leaf keyname {
                      type jt:unreadable;
                      description
                        "Authentication key value";
                    }
    
                    leaf key-id {
                      type union {
                        type string {
                          pattern "<.*>|$.*";
                        }
                        type uint32 {
                          range "0 .. 255";
                        }
                      }
                      description
                        "Key ID for MD5 authentication";
                    }
                  }  // container authentication-key
                }  // choice auth
    
                leaf demand-circuit {
                  type empty;
                  description
                    "Interface functions as a demand circuit";
                }
    
                leaf flood-reduction {
                  type empty;
                  description
                    "Enable flood reduction";
                }
    
                leaf no-neighbor-down-notification {
                  type empty;
                  description
                    "Don't inform other protocols about neighbor down events";
                }
    
                leaf ipsec-sa {
                  junos:must "(!(any ".. .. interface <st*> ipsec-sa $$"))";
                  junos:must-message "Must not configure ipsec-sa for st0 interface";
                  junos:must "("security ipsec security-association $$ manual")";
                  junos:must-message "Referenced IPSec security association must be a manual SA";
                  junos:must "("security ipsec security-association $$ mode transport")";
                  junos:must-message "Referenced IPSec security association must be in transport mode";
                  junos:must "("security ipsec security-association $$")";
                  junos:must-message "Referenced IPSec security association must be defined";
                  type string {
                    length "1 .. 32";
                  }
                  description
                    "IPSec security association name";
                }
    
                list topology {
                  key "name";
                  ordered-by user;
                  description
                    "Topology specific attributes";
                  leaf name {
                    type string;
                    description "Topology name";
                  }
    
                  uses apply-advanced;
    
                  leaf disable {
                    type empty;
                    description
                      "Disable this topology";
                  }
    
                  leaf metric {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint16 {
                        range "1 .. 65535";
                      }
                    }
                    description
                      "Topology metric";
                  }
    
                  container bandwidth-based-metrics {
                    junos:must "(".. metric")";
                    junos:must-message "Metric must be configured";
                    description
                      "Configure bandwidth based metrics";
                    uses apply-advanced;
    
                    list bandwidth {
                      key "name";
                      description
                        "Bandwidth threshold";
                      leaf name {
                        type string;
                      }
    
                      leaf metric {
                        type union {
                          type string {
                            pattern "<.*>|$.*";
                          }
                          type uint16 {
                            range "1 .. 65535";
                          }
                        }
                        description
                          "Metric associated with specified bandwidth";
                      }
                    }  // list bandwidth
                  }  // container bandwidth-based-metrics
                }  // list topology
              }  // list virtual-link
    
              list sham-link-remote {
                key "name";
                ordered-by user;
                description
                  "Configure parameters for remote sham link endpoint";
                leaf name {
                  junos:must "(!(".. .. .. sham-link local $$"))";
                  junos:must-message "Local and remote sham link endpoint addresses must be different";
                  junos:must "(".. .. .. sham-link local")";
                  junos:must-message "Local sham link endpoint must be configured";
                  type jt:ipaddr;
                  description
                    "Remote sham link endpoint address";
                }
    
                uses apply-advanced;
    
                leaf metric {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint16 {
                      range "1 .. 65535";
                    }
                  }
                  description "Sham link metric";
                }
    
                leaf ipsec-sa {
                  junos:must "(!(any ".. .. interface <st*> ipsec-sa $$"))";
                  junos:must-message "Must not configure ipsec-sa for st0 interface";
                  junos:must "("security ipsec security-association $$ manual")";
                  junos:must-message "Referenced IPSec security association must be a manual SA";
                  junos:must "("security ipsec security-association $$ mode transport")";
                  junos:must-message "Referenced IPSec security association must be in transport mode";
                  junos:must "("security ipsec security-association $$")";
                  junos:must-message "Referenced IPSec security association must be defined";
                  type string {
                    length "1 .. 32";
                  }
                  description
                    "IPSec security association name";
                }
    
                leaf demand-circuit {
                  type empty;
                  description
                    "Interface functions as a demand circuit";
                }
    
                leaf flood-reduction {
                  type empty;
                  description
                    "Enable flood reduction";
                }
    
                list topology {
                  key "name";
                  ordered-by user;
                  description
                    "Topology specific attributes";
                  leaf name {
                    type string;
                    description "Topology name";
                  }
    
                  uses apply-advanced;
    
                  leaf disable {
                    type empty;
                    description
                      "Disable this topology";
                  }
    
                  leaf metric {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint16 {
                        range "1 .. 65535";
                      }
                    }
                    description
                      "Topology metric";
                  }
    
                  container bandwidth-based-metrics {
                    junos:must "(".. metric")";
                    junos:must-message "Metric must be configured";
                    description
                      "Configure bandwidth based metrics";
                    uses apply-advanced;
    
                    list bandwidth {
                      key "name";
                      description
                        "Bandwidth threshold";
                      leaf name {
                        type string;
                      }
    
                      leaf metric {
                        type union {
                          type string {
                            pattern "<.*>|$.*";
                          }
                          type uint16 {
                            range "1 .. 65535";
                          }
                        }
                        description
                          "Metric associated with specified bandwidth";
                      }
                    }  // list bandwidth
                  }  // container bandwidth-based-metrics
                }  // list topology
              }  // list sham-link-remote
    
              list interface {
                key "name";
                ordered-by user;
                description
                  "Include an interface in this area";
                leaf name {
                  junos:must "((!(".. interface-type nbma") || (!(("interfaces $$" || any "logical-systems <*> interfaces $$")) || (any "interfaces $$-IFL family inet address <*>" || any "logical-systems <*> interfaces $$-IFL family inet address <*>"))))";
                  junos:must-message "IPv4 address must be configured on the interface for nbma mode";
                  type union {
                    type jt:ipv4addr-or-interface;
                    type string {
                      pattern "<.*>|$.*";
                    }
                  }
                  description "Interface name";
                }
    
                uses apply-advanced;
    
                choice enable-disable {
                  leaf disable {
                    type empty;
                    description
                      "Disable OSPF on this interface";
                  }
                }  // choice enable-disable
    
                leaf interface-type {
                  type enumeration {
                    enum "nbma" {
                      value 0;
                      description
                        "Nonbroadcast multiaccess";
                    }
                    enum "p2mp" {
                      value 1;
                      description
                        "Point-to-multipoint NBMA";
                    }
                    enum "p2p" {
                      value 2;
                      description
                        "Point-to-point";
                    }
                    enum "p2mp-over-lan" {
                      value 3;
                      description
                        "Point-to-multipoint over LAN mode";
                    }
                  }
                  description
                    "Type of interface";
                }
    
                choice protection-type {
                  leaf link-protection {
                    type empty;
                    description
                      "Protect interface from link faults only";
                  }
                  leaf node-link-protection {
                    type empty;
                    description
                      "Protect interface from both link and node faults";
                  }
                }  // choice protection-type
    
                leaf no-eligible-backup {
                  type empty;
                  description
                    "Not eligible to backup traffic from protected interfaces";
                }
    
                leaf no-eligible-remote-backup {
                  type empty;
                  description
                    "Not eligible for Remote-LFA backup traffic from protected interfaces";
                }
    
                container passive {
                  presence "enable passive";
                  description
                    "Do not run OSPF, but advertise it";
                  uses apply-advanced;
    
                  container traffic-engineering {
                    description
                      "Advertise TE link information";
                    uses apply-advanced;
    
                    leaf remote-node-id {
                      type jt:ipaddr;
                      description
                        "Remote address of the link";
                    }
    
                    leaf remote-node-router-id {
                      junos:must "(".. remote-node-id")";
                      junos:must-message "remote-node-id must be configured";
                      type jt:ipv4addr;
                      description
                        "TE Router-ID of the remote node";
                    }
                  }  // container traffic-engineering
                }  // container passive
    
                leaf secondary {
                  junos:must "(!(" .. ipsec-sa"))";
                  junos:must-message "secondary interface cannot have ipsec-sa configured";
                  junos:must "(!(" .. dynamic-neighbors"))";
                  junos:must-message "secondary interface cannot have dynamic-neighbors configured";
                  junos:must "(!(" .. neighbor"))";
                  junos:must-message "secondary interface cannot have configured neighbors";
                  junos:must "(!(" .. interface-type p2mp"))";
                  junos:must-message "secondary interface cannot be set as type p2mp";
                  junos:must "(!(" .. interface-type nbma"))";
                  junos:must-message "secondary interface cannot be set as type nbma";
                  junos:must "(!(" .. passive"))";
                  junos:must-message "secondary interface cannot be configured passive";
                  type empty;
                  description
                    "Treat interface as secondary";
                }
    
                leaf own-router-lsa {
                  type empty;
                  description
                    "Generate a separate router LSA for this interface";
                }
    
                container bandwidth-based-metrics {
                  junos:must "(".. metric")";
                  junos:must-message "Metric must be configured";
                  description
                    "Configure bandwidth based metrics";
                  uses apply-advanced;
    
                  list bandwidth {
                    key "name";
                    description
                      "Bandwidth threshold";
                    leaf name {
                      type string;
                    }
    
                    leaf metric {
                      type union {
                        type string {
                          pattern "<.*>|$.*";
                        }
                        type uint16 {
                          range "1 .. 65535";
                        }
                      }
                      description
                        "Metric associated with specified bandwidth";
                    }
                  }  // list bandwidth
                }  // container bandwidth-based-metrics
    
                leaf metric {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint16 {
                      range "1 .. 65535";
                    }
                  }
                  description "Interface metric";
                }
    
                leaf priority {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "0 .. 255";
                    }
                  }
                  description
                    "Designated router priority";
                }
    
                leaf retransmit-interval {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "1 .. 65535";
                    }
                  }
                  description
                    "Retransmission interval (seconds)";
                }
    
                leaf transit-delay {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "1 .. 65535";
                    }
                  }
                  description
                    "Transit delay (seconds)";
                }
    
                leaf hello-interval {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "1 .. 255";
                    }
                  }
                  description
                    "Hello interval (seconds)";
                }
    
                leaf dead-interval {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "1 .. 65535";
                    }
                  }
                  description
                    "Dead interval (seconds)";
                }
    
                leaf mtu {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "128 .. 65535";
                    }
                  }
                  description
                    "Maximum OSPF packet size";
                }
    
                choice auth {
                  container authentication {
                    uses juniper-ospf-authentication;
                  }  // container authentication
                  container authentication-key {
                    status deprecated;
                    description
                      "Authentication key";
                    leaf keyname {
                      type jt:unreadable;
                      description
                        "Authentication key value";
                    }
    
                    leaf key-id {
                      type union {
                        type string {
                          pattern "<.*>|$.*";
                        }
                        type uint32 {
                          range "0 .. 255";
                        }
                      }
                      description
                        "Key ID for MD5 authentication";
                    }
                  }  // container authentication-key
                }  // choice auth
    
                leaf demand-circuit {
                  type empty;
                  description
                    "Interface functions as a demand circuit";
                }
    
                leaf flood-reduction {
                  type empty;
                  description
                    "Enable flood reduction";
                }
    
                leaf no-neighbor-down-notification {
                  type empty;
                  description
                    "Don't inform other protocols about neighbor down events";
                }
    
                leaf ipsec-sa {
                  junos:must "(!(any ".. .. interface <st*> ipsec-sa $$"))";
                  junos:must-message "Must not configure ipsec-sa for st0 interface";
                  junos:must "("security ipsec security-association $$ manual")";
                  junos:must-message "Referenced IPSec security association must be a manual SA";
                  junos:must "("security ipsec security-association $$ mode transport")";
                  junos:must-message "Referenced IPSec security association must be in transport mode";
                  junos:must "("security ipsec security-association $$")";
                  junos:must-message "Referenced IPSec security association must be defined";
                  type string {
                    length "1 .. 32";
                  }
                  description
                    "IPSec security association name";
                }
    
                list topology {
                  key "name";
                  ordered-by user;
                  description
                    "Topology specific attributes";
                  leaf name {
                    type string;
                    description "Topology name";
                  }
    
                  uses apply-advanced;
    
                  leaf disable {
                    type empty;
                    description
                      "Disable this topology";
                  }
    
                  leaf metric {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint16 {
                        range "1 .. 65535";
                      }
                    }
                    description
                      "Topology metric";
                  }
    
                  container bandwidth-based-metrics {
                    junos:must "(".. metric")";
                    junos:must-message "Metric must be configured";
                    description
                      "Configure bandwidth based metrics";
                    uses apply-advanced;
    
                    list bandwidth {
                      key "name";
                      description
                        "Bandwidth threshold";
                      leaf name {
                        type string;
                      }
    
                      leaf metric {
                        type union {
                          type string {
                            pattern "<.*>|$.*";
                          }
                          type uint16 {
                            range "1 .. 65535";
                          }
                        }
                        description
                          "Metric associated with specified bandwidth";
                      }
                    }  // list bandwidth
                  }  // container bandwidth-based-metrics
                }  // list topology
    
                leaf transmit-interval {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "1 .. 4294967295";
                    }
                  }
                  status deprecated;
                  description
                    "OSPF packet transmit interval (milliseconds)";
                }
    
                container bfd-liveness-detection {
                  description
                    "Bidirectional Forwarding Detection options";
                  uses apply-advanced;
    
                  leaf version {
                    type enumeration {
                      enum "0" {
                        value 0;
                        description
                          "BFD version 0 (deprecated)";
                      }
                      enum "1" {
                        value 1;
                        description
                          "BFD version 1";
                      }
                      enum "automatic" {
                        value 2;
                        description
                          "Choose BFD version automatically";
                      }
                    }
                    default "automatic";
                    description
                      "BFD protocol version number";
                  }
    
                  leaf minimum-interval {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint32 {
                        range "1 .. 255000";
                      }
                    }
                    units "milliseconds";
                    description
                      "Minimum transmit and receive interval";
                  }
    
                  leaf minimum-transmit-interval {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint32 {
                        range "1 .. 255000";
                      }
                    }
                    units "milliseconds";
                    status deprecated;
                    description
                      "Minimum transmit interval";
                  }
    
                  leaf minimum-receive-interval {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint32 {
                        range "1 .. 255000";
                      }
                    }
                    units "milliseconds";
                    description
                      "Minimum receive interval";
                  }
    
                  leaf multiplier {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint32 {
                        range "1 .. 255";
                      }
                    }
                    default "3";
                    description
                      "Detection time multiplier";
                  }
    
                  choice adaptation-choice {
                    leaf no-adaptation {
                      type empty;
                      description
                        "Disable adaptation";
                    }
                  }  // choice adaptation-choice
    
                  container transmit-interval {
                    description
                      "Transmit-interval options";
                    uses apply-advanced;
    
                    leaf minimum-interval {
                      type union {
                        type string {
                          pattern "<.*>|$.*";
                        }
                        type uint32 {
                          range "1 .. 255000";
                        }
                      }
                      units "milliseconds";
                      description
                        "Minimum transmit interval";
                    }
    
                    leaf threshold {
                      type union {
                        type uint32;
                        type string {
                          pattern "<.*>|$.*";
                        }
                      }
                      units "milliseconds";
                      description
                        "High transmit interval triggering a trap";
                    }
                  }  // container transmit-interval
    
                  container detection-time {
                    description
                      "Detection-time options";
                    uses apply-advanced;
    
                    leaf threshold {
                      type union {
                        type uint32;
                        type string {
                          pattern "<.*>|$.*";
                        }
                      }
                      units "milliseconds";
                      description
                        "High detection-time triggering a trap";
                    }
                  }  // container detection-time
    
                  container authentication {
                    description
                      "Authentication options";
                    uses apply-advanced;
    
                    leaf key-chain {
                      junos:must "(".. algorithm")";
                      junos:must-message "May not be configured without algorithm";
                      junos:must "("security authentication-key-chains key-chain $$")";
                      junos:must-message "Referenced key-chain must be defined";
                      type string;
                      description
                        "Key chain name";
                    }
    
                    leaf algorithm {
                      junos:must "(".. key-chain")";
                      junos:must-message "May not be configured without key-chain";
                      type enumeration {
                        enum "simple-password" {
                          value 0;
                          description
                            "Simple password";
                        }
                        enum "keyed-md5" {
                          value 1;
                          description
                            "Keyed message Digest 5";
                        }
                        enum
                          "meticulous-keyed-md5" {
                          value 2;
                          description
                            "Meticulous keyed message Digest 5";
                        }
                        enum "keyed-sha-1" {
                          value 3;
                          description
                            "Keyed secure hash algorithm (SHA1) ";
                        }
                        enum
                          "meticulous-keyed-sha-1" {
                          value 4;
                          description
                            "Meticulous keyed secure hash algorithm (SHA1) ";
                        }
                      }
                      description
                        "Algorithm name";
                    }
    
                    leaf loose-check {
                      type empty;
                      description
                        "Verify authentication only if authentication is negotiated";
                    }
                  }  // container authentication
    
                  leaf full-neighbors-only {
                    type empty;
                    description
                      "Setup BFD sessions only to Full neighbors";
                  }
    
                  leaf holddown-interval {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint32 {
                        range "0 .. 255000";
                      }
                    }
                    units "milliseconds";
                    description
                      "Time to hold the session-UP notification to the client";
                  }
                }  // container bfd-liveness-detection
    
                leaf dynamic-neighbors {
                  junos:must "(" .. interface-type p2mp")";
                  junos:must-message "dynamic-neighbors option can be set only if the interface type is p2mp";
                  type empty;
                  description
                    "Learn neighbors dynamically on a p2mp interface";
                }
    
                leaf no-advertise-adjacency-segment {
                  type empty;
                  description
                    "Do not advertise an adjacency segment for this interface";
                }
    
                list neighbor {
                  junos:must "(!(" .. dynamic-neighbors"))";
                  junos:must-message "Neighbors cannot be specified manually if dynamic-neighbors is set";
                  key "name";
                  ordered-by user;
                  description "NBMA neighbor";
                  leaf name {
                    type jt:ipaddr;
                    description
                      "Address of neighbor";
                  }
    
                  leaf eligible {
                    type empty;
                    description
                      "Eligible to be DR on an NBMA network";
                  }
                }  // list neighbor
    
                leaf poll-interval {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "1 .. 65535";
                    }
                  }
                  description
                    "Poll interval for NBMA interfaces";
                }
    
                leaf no-interface-state-traps {
                  type empty;
                  description
                    "Do not send interface state change traps";
                }
    
                leaf strict-bfd {
                  junos:must "(" .. bfd-liveness-detection")";
                  junos:must-message "strict bfd cannot be configured without bfd.";
                  junos:must "(!(" .. bfd-liveness-detection full-neighbors-only"))";
                  junos:must-message "full-neighbors-only and strict-bfd cannot be configured together";
                  type empty;
                  description
                    "Enable strict bfd over this interface";
                }
    
                container post-convergence-lfa {
                  junos:must "("protocols ospf backup-spf-options use-post-convergence-lfa")";
                  junos:must-message "Not allowed without 'protocols ospf backup-spf-options use-post-convergence-lfa'";
                  presence
                    "enable post-convergence-lfa";
                  description
                    "Protect interface using post-convergence backup path";
                  uses apply-advanced;
    
                  container node-protection {
                    presence
                      "enable node-protection";
                    description
                      "Compute backup path assuming node failure";
                    uses apply-advanced;
    
                    leaf cost {
                      type union {
                        type string {
                          pattern "<.*>|$.*";
                        }
                        type uint16 {
                          range "1 .. 65535";
                        }
                      }
                      description
                        "Cost for node protection";
                    }
                  }  // container node-protection
    
                  leaf srlg-protection {
                    type empty;
                    description
                      "Compute backup path assuming SRLG failure";
                  }
    
                  leaf fate-sharing-protection {
                    type empty;
                    description
                      "Compute backup path assuming fate-sharing group failure";
                  }
                }  // container post-convergence-lfa
    
                leaf te-metric {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "1 .. 4294967295";
                    }
                  }
                  description
                    "Traffic engineering metric";
                }
    
                container ldp-synchronization {
                  presence
                    "enable ldp-synchronization";
                  description
                    "Advertise maximum metric until LDP is operational";
                  uses ldp-sync-obj;
                }  // container ldp-synchronization
    
                container ipv4-adjacency-segment {
                  junos:must "(!(".. no-advertise-adjacency-segment"))";
                  junos:must-message "ipv4-adjacency-segment can't be configured if no-advertise-adjacency-segment is configured in the same interface";
                  description
                    "Configure ipv4 adjacency segment";
                  uses apply-advanced;
    
                  container protected {
                    description
                      "Adjacency SID is eligible for protection";
                    choice adjsid-type {
                      container index {
                        description
                          "Adjacency SID indexed from SRGB";
                        leaf index-number {
                          type union {
                            type string {
                              pattern "<.*>|$.*";
                            }
                            type uint32 {
                              range
                                "0 .. 199999";
                            }
                          }
                        }
                      }  // container index
                      leaf label {
                        type union {
                          type string {
                            pattern "<.*>|$.*";
                          }
                          type uint32 {
                            range
                              "16 .. 1048575";
                          }
                        }
                        description
                          "Adjacency SID from static label pool";
                      }
                      leaf dynamic {
                        type empty;
                        description
                          "Dynamically allocate an adjacency segment";
                      }
                    }  // choice adjsid-type
                  }  // container protected
    
                  container unprotected {
                    description
                      "Adjacency SID uneligible for protection";
                    choice adjsid-type {
                      container index {
                        description
                          "Adjacency SID indexed from SRGB";
                        leaf index-number {
                          type union {
                            type string {
                              pattern "<.*>|$.*";
                            }
                            type uint32 {
                              range
                                "0 .. 199999";
                            }
                          }
                        }
                      }  // container index
                      leaf label {
                        type union {
                          type string {
                            pattern "<.*>|$.*";
                          }
                          type uint32 {
                            range
                              "16 .. 1048575";
                          }
                        }
                        description
                          "Adjacency SID from static label pool";
                      }
                      leaf dynamic {
                        type empty;
                        description
                          "Dynamically allocate an adjacency segment";
                      }
                    }  // choice adjsid-type
                  }  // container unprotected
                }  // container ipv4-adjacency-segment
    
                list lan-neighbor {
                  junos:must "(!(".. ipv4-adjacency-segment"))";
                  junos:must-message "lan-neighbor can't be configured if ipv4-adjacency-segment is configured in the same interface";
                  junos:must "(!(".. no-advertise-adjacency-segment"))";
                  junos:must-message "lan-neighbor can't be configured if no-advertise-adjacency-segment is configured in the same interface ";
                  junos:must "(!(".. interface-type p2p"))";
                  junos:must-message "lan-neighbor can't be configured for point-to-point interfaces";
                  key "name";
                  ordered-by user;
                  description
                    "Configuration specific to a LAN neighbor";
                  leaf name {
                    type jt:ipaddr;
                    description
                      "Address of neighbor";
                  }
    
                  uses apply-advanced;
    
                  container ipv4-adjacency-segment {
                    junos:must "(!(".. no-advertise-adjacency-segment"))";
                    junos:must-message "ipv4-adjacency-segment can't be configured if no-advertise-adjacency-segment is configured in the same interface";
                    description
                      "Configure ipv4 adjacency segment";
                    uses apply-advanced;
    
                    container protected {
                      description
                        "Adjacency SID is eligible for protection";
                      choice adjsid-type {
                        container index {
                          description
                            "Adjacency SID indexed from SRGB";
                          leaf index-number {
                            type union {
                              type string {
                                pattern
                                  "<.*>|$.*";
                              }
                              type uint32 {
                                range
                                  "0 .. 199999";
                              }
                            }
                          }
                        }  // container index
                        leaf label {
                          type union {
                            type string {
                              pattern "<.*>|$.*";
                            }
                            type uint32 {
                              range
                                "16 .. 1048575";
                            }
                          }
                          description
                            "Adjacency SID from static label pool";
                        }
                        leaf dynamic {
                          type empty;
                          description
                            "Dynamically allocate an adjacency segment";
                        }
                      }  // choice adjsid-type
                    }  // container protected
    
                    container unprotected {
                      description
                        "Adjacency SID uneligible for protection";
                      choice adjsid-type {
                        container index {
                          description
                            "Adjacency SID indexed from SRGB";
                          leaf index-number {
                            type union {
                              type string {
                                pattern
                                  "<.*>|$.*";
                              }
                              type uint32 {
                                range
                                  "0 .. 199999";
                              }
                            }
                          }
                        }  // container index
                        leaf label {
                          type union {
                            type string {
                              pattern "<.*>|$.*";
                            }
                            type uint32 {
                              range
                                "16 .. 1048575";
                            }
                          }
                          description
                            "Adjacency SID from static label pool";
                        }
                        leaf dynamic {
                          type empty;
                          description
                            "Dynamically allocate an adjacency segment";
                        }
                      }  // choice adjsid-type
                    }  // container unprotected
                  }  // container ipv4-adjacency-segment
                }  // list lan-neighbor
              }  // list interface
    
              leaf no-context-identifier-advertisement {
                junos:must "(!(".. context-identifier"))";
                junos:must-message "no-context-identifier-advertisement and context-identifier attributes are mutually exclusive";
                type empty;
                description
                  "Disable context identifier advertisments in this area";
              }
    
              list peer-interface {
                key "name";
                ordered-by user;
                description
                  "Configuration for peer interface";
                leaf name {
                  type string;
                  description
                    "Name of peer interface";
                }
    
                uses apply-advanced;
    
                choice enable-disable {
                  leaf disable {
                    type empty;
                    description
                      "Disable OSPF on this control peer";
                  }
                }  // choice enable-disable
    
                leaf retransmit-interval {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "1 .. 65535";
                    }
                  }
                  description
                    "Retransmission interval (seconds)";
                }
    
                leaf transit-delay {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "1 .. 65535";
                    }
                  }
                  description
                    "Transit delay (seconds)";
                }
    
                leaf hello-interval {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "1 .. 255";
                    }
                  }
                  description
                    "Hello interval (seconds)";
                }
    
                leaf dead-interval {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "1 .. 65535";
                    }
                  }
                  description
                    "Dead interval (seconds)";
                }
    
                leaf mtu {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "128 .. 65535";
                    }
                  }
                  description
                    "Maximum OSPF packet size";
                }
    
                choice auth {
                  container authentication {
                    uses juniper-ospf-authentication;
                  }  // container authentication
                  container authentication-key {
                    status deprecated;
                    description
                      "Authentication key";
                    leaf keyname {
                      type jt:unreadable;
                      description
                        "Authentication key value";
                    }
    
                    leaf key-id {
                      type union {
                        type string {
                          pattern "<.*>|$.*";
                        }
                        type uint32 {
                          range "0 .. 255";
                        }
                      }
                      description
                        "Key ID for MD5 authentication";
                    }
                  }  // container authentication-key
                }  // choice auth
    
                leaf demand-circuit {
                  type empty;
                  description
                    "Interface functions as a demand circuit";
                }
    
                leaf flood-reduction {
                  type empty;
                  description
                    "Enable flood reduction";
                }
    
                leaf no-neighbor-down-notification {
                  type empty;
                  description
                    "Don't inform other protocols about neighbor down events";
                }
              }  // list peer-interface
    
              leaf no-source-packet-routing {
                type empty;
                description
                  "Disable SPRING in this area";
              }
    
              list context-identifier {
                junos:must "(!(".. no-context-identifier-advertisement"))";
                junos:must-message "no-context-identifier-advertisement and context-identifier attributes are mutually exclusive";
                key "name";
                ordered-by user;
                description
                  "Configure context identifier in support of edge protection";
                leaf name {
                  type jt:ipv4addr;
                  description
                    "Context identifier";
                }
    
                uses apply-advanced;
              }  // list context-identifier
    
              list label-switched-path {
                junos:must "(!(".. .. traffic-engineering multicast-rpf-routes"))";
                junos:must-message "cannot advertise LSPs when using multicast-rpf-routes";
                key "name";
                ordered-by user;
                description
                  "Configuration for advertisement of a label-switched path";
                leaf name {
                  type string {
                    length "1 .. 64";
                  }
                  description
                    "Name of label-switched path to be advertised";
                }
    
                uses apply-advanced;
    
                choice enable-disable {
                  leaf disable {
                    type empty;
                    description
                      "Disable OSPF on this label-switched path";
                  }
                }  // choice enable-disable
    
                leaf metric {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint16 {
                      range "1 .. 65535";
                    }
                  }
                  description "Interface metric";
                }
    
                list topology {
                  key "name";
                  ordered-by user;
                  description
                    "Topology specific attributes";
                  leaf name {
                    type string;
                    description "Topology name";
                  }
    
                  uses apply-advanced;
    
                  leaf disable {
                    type empty;
                    description
                      "Disable this topology";
                  }
    
                  leaf metric {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint16 {
                        range "1 .. 65535";
                      }
                    }
                    description
                      "Topology metric";
                  }
    
                  container bandwidth-based-metrics {
                    junos:must "(".. metric")";
                    junos:must-message "Metric must be configured";
                    description
                      "Configure bandwidth based metrics";
                    uses apply-advanced;
    
                    list bandwidth {
                      key "name";
                      description
                        "Bandwidth threshold";
                      leaf name {
                        type string;
                      }
    
                      leaf metric {
                        type union {
                          type string {
                            pattern "<.*>|$.*";
                          }
                          type uint16 {
                            range "1 .. 65535";
                          }
                        }
                        description
                          "Metric associated with specified bandwidth";
                      }
                    }  // list bandwidth
                  }  // container bandwidth-based-metrics
                }  // list topology
              }  // list label-switched-path
            }  // list area
    
            choice enable-disable {
              leaf disable {
                type empty;
                description "Disable OSPF";
              }
            }  // choice enable-disable
    
            container traceoptions {
              description
                "Trace options for OSPF";
              uses apply-advanced;
    
              container file {
                description "Trace file options";
                leaf filename {
                  type string {
                    junos:posix-pattern "![/ %]";
                    junos:pattern-message "Must not contain '/', % or a space";
                    length "1 .. 1024";
                  }
                  description
                    "Name of file in which to write trace information";
                }
    
                leaf replace {
                  type empty;
                  status deprecated;
                  description
                    "Replace trace file rather than appending to it";
                }
    
                leaf size {
                  type string;
                  description
                    "Maximum trace file size";
                }
    
                leaf files {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "2 .. 1000";
                    }
                  }
                  default "10";
                  description
                    "Maximum number of trace files";
                }
    
                leaf no-stamp {
                  type empty;
                  status deprecated;
                  description
                    "Do not timestamp trace file";
                }
    
                choice world-readable-choice {
                  leaf world-readable {
                    type empty;
                    description
                      "Allow any user to read the log file";
                  }
                  leaf no-world-readable {
                    type empty;
                    description
                      "Don't allow any user to read the log file";
                  }
                }  // choice world-readable-choice
              }  // container file
    
              list flag {
                key "name";
                ordered-by user;
                description "Tracing parameters";
                leaf name {
                  type enumeration {
                    enum "spf" {
                      value 0;
                      description
                        "Trace SPF calculations";
                    }
                    enum "error" {
                      value 1;
                      description
                        "Trace errored packets";
                    }
                    enum "event" {
                      value 2;
                      description
                        "Trace OSPF state machine events";
                    }
                    enum "packet-dump" {
                      value 3;
                      description
                        "Dump the contents of selected packet types";
                    }
                    enum "flooding" {
                      value 4;
                      description
                        "Trace LSA flooding";
                    }
                    enum "lsa-analysis" {
                      value 5;
                      description
                        "Trace LSA analysis";
                    }
                    enum "packets" {
                      value 6;
                      description
                        "Trace all OSPF packets";
                    }
                    enum "hello" {
                      value 7;
                      description
                        "Trace hello packets";
                    }
                    enum "database-description" {
                      value 8;
                      description
                        "Trace database description packets";
                    }
                    enum "lsa-request" {
                      value 9;
                      description
                        "Trace LSA request packets";
                    }
                    enum "lsa-update" {
                      value 10;
                      description
                        "Trace LSA update packets";
                    }
                    enum "lsa-ack" {
                      value 11;
                      description
                        "Trace LSA acknowledgment packets";
                    }
                    enum "ldp-synchronization" {
                      value 12;
                      description
                        "Trace synchronization between OSPF and LDP";
                    }
                    enum "on-demand" {
                      value 13;
                      description
                        "Trace demand circuit extensions";
                    }
                    enum "nsr-synchronization" {
                      value 14;
                      description
                        "Trace NSR synchronization events";
                    }
                    enum "graceful-restart" {
                      value 15;
                      description
                        "Trace graceful restart";
                    }
                    enum "restart-signaling" {
                      value 16;
                      description
                        "Trace restart signaling";
                    }
                    enum "backup-spf" {
                      value 17;
                      description
                        "Trace backup SPF (LFA) specific events";
                    }
                    enum "source-packet-routing" {
                      value 18;
                      description
                        "Trace source packet routing (SPRING) events";
                    }
                    enum "post-convergence-lfa" {
                      value 19;
                      description
                        "Trace post-convergence-lfa related events";
                    }
                    enum "flex-algorithm" {
                      value 20;
                      description
                        "Trace flex-algorithm related events";
                    }
                    enum "route" {
                      value 21;
                      description
                        "Trace routing information";
                    }
                    enum "normal" {
                      value 22;
                      description
                        "Trace normal events";
                    }
                    enum "general" {
                      value 23;
                      description
                        "Trace general events";
                    }
                    enum "state" {
                      value 24;
                      description
                        "Trace state transitions";
                    }
                    enum "policy" {
                      value 25;
                      description
                        "Trace policy processing";
                    }
                    enum "task" {
                      value 26;
                      description
                        "Trace routing protocol task processing";
                    }
                    enum "timer" {
                      value 27;
                      description
                        "Trace routing protocol timer processing";
                    }
                    enum "all" {
                      value 28;
                      description
                        "Trace everything";
                    }
                  }
                }
    
                leaf send {
                  type empty;
                  description
                    "Trace transmitted packets";
                }
    
                leaf receive {
                  type empty;
                  description
                    "Trace received packets";
                }
    
                leaf detail {
                  type empty;
                  description
                    "Trace detailed information";
                }
    
                leaf disable {
                  type empty;
                  description
                    "Disable this trace flag";
                }
              }  // list flag
            }  // container traceoptions
    
            container spf-options {
              description
                "Configure options for SPF";
              uses apply-advanced;
    
              leaf delay {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "50 .. 8000";
                  }
                }
                units "milliseconds";
                description
                  "Time to wait before running an SPF";
              }
    
              leaf holddown {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "2000 .. 20000";
                  }
                }
                units "milliseconds";
                description
                  "Time to hold down before running an SPF";
              }
    
              leaf rapid-runs {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "1 .. 10";
                  }
                }
                description
                  "Number of maximum rapid SPF runs before holddown";
              }
    
              leaf no-ignore-our-externals {
                type empty;
                description
                  "Do not ignore self-generated external and NSSA LSAs";
              }
            }  // container spf-options
    
            leaf prefix-export-limit {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "0 .. 4294967295";
                }
              }
              description
                "Maximum number of prefixes that can be exported";
            }
    
            container rib-groups {
              description
                "Routing table groups for importing OSPF routes";
              uses apply-advanced;
    
              leaf inet {
                junos:must "("routing-options rib-groups $$")";
                junos:must-message "Referenced rib-groups must be defined";
                junos:must "(!(".. topology $$={default} rib-group"))";
                junos:must-message "rib-group cannot be used with topology default rib-group";
                type string;
                description
                  "Name of the IPv4/v6 routing table group";
              }
    
              leaf inet3 {
                junos:must "("routing-options rib-groups $$")";
                junos:must-message "Referenced rib-groups must be defined";
                junos:must "(!(".. topology $$={default} rib-group"))";
                junos:must-message "rib-group cannot be used with topology default rib-group";
                type string;
                description
                  "Name of the IPv4/v6 inet.3 routing table group";
              }
            }  // container rib-groups
    
            leaf job-stats {
              type empty;
              description
                "Collect job statistics";
            }
    
            container overload {
              presence "enable overload";
              description
                "Set the overload mode (repel transit traffic)";
              uses apply-advanced;
    
              leaf timeout {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "60 .. 3600";
                  }
                }
                units "seconds";
                description
                  "Time after which overload mode is reset";
              }
    
              leaf allow-route-leaking {
                type empty;
                description
                  "Allow routes to be leaked when overload is configured";
              }
    
              leaf stub-network {
                type empty;
                description
                  "Advertise Stub Network with maximum metric";
              }
    
              leaf intra-area-prefix {
                type empty;
                description
                  "Advertise Intra Area Prefix with maximum metric";
              }
    
              leaf as-external {
                type empty;
                description
                  "Advertise As External with maximum usable metric";
              }
            }  // container overload
    
            container database-protection {
              presence
                "enable database-protection";
              description
                "Configure database protection attributes";
              uses apply-advanced;
    
              leaf maximum-lsa {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "1 .. 1000000";
                  }
                }
                description
                  "Maximum allowed non self-generated LSAs";
              }
    
              leaf warning-only {
                type empty;
                description
                  "Emit only a warning when LSA maximum limit is exceeded";
              }
    
              leaf warning-threshold {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint8 {
                    range "30 .. 100";
                  }
                }
                units "percent";
                description
                  "Percentage of LSA maximum above which to trigger warning";
              }
    
              leaf ignore-count {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint8 {
                    range "1 .. 32";
                  }
                }
                description
                  "Maximum number of times to go into ignore state";
              }
    
              leaf ignore-time {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint16 {
                    range "30 .. 3600";
                  }
                }
                units "seconds";
                description
                  "Time to stay in ignore state and ignore all neighbors";
              }
    
              leaf reset-time {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "60 .. 86400";
                  }
                }
                units "seconds";
                description
                  "Time after which the ignore count gets reset to zero";
              }
            }  // container database-protection
    
            container graceful-restart {
              description
                "Configure graceful restart attributes";
              uses apply-advanced;
    
              choice enable-disable {
                leaf disable {
                  type empty;
                  description
                    "Disable OSPF graceful restart capability";
                }
              }  // choice enable-disable
    
              leaf restart-duration {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "1 .. 3600";
                  }
                }
                units "seconds";
                description
                  "Time for all neighbors to become full";
              }
    
              leaf notify-duration {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "1 .. 3600";
                  }
                }
                units "seconds";
                description
                  "Time to send all max-aged grace LSAs";
              }
    
              container helper-disable {
                presence "enable helper-disable";
                description
                  "Disable graceful restart helper capability";
                uses apply-advanced;
    
                choice disable-choices {
                  leaf standard {
                    type empty;
                    description
                      "Disable helper-mode for rfc3623 based GR";
                  }
                  leaf restart-signaling {
                    type empty;
                    description
                      "Disable helper mode for restart-signaling ";
                  }
                  leaf both {
                    type empty;
                    description
                      "Disable helper mode for both the types of GR";
                  }
                }  // choice disable-choices
              }  // container helper-disable
    
              leaf no-strict-lsa-checking {
                junos:must "(!(".. helper-disable"))";
                junos:must-message "To configure no-strict-lsa-checking, helper-disable must not be set";
                type empty;
                description
                  "Do not abort graceful helper mode upon LSA changes";
              }
            }  // container graceful-restart
    
            leaf route-type-community {
              type enumeration {
                enum "iana" {
                  value 0;
                  description
                    "BGP extended community value used is 0x0306";
                }
                enum "vendor" {
                  value 1;
                  description
                    "Vendor BGP extended community value used is 0x8000";
                }
              }
              description
                "Specify BGP extended community value to encode OSPF route type";
            }
    
            container domain-id {
              description "Configure domain ID";
              choice domain_id_or_disable {
                leaf domain-id {
                  type string;
                  description "Domain ID";
                }
                leaf disable {
                  type empty;
                  description
                    "Disable domain ID";
                }
              }  // choice domain_id_or_disable
            }  // container domain-id
    
            choice domain_vpn_tag_or_disable {
              leaf domain-vpn-tag {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "0 .. 4294967295";
                  }
                }
                description
                  "Domain VPN tag for external LSA";
              }
              leaf no-domain-vpn-tag {
                type empty;
                description
                  "Disable domain VPN tag";
              }
            }  // choice domain_vpn_tag_or_disable
    
            leaf preference {
              type union {
                type uint32;
                type string {
                  pattern "<.*>|$.*";
                }
              }
              description
                "Preference of internal routes";
            }
    
            leaf external-preference {
              type union {
                type uint32;
                type string {
                  pattern "<.*>|$.*";
                }
              }
              description
                "Preference of external routes";
            }
    
            leaf labeled-preference {
              type union {
                type uint32;
                type string {
                  pattern "<.*>|$.*";
                }
              }
              description
                "Preference of labeled routes";
            }
    
            leaf-list export {
              type jt:policy-algebra;
              ordered-by user;
              description "Export policy";
            }
    
            leaf-list import {
              type jt:policy-algebra;
              ordered-by user;
              description
                "Import policy (for external routes or setting priority)";
            }
    
            leaf reference-bandwidth {
              type string;
              description
                "Bandwidth for calculating metric defaults";
            }
    
            leaf lsa-refresh-interval {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "25 .. 50";
                }
              }
              default "50";
              description
                "LSA refresh interval (minutes)";
            }
    
            leaf spf-delay {
              junos:must "(!(".. spf-options delay"))";
              junos:must-message "You can only configure either spf-delay or delay under spf-options";
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "50 .. 8000";
                }
              }
              units "milliseconds";
              status deprecated;
              description
                "Time to wait before running an SPF";
            }
    
            leaf no-rfc-1583 {
              type empty;
              description
                "Disable RFC1583 compatibility";
            }
    
            leaf forwarding-address-to-broadcast {
              type empty;
              description
                "Set forwarding address in Type 5 LSA in broadcast network";
            }
    
            choice nssa-abr-option {
              leaf no-nssa-abr {
                type empty;
                description
                  "Disable full NSSA functionality at ABR";
              }
            }  // choice nssa-abr-option
    
            container sham-link {
              presence "enable sham-link";
              description
                "Configure parameters for sham links";
              uses apply-advanced;
    
              leaf local {
                type jt:ipaddr;
                description
                  "Local sham link endpoint address";
              }
    
              leaf no-advertise-local {
                type empty;
                status deprecated;
                description
                  "Don't advertise local sham link endpoint as stub in router LSA";
              }
            }  // container sham-link
          }  // list realm
    
          uses apply-advanced;
    
          list topology {
            key "name";
            ordered-by user;
            description "Topology parameters";
            leaf name {
              type string;
              description "Topology name";
            }
    
            uses apply-advanced;
    
            leaf disable {
              type empty;
              description
                "Disable this topology";
            }
    
            leaf topology-id {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint8 {
                  range "32 .. 127";
                }
              }
              description "Topology identifier";
            }
    
            leaf overload {
              type empty;
              description
                "Set the overload mode (repel transit traffic)";
            }
    
            leaf rib-group {
              junos:must "("routing-options rib-groups $$")";
              junos:must-message "Referenced rib-group must be defined";
              type string;
              description
                "Routing table group for importing routes";
            }
    
            container spf-options {
              description
                "Configure options for SPF";
              uses apply-advanced;
    
              leaf delay {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "50 .. 8000";
                  }
                }
                units "milliseconds";
                description
                  "Time to wait before running an SPF";
              }
    
              leaf holddown {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "2000 .. 20000";
                  }
                }
                units "milliseconds";
                description
                  "Time to hold down before running an SPF";
              }
    
              leaf rapid-runs {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "1 .. 10";
                  }
                }
                description
                  "Number of maximum rapid SPF runs before holddown";
              }
    
              leaf no-ignore-our-externals {
                type empty;
                description
                  "Do not ignore self-generated external and NSSA LSAs";
              }
            }  // container spf-options
    
            container backup-spf-options {
              description
                "Configure options for backup SPF";
              uses apply-advanced;
    
              container remote-backup-calculation {
                junos:must "(!("protocols ospf backup-spf-options use-post-convergence-lfa"))";
                junos:must-message "Not allowed with 'protocols ospf backup-spf-options use-post-convergence-lfa'";
                presence
                  "enable remote-backup-calculation";
                description
                  "Calculate Remote LFA backup nexthops";
                uses apply-advanced;
    
                container pq-nodes-nearest-to-source {
                  description
                    "PQ nodes selection based upon nearest to source";
                  uses apply-advanced;
    
                  leaf percent {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint32 {
                        range "10 .. 100";
                      }
                    }
                    description
                      "Selection percentage for nearest to source";
                  }
                }  // container pq-nodes-nearest-to-source
              }  // container remote-backup-calculation
    
              container use-post-convergence-lfa {
                junos:must "("protocols ospf source-packet-routing")";
                junos:must-message "Configuration of 'protocols ospf source-packet-routing' is required";
                presence
                  "enable use-post-convergence-lfa";
                description
                  "Calculate post-convergence backup paths";
                uses apply-advanced;
    
                leaf maximum-labels {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "2 .. 8";
                    }
                  }
                  description
                    "Maximum number of labels installed for post-convergence paths";
                }
    
                leaf maximum-backup-paths {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "1 .. 8";
                    }
                  }
                  description
                    "Maximum number of equal-cost post-convergence paths installed";
                }
              }  // container use-post-convergence-lfa
    
              leaf use-source-packet-routing {
                junos:must "(".. .. source-packet-routing")";
                junos:must-message "Configuration of 'protocols ospf source-packet-routing' is required";
                junos:must "(!(".. remote-backup-calculation"))";
                junos:must-message "Not allowed with 'protocols ospf backup-spf-options remote-backup-calculation'";
                type empty;
                description
                  "Use spring backup paths for inet.0 routes";
              }
    
              leaf disable {
                junos:must "(!("protocols ospf backup-spf-options use-post-convergence-lfa"))";
                junos:must-message "Not allowed with 'protocols ospf backup-spf-options use-post-convergence-lfa'";
                type empty;
                description
                  "Do not run backup SPF";
              }
    
              leaf no-install {
                type empty;
                description
                  "Do not install backup nexthops into the RIB";
              }
    
              leaf downstream-paths-only {
                junos:must "(!("protocols ospf backup-spf-options use-post-convergence-lfa"))";
                junos:must-message "Not allowed with 'protocols ospf backup-spf-options use-post-convergence-lfa'";
                type empty;
                description
                  "Use only downstream backup paths";
              }
    
              container per-prefix-calculation {
                junos:must "(!("protocols ospf backup-spf-options use-post-convergence-lfa"))";
                junos:must-message "Not allowed with 'protocols ospf backup-spf-options use-post-convergence-lfa'";
                description
                  "Calculate backup nexthops for non-best prefix originators";
                uses apply-advanced;
    
                leaf stubs {
                  type empty;
                  description
                    "Per prefix calculation for stubs only";
                }
    
                leaf summary {
                  type empty;
                  description
                    "Per prefix calculation for summary originators only";
                }
    
                leaf externals {
                  type empty;
                  description
                    "Per prefix calculation for externals";
                }
    
                leaf all {
                  type empty;
                  description
                    "Per prefix calculation for all";
                }
              }  // container per-prefix-calculation
    
              leaf node-link-degradation {
                junos:must "(!("protocols ospf backup-spf-options use-post-convergence-lfa"))";
                junos:must-message "Not allowed with 'protocols ospf backup-spf-options use-post-convergence-lfa'";
                type empty;
                description
                  "Degrade to link protection when nodelink protection not available";
              }
            }  // container backup-spf-options
    
            leaf prefix-export-limit {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "0 .. 4294967295";
                }
              }
              description
                "Maximum number of prefixes that can be exported";
            }
          }  // list topology
    
          container backup-spf-options {
            description
              "Configure options for backup SPF";
            uses apply-advanced;
    
            container remote-backup-calculation {
              junos:must "(!("protocols ospf backup-spf-options use-post-convergence-lfa"))";
              junos:must-message "Not allowed with 'protocols ospf backup-spf-options use-post-convergence-lfa'";
              presence
                "enable remote-backup-calculation";
              description
                "Calculate Remote LFA backup nexthops";
              uses apply-advanced;
    
              container pq-nodes-nearest-to-source {
                description
                  "PQ nodes selection based upon nearest to source";
                uses apply-advanced;
    
                leaf percent {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "10 .. 100";
                    }
                  }
                  description
                    "Selection percentage for nearest to source";
                }
              }  // container pq-nodes-nearest-to-source
            }  // container remote-backup-calculation
    
            container use-post-convergence-lfa {
              junos:must "("protocols ospf source-packet-routing")";
              junos:must-message "Configuration of 'protocols ospf source-packet-routing' is required";
              presence
                "enable use-post-convergence-lfa";
              description
                "Calculate post-convergence backup paths";
              uses apply-advanced;
    
              leaf maximum-labels {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "2 .. 8";
                  }
                }
                description
                  "Maximum number of labels installed for post-convergence paths";
              }
    
              leaf maximum-backup-paths {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "1 .. 8";
                  }
                }
                description
                  "Maximum number of equal-cost post-convergence paths installed";
              }
            }  // container use-post-convergence-lfa
    
            leaf use-source-packet-routing {
              junos:must "(".. .. source-packet-routing")";
              junos:must-message "Configuration of 'protocols ospf source-packet-routing' is required";
              junos:must "(!(".. remote-backup-calculation"))";
              junos:must-message "Not allowed with 'protocols ospf backup-spf-options remote-backup-calculation'";
              type empty;
              description
                "Use spring backup paths for inet.0 routes";
            }
    
            leaf disable {
              junos:must "(!("protocols ospf backup-spf-options use-post-convergence-lfa"))";
              junos:must-message "Not allowed with 'protocols ospf backup-spf-options use-post-convergence-lfa'";
              type empty;
              description
                "Do not run backup SPF";
            }
    
            leaf no-install {
              type empty;
              description
                "Do not install backup nexthops into the RIB";
            }
    
            leaf downstream-paths-only {
              junos:must "(!("protocols ospf backup-spf-options use-post-convergence-lfa"))";
              junos:must-message "Not allowed with 'protocols ospf backup-spf-options use-post-convergence-lfa'";
              type empty;
              description
                "Use only downstream backup paths";
            }
    
            container per-prefix-calculation {
              junos:must "(!("protocols ospf backup-spf-options use-post-convergence-lfa"))";
              junos:must-message "Not allowed with 'protocols ospf backup-spf-options use-post-convergence-lfa'";
              description
                "Calculate backup nexthops for non-best prefix originators";
              uses apply-advanced;
    
              leaf stubs {
                type empty;
                description
                  "Per prefix calculation for stubs only";
              }
    
              leaf summary {
                type empty;
                description
                  "Per prefix calculation for summary originators only";
              }
    
              leaf externals {
                type empty;
                description
                  "Per prefix calculation for externals";
              }
    
              leaf all {
                type empty;
                description
                  "Per prefix calculation for all";
              }
            }  // container per-prefix-calculation
    
            leaf node-link-degradation {
              junos:must "(!("protocols ospf backup-spf-options use-post-convergence-lfa"))";
              junos:must-message "Not allowed with 'protocols ospf backup-spf-options use-post-convergence-lfa'";
              type empty;
              description
                "Degrade to link protection when nodelink protection not available";
            }
          }  // container backup-spf-options
    
          container traffic-engineering {
            presence
              "enable traffic-engineering";
            description
              "Configure traffic engineering attributes";
            uses apply-advanced;
    
            leaf no-topology {
              type empty;
              description
                "Disable dissemination of TE link-state topology information";
            }
    
            leaf multicast-rpf-routes {
              junos:must "(!(".. .. topology $$={ipv4-multicast}"))";
              junos:must-message "multicast-rpf-routes cannot be used with topology ipv4-multicast";
              junos:must "(".. shortcuts")";
              junos:must-message "multicast-rpf-routes cannot be used without shortcuts";
              type empty;
              description
                "Install routes for multicast RPF checks into inet.2";
            }
    
            leaf l3-unicast-topology {
              type empty;
              description
                "Download IGP topology into TED";
            }
    
            container ignore-lsp-metrics {
              presence
                "enable ignore-lsp-metrics";
              description
                "Ignore label-switched path metrics when doing shortcuts";
              uses apply-advanced;
    
              leaf unconfigured-only {
                type empty;
                description
                  "Ignore lsp metrics for unconfigured only";
              }
            }  // container ignore-lsp-metrics
    
            container shortcuts {
              presence "enable shortcuts";
              description
                "Use label-switched paths as next hops, if possible";
              uses apply-advanced;
    
              leaf ignore-lsp-metrics {
                type empty;
                status deprecated;
                description
                  "Ignore label-switched path metrics when doing shortcuts";
              }
    
              leaf lsp-metric-into-summary {
                type empty;
                description
                  "Advertise LSP metric into summary LSAs";
              }
    
              list family {
                key "name";
                ordered-by user;
                description
                  "Address family specific traffic-engineering attributes";
                leaf name {
                  type enumeration {
                    enum "inet" {
                      value 0;
                      description "IPv4 family";
                    }
                    enum "inet-mpls" {
                      value 1;
                      description
                        "IPv4-MPLS family";
                    }
                  }
                }
    
                uses apply-advanced;
              }  // list family
            }  // container shortcuts
    
            leaf advertise-unnumbered-interfaces {
              type empty;
              description
                "Advertise unnumbered interfaces";
            }
    
            leaf credibility-protocol-preference {
              type empty;
              description
                "TED protocol credibility follows protocol preference";
            }
    
            container advertisement {
              description
                "Advertise TE parameters even if RSVP is not turned on";
              uses apply-advanced;
    
              leaf always {
                type empty;
                description
                  "Advertise TE parameters in TE LSAs";
              }
            }  // container advertisement
          }  // container traffic-engineering
    
          container source-packet-routing {
            junos:must "(!(".. .. .. protocols mpls disable"))";
            junos:must-message "SPRING configuration is not allowed with 'protocols mpls disable'";
            junos:must "(".. .. .. protocols mpls ")";
            junos:must-message "SPRING configuration is not allowed without 'protocols mpls'";
            presence
              "enable source-packet-routing";
            description
              "Enable source packet routing (SPRING)";
            uses apply-advanced;
    
            container adjacency-segment {
              description
                "Attributes for adjacency segments in spring";
              uses apply-advanced;
    
              leaf hold-time {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "180000 .. 900000";
                  }
                }
                description
                  "Retain time of Adjacency segment after isolating from an interface";
              }
            }  // container adjacency-segment
    
            leaf-list prefix-segment {
              type jt:policy-algebra;
              ordered-by user;
              description
                "Prefix Segment policy";
            }
    
            leaf explicit-null {
              type empty;
              description
                "Set E and P bits in all Prefix SID advertisements";
            }
    
            container node-segment {
              presence "enable node-segment";
              description
                "Enable support for Node segments in SPRING";
              uses apply-advanced;
    
              leaf ipv4-index {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "0 .. 199999";
                  }
                }
                description
                  "Set ipv4 node segment index";
              }
    
              leaf index-range {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "32 .. 16385";
                  }
                }
                description
                  "Set range of node segment indices allowed";
              }
            }  // container node-segment
    
            container srgb {
              junos:must "(!(".. node-segment index-range"))";
              junos:must-message "Can not be configured with node-segment index-range";
              description
                "Set the SRGB global block in SPRING";
              leaf start-label {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32;
                }
                description
                  "Start range for SRGB label block";
              }
    
              leaf index-range {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32;
                }
                description
                  "Index to the SRGB start label block";
              }
            }  // container srgb
    
            leaf mapping-server {
              junos:must "(".. node-segment")";
              junos:must-message "protocols ospf source-packet-routing node-segment must be defined";
              junos:must "("routing-options source-packet-routing mapping-server-entry $$")";
              junos:must-message "Referenced source-packet-routing mapping-server-entry must be defined";
              type string;
              description "Mapping server name";
            }
    
            leaf install-prefix-sid-for-best-route {
              type empty;
              description
                "For best route install a exact prefix sid route";
            }
    
            leaf ldp-stitching {
              type empty;
              description
                "Enable SR to LDP stitching";
            }
    
            leaf-list flex-algorithm {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "128 .. 255";
                }
              }
              max-elements 16;
              description
                "Flex-algorithms we would like to participate in";
            }
          }  // container source-packet-routing
    
          list area {
            key "name";
            ordered-by user;
            description "Configure an OSPF area";
            leaf name {
              type jt:areaid;
              description "Area ID";
            }
    
            uses apply-advanced;
    
            choice stub-option {
              container stub {
                presence "enable stub";
                description
                  "Configure a stub area";
                leaf default-metric {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "1 .. 16777215";
                    }
                  }
                  description
                    "Metric for the default route in this stub area";
                }
    
                choice summaries-choice {
                  leaf summaries {
                    type empty;
                    description
                      "Flood summary LSAs into this stub area";
                  }
                  leaf no-summaries {
                    type empty;
                    description
                      "Don't flood summary LSAs into this stub area";
                  }
                }  // choice summaries-choice
              }  // container stub
              container nssa {
                presence "enable nssa";
                description
                  "Configure a not-so-stubby area";
                uses apply-advanced;
    
                container default-lsa {
                  presence "enable default-lsa";
                  description
                    "Configure a default LSA";
                  uses apply-advanced;
    
                  leaf default-metric {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint32 {
                        range "1 .. 16777215";
                      }
                    }
                    description
                      "Metric for the default route in this area";
                  }
    
                  leaf metric-type {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint32 {
                        range "1 .. 2";
                      }
                    }
                    description
                      "External metric type for the default type 7 LSA";
                  }
    
                  leaf type-7 {
                    type empty;
                    description
                      "Flood type 7 default LSA if no-summaries is configured";
                  }
                }  // container default-lsa
    
                leaf default-metric {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "1 .. 16777215";
                    }
                  }
                  status deprecated;
                  description
                    "Metric for the default route in this area";
                }
    
                leaf metric-type {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "1 .. 2";
                    }
                  }
                  status deprecated;
                  description
                    "External metric type for the default type 7 LSA";
                }
    
                choice summaries-choice {
                  leaf summaries {
                    type empty;
                    description
                      "Flood summary LSAs into this NSSA area";
                  }
                  leaf no-summaries {
                    type empty;
                    description
                      "Don't flood summary LSAs into this NSSA area";
                  }
                }  // choice summaries-choice
    
                list area-range {
                  key "name";
                  ordered-by user;
                  description
                    "Configure NSSA area ranges";
                  leaf name {
                    type jt:ipprefix;
                    description
                      "Range to summarize NSSA routes in this area";
                  }
    
                  uses apply-advanced;
    
                  leaf restrict {
                    type empty;
                    description
                      "Restrict advertisement of this area range";
                  }
    
                  leaf exact {
                    type empty;
                    description
                      "Enforce exact match for advertisement of this area range";
                  }
    
                  container override-metric {
                    presence
                      "enable override-metric";
                    description
                      "Override the dynamic metric for this area-range";
                    uses apply-advanced;
    
                    leaf metric {
                      type union {
                        type string {
                          pattern "<.*>|$.*";
                        }
                        type uint32 {
                          range "1 .. 16777215";
                        }
                      }
                      description "Metric value";
                    }
    
                    leaf metric-type {
                      type union {
                        type string {
                          pattern "<.*>|$.*";
                        }
                        type uint32 {
                          range "1 .. 2";
                        }
                      }
                      default "1";
                      description
                        "Set the metric type for the override metric";
                    }
                  }  // container override-metric
                }  // list area-range
              }  // container nssa
            }  // choice stub-option
    
            list area-range {
              key "name";
              ordered-by user;
              description
                "Configure area ranges";
              leaf name {
                type jt:ipprefix;
                description
                  "Range to summarize routes in this area";
              }
    
              uses apply-advanced;
    
              leaf restrict {
                type empty;
                description
                  "Restrict advertisement of this area range";
              }
    
              leaf exact {
                type empty;
                description
                  "Enforce exact match for advertisement of this area range";
              }
    
              leaf override-metric {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "1 .. 16777215";
                  }
                }
                description
                  "Override the dynamic metric for this area-range";
              }
            }  // list area-range
    
            leaf-list network-summary-export {
              type jt:policy-algebra;
              ordered-by user;
              description
                "Export policy for Type 3 Summary LSAs";
            }
    
            leaf-list network-summary-import {
              type jt:policy-algebra;
              ordered-by user;
              description
                "Import policy for Type 3 Summary LSAs";
            }
    
            leaf-list inter-area-prefix-export {
              type jt:policy-algebra;
              ordered-by user;
              description
                "Export policy for Inter Area Prefix LSAs";
            }
    
            leaf-list inter-area-prefix-import {
              type jt:policy-algebra;
              ordered-by user;
              description
                "Import policy for Inter Area Prefix LSAs";
            }
    
            leaf authentication-type {
              type enumeration {
                enum "none" {
                  value 0;
                  status deprecated;
                  description
                    "No authentication";
                }
                enum "simple" {
                  value 1;
                  status deprecated;
                  description
                    "Simple password authentication";
                }
                enum "md5" {
                  value 2;
                  status deprecated;
                  description
                    "MD5 authentication";
                }
              }
              status deprecated;
              description "Authentication type";
            }
    
            list virtual-link {
              junos:must "(".. .. area $$={0.0.0.0}")";
              junos:must-message "virtual link can be configured only under backbone area";
              key "neighbor-id transit-area";
              ordered-by user;
              description
                "Configure virtual links";
              leaf neighbor-id {
                type jt:ipv4addr;
                description
                  "Router ID of a virtual neighbor";
              }
    
              leaf transit-area {
                type jt:areaid;
                description
                  "Transit area in common with virtual neighbor";
              }
    
              uses apply-advanced;
    
              choice enable-disable {
                leaf disable {
                  type empty;
                  description
                    "Disable this virtual link";
                }
              }  // choice enable-disable
    
              leaf retransmit-interval {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "1 .. 65535";
                  }
                }
                description
                  "Retransmission interval (seconds)";
              }
    
              leaf transit-delay {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "1 .. 65535";
                  }
                }
                description
                  "Transit delay (seconds)";
              }
    
              leaf hello-interval {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "1 .. 255";
                  }
                }
                description
                  "Hello interval (seconds)";
              }
    
              leaf dead-interval {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "1 .. 65535";
                  }
                }
                description
                  "Dead interval (seconds)";
              }
    
              leaf mtu {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "128 .. 65535";
                  }
                }
                description
                  "Maximum OSPF packet size";
              }
    
              choice auth {
                container authentication {
                  uses juniper-ospf-authentication;
                }  // container authentication
                container authentication-key {
                  status deprecated;
                  description
                    "Authentication key";
                  leaf keyname {
                    type jt:unreadable;
                    description
                      "Authentication key value";
                  }
    
                  leaf key-id {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint32 {
                        range "0 .. 255";
                      }
                    }
                    description
                      "Key ID for MD5 authentication";
                  }
                }  // container authentication-key
              }  // choice auth
    
              leaf demand-circuit {
                type empty;
                description
                  "Interface functions as a demand circuit";
              }
    
              leaf flood-reduction {
                type empty;
                description
                  "Enable flood reduction";
              }
    
              leaf no-neighbor-down-notification {
                type empty;
                description
                  "Don't inform other protocols about neighbor down events";
              }
    
              leaf ipsec-sa {
                junos:must "(!(any ".. .. interface <st*> ipsec-sa $$"))";
                junos:must-message "Must not configure ipsec-sa for st0 interface";
                junos:must "("security ipsec security-association $$ manual")";
                junos:must-message "Referenced IPSec security association must be a manual SA";
                junos:must "("security ipsec security-association $$ mode transport")";
                junos:must-message "Referenced IPSec security association must be in transport mode";
                junos:must "("security ipsec security-association $$")";
                junos:must-message "Referenced IPSec security association must be defined";
                type string {
                  length "1 .. 32";
                }
                description
                  "IPSec security association name";
              }
    
              list topology {
                key "name";
                ordered-by user;
                description
                  "Topology specific attributes";
                leaf name {
                  type string;
                  description "Topology name";
                }
    
                uses apply-advanced;
    
                leaf disable {
                  type empty;
                  description
                    "Disable this topology";
                }
    
                leaf metric {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint16 {
                      range "1 .. 65535";
                    }
                  }
                  description "Topology metric";
                }
    
                container bandwidth-based-metrics {
                  junos:must "(".. metric")";
                  junos:must-message "Metric must be configured";
                  description
                    "Configure bandwidth based metrics";
                  uses apply-advanced;
    
                  list bandwidth {
                    key "name";
                    description
                      "Bandwidth threshold";
                    leaf name {
                      type string;
                    }
    
                    leaf metric {
                      type union {
                        type string {
                          pattern "<.*>|$.*";
                        }
                        type uint16 {
                          range "1 .. 65535";
                        }
                      }
                      description
                        "Metric associated with specified bandwidth";
                    }
                  }  // list bandwidth
                }  // container bandwidth-based-metrics
              }  // list topology
            }  // list virtual-link
    
            list sham-link-remote {
              key "name";
              ordered-by user;
              description
                "Configure parameters for remote sham link endpoint";
              leaf name {
                junos:must "(!(".. .. .. sham-link local $$"))";
                junos:must-message "Local and remote sham link endpoint addresses must be different";
                junos:must "(".. .. .. sham-link local")";
                junos:must-message "Local sham link endpoint must be configured";
                type jt:ipaddr;
                description
                  "Remote sham link endpoint address";
              }
    
              uses apply-advanced;
    
              leaf metric {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint16 {
                    range "1 .. 65535";
                  }
                }
                description "Sham link metric";
              }
    
              leaf ipsec-sa {
                junos:must "(!(any ".. .. interface <st*> ipsec-sa $$"))";
                junos:must-message "Must not configure ipsec-sa for st0 interface";
                junos:must "("security ipsec security-association $$ manual")";
                junos:must-message "Referenced IPSec security association must be a manual SA";
                junos:must "("security ipsec security-association $$ mode transport")";
                junos:must-message "Referenced IPSec security association must be in transport mode";
                junos:must "("security ipsec security-association $$")";
                junos:must-message "Referenced IPSec security association must be defined";
                type string {
                  length "1 .. 32";
                }
                description
                  "IPSec security association name";
              }
    
              leaf demand-circuit {
                type empty;
                description
                  "Interface functions as a demand circuit";
              }
    
              leaf flood-reduction {
                type empty;
                description
                  "Enable flood reduction";
              }
    
              list topology {
                key "name";
                ordered-by user;
                description
                  "Topology specific attributes";
                leaf name {
                  type string;
                  description "Topology name";
                }
    
                uses apply-advanced;
    
                leaf disable {
                  type empty;
                  description
                    "Disable this topology";
                }
    
                leaf metric {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint16 {
                      range "1 .. 65535";
                    }
                  }
                  description "Topology metric";
                }
    
                container bandwidth-based-metrics {
                  junos:must "(".. metric")";
                  junos:must-message "Metric must be configured";
                  description
                    "Configure bandwidth based metrics";
                  uses apply-advanced;
    
                  list bandwidth {
                    key "name";
                    description
                      "Bandwidth threshold";
                    leaf name {
                      type string;
                    }
    
                    leaf metric {
                      type union {
                        type string {
                          pattern "<.*>|$.*";
                        }
                        type uint16 {
                          range "1 .. 65535";
                        }
                      }
                      description
                        "Metric associated with specified bandwidth";
                    }
                  }  // list bandwidth
                }  // container bandwidth-based-metrics
              }  // list topology
            }  // list sham-link-remote
    
            list interface {
              key "name";
              ordered-by user;
              description
                "Include an interface in this area";
              leaf name {
                junos:must "((!(".. interface-type nbma") || (!(("interfaces $$" || any "logical-systems <*> interfaces $$")) || (any "interfaces $$-IFL family inet address <*>" || any "logical-systems <*> interfaces $$-IFL family inet address <*>"))))";
                junos:must-message "IPv4 address must be configured on the interface for nbma mode";
                type union {
                  type jt:ipv4addr-or-interface;
                  type string {
                    pattern "<.*>|$.*";
                  }
                }
                description "Interface name";
              }
    
              uses apply-advanced;
    
              choice enable-disable {
                leaf disable {
                  type empty;
                  description
                    "Disable OSPF on this interface";
                }
              }  // choice enable-disable
    
              leaf interface-type {
                type enumeration {
                  enum "nbma" {
                    value 0;
                    description
                      "Nonbroadcast multiaccess";
                  }
                  enum "p2mp" {
                    value 1;
                    description
                      "Point-to-multipoint NBMA";
                  }
                  enum "p2p" {
                    value 2;
                    description "Point-to-point";
                  }
                  enum "p2mp-over-lan" {
                    value 3;
                    description
                      "Point-to-multipoint over LAN mode";
                  }
                }
                description "Type of interface";
              }
    
              choice protection-type {
                leaf link-protection {
                  type empty;
                  description
                    "Protect interface from link faults only";
                }
                leaf node-link-protection {
                  type empty;
                  description
                    "Protect interface from both link and node faults";
                }
              }  // choice protection-type
    
              leaf no-eligible-backup {
                type empty;
                description
                  "Not eligible to backup traffic from protected interfaces";
              }
    
              leaf no-eligible-remote-backup {
                type empty;
                description
                  "Not eligible for Remote-LFA backup traffic from protected interfaces";
              }
    
              container passive {
                presence "enable passive";
                description
                  "Do not run OSPF, but advertise it";
                uses apply-advanced;
    
                container traffic-engineering {
                  description
                    "Advertise TE link information";
                  uses apply-advanced;
    
                  leaf remote-node-id {
                    type jt:ipaddr;
                    description
                      "Remote address of the link";
                  }
    
                  leaf remote-node-router-id {
                    junos:must "(".. remote-node-id")";
                    junos:must-message "remote-node-id must be configured";
                    type jt:ipv4addr;
                    description
                      "TE Router-ID of the remote node";
                  }
                }  // container traffic-engineering
              }  // container passive
    
              leaf secondary {
                junos:must "(!(" .. ipsec-sa"))";
                junos:must-message "secondary interface cannot have ipsec-sa configured";
                junos:must "(!(" .. dynamic-neighbors"))";
                junos:must-message "secondary interface cannot have dynamic-neighbors configured";
                junos:must "(!(" .. neighbor"))";
                junos:must-message "secondary interface cannot have configured neighbors";
                junos:must "(!(" .. interface-type p2mp"))";
                junos:must-message "secondary interface cannot be set as type p2mp";
                junos:must "(!(" .. interface-type nbma"))";
                junos:must-message "secondary interface cannot be set as type nbma";
                junos:must "(!(" .. passive"))";
                junos:must-message "secondary interface cannot be configured passive";
                type empty;
                description
                  "Treat interface as secondary";
              }
    
              leaf own-router-lsa {
                type empty;
                description
                  "Generate a separate router LSA for this interface";
              }
    
              container bandwidth-based-metrics {
                junos:must "(".. metric")";
                junos:must-message "Metric must be configured";
                description
                  "Configure bandwidth based metrics";
                uses apply-advanced;
    
                list bandwidth {
                  key "name";
                  description
                    "Bandwidth threshold";
                  leaf name {
                    type string;
                  }
    
                  leaf metric {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint16 {
                        range "1 .. 65535";
                      }
                    }
                    description
                      "Metric associated with specified bandwidth";
                  }
                }  // list bandwidth
              }  // container bandwidth-based-metrics
    
              leaf metric {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint16 {
                    range "1 .. 65535";
                  }
                }
                description "Interface metric";
              }
    
              leaf priority {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "0 .. 255";
                  }
                }
                description
                  "Designated router priority";
              }
    
              leaf retransmit-interval {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "1 .. 65535";
                  }
                }
                description
                  "Retransmission interval (seconds)";
              }
    
              leaf transit-delay {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "1 .. 65535";
                  }
                }
                description
                  "Transit delay (seconds)";
              }
    
              leaf hello-interval {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "1 .. 255";
                  }
                }
                description
                  "Hello interval (seconds)";
              }
    
              leaf dead-interval {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "1 .. 65535";
                  }
                }
                description
                  "Dead interval (seconds)";
              }
    
              leaf mtu {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "128 .. 65535";
                  }
                }
                description
                  "Maximum OSPF packet size";
              }
    
              choice auth {
                container authentication {
                  uses juniper-ospf-authentication;
                }  // container authentication
                container authentication-key {
                  status deprecated;
                  description
                    "Authentication key";
                  leaf keyname {
                    type jt:unreadable;
                    description
                      "Authentication key value";
                  }
    
                  leaf key-id {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint32 {
                        range "0 .. 255";
                      }
                    }
                    description
                      "Key ID for MD5 authentication";
                  }
                }  // container authentication-key
              }  // choice auth
    
              leaf demand-circuit {
                type empty;
                description
                  "Interface functions as a demand circuit";
              }
    
              leaf flood-reduction {
                type empty;
                description
                  "Enable flood reduction";
              }
    
              leaf no-neighbor-down-notification {
                type empty;
                description
                  "Don't inform other protocols about neighbor down events";
              }
    
              leaf ipsec-sa {
                junos:must "(!(any ".. .. interface <st*> ipsec-sa $$"))";
                junos:must-message "Must not configure ipsec-sa for st0 interface";
                junos:must "("security ipsec security-association $$ manual")";
                junos:must-message "Referenced IPSec security association must be a manual SA";
                junos:must "("security ipsec security-association $$ mode transport")";
                junos:must-message "Referenced IPSec security association must be in transport mode";
                junos:must "("security ipsec security-association $$")";
                junos:must-message "Referenced IPSec security association must be defined";
                type string {
                  length "1 .. 32";
                }
                description
                  "IPSec security association name";
              }
    
              list topology {
                key "name";
                ordered-by user;
                description
                  "Topology specific attributes";
                leaf name {
                  type string;
                  description "Topology name";
                }
    
                uses apply-advanced;
    
                leaf disable {
                  type empty;
                  description
                    "Disable this topology";
                }
    
                leaf metric {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint16 {
                      range "1 .. 65535";
                    }
                  }
                  description "Topology metric";
                }
    
                container bandwidth-based-metrics {
                  junos:must "(".. metric")";
                  junos:must-message "Metric must be configured";
                  description
                    "Configure bandwidth based metrics";
                  uses apply-advanced;
    
                  list bandwidth {
                    key "name";
                    description
                      "Bandwidth threshold";
                    leaf name {
                      type string;
                    }
    
                    leaf metric {
                      type union {
                        type string {
                          pattern "<.*>|$.*";
                        }
                        type uint16 {
                          range "1 .. 65535";
                        }
                      }
                      description
                        "Metric associated with specified bandwidth";
                    }
                  }  // list bandwidth
                }  // container bandwidth-based-metrics
              }  // list topology
    
              leaf transmit-interval {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "1 .. 4294967295";
                  }
                }
                status deprecated;
                description
                  "OSPF packet transmit interval (milliseconds)";
              }
    
              container bfd-liveness-detection {
                description
                  "Bidirectional Forwarding Detection options";
                uses apply-advanced;
    
                leaf version {
                  type enumeration {
                    enum "0" {
                      value 0;
                      description
                        "BFD version 0 (deprecated)";
                    }
                    enum "1" {
                      value 1;
                      description
                        "BFD version 1";
                    }
                    enum "automatic" {
                      value 2;
                      description
                        "Choose BFD version automatically";
                    }
                  }
                  default "automatic";
                  description
                    "BFD protocol version number";
                }
    
                leaf minimum-interval {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "1 .. 255000";
                    }
                  }
                  units "milliseconds";
                  description
                    "Minimum transmit and receive interval";
                }
    
                leaf minimum-transmit-interval {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "1 .. 255000";
                    }
                  }
                  units "milliseconds";
                  status deprecated;
                  description
                    "Minimum transmit interval";
                }
    
                leaf minimum-receive-interval {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "1 .. 255000";
                    }
                  }
                  units "milliseconds";
                  description
                    "Minimum receive interval";
                }
    
                leaf multiplier {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "1 .. 255";
                    }
                  }
                  default "3";
                  description
                    "Detection time multiplier";
                }
    
                choice adaptation-choice {
                  leaf no-adaptation {
                    type empty;
                    description
                      "Disable adaptation";
                  }
                }  // choice adaptation-choice
    
                container transmit-interval {
                  description
                    "Transmit-interval options";
                  uses apply-advanced;
    
                  leaf minimum-interval {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint32 {
                        range "1 .. 255000";
                      }
                    }
                    units "milliseconds";
                    description
                      "Minimum transmit interval";
                  }
    
                  leaf threshold {
                    type union {
                      type uint32;
                      type string {
                        pattern "<.*>|$.*";
                      }
                    }
                    units "milliseconds";
                    description
                      "High transmit interval triggering a trap";
                  }
                }  // container transmit-interval
    
                container detection-time {
                  description
                    "Detection-time options";
                  uses apply-advanced;
    
                  leaf threshold {
                    type union {
                      type uint32;
                      type string {
                        pattern "<.*>|$.*";
                      }
                    }
                    units "milliseconds";
                    description
                      "High detection-time triggering a trap";
                  }
                }  // container detection-time
    
                container authentication {
                  description
                    "Authentication options";
                  uses apply-advanced;
    
                  leaf key-chain {
                    junos:must "(".. algorithm")";
                    junos:must-message "May not be configured without algorithm";
                    junos:must "("security authentication-key-chains key-chain $$")";
                    junos:must-message "Referenced key-chain must be defined";
                    type string;
                    description "Key chain name";
                  }
    
                  leaf algorithm {
                    junos:must "(".. key-chain")";
                    junos:must-message "May not be configured without key-chain";
                    type enumeration {
                      enum "simple-password" {
                        value 0;
                        description
                          "Simple password";
                      }
                      enum "keyed-md5" {
                        value 1;
                        description
                          "Keyed message Digest 5";
                      }
                      enum
                        "meticulous-keyed-md5" {
                        value 2;
                        description
                          "Meticulous keyed message Digest 5";
                      }
                      enum "keyed-sha-1" {
                        value 3;
                        description
                          "Keyed secure hash algorithm (SHA1) ";
                      }
                      enum
                        "meticulous-keyed-sha-1" {
                        value 4;
                        description
                          "Meticulous keyed secure hash algorithm (SHA1) ";
                      }
                    }
                    description "Algorithm name";
                  }
    
                  leaf loose-check {
                    type empty;
                    description
                      "Verify authentication only if authentication is negotiated";
                  }
                }  // container authentication
    
                leaf full-neighbors-only {
                  type empty;
                  description
                    "Setup BFD sessions only to Full neighbors";
                }
    
                leaf holddown-interval {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "0 .. 255000";
                    }
                  }
                  units "milliseconds";
                  description
                    "Time to hold the session-UP notification to the client";
                }
              }  // container bfd-liveness-detection
    
              leaf dynamic-neighbors {
                junos:must "(" .. interface-type p2mp")";
                junos:must-message "dynamic-neighbors option can be set only if the interface type is p2mp";
                type empty;
                description
                  "Learn neighbors dynamically on a p2mp interface";
              }
    
              leaf no-advertise-adjacency-segment {
                type empty;
                description
                  "Do not advertise an adjacency segment for this interface";
              }
    
              list neighbor {
                junos:must "(!(" .. dynamic-neighbors"))";
                junos:must-message "Neighbors cannot be specified manually if dynamic-neighbors is set";
                key "name";
                ordered-by user;
                description "NBMA neighbor";
                leaf name {
                  type jt:ipaddr;
                  description
                    "Address of neighbor";
                }
    
                leaf eligible {
                  type empty;
                  description
                    "Eligible to be DR on an NBMA network";
                }
              }  // list neighbor
    
              leaf poll-interval {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "1 .. 65535";
                  }
                }
                description
                  "Poll interval for NBMA interfaces";
              }
    
              leaf no-interface-state-traps {
                type empty;
                description
                  "Do not send interface state change traps";
              }
    
              leaf strict-bfd {
                junos:must "(" .. bfd-liveness-detection")";
                junos:must-message "strict bfd cannot be configured without bfd.";
                junos:must "(!(" .. bfd-liveness-detection full-neighbors-only"))";
                junos:must-message "full-neighbors-only and strict-bfd cannot be configured together";
                type empty;
                description
                  "Enable strict bfd over this interface";
              }
    
              container post-convergence-lfa {
                junos:must "("protocols ospf backup-spf-options use-post-convergence-lfa")";
                junos:must-message "Not allowed without 'protocols ospf backup-spf-options use-post-convergence-lfa'";
                presence
                  "enable post-convergence-lfa";
                description
                  "Protect interface using post-convergence backup path";
                uses apply-advanced;
    
                container node-protection {
                  presence
                    "enable node-protection";
                  description
                    "Compute backup path assuming node failure";
                  uses apply-advanced;
    
                  leaf cost {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint16 {
                        range "1 .. 65535";
                      }
                    }
                    description
                      "Cost for node protection";
                  }
                }  // container node-protection
    
                leaf srlg-protection {
                  type empty;
                  description
                    "Compute backup path assuming SRLG failure";
                }
    
                leaf fate-sharing-protection {
                  type empty;
                  description
                    "Compute backup path assuming fate-sharing group failure";
                }
              }  // container post-convergence-lfa
    
              leaf te-metric {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "1 .. 4294967295";
                  }
                }
                description
                  "Traffic engineering metric";
              }
    
              container ldp-synchronization {
                presence
                  "enable ldp-synchronization";
                description
                  "Advertise maximum metric until LDP is operational";
                uses ldp-sync-obj;
              }  // container ldp-synchronization
    
              container ipv4-adjacency-segment {
                junos:must "(!(".. no-advertise-adjacency-segment"))";
                junos:must-message "ipv4-adjacency-segment can't be configured if no-advertise-adjacency-segment is configured in the same interface";
                description
                  "Configure ipv4 adjacency segment";
                uses apply-advanced;
    
                container protected {
                  description
                    "Adjacency SID is eligible for protection";
                  choice adjsid-type {
                    container index {
                      description
                        "Adjacency SID indexed from SRGB";
                      leaf index-number {
                        type union {
                          type string {
                            pattern "<.*>|$.*";
                          }
                          type uint32 {
                            range "0 .. 199999";
                          }
                        }
                      }
                    }  // container index
                    leaf label {
                      type union {
                        type string {
                          pattern "<.*>|$.*";
                        }
                        type uint32 {
                          range "16 .. 1048575";
                        }
                      }
                      description
                        "Adjacency SID from static label pool";
                    }
                    leaf dynamic {
                      type empty;
                      description
                        "Dynamically allocate an adjacency segment";
                    }
                  }  // choice adjsid-type
                }  // container protected
    
                container unprotected {
                  description
                    "Adjacency SID uneligible for protection";
                  choice adjsid-type {
                    container index {
                      description
                        "Adjacency SID indexed from SRGB";
                      leaf index-number {
                        type union {
                          type string {
                            pattern "<.*>|$.*";
                          }
                          type uint32 {
                            range "0 .. 199999";
                          }
                        }
                      }
                    }  // container index
                    leaf label {
                      type union {
                        type string {
                          pattern "<.*>|$.*";
                        }
                        type uint32 {
                          range "16 .. 1048575";
                        }
                      }
                      description
                        "Adjacency SID from static label pool";
                    }
                    leaf dynamic {
                      type empty;
                      description
                        "Dynamically allocate an adjacency segment";
                    }
                  }  // choice adjsid-type
                }  // container unprotected
              }  // container ipv4-adjacency-segment
    
              list lan-neighbor {
                junos:must "(!(".. ipv4-adjacency-segment"))";
                junos:must-message "lan-neighbor can't be configured if ipv4-adjacency-segment is configured in the same interface";
                junos:must "(!(".. no-advertise-adjacency-segment"))";
                junos:must-message "lan-neighbor can't be configured if no-advertise-adjacency-segment is configured in the same interface ";
                junos:must "(!(".. interface-type p2p"))";
                junos:must-message "lan-neighbor can't be configured for point-to-point interfaces";
                key "name";
                ordered-by user;
                description
                  "Configuration specific to a LAN neighbor";
                leaf name {
                  type jt:ipaddr;
                  description
                    "Address of neighbor";
                }
    
                uses apply-advanced;
    
                container ipv4-adjacency-segment {
                  junos:must "(!(".. no-advertise-adjacency-segment"))";
                  junos:must-message "ipv4-adjacency-segment can't be configured if no-advertise-adjacency-segment is configured in the same interface";
                  description
                    "Configure ipv4 adjacency segment";
                  uses apply-advanced;
    
                  container protected {
                    description
                      "Adjacency SID is eligible for protection";
                    choice adjsid-type {
                      container index {
                        description
                          "Adjacency SID indexed from SRGB";
                        leaf index-number {
                          type union {
                            type string {
                              pattern "<.*>|$.*";
                            }
                            type uint32 {
                              range
                                "0 .. 199999";
                            }
                          }
                        }
                      }  // container index
                      leaf label {
                        type union {
                          type string {
                            pattern "<.*>|$.*";
                          }
                          type uint32 {
                            range
                              "16 .. 1048575";
                          }
                        }
                        description
                          "Adjacency SID from static label pool";
                      }
                      leaf dynamic {
                        type empty;
                        description
                          "Dynamically allocate an adjacency segment";
                      }
                    }  // choice adjsid-type
                  }  // container protected
    
                  container unprotected {
                    description
                      "Adjacency SID uneligible for protection";
                    choice adjsid-type {
                      container index {
                        description
                          "Adjacency SID indexed from SRGB";
                        leaf index-number {
                          type union {
                            type string {
                              pattern "<.*>|$.*";
                            }
                            type uint32 {
                              range
                                "0 .. 199999";
                            }
                          }
                        }
                      }  // container index
                      leaf label {
                        type union {
                          type string {
                            pattern "<.*>|$.*";
                          }
                          type uint32 {
                            range
                              "16 .. 1048575";
                          }
                        }
                        description
                          "Adjacency SID from static label pool";
                      }
                      leaf dynamic {
                        type empty;
                        description
                          "Dynamically allocate an adjacency segment";
                      }
                    }  // choice adjsid-type
                  }  // container unprotected
                }  // container ipv4-adjacency-segment
              }  // list lan-neighbor
            }  // list interface
    
            leaf no-context-identifier-advertisement {
              junos:must "(!(".. context-identifier"))";
              junos:must-message "no-context-identifier-advertisement and context-identifier attributes are mutually exclusive";
              type empty;
              description
                "Disable context identifier advertisments in this area";
            }
    
            list peer-interface {
              key "name";
              ordered-by user;
              description
                "Configuration for peer interface";
              leaf name {
                type string;
                description
                  "Name of peer interface";
              }
    
              uses apply-advanced;
    
              choice enable-disable {
                leaf disable {
                  type empty;
                  description
                    "Disable OSPF on this control peer";
                }
              }  // choice enable-disable
    
              leaf retransmit-interval {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "1 .. 65535";
                  }
                }
                description
                  "Retransmission interval (seconds)";
              }
    
              leaf transit-delay {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "1 .. 65535";
                  }
                }
                description
                  "Transit delay (seconds)";
              }
    
              leaf hello-interval {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "1 .. 255";
                  }
                }
                description
                  "Hello interval (seconds)";
              }
    
              leaf dead-interval {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "1 .. 65535";
                  }
                }
                description
                  "Dead interval (seconds)";
              }
    
              leaf mtu {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "128 .. 65535";
                  }
                }
                description
                  "Maximum OSPF packet size";
              }
    
              choice auth {
                container authentication {
                  uses juniper-ospf-authentication;
                }  // container authentication
                container authentication-key {
                  status deprecated;
                  description
                    "Authentication key";
                  leaf keyname {
                    type jt:unreadable;
                    description
                      "Authentication key value";
                  }
    
                  leaf key-id {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint32 {
                        range "0 .. 255";
                      }
                    }
                    description
                      "Key ID for MD5 authentication";
                  }
                }  // container authentication-key
              }  // choice auth
    
              leaf demand-circuit {
                type empty;
                description
                  "Interface functions as a demand circuit";
              }
    
              leaf flood-reduction {
                type empty;
                description
                  "Enable flood reduction";
              }
    
              leaf no-neighbor-down-notification {
                type empty;
                description
                  "Don't inform other protocols about neighbor down events";
              }
            }  // list peer-interface
    
            leaf no-source-packet-routing {
              type empty;
              description
                "Disable SPRING in this area";
            }
    
            list context-identifier {
              junos:must "(!(".. no-context-identifier-advertisement"))";
              junos:must-message "no-context-identifier-advertisement and context-identifier attributes are mutually exclusive";
              key "name";
              ordered-by user;
              description
                "Configure context identifier in support of edge protection";
              leaf name {
                type jt:ipv4addr;
                description "Context identifier";
              }
    
              uses apply-advanced;
            }  // list context-identifier
    
            list label-switched-path {
              junos:must "(!(".. .. traffic-engineering multicast-rpf-routes"))";
              junos:must-message "cannot advertise LSPs when using multicast-rpf-routes";
              key "name";
              ordered-by user;
              description
                "Configuration for advertisement of a label-switched path";
              leaf name {
                type string {
                  length "1 .. 64";
                }
                description
                  "Name of label-switched path to be advertised";
              }
    
              uses apply-advanced;
    
              choice enable-disable {
                leaf disable {
                  type empty;
                  description
                    "Disable OSPF on this label-switched path";
                }
              }  // choice enable-disable
    
              leaf metric {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint16 {
                    range "1 .. 65535";
                  }
                }
                description "Interface metric";
              }
    
              list topology {
                key "name";
                ordered-by user;
                description
                  "Topology specific attributes";
                leaf name {
                  type string;
                  description "Topology name";
                }
    
                uses apply-advanced;
    
                leaf disable {
                  type empty;
                  description
                    "Disable this topology";
                }
    
                leaf metric {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint16 {
                      range "1 .. 65535";
                    }
                  }
                  description "Topology metric";
                }
    
                container bandwidth-based-metrics {
                  junos:must "(".. metric")";
                  junos:must-message "Metric must be configured";
                  description
                    "Configure bandwidth based metrics";
                  uses apply-advanced;
    
                  list bandwidth {
                    key "name";
                    description
                      "Bandwidth threshold";
                    leaf name {
                      type string;
                    }
    
                    leaf metric {
                      type union {
                        type string {
                          pattern "<.*>|$.*";
                        }
                        type uint16 {
                          range "1 .. 65535";
                        }
                      }
                      description
                        "Metric associated with specified bandwidth";
                    }
                  }  // list bandwidth
                }  // container bandwidth-based-metrics
              }  // list topology
            }  // list label-switched-path
          }  // list area
    
          choice enable-disable {
            leaf disable {
              type empty;
              description "Disable OSPF";
            }
          }  // choice enable-disable
    
          container traceoptions {
            description "Trace options for OSPF";
            uses apply-advanced;
    
            container file {
              description "Trace file options";
              leaf filename {
                type string {
                  junos:posix-pattern "![/ %]";
                  junos:pattern-message "Must not contain '/', % or a space";
                  length "1 .. 1024";
                }
                description
                  "Name of file in which to write trace information";
              }
    
              leaf replace {
                type empty;
                status deprecated;
                description
                  "Replace trace file rather than appending to it";
              }
    
              leaf size {
                type string;
                description
                  "Maximum trace file size";
              }
    
              leaf files {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "2 .. 1000";
                  }
                }
                default "10";
                description
                  "Maximum number of trace files";
              }
    
              leaf no-stamp {
                type empty;
                status deprecated;
                description
                  "Do not timestamp trace file";
              }
    
              choice world-readable-choice {
                leaf world-readable {
                  type empty;
                  description
                    "Allow any user to read the log file";
                }
                leaf no-world-readable {
                  type empty;
                  description
                    "Don't allow any user to read the log file";
                }
              }  // choice world-readable-choice
            }  // container file
    
            list flag {
              key "name";
              ordered-by user;
              description "Tracing parameters";
              leaf name {
                type enumeration {
                  enum "spf" {
                    value 0;
                    description
                      "Trace SPF calculations";
                  }
                  enum "error" {
                    value 1;
                    description
                      "Trace errored packets";
                  }
                  enum "event" {
                    value 2;
                    description
                      "Trace OSPF state machine events";
                  }
                  enum "packet-dump" {
                    value 3;
                    description
                      "Dump the contents of selected packet types";
                  }
                  enum "flooding" {
                    value 4;
                    description
                      "Trace LSA flooding";
                  }
                  enum "lsa-analysis" {
                    value 5;
                    description
                      "Trace LSA analysis";
                  }
                  enum "packets" {
                    value 6;
                    description
                      "Trace all OSPF packets";
                  }
                  enum "hello" {
                    value 7;
                    description
                      "Trace hello packets";
                  }
                  enum "database-description" {
                    value 8;
                    description
                      "Trace database description packets";
                  }
                  enum "lsa-request" {
                    value 9;
                    description
                      "Trace LSA request packets";
                  }
                  enum "lsa-update" {
                    value 10;
                    description
                      "Trace LSA update packets";
                  }
                  enum "lsa-ack" {
                    value 11;
                    description
                      "Trace LSA acknowledgment packets";
                  }
                  enum "ldp-synchronization" {
                    value 12;
                    description
                      "Trace synchronization between OSPF and LDP";
                  }
                  enum "on-demand" {
                    value 13;
                    description
                      "Trace demand circuit extensions";
                  }
                  enum "nsr-synchronization" {
                    value 14;
                    description
                      "Trace NSR synchronization events";
                  }
                  enum "graceful-restart" {
                    value 15;
                    description
                      "Trace graceful restart";
                  }
                  enum "restart-signaling" {
                    value 16;
                    description
                      "Trace restart signaling";
                  }
                  enum "backup-spf" {
                    value 17;
                    description
                      "Trace backup SPF (LFA) specific events";
                  }
                  enum "source-packet-routing" {
                    value 18;
                    description
                      "Trace source packet routing (SPRING) events";
                  }
                  enum "post-convergence-lfa" {
                    value 19;
                    description
                      "Trace post-convergence-lfa related events";
                  }
                  enum "flex-algorithm" {
                    value 20;
                    description
                      "Trace flex-algorithm related events";
                  }
                  enum "route" {
                    value 21;
                    description
                      "Trace routing information";
                  }
                  enum "normal" {
                    value 22;
                    description
                      "Trace normal events";
                  }
                  enum "general" {
                    value 23;
                    description
                      "Trace general events";
                  }
                  enum "state" {
                    value 24;
                    description
                      "Trace state transitions";
                  }
                  enum "policy" {
                    value 25;
                    description
                      "Trace policy processing";
                  }
                  enum "task" {
                    value 26;
                    description
                      "Trace routing protocol task processing";
                  }
                  enum "timer" {
                    value 27;
                    description
                      "Trace routing protocol timer processing";
                  }
                  enum "all" {
                    value 28;
                    description
                      "Trace everything";
                  }
                }
              }
    
              leaf send {
                type empty;
                description
                  "Trace transmitted packets";
              }
    
              leaf receive {
                type empty;
                description
                  "Trace received packets";
              }
    
              leaf detail {
                type empty;
                description
                  "Trace detailed information";
              }
    
              leaf disable {
                type empty;
                description
                  "Disable this trace flag";
              }
            }  // list flag
          }  // container traceoptions
    
          container spf-options {
            description
              "Configure options for SPF";
            uses apply-advanced;
    
            leaf delay {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "50 .. 8000";
                }
              }
              units "milliseconds";
              description
                "Time to wait before running an SPF";
            }
    
            leaf holddown {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "2000 .. 20000";
                }
              }
              units "milliseconds";
              description
                "Time to hold down before running an SPF";
            }
    
            leaf rapid-runs {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "1 .. 10";
                }
              }
              description
                "Number of maximum rapid SPF runs before holddown";
            }
    
            leaf no-ignore-our-externals {
              type empty;
              description
                "Do not ignore self-generated external and NSSA LSAs";
            }
          }  // container spf-options
    
          leaf prefix-export-limit {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "0 .. 4294967295";
              }
            }
            description
              "Maximum number of prefixes that can be exported";
          }
    
          container rib-groups {
            description
              "Routing table groups for importing OSPF routes";
            uses apply-advanced;
    
            leaf inet {
              junos:must "("routing-options rib-groups $$")";
              junos:must-message "Referenced rib-groups must be defined";
              junos:must "(!(".. topology $$={default} rib-group"))";
              junos:must-message "rib-group cannot be used with topology default rib-group";
              type string;
              description
                "Name of the IPv4/v6 routing table group";
            }
    
            leaf inet3 {
              junos:must "("routing-options rib-groups $$")";
              junos:must-message "Referenced rib-groups must be defined";
              junos:must "(!(".. topology $$={default} rib-group"))";
              junos:must-message "rib-group cannot be used with topology default rib-group";
              type string;
              description
                "Name of the IPv4/v6 inet.3 routing table group";
            }
          }  // container rib-groups
    
          leaf job-stats {
            type empty;
            description "Collect job statistics";
          }
    
          container overload {
            presence "enable overload";
            description
              "Set the overload mode (repel transit traffic)";
            uses apply-advanced;
    
            leaf timeout {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "60 .. 3600";
                }
              }
              units "seconds";
              description
                "Time after which overload mode is reset";
            }
    
            leaf allow-route-leaking {
              type empty;
              description
                "Allow routes to be leaked when overload is configured";
            }
    
            leaf stub-network {
              type empty;
              description
                "Advertise Stub Network with maximum metric";
            }
    
            leaf intra-area-prefix {
              type empty;
              description
                "Advertise Intra Area Prefix with maximum metric";
            }
    
            leaf as-external {
              type empty;
              description
                "Advertise As External with maximum usable metric";
            }
          }  // container overload
    
          container database-protection {
            presence
              "enable database-protection";
            description
              "Configure database protection attributes";
            uses apply-advanced;
    
            leaf maximum-lsa {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "1 .. 1000000";
                }
              }
              description
                "Maximum allowed non self-generated LSAs";
            }
    
            leaf warning-only {
              type empty;
              description
                "Emit only a warning when LSA maximum limit is exceeded";
            }
    
            leaf warning-threshold {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint8 {
                  range "30 .. 100";
                }
              }
              units "percent";
              description
                "Percentage of LSA maximum above which to trigger warning";
            }
    
            leaf ignore-count {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint8 {
                  range "1 .. 32";
                }
              }
              description
                "Maximum number of times to go into ignore state";
            }
    
            leaf ignore-time {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint16 {
                  range "30 .. 3600";
                }
              }
              units "seconds";
              description
                "Time to stay in ignore state and ignore all neighbors";
            }
    
            leaf reset-time {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "60 .. 86400";
                }
              }
              units "seconds";
              description
                "Time after which the ignore count gets reset to zero";
            }
          }  // container database-protection
    
          container graceful-restart {
            description
              "Configure graceful restart attributes";
            uses apply-advanced;
    
            choice enable-disable {
              leaf disable {
                type empty;
                description
                  "Disable OSPF graceful restart capability";
              }
            }  // choice enable-disable
    
            leaf restart-duration {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "1 .. 3600";
                }
              }
              units "seconds";
              description
                "Time for all neighbors to become full";
            }
    
            leaf notify-duration {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "1 .. 3600";
                }
              }
              units "seconds";
              description
                "Time to send all max-aged grace LSAs";
            }
    
            container helper-disable {
              presence "enable helper-disable";
              description
                "Disable graceful restart helper capability";
              uses apply-advanced;
    
              choice disable-choices {
                leaf standard {
                  type empty;
                  description
                    "Disable helper-mode for rfc3623 based GR";
                }
                leaf restart-signaling {
                  type empty;
                  description
                    "Disable helper mode for restart-signaling ";
                }
                leaf both {
                  type empty;
                  description
                    "Disable helper mode for both the types of GR";
                }
              }  // choice disable-choices
            }  // container helper-disable
    
            leaf no-strict-lsa-checking {
              junos:must "(!(".. helper-disable"))";
              junos:must-message "To configure no-strict-lsa-checking, helper-disable must not be set";
              type empty;
              description
                "Do not abort graceful helper mode upon LSA changes";
            }
          }  // container graceful-restart
    
          leaf route-type-community {
            type enumeration {
              enum "iana" {
                value 0;
                description
                  "BGP extended community value used is 0x0306";
              }
              enum "vendor" {
                value 1;
                description
                  "Vendor BGP extended community value used is 0x8000";
              }
            }
            description
              "Specify BGP extended community value to encode OSPF route type";
          }
    
          container domain-id {
            description "Configure domain ID";
            choice domain_id_or_disable {
              leaf domain-id {
                type string;
                description "Domain ID";
              }
              leaf disable {
                type empty;
                description "Disable domain ID";
              }
            }  // choice domain_id_or_disable
          }  // container domain-id
    
          choice domain_vpn_tag_or_disable {
            leaf domain-vpn-tag {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "0 .. 4294967295";
                }
              }
              description
                "Domain VPN tag for external LSA";
            }
            leaf no-domain-vpn-tag {
              type empty;
              description
                "Disable domain VPN tag";
            }
          }  // choice domain_vpn_tag_or_disable
    
          leaf preference {
            type union {
              type uint32;
              type string {
                pattern "<.*>|$.*";
              }
            }
            description
              "Preference of internal routes";
          }
    
          leaf external-preference {
            type union {
              type uint32;
              type string {
                pattern "<.*>|$.*";
              }
            }
            description
              "Preference of external routes";
          }
    
          leaf labeled-preference {
            type union {
              type uint32;
              type string {
                pattern "<.*>|$.*";
              }
            }
            description
              "Preference of labeled routes";
          }
    
          leaf-list export {
            type jt:policy-algebra;
            ordered-by user;
            description "Export policy";
          }
    
          leaf-list import {
            type jt:policy-algebra;
            ordered-by user;
            description
              "Import policy (for external routes or setting priority)";
          }
    
          leaf reference-bandwidth {
            type string;
            description
              "Bandwidth for calculating metric defaults";
          }
    
          leaf lsa-refresh-interval {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "25 .. 50";
              }
            }
            default "50";
            description
              "LSA refresh interval (minutes)";
          }
    
          leaf spf-delay {
            junos:must "(!(".. spf-options delay"))";
            junos:must-message "You can only configure either spf-delay or delay under spf-options";
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "50 .. 8000";
              }
            }
            units "milliseconds";
            status deprecated;
            description
              "Time to wait before running an SPF";
          }
    
          leaf no-rfc-1583 {
            type empty;
            description
              "Disable RFC1583 compatibility";
          }
    
          leaf forwarding-address-to-broadcast {
            type empty;
            description
              "Set forwarding address in Type 5 LSA in broadcast network";
          }
    
          choice nssa-abr-option {
            leaf no-nssa-abr {
              type empty;
              description
                "Disable full NSSA functionality at ABR";
            }
          }  // choice nssa-abr-option
    
          container sham-link {
            presence "enable sham-link";
            description
              "Configure parameters for sham links";
            uses apply-advanced;
    
            leaf local {
              type jt:ipaddr;
              description
                "Local sham link endpoint address";
            }
    
            leaf no-advertise-local {
              type empty;
              status deprecated;
              description
                "Don't advertise local sham link endpoint as stub in router LSA";
            }
          }  // container sham-link
        }  // grouping juniper-protocols-ospf3
    
        grouping juniper-protocols-overlayd {
          uses apply-advanced;
    
          container traceoptions {
            description "Overlayd trace options";
            uses apply-advanced;
    
            leaf no-remote-trace {
              junos:must "("system tracing")";
              junos:must-message "'no-remote-trace' is valid only when [system tracing] is configured";
              type empty;
              description
                "Disable remote tracing";
            }
    
            container file {
              description
                "Trace file information";
              leaf filename {
                type string {
                  junos:posix-pattern "![/ %]";
                  junos:pattern-message "Must not contain '/', % or a space";
                  length "1 .. 1024";
                }
                description
                  "Name of file in which to write trace information";
              }
    
              leaf size {
                type string;
                description
                  "Maximum trace file size";
              }
    
              leaf files {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "2 .. 1000";
                  }
                }
                default "3";
                description
                  "Maximum number of trace files";
              }
    
              choice world-readable-choice {
                leaf world-readable {
                  type empty;
                  description
                    "Allow any user to read the log file";
                }
                leaf no-world-readable {
                  type empty;
                  description
                    "Don't allow any user to read the log file";
                }
              }  // choice world-readable-choice
    
              leaf match {
                type jt:regular-expression;
                description
                  "Regular expression for lines to be logged";
              }
            }  // container file
    
            list flag {
              key "name";
              ordered-by user;
              description
                "Tracing flag parameters";
              leaf name {
                type enumeration {
                  enum "socket" {
                    value 0;
                    description
                      "Trace overlay daemon socket events";
                  }
                  enum "rtsock" {
                    value 1;
                    description
                      "Trace overlay daemon rtsock events";
                  }
                  enum "config" {
                    value 2;
                    description
                      "Trace overlay daemon config events";
                  }
                  enum "all" {
                    value 3;
                    description
                      "Trace everything";
                  }
                }
              }
            }  // list flag
          }  // container traceoptions
        }  // grouping juniper-protocols-overlayd
    
        grouping juniper-protocols-pgm {
          uses apply-advanced;
    
          container traceoptions {
            description "PGM trace options";
            uses apply-advanced;
    
            list flag {
              key "name";
              ordered-by user;
              description "Tracing parameters";
              leaf name {
                type enumeration {
                  enum "init" {
                    value 0;
                    description
                      "Trace initialization events";
                  }
                  enum "show" {
                    value 1;
                    description
                      "Trace show command servicing";
                  }
                  enum "route-socket" {
                    value 2;
                    description
                      "Trace route-socket events";
                  }
                  enum "parse" {
                    value 3;
                    description
                      "Trace parser processing";
                  }
                  enum "state" {
                    value 4;
                    description
                      "Trace state transitions";
                  }
                  enum "packets" {
                    value 5;
                    description
                      "Trace packet processing";
                  }
                  enum "all" {
                    value 6;
                    description
                      "Trace everything";
                  }
                }
              }
    
              leaf send {
                type empty;
                description
                  "Trace transmitted packets";
              }
    
              leaf receive {
                type empty;
                description
                  "Trace received packets";
              }
    
              leaf detail {
                type empty;
                description
                  "Trace detailed information";
              }
    
              leaf disable {
                type empty;
                description
                  "Disable this trace flag";
              }
            }  // list flag
          }  // container traceoptions
        }  // grouping juniper-protocols-pgm
    
        grouping juniper-protocols-pim {
          uses apply-advanced;
    
          container family {
            description "Local address family";
            container any {
              presence "enable any";
              description
                "Default properties for all address families";
              uses apply-advanced;
    
              leaf disable {
                type empty;
                description
                  "Disable all families";
              }
            }  // container any
    
            container inet {
              presence "enable inet";
              description
                "IPv4 specific properties";
              uses apply-advanced;
    
              choice enable-disable {
                leaf disable {
                  type empty;
                  description
                    "Disable PIMv4 on all interfaces";
                }
              }  // choice enable-disable
            }  // container inet
    
            container inet6 {
              presence "enable inet6";
              description
                "IPv6 specific properties";
              uses apply-advanced;
    
              choice enable-disable {
                leaf disable {
                  type empty;
                  description
                    "Disable PIMv6 on all interfaces";
                }
              }  // choice enable-disable
            }  // container inet6
          }  // container family
    
          choice enable-disable {
            leaf disable {
              type empty;
              description "Disable PIM";
            }
          }  // choice enable-disable
    
          container nonstop-routing {
            junos:must "("routing-options nonstop-routing")";
            junos:must-message "To disable PIM nonstop-routing, non-stop routing must be globally enabled.";
            description
              "Configure PIM nonstop-routing attributes";
            uses apply-advanced;
    
            choice enable-disable {
              leaf disable {
                type empty;
                description
                  "Disable non-stop routing for PIM";
              }
            }  // choice enable-disable
          }  // container nonstop-routing
    
          container traceoptions {
            description "Trace options for PIM";
            uses apply-advanced;
    
            container file {
              description "Trace file options";
              leaf filename {
                type string {
                  junos:posix-pattern "![/ %]";
                  junos:pattern-message "Must not contain '/', % or a space";
                  length "1 .. 1024";
                }
                description
                  "Name of file in which to write trace information";
              }
    
              leaf replace {
                type empty;
                status deprecated;
                description
                  "Replace trace file rather than appending to it";
              }
    
              leaf size {
                type string;
                description
                  "Maximum trace file size";
              }
    
              leaf files {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "2 .. 1000";
                  }
                }
                default "10";
                description
                  "Maximum number of trace files";
              }
    
              leaf no-stamp {
                type empty;
                status deprecated;
                description
                  "Do not timestamp trace file";
              }
    
              choice world-readable-choice {
                leaf world-readable {
                  type empty;
                  description
                    "Allow any user to read the log file";
                }
                leaf no-world-readable {
                  type empty;
                  description
                    "Don't allow any user to read the log file";
                }
              }  // choice world-readable-choice
            }  // container file
    
            list flag {
              key "name";
              ordered-by user;
              description "Tracing parameters";
              leaf name {
                type enumeration {
                  enum "route" {
                    value 0;
                    description
                      "Trace routing information";
                  }
                  enum "packets" {
                    value 1;
                    description
                      "Trace all PIM packets";
                  }
                  enum "hello" {
                    value 2;
                    description
                      "Trace hello packets";
                  }
                  enum "register" {
                    value 3;
                    description
                      "Trace register/register-stop messages";
                  }
                  enum "join" {
                    value 4;
                    description
                      "Trace join/prune/graft/graft-ack messages";
                  }
                  enum "prune" {
                    value 5;
                    description
                      "Trace join/prune/graft/graft-ack messages";
                  }
                  enum "graft" {
                    value 6;
                    description
                      "Trace join/prune/graft/graft-ack messages";
                  }
                  enum "bootstrap" {
                    value 7;
                    description
                      "Trace bootstrap/RP/auto-RP messages";
                  }
                  enum "rp" {
                    value 8;
                    description
                      "Trace bootstrap/RP/auto-RP messages";
                  }
                  enum "autorp" {
                    value 9;
                    description
                      "Trace bootstrap/RP/auto-RP messages";
                  }
                  enum "assert" {
                    value 10;
                    description
                      "Trace assert messages";
                  }
                  enum "mdt" {
                    value 11;
                    description
                      "Trace messages related to multicast data tunnels";
                  }
                  enum "nsr-synchronization" {
                    value 12;
                    description
                      "Trace NSR synchronization events";
                  }
                  enum
                    "bidirectional-df-election" {
                    value 13;
                    description
                      "Trace bidirectional PIM DF election events";
                  }
                  enum "mofrr" {
                    value 14;
                    description
                      "Trace Multicast only Fast Re-Route messages";
                  }
                  enum "normal" {
                    value 15;
                    description
                      "Trace normal events";
                  }
                  enum "general" {
                    value 16;
                    description
                      "Trace general events";
                  }
                  enum "state" {
                    value 17;
                    description
                      "Trace state transitions";
                  }
                  enum "policy" {
                    value 18;
                    description
                      "Trace policy processing";
                  }
                  enum "task" {
                    value 19;
                    description
                      "Trace routing protocol task processing";
                  }
                  enum "timer" {
                    value 20;
                    description
                      "Trace routing protocol timer processing";
                  }
                  enum "all" {
                    value 21;
                    description
                      "Trace everything";
                  }
                }
              }
    
              leaf send {
                type empty;
                description
                  "Trace transmitted packets";
              }
    
              leaf receive {
                type empty;
                description
                  "Trace received packets";
              }
    
              leaf detail {
                type empty;
                description
                  "Trace detailed information";
              }
    
              leaf disable {
                type empty;
                description
                  "Disable this trace flag";
              }
    
              container filter {
                presence "enable filter";
                description
                  "Filter to apply to this flag";
                uses pim_filter_obj;
              }  // container filter
            }  // list flag
          }  // container traceoptions
    
          container dense-groups {
            description
              "Dense mode groups for sparse-dense mode";
            uses apply-advanced;
    
            leaf dynamic-reject {
              type empty;
              description
                "Reject dynamic autorp negative dense-mode prefixes learnt from network";
            }
    
            list pim-dense-group-type {
              key "name";
              ordered-by user;
              leaf name {
                type jt:ipprefix;
                description
                  "Group address or range to forward in dense mode";
              }
    
              choice dense-group-flags {
                leaf reject {
                  type empty;
                  description
                    "Do not include prefix as dense mode; force sparse mode";
                }
                leaf announce {
                  type empty;
                  description
                    "Advertise as negative prefix in auto-RP announce messages";
                }
              }  // choice dense-group-flags
            }  // list pim-dense-group-type
          }  // container dense-groups
    
          leaf vpn-tunnel-source {
            type jt:ipv4addr;
            status deprecated;
            description
              "Source address for the provider space mGRE tunnel";
          }
    
          leaf vpn-group-address {
            junos:must "(!(".. .. .. provider-tunnel pim-ssm"))";
            junos:must-message "'provider-tunnel pim-ssm' can not be configured with 'pim vpn-group-address'. Please disable one of them.";
            junos:must "((!(".. .. .. provider-tunnel pim-asm") || ".. .. .. provider-tunnel pim-asm group-address $$"))";
            junos:must-message "MVPN inclusive provider-tunnel group-address must be same as 'vpn-group-address'";
            type jt:ipv4addr;
            status deprecated;
            description
              "Group address for the VPN in provider space";
          }
    
          leaf-list tunnel-devices {
            type union {
              type jt:interface-device;
              type string {
                pattern "<.*>|$.*";
              }
            }
            ordered-by user;
            description
              "Tunnel devices to be used for creating mt interfaces";
          }
    
          container rpf-selection {
            description "Select RPF neighbor";
            uses apply-advanced;
    
            list group {
              key "name";
              ordered-by user;
              description
                "IP prefix of multicast group";
              leaf name {
                type jt:ipprefix;
                description "IP prefix of group";
              }
    
              uses apply-advanced;
    
              container wildcard-source {
                presence
                  "enable wildcard-source";
                description
                  "Select RPF for (*,g) and unspecified (s,g) joins";
                uses apply-advanced;
    
                leaf next-hop {
                  type jt:ipaddr;
                  description "Next-hop address";
                }
              }  // container wildcard-source
    
              list source {
                key "name";
                ordered-by user;
                description
                  "IP prefix of one or more multicast sources";
                leaf name {
                  type jt:ipprefix;
                  description
                    "IP prefix of source";
                }
    
                uses apply-advanced;
    
                leaf next-hop {
                  type jt:ipaddr;
                  description "Next-hop address";
                }
              }  // list source
            }  // list group
    
            list prefix-list {
              key "name";
              ordered-by user;
              description
                "Multicast group prefix list";
              leaf name {
                junos:must "("policy-options prefix-list $$")";
                junos:must-message "This prefix-list must be configured in policy-options.";
                type string;
                description
                  "Name of prefix list to match against";
              }
    
              uses apply-advanced;
    
              container wildcard-source {
                presence
                  "enable wildcard-source";
                description
                  "Select RPF for (*,g) and unspecified (s,g) joins";
                uses apply-advanced;
    
                leaf next-hop {
                  type jt:ipaddr;
                  description "Next-hop address";
                }
              }  // container wildcard-source
    
              list source {
                key "name";
                ordered-by user;
                description
                  "IP prefix of one or more multicast sources";
                leaf name {
                  type jt:ipprefix;
                  description
                    "IP prefix of source";
                }
    
                uses apply-advanced;
    
                leaf next-hop {
                  type jt:ipaddr;
                  description "Next-hop address";
                }
              }  // list source
            }  // list prefix-list
          }  // container rpf-selection
    
          container mvpn {
            presence "enable mvpn";
            description
              "PIM MVPN control-plane options";
            uses apply-advanced;
    
            container autodiscovery {
              junos:must "(!(".. .. vpn-group-address"))";
              junos:must-message "PIM MVPN autodiscovery options cannot be configured with 'vpn-group-address'";
              junos:must "(".. .. .. mvpn")";
              junos:must-message "Autodiscovery for PIM MVPNs requires 'protocols mvpn'";
              junos:must "(!(".. .. mdt"))";
              junos:must-message "PIM MVPN auto-discovery cannot be configured with 'pim mdt'";
              status deprecated;
              description
                "PE router autodiscovery options for SSM MDTs";
              uses apply-advanced;
    
              leaf inet-mdt {
                type empty;
                description
                  "MDT-SAFI PE autodiscovery for SSM MDTs";
              }
            }  // container autodiscovery
    
            container family {
              description
                "PIM MVPN address family";
              uses apply-advanced;
    
              container inet {
                description
                  "IPv4 PIM MVPN specific properties";
                uses apply-advanced;
    
                leaf rosen-mvpn {
                  type empty;
                  status deprecated;
                }
    
                leaf ngen-mvpn {
                  junos:must "(".. .. .. .. .. mvpn")";
                  junos:must-message "Requires 'protocols mvpn'";
                  type empty;
                  status deprecated;
                }
    
                container autodiscovery {
                  junos:must "(!(".. .. .. .. vpn-group-address"))";
                  junos:must-message "PIM MVPN autodiscovery options cannot be configured with 'vpn-group-address'";
                  junos:must "(".. .. .. .. .. mvpn")";
                  junos:must-message "Autodiscovery for PIM MVPNs requires 'protocols mvpn'";
                  junos:must "(!(".. .. .. .. mdt"))";
                  junos:must-message "PIM MVPN auto-discovery cannot be configured with 'pim mdt'";
                  description
                    "PE router autodiscovery options for SSM MDTs";
                  uses apply-advanced;
    
                  leaf inet-mdt {
                    type empty;
                    description
                      "MDT-SAFI PE autodiscovery for SSM MDTs";
                  }
                }  // container autodiscovery
    
                leaf disable {
                  type empty;
                  description
                    "Disable family IPv4";
                }
              }  // container inet
    
              container inet6 {
                description
                  "IPv6 PIM MVPN specific properties";
                uses apply-advanced;
    
                leaf rosen-mvpn {
                  type empty;
                  status deprecated;
                }
    
                leaf ngen-mvpn {
                  junos:must "(".. .. .. .. .. mvpn")";
                  junos:must-message "Requires 'protocols mvpn'";
                  type empty;
                  status deprecated;
                }
    
                container autodiscovery {
                  junos:must "(!(".. .. .. .. vpn-group-address"))";
                  junos:must-message "PIM MVPN autodiscovery options cannot be configured with 'vpn-group-address'";
                  junos:must "(".. .. .. .. .. mvpn")";
                  junos:must-message "Autodiscovery for PIM MVPNs requires 'protocols mvpn'";
                  junos:must "(!(".. .. .. .. mdt"))";
                  junos:must-message "PIM MVPN auto-discovery cannot be configured with 'pim mdt'";
                  description
                    "PE router autodiscovery options for SSM MDTs";
                  uses apply-advanced;
    
                  leaf inet-mdt {
                    type empty;
                    description
                      "MDT-SAFI PE autodiscovery for SSM MDTs";
                  }
                }  // container autodiscovery
    
                leaf disable {
                  type empty;
                  description
                    "Disable family IPv6";
                }
              }  // container inet6
            }  // container family
          }  // container mvpn
    
          container rib-group {
            description "Routing table group";
            uses rib_group_type;
          }  // container rib-group
    
          leaf-list import {
            type jt:policy-algebra;
            ordered-by user;
            description
              "PIM sparse import join policy";
          }
    
          leaf-list export {
            type jt:policy-algebra;
            ordered-by user;
            description
              "PIM sparse export join policy";
          }
    
          container mldp-inband-signalling {
            junos:must "(!("system processes routing bgp rib-sharding"))";
            junos:must-message "Can't be configured together with rib-sharding";
            presence
              "enable mldp-inband-signalling";
            uses apply-advanced;
    
            leaf-list policy {
              type jt:policy-algebra;
              ordered-by user;
              description
                "PIM MLDP join translation filter policy";
            }
          }  // container mldp-inband-signalling
    
          container rpf-vector {
            description "RPF vector TLV";
            uses apply-advanced;
    
            leaf-list policy {
              type jt:policy-algebra;
              ordered-by user;
              description
                "RPF vector TLV include policy";
            }
          }  // container rpf-vector
    
          leaf assert-timeout {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "5 .. 210";
              }
            }
            default "180";
            description "Set assert timeout";
          }
    
          leaf assert-robust-count {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "1 .. 5";
              }
            }
            default "2";
            description
              "Number of assert messages an assert winner sends in one cycle";
          }
    
          leaf join-prune-timeout {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "210 .. 420";
              }
            }
            default "210";
            description "Set join/prune timeout";
          }
    
          container spt-threshold {
            description
              "Set shortest-path-tree threshold policy";
            uses apply-advanced;
    
            leaf-list infinity {
              type jt:policy-algebra;
              ordered-by user;
              description
                "Apply policy to always remain on shared tree";
            }
          }  // container spt-threshold
    
          container sglimit {
            description
              "Set limit on number of (S,G) states ";
            uses apply-advanced;
    
            list family {
              junos:must "(!(".. maximum"))";
              junos:must-message "Family wise threshold cannot be configuredif global threshold is already configured";
              key "name";
              ordered-by user;
              description "Protocol family";
              leaf name {
                type enumeration {
                  enum "inet" {
                    value 0;
                    description "IPv4 family";
                  }
                  enum "inet6" {
                    value 1;
                    description "IPv6 family";
                  }
                }
              }
    
              uses apply-advanced;
    
              leaf maximum {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "1 .. 65535";
                  }
                }
                description
                  "Maximum limit above which additional entries are not accepted";
              }
    
              leaf threshold {
                junos:must "(".. maximum")";
                junos:must-message "To configure threshold, maximum must be configured";
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "1 .. 100";
                  }
                }
                description
                  "Percentage of maximum at which to start generating warnings";
              }
    
              leaf log-interval {
                junos:must "(".. maximum")";
                junos:must-message "To configure log-interval, maximum must be configured";
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "1 .. 65535";
                  }
                }
                description
                  "Time between successive log messages";
              }
            }  // list family
    
            leaf maximum {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "1 .. 65535";
                }
              }
              description
                "Maximum limit above which additional entries are not accepted";
            }
    
            leaf threshold {
              junos:must "(".. maximum")";
              junos:must-message "To configure threshold, maximum must be configured";
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "1 .. 100";
                }
              }
              description
                "Percentage of maximum at which to start generating warnings";
            }
    
            leaf log-interval {
              junos:must "(".. maximum")";
              junos:must-message "To configure log-interval, maximum must be configured";
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "1 .. 65535";
                }
              }
              description
                "Time between successive log messages";
            }
          }  // container sglimit
    
          container rp {
            junos:must "(!(" .. passive"))";
            junos:must-message "pim rp cannot be configured with pim passive";
            description
              "Router's rendezvous point properties";
            uses apply-advanced;
    
            leaf bootstrap-priority {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "0 .. 255";
                }
              }
              description
                "Eligibility to be the bootstrap router (IPv4 only)";
            }
    
            leaf-list bootstrap-import {
              type jt:policy-algebra;
              ordered-by user;
              description
                "Bootstrap import policy (IPv4 only)";
            }
    
            leaf-list bootstrap-export {
              type jt:policy-algebra;
              ordered-by user;
              description
                "Bootstrap export policy (IPv4 only)";
            }
    
            container bootstrap {
              description "Bootstrap properties";
              uses apply-advanced;
    
              container family {
                description
                  "Bootstrap address family";
                container inet {
                  junos:must "(!((".. .. .. bootstrap-priority" || (".. .. .. bootstrap-import" || ".. .. .. bootstrap-export"))))";
                  junos:must-message "Duplicate IPv4 bootstrap configuration";
                  description
                    "IPv4 bootstrap properties";
                  uses pim_bootstrap_options_type;
                }  // container inet
    
                container inet6 {
                  description
                    "IPv6 bootstrap properties";
                  uses pim_bootstrap_options_type;
                }  // container inet6
              }  // container family
            }  // container bootstrap
    
            container register-limit {
              description
                "Set limit on incoming registers that create (S,G) state";
              uses apply-advanced;
    
              list family {
                junos:must "(!(".. maximum"))";
                junos:must-message "Family wise threshold cannot be configuredif global threshold is already configured";
                key "name";
                ordered-by user;
                description "Protocol family";
                leaf name {
                  type enumeration {
                    enum "inet" {
                      value 0;
                      description "IPv4 family";
                    }
                    enum "inet6" {
                      value 1;
                      description "IPv6 family";
                    }
                  }
                }
    
                uses apply-advanced;
    
                leaf maximum {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "1 .. 65535";
                    }
                  }
                  description
                    "Maximum limit above which additional entries are not accepted";
                }
    
                leaf threshold {
                  junos:must "(".. maximum")";
                  junos:must-message "To configure threshold, maximum must be configured";
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "1 .. 100";
                    }
                  }
                  description
                    "Percentage of maximum at which to start generating warnings";
                }
    
                leaf log-interval {
                  junos:must "(".. maximum")";
                  junos:must-message "To configure log-interval, maximum must be configured";
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "1 .. 65535";
                    }
                  }
                  description
                    "Time between successive log messages";
                }
              }  // list family
    
              leaf maximum {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "1 .. 65535";
                  }
                }
                description
                  "Maximum limit above which additional entries are not accepted";
              }
    
              leaf threshold {
                junos:must "(".. maximum")";
                junos:must-message "To configure threshold, maximum must be configured";
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "1 .. 100";
                  }
                }
                description
                  "Percentage of maximum at which to start generating warnings";
              }
    
              leaf log-interval {
                junos:must "(".. maximum")";
                junos:must-message "To configure log-interval, maximum must be configured";
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "1 .. 65535";
                  }
                }
                description
                  "Time between successive log messages";
              }
            }  // container register-limit
    
            container group-rp-mapping {
              description "Group-rp-mapping";
              uses apply-advanced;
    
              list family {
                junos:must "(!(".. maximum"))";
                junos:must-message "Family wise threshold cannot be configuredif global threshold is already configured";
                key "name";
                ordered-by user;
                description "Protocol family";
                leaf name {
                  type enumeration {
                    enum "inet" {
                      value 0;
                      description "IPv4 family";
                    }
                    enum "inet6" {
                      value 1;
                      description "IPv6 family";
                    }
                  }
                }
    
                uses apply-advanced;
    
                leaf maximum {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "1 .. 65535";
                    }
                  }
                  description
                    "Maximum limit above which additional entries are not accepted";
                }
    
                leaf threshold {
                  junos:must "(".. maximum")";
                  junos:must-message "To configure threshold, maximum must be configured";
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "1 .. 100";
                    }
                  }
                  description
                    "Percentage of maximum at which to start generating warnings";
                }
    
                leaf log-interval {
                  junos:must "(".. maximum")";
                  junos:must-message "To configure log-interval, maximum must be configured";
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "1 .. 65535";
                    }
                  }
                  description
                    "Time between successive log messages";
                }
              }  // list family
    
              leaf maximum {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "1 .. 65535";
                  }
                }
                description
                  "Maximum limit above which additional entries are not accepted";
              }
    
              leaf threshold {
                junos:must "(".. maximum")";
                junos:must-message "To configure threshold, maximum must be configured";
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "1 .. 100";
                  }
                }
                description
                  "Percentage of maximum at which to start generating warnings";
              }
    
              leaf log-interval {
                junos:must "(".. maximum")";
                junos:must-message "To configure log-interval, maximum must be configured";
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "1 .. 65535";
                  }
                }
                description
                  "Time between successive log messages";
              }
            }  // container group-rp-mapping
    
            leaf-list rp-register-policy {
              type jt:policy-algebra;
              ordered-by user;
              description
                "RP policy applied to incoming register messages";
            }
    
            leaf-list dr-register-policy {
              type jt:policy-algebra;
              ordered-by user;
              description
                "DR policy applied to outgoing register messages";
            }
    
            container local {
              description
                "Router's local RP properties";
              uses apply-advanced;
    
              leaf address {
                type jt:ipv4addr;
                description
                  "Local RP address (IPv4 only)";
              }
    
              choice enable-disable {
                leaf disable {
                  type empty;
                  description
                    "Disable this RP (IPv4 only)";
                }
              }  // choice enable-disable
    
              leaf priority {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "0 .. 255";
                  }
                }
                description
                  "Router's priority for becoming an RP (IPv4 only)";
              }
    
              leaf hold-time {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "1 .. 65535";
                  }
                }
                description
                  "How long neighbor considers this router to be up, in seconds (IPv4 only)";
              }
    
              list group-ranges {
                key "name";
                ordered-by user;
                description
                  "Group address range for which this router can be an RP (IPv4 only)";
                leaf name {
                  type jt:ipv4prefix;
                }
    
                uses apply-advanced;
              }  // list group-ranges
    
              leaf override {
                type empty;
                description
                  "Static RP mapping will take precedence over dynamic";
              }
    
              leaf process-non-null-as-null-register {
                type empty;
                description
                  "Process incoming non null registers as null registers";
              }
    
              container family {
                description
                  "Local RP address family";
                container inet {
                  description
                    "IPv4 local RP properties";
                  uses apply-advanced;
    
                  leaf address {
                    type jt:ipv4addr;
                    description
                      "Local RP address";
                  }
    
                  choice enable-disable {
                    leaf disable {
                      type empty;
                      description
                        "Disable this RP";
                    }
                  }  // choice enable-disable
    
                  leaf priority {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint32 {
                        range "0 .. 255";
                      }
                    }
                    description
                      "Router's priority for becoming an RP";
                  }
    
                  leaf hold-time {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint32 {
                        range "1 .. 65535";
                      }
                    }
                    description
                      "How long neighbor considers this router to be up, in seconds";
                  }
    
                  list group-ranges {
                    key "name";
                    ordered-by user;
                    description
                      "Group address range for which this router can be an RP";
                    leaf name {
                      type jt:ipv4prefix;
                    }
    
                    uses apply-advanced;
                  }  // list group-ranges
    
                  leaf override {
                    type empty;
                    description
                      "Static RP mapping will take precedence over dynamic";
                  }
    
                  container anycast-pim {
                    description
                      "Attributes for IPv4 anycast PIM";
                    uses apply-advanced;
    
                    container rp-set {
                      description
                        "Rendezvous points belonging to anycast RP set";
                      uses apply-advanced;
    
                      list address {
                        key "name";
                        ordered-by user;
                        description
                          "IPv4 address of one or more remote anycast RPs";
                        leaf name {
                          type jt:ipaddr;
                          description
                            "IPv4 address of remote anycast RP";
                        }
    
                        uses apply-advanced;
    
                        leaf forward-msdp-sa {
                          type empty;
                          description
                            "Forward SAs learned from MSDP to this RP";
                        }
                      }  // list address
                    }  // container rp-set
    
                    leaf local-address {
                      type jt:ipaddr;
                      description
                        "Local address for replicating register messages to other RPs";
                    }
                  }  // container anycast-pim
                }  // container inet
    
                container inet6 {
                  description
                    "IPv6 local RP properties";
                  uses apply-advanced;
    
                  leaf address {
                    type jt:ipv6addr;
                    description
                      "Local RP address";
                  }
    
                  choice enable-disable {
                    leaf disable {
                      type empty;
                      description
                        "Disable this RP";
                    }
                  }  // choice enable-disable
    
                  leaf priority {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint32 {
                        range "0 .. 255";
                      }
                    }
                    description
                      "Router's priority for becoming an RP";
                  }
    
                  leaf hold-time {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint32 {
                        range "1 .. 65535";
                      }
                    }
                    description
                      "How long neighbor considers this router to be up, in seconds";
                  }
    
                  list group-ranges {
                    key "name";
                    ordered-by user;
                    description
                      "Group address range for which this router can be an RP";
                    leaf name {
                      type jt:ipv6prefix;
                    }
    
                    uses apply-advanced;
                  }  // list group-ranges
    
                  leaf override {
                    type empty;
                    description
                      "Static RP mapping will take precedence over dynamic";
                  }
    
                  container anycast-pim {
                    description
                      "Attributes for IPv6 anycast PIM";
                    uses apply-advanced;
    
                    container rp-set {
                      description
                        "Rendezvous points belonging to anycast RP set";
                      uses apply-advanced;
    
                      list address {
                        key "name";
                        ordered-by user;
                        description
                          "IPv6 address of one or more remote anycast RPs";
                        leaf name {
                          type jt:ipv6addr;
                          description
                            "IPv6 address of remote anycast RP";
                        }
    
                        uses apply-advanced;
                      }  // list address
                    }  // container rp-set
    
                    leaf local-address {
                      type jt:ipv6addr;
                      description
                        "Local address for replicating register messages to other RPs";
                    }
                  }  // container anycast-pim
                }  // container inet6
              }  // container family
            }  // container local
    
            container embedded-rp {
              presence "enable embedded-rp";
              description
                "Set embedded-RP mode (IPv6 only)";
              uses apply-advanced;
    
              list group-ranges {
                key "name";
                ordered-by user;
                description
                  "Group address range of RP";
                uses pim_rp_group_range_type;
              }  // list group-ranges
    
              leaf maximum-rps {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "1 .. 500";
                  }
                }
                default "100";
                description
                  "Maximum number of embedded RPs";
              }
            }  // container embedded-rp
    
            container auto-rp {
              description
                "Set auto-RP mode (IPv4 only)";
              uses apply-advanced;
    
              choice autorp-mode {
                leaf discovery {
                  type empty;
                  description
                    "Listen for auto-RP discovery messages";
                }
                leaf announce {
                  type empty;
                  description
                    "Transmit auto-RP announcement messages";
                }
                leaf mapping {
                  type empty;
                  description
                    "Transmit auto-RP mapping messages";
                }
              }  // choice autorp-mode
    
              choice mapping-agent-election-choice {
                leaf mapping-agent-election {
                  type empty;
                  description
                    "Consider higher-addressed mapping agents as authoritative";
                }
                leaf no-mapping-agent-election {
                  type empty;
                  description
                    "Don't consider higher-addressed mapping agents as authoritative";
                }
              }  // choice mapping-agent-election-choice
            }  // container auto-rp
    
            container static {
              description
                "Configure static PIM RPs";
              uses apply-advanced;
    
              list address {
                key "name";
                ordered-by user;
                description "RP address";
                leaf name {
                  type jt:ipaddr;
                  description "IP address of RP";
                }
    
                uses apply-advanced;
    
                leaf version {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "1 .. 2";
                    }
                  }
                  status deprecated;
                  description
                    "PIM version of RP";
                }
    
                list group-ranges {
                  key "name";
                  ordered-by user;
                  description
                    "Group address range of RP";
                  uses pim_rp_group_range_type;
                }  // list group-ranges
    
                leaf override {
                  type empty;
                  description
                    "Static RP mapping will take precedence over dynamic";
                }
              }  // list address
            }  // container static
    
            leaf register-probe-time {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "5 .. 60";
                }
              }
              units "seconds";
              default "5";
              description "Register probe time";
            }
          }  // container rp
    
          leaf passive {
            junos:must "(!(any ".. interface <*> distributed-dr"))";
            junos:must-message "pim passive cannot be configured with pim distributed-dr";
            junos:must "(!(" .. rp"))";
            junos:must-message "pim passive cannot be configured with pim rp";
            type empty;
            description
              "Configure PIM protocol in passive mode";
          }
    
          list interface {
            key "name";
            ordered-by user;
            description "PIM interface options";
            leaf name {
              junos:must "(((("routing-options multicast interface $$ disable" || ("routing-options multicast interface $$ maximum-bandwidth" || ("routing-options multicast interface $$ nexthop-unicast-address" || ("routing-options multicast interface $$ reverse-oif-mapping" || ("routing-options multicast interface $$ subscriber-leave-timer" || "routing-options multicast interface $$ no-qos-adjust"))))) && !("routing-options multicast interface $$ enable")) || ("protocols pim interface $$ disable" || !(("routing-options multicast interface $$" || "routing-options multicast interface $$ enable")))))";
              junos:must-message "Multicast cannot be enabled on the same interface in the [edit routing-options] hierarchy";
              type string;
              description "Interface name";
            }
    
            uses apply-advanced;
    
            container family {
              description "Local address family";
              container any {
                presence "enable any";
                description
                  "Default properties for all families";
                uses apply-advanced;
    
                leaf disable {
                  type empty;
                  description
                    "Disable all families";
                }
              }  // container any
    
              container inet {
                presence "enable inet";
                description
                  "IPv4 specific properties";
                uses apply-advanced;
    
                container bfd-liveness-detection {
                  description
                    "Bidirectional Forwarding Detection options";
                  uses apply-advanced;
    
                  leaf version {
                    type enumeration {
                      enum "0" {
                        value 0;
                        description
                          "BFD version 0 (deprecated)";
                      }
                      enum "1" {
                        value 1;
                        description
                          "BFD version 1";
                      }
                      enum "automatic" {
                        value 2;
                        description
                          "Choose BFD version automatically";
                      }
                    }
                    default "automatic";
                    description
                      "BFD protocol version number";
                  }
    
                  leaf minimum-interval {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint32 {
                        range "1 .. 255000";
                      }
                    }
                    units "milliseconds";
                    description
                      "Minimum transmit and receive interval";
                  }
    
                  leaf minimum-transmit-interval {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint32 {
                        range "1 .. 255000";
                      }
                    }
                    units "milliseconds";
                    status deprecated;
                    description
                      "Minimum transmit interval";
                  }
    
                  leaf minimum-receive-interval {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint32 {
                        range "1 .. 255000";
                      }
                    }
                    units "milliseconds";
                    description
                      "Minimum receive interval";
                  }
    
                  leaf multiplier {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint32 {
                        range "1 .. 255";
                      }
                    }
                    default "3";
                    description
                      "Detection time multiplier";
                  }
    
                  choice adaptation-choice {
                    leaf no-adaptation {
                      type empty;
                      description
                        "Disable adaptation";
                    }
                  }  // choice adaptation-choice
    
                  container transmit-interval {
                    description
                      "Transmit-interval options";
                    uses apply-advanced;
    
                    leaf minimum-interval {
                      type union {
                        type string {
                          pattern "<.*>|$.*";
                        }
                        type uint32 {
                          range "1 .. 255000";
                        }
                      }
                      units "milliseconds";
                      description
                        "Minimum transmit interval";
                    }
    
                    leaf threshold {
                      type union {
                        type uint32;
                        type string {
                          pattern "<.*>|$.*";
                        }
                      }
                      units "milliseconds";
                      description
                        "High transmit interval triggering a trap";
                    }
                  }  // container transmit-interval
    
                  container detection-time {
                    description
                      "Detection-time options";
                    uses apply-advanced;
    
                    leaf threshold {
                      type union {
                        type uint32;
                        type string {
                          pattern "<.*>|$.*";
                        }
                      }
                      units "milliseconds";
                      description
                        "High detection-time triggering a trap";
                    }
                  }  // container detection-time
    
                  container authentication {
                    description
                      "Authentication options";
                    uses apply-advanced;
    
                    leaf key-chain {
                      junos:must "(".. algorithm")";
                      junos:must-message "May not be configured without algorithm";
                      junos:must "("security authentication-key-chains key-chain $$")";
                      junos:must-message "Referenced key-chain must be defined";
                      type string;
                      description
                        "Key chain name";
                    }
    
                    leaf algorithm {
                      junos:must "(".. key-chain")";
                      junos:must-message "May not be configured without key-chain";
                      type enumeration {
                        enum "simple-password" {
                          value 0;
                          description
                            "Simple password";
                        }
                        enum "keyed-md5" {
                          value 1;
                          description
                            "Keyed message Digest 5";
                        }
                        enum
                          "meticulous-keyed-md5" {
                          value 2;
                          description
                            "Meticulous keyed message Digest 5";
                        }
                        enum "keyed-sha-1" {
                          value 3;
                          description
                            "Keyed secure hash algorithm (SHA1) ";
                        }
                        enum
                          "meticulous-keyed-sha-1" {
                          value 4;
                          description
                            "Meticulous keyed secure hash algorithm (SHA1) ";
                        }
                      }
                      description
                        "Algorithm name";
                    }
    
                    leaf loose-check {
                      type empty;
                      description
                        "Verify authentication only if authentication is negotiated";
                    }
                  }  // container authentication
                }  // container bfd-liveness-detection
    
                leaf mcae-mac-synchronize {
                  type empty;
                  description
                    "Mclag mac synchronization";
                }
    
                choice enable-disable {
                  leaf disable {
                    type empty;
                    description
                      "Disable PIMv4 on this interface";
                  }
                }  // choice enable-disable
              }  // container inet
    
              container inet6 {
                presence "enable inet6";
                description
                  "IPv6 specific properties";
                uses apply-advanced;
    
                container bfd-liveness-detection {
                  description
                    "Bidirectional Forwarding Detection options";
                  uses apply-advanced;
    
                  leaf version {
                    type enumeration {
                      enum "0" {
                        value 0;
                        description
                          "BFD version 0 (deprecated)";
                      }
                      enum "1" {
                        value 1;
                        description
                          "BFD version 1";
                      }
                      enum "automatic" {
                        value 2;
                        description
                          "Choose BFD version automatically";
                      }
                    }
                    default "automatic";
                    description
                      "BFD protocol version number";
                  }
    
                  leaf minimum-interval {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint32 {
                        range "1 .. 255000";
                      }
                    }
                    units "milliseconds";
                    description
                      "Minimum transmit and receive interval";
                  }
    
                  leaf minimum-transmit-interval {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint32 {
                        range "1 .. 255000";
                      }
                    }
                    units "milliseconds";
                    status deprecated;
                    description
                      "Minimum transmit interval";
                  }
    
                  leaf minimum-receive-interval {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint32 {
                        range "1 .. 255000";
                      }
                    }
                    units "milliseconds";
                    description
                      "Minimum receive interval";
                  }
    
                  leaf multiplier {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint32 {
                        range "1 .. 255";
                      }
                    }
                    default "3";
                    description
                      "Detection time multiplier";
                  }
    
                  choice adaptation-choice {
                    leaf no-adaptation {
                      type empty;
                      description
                        "Disable adaptation";
                    }
                  }  // choice adaptation-choice
    
                  container transmit-interval {
                    description
                      "Transmit-interval options";
                    uses apply-advanced;
    
                    leaf minimum-interval {
                      type union {
                        type string {
                          pattern "<.*>|$.*";
                        }
                        type uint32 {
                          range "1 .. 255000";
                        }
                      }
                      units "milliseconds";
                      description
                        "Minimum transmit interval";
                    }
    
                    leaf threshold {
                      type union {
                        type uint32;
                        type string {
                          pattern "<.*>|$.*";
                        }
                      }
                      units "milliseconds";
                      description
                        "High transmit interval triggering a trap";
                    }
                  }  // container transmit-interval
    
                  container detection-time {
                    description
                      "Detection-time options";
                    uses apply-advanced;
    
                    leaf threshold {
                      type union {
                        type uint32;
                        type string {
                          pattern "<.*>|$.*";
                        }
                      }
                      units "milliseconds";
                      description
                        "High detection-time triggering a trap";
                    }
                  }  // container detection-time
    
                  container authentication {
                    description
                      "Authentication options";
                    uses apply-advanced;
    
                    leaf key-chain {
                      junos:must "(".. algorithm")";
                      junos:must-message "May not be configured without algorithm";
                      junos:must "("security authentication-key-chains key-chain $$")";
                      junos:must-message "Referenced key-chain must be defined";
                      type string;
                      description
                        "Key chain name";
                    }
    
                    leaf algorithm {
                      junos:must "(".. key-chain")";
                      junos:must-message "May not be configured without key-chain";
                      type enumeration {
                        enum "simple-password" {
                          value 0;
                          description
                            "Simple password";
                        }
                        enum "keyed-md5" {
                          value 1;
                          description
                            "Keyed message Digest 5";
                        }
                        enum
                          "meticulous-keyed-md5" {
                          value 2;
                          description
                            "Meticulous keyed message Digest 5";
                        }
                        enum "keyed-sha-1" {
                          value 3;
                          description
                            "Keyed secure hash algorithm (SHA1) ";
                        }
                        enum
                          "meticulous-keyed-sha-1" {
                          value 4;
                          description
                            "Meticulous keyed secure hash algorithm (SHA1) ";
                        }
                      }
                      description
                        "Algorithm name";
                    }
    
                    leaf loose-check {
                      type empty;
                      description
                        "Verify authentication only if authentication is negotiated";
                    }
                  }  // container authentication
                }  // container bfd-liveness-detection
    
                choice enable-disable {
                  leaf disable {
                    type empty;
                    description
                      "Disable PIMv6 on this interface";
                  }
                }  // choice enable-disable
              }  // container inet6
            }  // container family
    
            choice enable-disable {
              leaf disable {
                type empty;
                description
                  "Disable PIM on this interface";
              }
            }  // choice enable-disable
    
            leaf mode {
              type enumeration {
                enum "dense" {
                  value 0;
                  description "Dense mode";
                }
                enum "sparse" {
                  value 1;
                  description "Sparse mode";
                }
                enum "sparse-dense" {
                  value 2;
                  description
                    "Sparse-dense mode";
                }
                enum "bidirectional-sparse" {
                  junos:must "((!(".. .. .. .. .. .. routing-instances") || any ".. .. .. .. .. .. routing-instances <*> instance-type virtual-router"))";
                  junos:must-message "Only master instance and routing-instances of type virtual-router support PIM-BIDIR.";
                  junos:must "(!(".. version $$={1}"))";
                  junos:must-message "PIM Bidirectional is not supported by PIMv1.";
                  value 3;
                  description
                    "Bidirectional-sparse mode";
                }
                enum
                  "bidirectional-sparse-dense" {
                  junos:must "((!(".. .. .. .. .. .. routing-instances") || any ".. .. .. .. .. .. routing-instances <*> instance-type virtual-router"))";
                  junos:must-message "Only master instance and routing-instances of type virtual-router support PIM-BIDIR.";
                  junos:must "(!(".. version $$={1}"))";
                  junos:must-message "PIM Bidirectional is not supported by PIMv1.";
                  value 4;
                  description
                    "Bidirectional-sparse-dense mode";
                }
              }
              description "Mode of interface";
            }
    
            leaf priority {
              junos:must "((!(".. mode dense") || (".. mode dense" && "protocols igmp interface ${interface} version 1")))";
              junos:must-message "PIM DR Priority cannot be configured in Dense Mode unless IGMP V1 is configured";
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "0 .. 4294967295";
                }
              }
              description
                "Hello option DR priority";
            }
    
            container stickydr {
              presence "enable stickydr";
              description "Make DR sticky";
              uses apply-advanced;
            }  // container stickydr
    
            container multiple-triggered-joins {
              presence
                "enable multiple-triggered-joins";
              description
                "Send multiple pim triggered joins in quick intervals";
              uses apply-advanced;
    
              leaf count {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint16 {
                    range "2 .. 15";
                  }
                }
                default "2";
                description
                  "Set number of triggered joins to be sent";
              }
    
              leaf interval {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint16 {
                    range "100 .. 1000";
                  }
                }
                default "100";
                description
                  "Set interval between multiple triggered joins to be sent in milliseconds";
              }
            }  // container multiple-triggered-joins
    
            leaf version {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "1 .. 2";
                }
              }
              status deprecated;
              description "Force PIM version";
            }
    
            leaf hello-interval {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "0 .. 255";
                }
              }
              units "seconds";
              description "Hello interval";
            }
    
            leaf-list neighbor-policy {
              type jt:policy-algebra;
              ordered-by user;
              description
                "PIM neighbor policy applied to incoming hello messages";
            }
    
            leaf-list accept-join-always-from {
              type jt:policy-algebra;
              ordered-by user;
              description
                "Accept pim join/prune messages based on the policy configured";
            }
    
            leaf accept-remote-source {
              type empty;
              description
                "Accept traffic from remote source";
            }
    
            container dual-dr {
              junos:must "(!(" .. distributed-dr"))";
              junos:must-message "pim dual-dr cannot be configured with pim distributed-dr";
              presence "enable dual-dr";
              description
                "Configure PIM Dual DR";
              uses apply-advanced;
    
              leaf enhanced {
                type empty;
                description
                  "Enable enhanced PIM Dual DR";
              }
            }  // container dual-dr
    
            leaf distributed-dr {
              junos:must "(!(".. .. .. passive"))";
              junos:must-message "pim distributed-dr cannot be configured with pim passive";
              junos:must "(!(" .. dual-dr"))";
              junos:must-message "pim distributed-dr cannot be configured with pim dual-dr";
              type empty;
              description "PIM Distributed DR";
            }
    
            leaf reset-tracking-bit {
              type empty;
              description
                "Clear tracking-bit in PIM Hello LAN Prune Delay Option";
            }
    
            leaf propagation-delay {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "250 .. 2000";
                }
              }
              units "milliseconds";
              default "500";
              description
                "Propagation delay value";
            }
    
            leaf override-interval {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "500 .. 6000";
                }
              }
              units "milliseconds";
              default "2000";
              description
                "Override interval value";
            }
    
            container bfd-liveness-detection {
              status deprecated;
              description
                "Bidirectional Forwarding Detection options (ipv4 only)";
              uses apply-advanced;
    
              leaf version {
                type enumeration {
                  enum "0" {
                    value 0;
                    description
                      "BFD version 0 (deprecated)";
                  }
                  enum "1" {
                    value 1;
                    description "BFD version 1";
                  }
                  enum "automatic" {
                    value 2;
                    description
                      "Choose BFD version automatically";
                  }
                }
                default "automatic";
                description
                  "BFD protocol version number";
              }
    
              leaf minimum-interval {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "1 .. 255000";
                  }
                }
                units "milliseconds";
                description
                  "Minimum transmit and receive interval";
              }
    
              leaf minimum-transmit-interval {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "1 .. 255000";
                  }
                }
                units "milliseconds";
                status deprecated;
                description
                  "Minimum transmit interval";
              }
    
              leaf minimum-receive-interval {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "1 .. 255000";
                  }
                }
                units "milliseconds";
                description
                  "Minimum receive interval";
              }
    
              leaf multiplier {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "1 .. 255";
                  }
                }
                default "3";
                description
                  "Detection time multiplier";
              }
    
              choice adaptation-choice {
                leaf no-adaptation {
                  type empty;
                  description
                    "Disable adaptation";
                }
              }  // choice adaptation-choice
    
              container transmit-interval {
                description
                  "Transmit-interval options";
                uses apply-advanced;
    
                leaf minimum-interval {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "1 .. 255000";
                    }
                  }
                  units "milliseconds";
                  description
                    "Minimum transmit interval";
                }
    
                leaf threshold {
                  type union {
                    type uint32;
                    type string {
                      pattern "<.*>|$.*";
                    }
                  }
                  units "milliseconds";
                  description
                    "High transmit interval triggering a trap";
                }
              }  // container transmit-interval
    
              container detection-time {
                description
                  "Detection-time options";
                uses apply-advanced;
    
                leaf threshold {
                  type union {
                    type uint32;
                    type string {
                      pattern "<.*>|$.*";
                    }
                  }
                  units "milliseconds";
                  description
                    "High detection-time triggering a trap";
                }
              }  // container detection-time
    
              container authentication {
                description
                  "Authentication options";
                uses apply-advanced;
    
                leaf key-chain {
                  junos:must "(".. algorithm")";
                  junos:must-message "May not be configured without algorithm";
                  junos:must "("security authentication-key-chains key-chain $$")";
                  junos:must-message "Referenced key-chain must be defined";
                  type string;
                  description "Key chain name";
                }
    
                leaf algorithm {
                  junos:must "(".. key-chain")";
                  junos:must-message "May not be configured without key-chain";
                  type enumeration {
                    enum "simple-password" {
                      value 0;
                      description
                        "Simple password";
                    }
                    enum "keyed-md5" {
                      value 1;
                      description
                        "Keyed message Digest 5";
                    }
                    enum "meticulous-keyed-md5" {
                      value 2;
                      description
                        "Meticulous keyed message Digest 5";
                    }
                    enum "keyed-sha-1" {
                      value 3;
                      description
                        "Keyed secure hash algorithm (SHA1) ";
                    }
                    enum
                      "meticulous-keyed-sha-1" {
                      value 4;
                      description
                        "Meticulous keyed secure hash algorithm (SHA1) ";
                    }
                  }
                  description "Algorithm name";
                }
    
                leaf loose-check {
                  type empty;
                  description
                    "Verify authentication only if authentication is negotiated";
                }
              }  // container authentication
            }  // container bfd-liveness-detection
          }  // list interface
    
          container mdt {
            junos:must "((!(" .. .. mvpn") || ".. mvpn family inet rosen-mvpn"))";
            junos:must-message "Data tunnels cannot be configured with 'protocols mvpn'";
            status deprecated;
            description
              "Configure multicast data tunnel parameters";
            uses apply-advanced;
    
            container threshold {
              description
                "Threshold for creation of multicast tunnels";
              uses apply-advanced;
    
              list group {
                key "name";
                ordered-by user;
                description
                  "IP prefix of multicast group";
                leaf name {
                  type jt:ipprefix;
                  description
                    "IP prefix of group";
                }
    
                uses apply-advanced;
    
                list source {
                  key "name";
                  ordered-by user;
                  description
                    "IP prefix of one or more multicast sources ";
                  leaf name {
                    type jt:ipprefix;
                    description
                      "IP prefix of source";
                  }
    
                  uses apply-advanced;
    
                  leaf rate {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint32 {
                        range "10 .. 1000000";
                      }
                    }
                    units "kilobits";
                    description
                      "Data threshold to create new tunnel";
                  }
                }  // list source
              }  // list group
            }  // container threshold
    
            leaf data-mdt-reuse {
              type empty;
              description
                "Allow multiple customer streams to be transmitted over one data tunnel ";
            }
    
            leaf tunnel-limit {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "0 .. 8192";
                }
              }
              description
                "Maximum multicast data tunnels";
            }
    
            leaf group-range {
              type jt:ipprefix;
              description
                "Group address range for multicast data tunnels";
            }
          }  // container mdt
    
          container graceful-restart {
            description
              "Configure graceful restart attributes";
            uses apply-advanced;
    
            choice enable-disable {
              leaf disable {
                type empty;
                description
                  "Disable PIM graceful restart capability";
              }
            }  // choice enable-disable
    
            leaf restart-duration {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "30 .. 300";
                }
              }
              units "seconds";
              description
                "Maximum time for graceful restart to finish (seconds)";
            }
    
            leaf no-bidirectional-mode {
              type empty;
              description
                "Disable PIM graceful restart for bidirectional mode";
            }
    
            leaf restart-complete-duration {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "5 .. 300";
                }
              }
              units "seconds";
              description
                "Maximum time for graceful restart to complete (seconds)";
            }
          }  // container graceful-restart
    
          container join-load-balance {
            presence "enable join-load-balance";
            description
              "Configure PIM join load balancing";
            uses apply-advanced;
    
            leaf automatic {
              type empty;
              description
                "Enable automatic PIM join load balancing";
            }
          }  // container join-load-balance
    
          leaf standby-path-creation-delay {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "1 .. 300";
              }
            }
            units "seconds";
            description
              "Amount of time to wait before creating standby path";
          }
    
          leaf idle-standby-path-switchover-delay {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "1 .. 300";
              }
            }
            units "seconds";
            description
              "Amount of time to wait before switching over to idle standby path";
          }
    
          leaf dr-election-on-p2p {
            type empty;
            description
              "Enable DR election on Point-to-Point Interfaces";
          }
    
          leaf no-wildcard-register-stop {
            type empty;
            description
              "Disable sending of wildcard register stop message";
          }
    
          leaf nexthop-hold-time {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "1 .. 1000";
              }
            }
            units "milliseconds";
            description
              "Nexthop hold time in milliseconds";
          }
    
          leaf mpls-internet-multicast {
            junos:must "(any "routing-instances <*> instance-type mpls-internet-multicast")";
            junos:must-message "The mpls-internet-multicast instance must be configured to support multicast over MPLS";
            type empty;
            description
              "Enable support for Internet Multicast over MPLS";
          }
    
          container join-make-before-break {
            description
              "Enable PIM Join Make-Before-Break during RPF neighbor change";
            uses apply-advanced;
    
            choice enable-disable {
              leaf disable {
                type empty;
                description
                  "Disable Make-Before-Break for PIM RPF neighbor change";
              }
            }  // choice enable-disable
          }  // container join-make-before-break
    
          leaf reset-tracking-bit {
            type empty;
            description
              "Clear tracking-bit in PIM Hello LAN Prune Delay Option";
          }
    
          leaf propagation-delay {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "250 .. 2000";
              }
            }
            units "milliseconds";
            default "500";
            description
              "Propagation delay value";
          }
    
          leaf override-interval {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "500 .. 6000";
              }
            }
            units "milliseconds";
            default "2000";
            description
              "Override interval value";
          }
    
          container default-vpn-source {
            presence "enable default-vpn-source";
            description
              "Let all VRFs use master loopback address for mt interfaces";
            uses apply-advanced;
    
            leaf interface-name {
              junos:must "("interfaces $$-IFL family inet address")";
              junos:must-message "Family inet address should be configured on this loopback interface";
              type union {
                type jt:interface-unit;
                type string {
                  pattern "<.*>|$.*";
                }
              }
              description
                "Master loopback interface name";
            }
          }  // container default-vpn-source
        }  // grouping juniper-protocols-pim
    
        grouping juniper-protocols-protection-group {
          uses apply-advanced;
    
          container ethernet-aps {
            description
              "Ethernet APS configuration";
            uses juniper-protocols-protection-group-eaps;
          }  // container ethernet-aps
    
          container traceoptions {
            description
              "Tracing options for debugging protocol operation";
            uses erp-trace-options;
          }  // container traceoptions
    
          leaf restore-interval {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "1 .. 12";
              }
            }
            units "minutes";
            default "5";
            description
              "Wait to restore interval";
          }
    
          leaf guard-interval {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "10 .. 2000";
              }
            }
            units "milliseconds";
            default "500";
            description
              "Guard timer interval in 10ms steps";
          }
    
          leaf hold-interval {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "0 .. 10000";
              }
            }
            units "milliseconds";
            default "0";
            description
              "Hold off timer interval in 100ms steps";
          }
    
          list ethernet-ring {
            key "name";
            ordered-by user;
            description "Ethernet ring";
            uses juniper-protocols-protection-group-ethernet-ring;
          }  // list ethernet-ring
        }  // grouping juniper-protocols-protection-group
    
        grouping erp-trace-options {
          description
            "Trace options for Ethernet Ring Protocol";
          uses apply-advanced;
    
          list flag {
            junos:must "(".. file")";
            junos:must-message "Trace file name required to enable tracing";
            key "name";
            ordered-by user;
            description "Tracing parameters";
            leaf name {
              type enumeration {
                enum "events" {
                  value 0;
                  description
                    "Trace events to the protocol state machine";
                }
                enum "pdu" {
                  value 1;
                  description
                    "Trace R-APS PDU reception and transmission";
                }
                enum "timers" {
                  value 2;
                  description
                    "Trace protocol timers";
                }
                enum "state-machine" {
                  value 3;
                  description
                    "Trace R-APS state machine";
                }
                enum
                  "periodic-packet-management" {
                  value 4;
                  description
                    "Trace periodic packet management state and events";
                }
                enum "config" {
                  value 5;
                  description
                    "Trace protocol configuration";
                }
                enum "normal" {
                  value 6;
                  description
                    "Trace protocol general log messages";
                }
                enum "debug" {
                  value 7;
                  description
                    "Trace protocol debug log messages";
                }
                enum "all" {
                  value 8;
                  description "Trace all";
                }
              }
            }
          }  // list flag
    
          container file {
            description "Trace file options";
            leaf filename {
              type string {
                junos:posix-pattern "![/ %]";
                junos:pattern-message "Must not contain '/', % or a space";
                length "1 .. 1024";
              }
              description
                "Name of file in which to write trace information";
            }
    
            leaf replace {
              type empty;
              status deprecated;
              description
                "Replace trace file rather than appending to it";
            }
    
            leaf size {
              type string;
              description
                "Maximum trace file size";
            }
    
            leaf files {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "2 .. 1000";
                }
              }
              default "10";
              description
                "Maximum number of trace files";
            }
    
            leaf no-stamp {
              type empty;
              status deprecated;
              description
                "Do not timestamp trace file";
            }
    
            choice world-readable-choice {
              leaf world-readable {
                type empty;
                description
                  "Allow any user to read the log file";
              }
              leaf no-world-readable {
                type empty;
                description
                  "Don't allow any user to read the log file";
              }
            }  // choice world-readable-choice
          }  // container file
        }  // grouping erp-trace-options
    
        grouping juniper-protocols-protection-group-eaps {
          uses apply-advanced;
    
          list profile {
            key "name";
            uses juniper-protocols-protection-group-eaps-profile;
          }  // list profile
        }  // grouping juniper-protocols-protection-group-eaps
    
        grouping juniper-protocols-protection-group-eaps-profile {
          description "Ethernet APS profile";
          leaf name {
            type string {
              length "1 .. 32";
            }
            description "Profile name";
          }
    
          uses apply-advanced;
    
          leaf protocol {
            type enumeration {
              enum "ccm" {
                value 0;
                description
                  "Use CCM packets for protection.";
              }
              enum "G.8031" {
                value 1;
                description
                  "Use G.8031 packets for protection.";
              }
            }
            description "Protocol value";
          }
    
          leaf revert-time {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "0 .. 15";
              }
            }
            units "minutes";
            default "4";
            description
              "Reversion time in minutes, 0 would mean no reversion";
          }
    
          leaf hold-time {
            junos:must "(".. protocol G.8031")";
            junos:must-message "hold-time is allowed with G.8031 protocol only";
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "0 .. 10000";
              }
            }
            units "milli seconds";
            default "0";
            description "Hold time in seconds";
          }
    
          leaf local-request {
            junos:must "(".. protocol G.8031")";
            junos:must-message "local-request is allowed with G.8031 protocol only";
            type enumeration {
              enum "lockout" {
                value 0;
                description "Lockout protection";
              }
            }
            description "Local APS request";
          }
        }  // grouping juniper-protocols-protection-group-eaps-profile
    
        grouping juniper-protocols-protection-group-ethernet-ring {
          description
            "Ethernet Ring protection group configuration";
          leaf name {
            type string {
              length "1 .. 32";
            }
            description
              "Name of Ethernet Ring protection group";
          }
    
          uses apply-advanced;
    
          leaf node-id {
            type jt:mac-unicast;
            description
              "Node ID of the protection group, by default bridge's MAC";
          }
    
          leaf ring-protection-link-owner {
            type empty;
            description
              "Ring protection link owner flag, one ring should have only one node as a ring protection link owner";
          }
    
          leaf level {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "0 .. 7";
              }
            }
            description
              "MPG Level value for R-APS PDU";
          }
    
          leaf restore-interval {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "1 .. 12";
              }
            }
            units "minutes";
            description
              "Wait to restore interval";
          }
    
          leaf guard-interval {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "10 .. 2000";
              }
            }
            units "milliseconds";
            description
              "Guard timer interval in 10ms";
          }
    
          leaf hold-interval {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "0 .. 10000";
              }
            }
            units "milliseconds";
            description
              "Hold off timer interval in 100ms steps";
          }
    
          leaf non-revertive {
            type empty;
            description
              "Non-revertive mode of operation";
          }
    
          leaf wait-to-block-interval {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "5 .. 10";
              }
            }
            units "seconds";
            default "5";
            description "Wait to block interval";
          }
    
          leaf major-ring-name {
            type string {
              length "1 .. 32";
            }
            description
              "Name of major-ring to which this sub-ring node attached";
          }
    
          leaf propagate-tc {
            type empty;
            description
              "Enable Topology Change Propagation to major-ring from the sub-ring";
          }
    
          leaf compatibility-version {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "1 .. 2";
              }
            }
            default "2";
            description
              "G.8032 compatibility version";
          }
    
          leaf ring-id {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "1 .. 239";
              }
            }
            default "1";
            description
              "Ethernet Ring ID of protection group";
          }
    
          leaf non-vc-mode {
            type empty;
            description
              "Node is operating in non virtual channel mode";
          }
    
          leaf dot1p-priority {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "0 .. 7";
              }
            }
            default "0";
            description
              "IEEE 802.1p priority of transmitted R-APS";
          }
    
          container east-interface {
            presence "enable east-interface";
            description
              "East interface configuration";
            uses erp-interface;
          }  // container east-interface
    
          container west-interface {
            presence "enable west-interface";
            description
              "West interface configuration";
            uses erp-interface;
          }  // container west-interface
    
          leaf control-vlan {
            type string;
            description
              "Dedicated VLAN identifier - VLAN id or VLAN name";
          }
    
          container data-channel {
            presence "enable data-channel";
            description
              "Ring instance data channel";
            uses erp-data-channel;
          }  // container data-channel
        }  // grouping juniper-protocols-protection-group-ethernet-ring
    
        grouping erp-data-channel {
          uses apply-advanced;
    
          leaf-list vlan {
            type string;
            ordered-by user;
            description
              "VLAN ID or VLAN ID range [1..4094]";
          }
        }  // grouping erp-data-channel
    
        grouping erp-interface {
          uses apply-advanced;
    
          container control-channel {
            presence "enable control-channel";
            description
              "Control channel of ring port";
            uses apply-advanced;
    
            leaf vlan {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint16 {
                  range "1 .. 4094";
                }
              }
              description
                "Dedicated VLAN identifier";
            }
    
            leaf control-channel-name {
              type union {
                type jt:interface-name;
                type string {
                  pattern "<.*>|$.*";
                }
              }
            }
          }  // container control-channel
    
          leaf ring-protection-link-end {
            type empty;
            description
              "Port is connecting to ring protection link";
          }
    
          leaf interface-none {
            type empty;
            description "Port is not used";
          }
        }  // grouping erp-interface
    
        grouping juniper-protocols-rip {
          uses apply-advanced;
    
          container traceoptions {
            description "Trace options for RIP";
            uses apply-advanced;
    
            container file {
              description "Trace file options";
              leaf filename {
                type string {
                  junos:posix-pattern "![/ %]";
                  junos:pattern-message "Must not contain '/', % or a space";
                  length "1 .. 1024";
                }
                description
                  "Name of file in which to write trace information";
              }
    
              leaf replace {
                type empty;
                status deprecated;
                description
                  "Replace trace file rather than appending to it";
              }
    
              leaf size {
                type string;
                description
                  "Maximum trace file size";
              }
    
              leaf files {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "2 .. 1000";
                  }
                }
                default "10";
                description
                  "Maximum number of trace files";
              }
    
              leaf no-stamp {
                type empty;
                status deprecated;
                description
                  "Do not timestamp trace file";
              }
    
              choice world-readable-choice {
                leaf world-readable {
                  type empty;
                  description
                    "Allow any user to read the log file";
                }
                leaf no-world-readable {
                  type empty;
                  description
                    "Don't allow any user to read the log file";
                }
              }  // choice world-readable-choice
            }  // container file
    
            list flag {
              key "name";
              ordered-by user;
              description "Tracing parameters";
              leaf name {
                type enumeration {
                  enum "auth" {
                    value 0;
                    description
                      "Trace RIP authentication";
                  }
                  enum "error" {
                    value 1;
                    description
                      "Trace RIP errors";
                  }
                  enum "expiration" {
                    value 2;
                    description
                      "Trace RIP route expiration processing";
                  }
                  enum "holddown" {
                    value 3;
                    description
                      "Trace RIP hold-down processing";
                  }
                  enum "packets" {
                    value 4;
                    description
                      "Trace all RIP packets";
                  }
                  enum "request" {
                    value 5;
                    description
                      "Trace RIP information packets";
                  }
                  enum "trigger" {
                    value 6;
                    description
                      "Trace RIP triggered updates";
                  }
                  enum "update" {
                    value 7;
                    description
                      "Trace RIP update packets";
                  }
                  enum "nsr-synchronization" {
                    value 8;
                    description
                      "Trace NSR synchronization events";
                  }
                  enum "route" {
                    value 9;
                    description
                      "Trace routing information";
                  }
                  enum "normal" {
                    value 10;
                    description
                      "Trace normal events";
                  }
                  enum "general" {
                    value 11;
                    description
                      "Trace general events";
                  }
                  enum "state" {
                    value 12;
                    description
                      "Trace state transitions";
                  }
                  enum "policy" {
                    value 13;
                    description
                      "Trace policy processing";
                  }
                  enum "task" {
                    value 14;
                    description
                      "Trace routing protocol task processing";
                  }
                  enum "timer" {
                    value 15;
                    description
                      "Trace routing protocol timer processing";
                  }
                  enum "all" {
                    value 16;
                    description
                      "Trace everything";
                  }
                }
              }
    
              leaf send {
                type empty;
                description
                  "Trace transmitted packets";
              }
    
              leaf receive {
                type empty;
                description
                  "Trace received packets";
              }
    
              leaf detail {
                type empty;
                description
                  "Trace detailed information";
              }
    
              leaf disable {
                type empty;
                description
                  "Disable this trace flag";
              }
    
              container filter {
                presence "enable filter";
                description
                  "Filter to apply to this flag";
                uses rip_filter_obj;
              }  // container filter
            }  // list flag
          }  // container traceoptions
    
          container rib-group {
            description
              "Routing table group for importing RIP routes";
            uses rib_group_inet_type;
          }  // container rib-group
    
          leaf metric-in {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "1 .. 15";
              }
            }
            description
              "Metric value to add to incoming routes";
          }
    
          container send {
            description
              "Configure RIP send options";
            choice send-opts {
              leaf broadcast {
                type empty;
                description
                  "Broadcast RIPv2 packets (RIPv1 compatible)";
              }
              leaf multicast {
                type empty;
                description
                  "Multicast RIPv2 packets";
              }
              leaf none {
                type empty;
                description
                  "Do not send RIP updates";
              }
              leaf version-1 {
                type empty;
                description
                  "Broadcast RIPv1 packets";
              }
            }  // choice send-opts
          }  // container send
    
          container receive {
            description
              "Configure RIP receive options";
            choice receive-opts {
              leaf both {
                type empty;
                description
                  "Accept both RIPv1 and RIPv2 packets";
              }
              leaf none {
                type empty;
                description
                  "Do not receive RIP packets";
              }
              leaf version-1 {
                type empty;
                description
                  "Accept RIPv1 packets only";
              }
              leaf version-2 {
                type empty;
                description
                  "Accept only RIPv2 packets";
              }
            }  // choice receive-opts
          }  // container receive
    
          choice check-zero-choice {
            leaf check-zero {
              type empty;
              description
                "Check reserved fields on incoming RIPv2 packets";
            }
            leaf no-check-zero {
              type empty;
              description
                "Don't check reserved fields on incoming RIPv2 packets";
            }
          }  // choice check-zero-choice
    
          leaf message-size {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "25 .. 255";
              }
            }
            description
              "Number of route entries per update message";
          }
    
          leaf-list import {
            type jt:policy-algebra;
            ordered-by user;
            description "Import policy";
          }
    
          leaf holddown {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "10 .. 180";
              }
            }
            units "seconds";
            description "Hold-down time";
          }
    
          leaf route-timeout {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "30 .. 360";
              }
            }
            units "seconds";
            description
              "Delay before routes time out";
          }
    
          leaf update-interval {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "10 .. 60";
              }
            }
            units "seconds";
            description
              "Interval between regular route updates";
          }
    
          choice authentication {
            leaf authentication-type {
              type enumeration {
                enum "none" {
                  value 0;
                  description
                    "No authentication";
                }
                enum "simple" {
                  value 1;
                  description
                    "Simple password authentication";
                }
                enum "md5" {
                  value 2;
                  description
                    "MD5 authentication";
                }
              }
            }
            list authentication-selective-md5 {
              key "name";
              ordered-by user;
              description
                "MD5 authentication with one or more keys";
              leaf name {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "0 .. 255";
                  }
                }
                description
                  "Key ID for MD5 authentication";
              }
    
              leaf key {
                type jt:unreadable;
                description
                  "MD5 authentication key value";
              }
    
              leaf start-time {
                type jt:time;
                description
                  "Start time for key transmission (YYYY-MM-DD.HH:MM)";
              }
            }  // list authentication-selective-md5
          }  // choice authentication
    
          leaf authentication-key {
            junos:must "(!(".. authentication-selective-md5"))";
            junos:must-message "Key already provided for selective-md5";
            type jt:unreadable;
            description
              "Authentication key (password)";
          }
    
          list group {
            key "name";
            ordered-by user;
            description "Instance configuration";
            leaf name {
              type string {
                junos:posix-pattern "^.{1,48}$";
                junos:pattern-message "Must be a string of at most 48 characters";
              }
              description "Group name";
            }
    
            uses apply-advanced;
    
            leaf route-timeout {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "30 .. 360";
                }
              }
              units "seconds";
              description
                "Delay before routes time out";
            }
    
            leaf update-interval {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "10 .. 60";
                }
              }
              units "seconds";
              description
                "Interval between regular route updates";
            }
    
            leaf preference {
              type union {
                type uint32;
                type string {
                  pattern "<.*>|$.*";
                }
              }
              description
                "Preference of routes learned by this group";
            }
    
            leaf metric-out {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "1 .. 15";
                }
              }
              description
                "Default metric of exported routes";
            }
    
            leaf-list export {
              type jt:policy-algebra;
              ordered-by user;
              description "Export policy";
            }
    
            leaf-list import {
              type jt:policy-algebra;
              ordered-by user;
              description "Import policy";
            }
    
            leaf demand-circuit {
              junos:must "(!(".. .. authentication-selective-md5"))";
              junos:must-message "selective-md5 isn't supported with demand-circuit,opt for 'authentication-type md5' instead";
              type empty;
              description
                "Enable demand circuit on this interface";
            }
    
            leaf max-retrans-time {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "5 .. 180";
                }
              }
              description
                "Maximum time to re-transmit a message in demand-circuit";
            }
    
            container bfd-liveness-detection {
              description
                "Bidirectional Forwarding Detection options";
              uses apply-advanced;
    
              leaf version {
                type enumeration {
                  enum "0" {
                    value 0;
                    description
                      "BFD version 0 (deprecated)";
                  }
                  enum "1" {
                    value 1;
                    description "BFD version 1";
                  }
                  enum "automatic" {
                    value 2;
                    description
                      "Choose BFD version automatically";
                  }
                }
                default "automatic";
                description
                  "BFD protocol version number";
              }
    
              leaf minimum-interval {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "1 .. 255000";
                  }
                }
                units "milliseconds";
                description
                  "Minimum transmit and receive interval";
              }
    
              leaf minimum-transmit-interval {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "1 .. 255000";
                  }
                }
                units "milliseconds";
                status deprecated;
                description
                  "Minimum transmit interval";
              }
    
              leaf minimum-receive-interval {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "1 .. 255000";
                  }
                }
                units "milliseconds";
                description
                  "Minimum receive interval";
              }
    
              leaf multiplier {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "1 .. 255";
                  }
                }
                default "3";
                description
                  "Detection time multiplier";
              }
    
              choice adaptation-choice {
                leaf no-adaptation {
                  type empty;
                  description
                    "Disable adaptation";
                }
              }  // choice adaptation-choice
    
              container transmit-interval {
                description
                  "Transmit-interval options";
                uses apply-advanced;
    
                leaf minimum-interval {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "1 .. 255000";
                    }
                  }
                  units "milliseconds";
                  description
                    "Minimum transmit interval";
                }
    
                leaf threshold {
                  type union {
                    type uint32;
                    type string {
                      pattern "<.*>|$.*";
                    }
                  }
                  units "milliseconds";
                  description
                    "High transmit interval triggering a trap";
                }
              }  // container transmit-interval
    
              container detection-time {
                description
                  "Detection-time options";
                uses apply-advanced;
    
                leaf threshold {
                  type union {
                    type uint32;
                    type string {
                      pattern "<.*>|$.*";
                    }
                  }
                  units "milliseconds";
                  description
                    "High detection-time triggering a trap";
                }
              }  // container detection-time
    
              container authentication {
                description
                  "Authentication options";
                uses apply-advanced;
    
                leaf key-chain {
                  junos:must "(".. algorithm")";
                  junos:must-message "May not be configured without algorithm";
                  junos:must "("security authentication-key-chains key-chain $$")";
                  junos:must-message "Referenced key-chain must be defined";
                  type string;
                  description "Key chain name";
                }
    
                leaf algorithm {
                  junos:must "(".. key-chain")";
                  junos:must-message "May not be configured without key-chain";
                  type enumeration {
                    enum "simple-password" {
                      value 0;
                      description
                        "Simple password";
                    }
                    enum "keyed-md5" {
                      value 1;
                      description
                        "Keyed message Digest 5";
                    }
                    enum "meticulous-keyed-md5" {
                      value 2;
                      description
                        "Meticulous keyed message Digest 5";
                    }
                    enum "keyed-sha-1" {
                      value 3;
                      description
                        "Keyed secure hash algorithm (SHA1) ";
                    }
                    enum
                      "meticulous-keyed-sha-1" {
                      value 4;
                      description
                        "Meticulous keyed secure hash algorithm (SHA1) ";
                    }
                  }
                  description "Algorithm name";
                }
    
                leaf loose-check {
                  type empty;
                  description
                    "Verify authentication only if authentication is negotiated";
                }
              }  // container authentication
            }  // container bfd-liveness-detection
    
            list neighbor {
              key "name";
              ordered-by user;
              description
                "Neighbor configuration";
              leaf name {
                type union {
                  type jt:interface-name;
                  type string {
                    pattern "<.*>|$.*";
                  }
                }
                description "Interface name";
              }
    
              uses apply-advanced;
    
              leaf route-timeout {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "30 .. 360";
                  }
                }
                units "seconds";
                description
                  "Delay before routes time out";
              }
    
              leaf update-interval {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "10 .. 60";
                  }
                }
                units "seconds";
                description
                  "Interval between regular route updates";
              }
    
              leaf interface-type {
                type enumeration {
                  enum "p2mp" {
                    junos:must "(!(".. .. .. authentication-selective-md5"))";
                    junos:must-message "selective-md5 isn't supported with 'interface-type p2mp', opt for 'authentication-type md5' instead";
                    value 0;
                    description
                      "Point-to-multipoint link";
                  }
                }
                description
                  "Interface type for the neighbor";
              }
    
              leaf dynamic-peers {
                junos:must "(" .. interface-type p2mp")";
                junos:must-message "dynamic-peers option can be set only if the interface type is p2mp";
                type empty;
                description
                  "Learn peers dynamically on a p2mp interface";
              }
    
              list peer {
                junos:must "(" .. interface-type p2mp")";
                junos:must-message "Peer address can be set only if the interface type is p2mp";
                key "name";
                ordered-by user;
                description "P2MP peer";
                leaf name {
                  type jt:ipaddr;
                  description "Address of peer";
                }
              }  // list peer
    
              leaf metric-in {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "1 .. 15";
                  }
                }
                description
                  "Metric value to add to incoming routes";
              }
    
              container send {
                description
                  "Configure RIP send options";
                choice send-opts {
                  leaf broadcast {
                    type empty;
                    description
                      "Broadcast RIPv2 packets (RIPv1 compatible)";
                  }
                  leaf multicast {
                    type empty;
                    description
                      "Multicast RIPv2 packets";
                  }
                  leaf none {
                    type empty;
                    description
                      "Do not send RIP updates";
                  }
                  leaf version-1 {
                    type empty;
                    description
                      "Broadcast RIPv1 packets";
                  }
                }  // choice send-opts
              }  // container send
    
              container receive {
                description
                  "Configure RIP receive options";
                choice receive-opts {
                  leaf both {
                    type empty;
                    description
                      "Accept both RIPv1 and RIPv2 packets";
                  }
                  leaf none {
                    type empty;
                    description
                      "Do not receive RIP packets";
                  }
                  leaf version-1 {
                    type empty;
                    description
                      "Accept RIPv1 packets only";
                  }
                  leaf version-2 {
                    type empty;
                    description
                      "Accept only RIPv2 packets";
                  }
                }  // choice receive-opts
              }  // container receive
    
              leaf demand-circuit {
                junos:must "(!(".. .. .. authentication-selective-md5"))";
                junos:must-message "selective-md5 isn't supported with demand-circuit, opt for 'authentication-type md5' instead";
                type empty;
                description
                  "Enable demand circuit on this interface";
              }
    
              leaf max-retrans-time {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "5 .. 180";
                  }
                }
                description
                  "Maximum time to re-transmit a msg in demand-circuit";
              }
    
              choice check-zero-choice {
                leaf check-zero {
                  type empty;
                  description
                    "Check reserved fields on incoming RIPv1 packets";
                }
                leaf no-check-zero {
                  type empty;
                  description
                    "Don't check reserved fields on incoming RIPv1 packets";
                }
              }  // choice check-zero-choice
    
              leaf any-sender {
                type empty;
                description
                  "Disable strict checks on sender address";
              }
    
              leaf message-size {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "25 .. 255";
                  }
                }
                description
                  "Number of route entries per update message";
              }
    
              leaf-list import {
                type jt:policy-algebra;
                ordered-by user;
                description "Import policy";
              }
    
              choice authentication {
                leaf authentication-type {
                  type enumeration {
                    enum "none" {
                      value 0;
                      description
                        "No authentication";
                    }
                    enum "simple" {
                      value 1;
                      description
                        "Simple password authentication";
                    }
                    enum "md5" {
                      value 2;
                      description
                        "MD5 authentication";
                    }
                  }
                }
                list authentication-selective-md5 {
                  junos:must "(!("..  interface-type p2mp"))";
                  junos:must-message "selective-md5 isn't supported with '.. neighbor <> interface-type p2mp', opt for 'authentication-type md5' instead";
                  junos:must "(!("..  demand-circuit"))";
                  junos:must-message "selective-md5 isn't supported with '.. neighbor <> demand-circuit', opt for 'authentication-type md5' instead";
                  junos:must "(!(".. .. demand-circuit"))";
                  junos:must-message "selective-md5 isn't supported with '.. group <> demand-circuit', opt for 'authentication-type md5' instead";
                  key "name";
                  ordered-by user;
                  description
                    "MD5 authentication with one or more keys";
                  leaf name {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint32 {
                        range "0 .. 255";
                      }
                    }
                    description
                      "Key ID for MD5 authentication";
                  }
    
                  leaf key {
                    type jt:unreadable;
                    description
                      "MD5 authentication key value";
                  }
    
                  leaf start-time {
                    type jt:time;
                    description
                      "Start time for key transmission (YYYY-MM-DD.HH:MM)";
                  }
                }  // list authentication-selective-md5
              }  // choice authentication
    
              leaf authentication-key {
                junos:must "(!(".. authentication-selective-md5"))";
                junos:must-message "Key already provided for selective-md5";
                type jt:unreadable;
                description
                  "Authentication key (password)";
              }
    
              container bfd-liveness-detection {
                description
                  "Bidirectional Forwarding Detection options";
                uses apply-advanced;
    
                leaf version {
                  type enumeration {
                    enum "0" {
                      value 0;
                      description
                        "BFD version 0 (deprecated)";
                    }
                    enum "1" {
                      value 1;
                      description
                        "BFD version 1";
                    }
                    enum "automatic" {
                      value 2;
                      description
                        "Choose BFD version automatically";
                    }
                  }
                  default "automatic";
                  description
                    "BFD protocol version number";
                }
    
                leaf minimum-interval {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "1 .. 255000";
                    }
                  }
                  units "milliseconds";
                  description
                    "Minimum transmit and receive interval";
                }
    
                leaf minimum-transmit-interval {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "1 .. 255000";
                    }
                  }
                  units "milliseconds";
                  status deprecated;
                  description
                    "Minimum transmit interval";
                }
    
                leaf minimum-receive-interval {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "1 .. 255000";
                    }
                  }
                  units "milliseconds";
                  description
                    "Minimum receive interval";
                }
    
                leaf multiplier {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "1 .. 255";
                    }
                  }
                  default "3";
                  description
                    "Detection time multiplier";
                }
    
                choice adaptation-choice {
                  leaf no-adaptation {
                    type empty;
                    description
                      "Disable adaptation";
                  }
                }  // choice adaptation-choice
    
                container transmit-interval {
                  description
                    "Transmit-interval options";
                  uses apply-advanced;
    
                  leaf minimum-interval {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint32 {
                        range "1 .. 255000";
                      }
                    }
                    units "milliseconds";
                    description
                      "Minimum transmit interval";
                  }
    
                  leaf threshold {
                    type union {
                      type uint32;
                      type string {
                        pattern "<.*>|$.*";
                      }
                    }
                    units "milliseconds";
                    description
                      "High transmit interval triggering a trap";
                  }
                }  // container transmit-interval
    
                container detection-time {
                  description
                    "Detection-time options";
                  uses apply-advanced;
    
                  leaf threshold {
                    type union {
                      type uint32;
                      type string {
                        pattern "<.*>|$.*";
                      }
                    }
                    units "milliseconds";
                    description
                      "High detection-time triggering a trap";
                  }
                }  // container detection-time
    
                container authentication {
                  description
                    "Authentication options";
                  uses apply-advanced;
    
                  leaf key-chain {
                    junos:must "(".. algorithm")";
                    junos:must-message "May not be configured without algorithm";
                    junos:must "("security authentication-key-chains key-chain $$")";
                    junos:must-message "Referenced key-chain must be defined";
                    type string;
                    description "Key chain name";
                  }
    
                  leaf algorithm {
                    junos:must "(".. key-chain")";
                    junos:must-message "May not be configured without key-chain";
                    type enumeration {
                      enum "simple-password" {
                        value 0;
                        description
                          "Simple password";
                      }
                      enum "keyed-md5" {
                        value 1;
                        description
                          "Keyed message Digest 5";
                      }
                      enum
                        "meticulous-keyed-md5" {
                        value 2;
                        description
                          "Meticulous keyed message Digest 5";
                      }
                      enum "keyed-sha-1" {
                        value 3;
                        description
                          "Keyed secure hash algorithm (SHA1) ";
                      }
                      enum
                        "meticulous-keyed-sha-1" {
                        value 4;
                        description
                          "Meticulous keyed secure hash algorithm (SHA1) ";
                      }
                    }
                    description "Algorithm name";
                  }
    
                  leaf loose-check {
                    type empty;
                    description
                      "Verify authentication only if authentication is negotiated";
                  }
                }  // container authentication
              }  // container bfd-liveness-detection
            }  // list neighbor
          }  // list group
    
          container graceful-restart {
            presence "enable graceful-restart";
            description
              "RIP graceful restart options";
            uses apply-advanced;
    
            choice enable-disable {
              leaf disable {
                type empty;
                description
                  "Disable graceful restart";
              }
            }  // choice enable-disable
    
            leaf restart-time {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "1 .. 600";
                }
              }
              description
                "Time after which RIP is declared out of restart";
            }
          }  // container graceful-restart
        }  // grouping juniper-protocols-rip
    
        grouping juniper-protocols-ripng {
          uses apply-advanced;
    
          container traceoptions {
            description
              "Trace options for RIPng";
            uses apply-advanced;
    
            container file {
              description "Trace file options";
              leaf filename {
                type string {
                  junos:posix-pattern "![/ %]";
                  junos:pattern-message "Must not contain '/', % or a space";
                  length "1 .. 1024";
                }
                description
                  "Name of file in which to write trace information";
              }
    
              leaf replace {
                type empty;
                status deprecated;
                description
                  "Replace trace file rather than appending to it";
              }
    
              leaf size {
                type string;
                description
                  "Maximum trace file size";
              }
    
              leaf files {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "2 .. 1000";
                  }
                }
                default "10";
                description
                  "Maximum number of trace files";
              }
    
              leaf no-stamp {
                type empty;
                status deprecated;
                description
                  "Do not timestamp trace file";
              }
    
              choice world-readable-choice {
                leaf world-readable {
                  type empty;
                  description
                    "Allow any user to read the log file";
                }
                leaf no-world-readable {
                  type empty;
                  description
                    "Don't allow any user to read the log file";
                }
              }  // choice world-readable-choice
            }  // container file
    
            list flag {
              key "name";
              ordered-by user;
              description "Tracing parameters";
              leaf name {
                type enumeration {
                  enum "error" {
                    value 0;
                    description
                      "Trace RIPng errors";
                  }
                  enum "expiration" {
                    value 1;
                    description
                      "Trace RIPng route expiration processing";
                  }
                  enum "holddown" {
                    value 2;
                    description
                      "Trace RIPng hold-down processing";
                  }
                  enum "packets" {
                    value 3;
                    description
                      "Trace all RIPng packets";
                  }
                  enum "request" {
                    value 4;
                    description
                      "Trace RIPng information packets";
                  }
                  enum "trigger" {
                    value 5;
                    description
                      "Trace RIPng triggered updates";
                  }
                  enum "update" {
                    value 6;
                    description
                      "Trace RIPng update packets";
                  }
                  enum "nsr-synchronization" {
                    value 7;
                    description
                      "Trace NSR synchronization events";
                  }
                  enum "route" {
                    value 8;
                    description
                      "Trace routing information";
                  }
                  enum "normal" {
                    value 9;
                    description
                      "Trace normal events";
                  }
                  enum "general" {
                    value 10;
                    description
                      "Trace general events";
                  }
                  enum "state" {
                    value 11;
                    description
                      "Trace state transitions";
                  }
                  enum "policy" {
                    value 12;
                    description
                      "Trace policy processing";
                  }
                  enum "task" {
                    value 13;
                    description
                      "Trace routing protocol task processing";
                  }
                  enum "timer" {
                    value 14;
                    description
                      "Trace routing protocol timer processing";
                  }
                  enum "all" {
                    value 15;
                    description
                      "Trace everything";
                  }
                }
              }
    
              leaf send {
                type empty;
                description
                  "Trace transmitted packets";
              }
    
              leaf receive {
                type empty;
                description
                  "Trace received packets";
              }
    
              leaf detail {
                type empty;
                description
                  "Trace detailed information";
              }
    
              leaf disable {
                type empty;
                description
                  "Disable this trace flag";
              }
            }  // list flag
          }  // container traceoptions
    
          leaf metric-in {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "1 .. 15";
              }
            }
            description
              "Metric value to add to incoming routes";
          }
    
          container send {
            description
              "Configure RIPng send options";
            choice send-opts {
              leaf none {
                type empty;
                description
                  "Do not send RIPng updates";
              }
            }  // choice send-opts
          }  // container send
    
          container receive {
            description
              "Configure RIPng receive options";
            choice receive-opts {
              leaf none {
                type empty;
                description
                  "Do not receive RIPng packets";
              }
            }  // choice receive-opts
          }  // container receive
    
          leaf-list import {
            type jt:policy-algebra;
            ordered-by user;
            description "Import policy";
          }
    
          leaf holddown {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "10 .. 180";
              }
            }
            units "seconds";
            description "Hold-down time";
          }
    
          leaf route-timeout {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "30 .. 360";
              }
            }
            units "seconds";
            description
              "Delay before routes time out";
          }
    
          leaf update-interval {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "10 .. 60";
              }
            }
            units "seconds";
            description
              "Interval between regular route updates";
          }
    
          list group {
            key "name";
            ordered-by user;
            description "Instance configuration";
            leaf name {
              type string {
                junos:posix-pattern "^.{1,48}$";
                junos:pattern-message "Must be a string of at most 48 characters";
              }
              description "Group name";
            }
    
            uses apply-advanced;
    
            leaf route-timeout {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "30 .. 360";
                }
              }
              units "seconds";
              description
                "Delay before routes time out";
            }
    
            leaf update-interval {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "10 .. 60";
                }
              }
              units "seconds";
              description
                "Interval between regular route updates";
            }
    
            leaf preference {
              type union {
                type uint32;
                type string {
                  pattern "<.*>|$.*";
                }
              }
              description
                "Preference of routes learned by this group";
            }
    
            leaf metric-out {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "1 .. 15";
                }
              }
              description
                "Default metric of exported routes";
            }
    
            leaf-list export {
              type jt:policy-algebra;
              ordered-by user;
              description "Export policy";
            }
    
            leaf-list import {
              type jt:policy-algebra;
              ordered-by user;
              description "Import policy";
            }
    
            list neighbor {
              key "name";
              ordered-by user;
              description
                "Neighbor configuration";
              leaf name {
                type union {
                  type jt:interface-name;
                  type string {
                    pattern "<.*>|$.*";
                  }
                }
                description "Interface name";
              }
    
              uses apply-advanced;
    
              leaf route-timeout {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "30 .. 360";
                  }
                }
                units "seconds";
                description
                  "Delay before routes time out";
              }
    
              leaf update-interval {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "10 .. 60";
                  }
                }
                units "seconds";
                description
                  "Interval between regular route updates";
              }
    
              leaf metric-in {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "1 .. 15";
                  }
                }
                description
                  "Metric value to add to incoming routes";
              }
    
              container send {
                description
                  "Configure RIPng send options";
                choice send-opts {
                  leaf none {
                    type empty;
                    description
                      "Do not send RIPng updates";
                  }
                }  // choice send-opts
              }  // container send
    
              container receive {
                description
                  "Configure RIPng receive options";
                choice receive-opts {
                  leaf none {
                    type empty;
                    description
                      "Do not receive RIPng packets";
                  }
                }  // choice receive-opts
              }  // container receive
    
              leaf-list import {
                type jt:policy-algebra;
                ordered-by user;
                description "Import policy";
              }
            }  // list neighbor
          }  // list group
    
          container graceful-restart {
            presence "enable graceful-restart";
            description
              "RIPng graceful restart options";
            uses apply-advanced;
    
            choice enable-disable {
              leaf disable {
                type empty;
                description
                  "Disable graceful restart";
              }
            }  // choice enable-disable
    
            leaf restart-time {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "1 .. 600";
                }
              }
              description
                "Time after which RIPng is declared out of restart";
            }
          }  // container graceful-restart
        }  // grouping juniper-protocols-ripng
    
        grouping juniper-protocols-router-discovery {
          uses apply-advanced;
    
          choice enable-disable {
            leaf disable {
              type empty;
              description
                "Disable router discovery";
            }
          }  // choice enable-disable
    
          container traceoptions {
            description
              "Trace options for router discovery";
            uses apply-advanced;
    
            container file {
              description "Trace file options";
              leaf filename {
                type string {
                  junos:posix-pattern "![/ %]";
                  junos:pattern-message "Must not contain '/', % or a space";
                  length "1 .. 1024";
                }
                description
                  "Name of file in which to write trace information";
              }
    
              leaf replace {
                type empty;
                status deprecated;
                description
                  "Replace trace file rather than appending to it";
              }
    
              leaf size {
                type string;
                description
                  "Maximum trace file size";
              }
    
              leaf files {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "2 .. 1000";
                  }
                }
                default "10";
                description
                  "Maximum number of trace files";
              }
    
              leaf no-stamp {
                type empty;
                status deprecated;
                description
                  "Do not timestamp trace file";
              }
    
              choice world-readable-choice {
                leaf world-readable {
                  type empty;
                  description
                    "Allow any user to read the log file";
                }
                leaf no-world-readable {
                  type empty;
                  description
                    "Don't allow any user to read the log file";
                }
              }  // choice world-readable-choice
            }  // container file
    
            list flag {
              key "name";
              ordered-by user;
              description "Tracing parameters";
              leaf name {
                type enumeration {
                  enum "route" {
                    value 0;
                    description
                      "Trace routing information";
                  }
                  enum "normal" {
                    value 1;
                    description
                      "Trace normal events";
                  }
                  enum "general" {
                    value 2;
                    description
                      "Trace general events";
                  }
                  enum "state" {
                    value 3;
                    description
                      "Trace state transitions";
                  }
                  enum "policy" {
                    value 4;
                    description
                      "Trace policy processing";
                  }
                  enum "task" {
                    value 5;
                    description
                      "Trace routing protocol task processing";
                  }
                  enum "timer" {
                    value 6;
                    description
                      "Trace routing protocol timer processing";
                  }
                  enum "all" {
                    value 7;
                    description
                      "Trace everything";
                  }
                }
              }
            }  // list flag
          }  // container traceoptions
    
          list interface {
            key "name";
            ordered-by user;
            description
              "Interfaces on which to configure router discovery";
            leaf name {
              type union {
                type jt:interface-name;
                type string {
                  pattern "<.*>|$.*";
                }
              }
              description "Interface name";
            }
    
            uses apply-advanced;
    
            leaf max-advertisement-interval {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "4 .. 1800";
                }
              }
              units "seconds";
              description
                "Maximum time before sending advertisements";
            }
    
            leaf min-advertisement-interval {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "3 .. 1800";
                }
              }
              units "seconds";
              description
                "Minimum time before sending advertisements";
            }
    
            leaf lifetime {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "3 .. 9000";
                }
              }
              units "seconds";
              description
                "How long addresses in advertisements are valid";
            }
          }  // list interface
    
          list address {
            key "name";
            ordered-by user;
            description
              "IP addresses to include in advertisements";
            leaf name {
              type jt:ipv4addr;
              description
                "IP addresses to include in router advertisements";
            }
    
            uses apply-advanced;
    
            leaf advertise {
              type empty;
              description
                "Advertise the IP address in advertisements";
            }
    
            leaf ignore {
              type empty;
              description
                "Do not advertise the IP address in advertisements";
            }
    
            leaf broadcast {
              type empty;
              description
                "Include IP address only in broadcast advertisements";
            }
    
            leaf multicast {
              type empty;
              description
                "Include IP address only in multicast advertisements";
            }
    
            leaf ineligible {
              type empty;
              description
                "IP address can never become a default router";
            }
    
            leaf priority {
              type union {
                type int32;
                type string {
                  pattern "<.*>|$.*";
                }
              }
              description
                "Preference of the address to become a default router";
            }
          }  // list address
        }  // grouping juniper-protocols-router-discovery
    
        grouping juniper-protocols-rsvp {
          description "RSVP options";
          uses apply-advanced;
    
          choice enable-disable {
            leaf disable {
              type empty;
              description "Disable RSVP";
            }
          }  // choice enable-disable
    
          container graceful-restart {
            description
              "Configure graceful restart attributes";
            uses apply-advanced;
    
            choice enable-disable {
              leaf disable {
                type empty;
                description
                  "Disable RSVP graceful restart capability";
              }
            }  // choice enable-disable
    
            leaf helper-disable {
              type empty;
              description
                "Disable graceful restart helper capability";
            }
    
            leaf maximum-helper-restart-time {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "1 .. 1800";
                }
              }
              units "seconds";
              default "20";
              description
                "Maximum wait time from down event to neighbor dead";
            }
    
            leaf maximum-helper-recovery-time {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "1 .. 3600";
                }
              }
              units "seconds";
              default "180";
              description
                "Maximum time restarting neighbor states are kept";
            }
          }  // container graceful-restart
    
          container tunnel-services {
            presence "enable tunnel-services";
            description
              "Use tunnel services for P2MP LSP ultimate-hop popping";
            uses apply-advanced;
    
            leaf-list devices {
              type union {
                type jt:interface-device;
                type string {
                  pattern "<.*>|$.*";
                }
              }
              ordered-by user;
              description
                "Tunnel services devices to use for P2MP LSPs";
            }
          }  // container tunnel-services
    
          leaf no-p2mp-sublsp {
            type empty;
            description
              "Disable P2MP sub-LSP object generation";
          }
    
          leaf no-node-id-subobject {
            type empty;
            description
              "Do not include the node-id sub-object in the RRO";
          }
    
          leaf no-interface-hello {
            type empty;
            description
              "Disble interface Hellos on all RSVP interfaces";
          }
    
          container pop-and-forward {
            description
              "RSVP pop-and-forward specific global parameters";
            uses apply-advanced;
    
            container application-label {
              description
                "Number of application labels under the RSVP transport";
              uses apply-advanced;
    
              leaf depth {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "0 .. 3";
                  }
                }
                default "1";
                description
                  "Application label depth";
              }
            }  // container application-label
          }  // container pop-and-forward
    
          leaf hello-acknowledgements {
            type empty;
            description
              "Acknowledge Hellos on RSVP interfaces not having sessions";
          }
    
          leaf no-hello-acknowledgements {
            junos:must "(!("protocols rsvp hello-acknowledgements"))";
            junos:must-message "Config hello-acknowledgements should be removed";
            type empty;
            description
              "Do not ack Hellos on RSVP interfaces not having sessions";
          }
    
          container node-hello {
            presence "enable node-hello";
            description
              "Enable node-ID based Hellos on all RSVP interfaces";
            leaf hello-interval {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "0 .. 60";
                }
              }
              units "seconds";
              default "9";
              description "Hello interval";
            }
          }  // container node-hello
    
          leaf no-node-hello {
            junos:must "(!("protocols rsvp node-hello"))";
            junos:must-message "Config node-hello should be removed";
            type empty;
            description
              "Disable node-ID based Hellos on the router";
          }
    
          leaf allow-bidirectional {
            type empty;
            status deprecated;
            description
              "Enable bidirectional support in RSVP";
          }
    
          leaf local-reversion {
            junos:must "(!("protocols rsvp no-local-reversion"))";
            junos:must-message "Config no-local-reversion should be removed";
            type empty;
            description
              "Enable local reversion at this Point of Local Repair";
          }
    
          leaf no-local-reversion {
            type empty;
            description
              "Disable local reversion at this Point of Local Repair";
          }
    
          leaf rfc6510-lsp-attributes {
            type empty;
            description
              "Use RFC6510 compliant LSP_ATTRIBUTES";
          }
    
          container fast-reroute {
            description
              "One-to-one fast-reroute protection mechanism";
            uses apply-advanced;
    
            leaf optimize-timer {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type int32 {
                  range "0 .. 65535";
                }
              }
              units "seconds";
              description
                "Frequency of reoptimization for fast-reroute detour";
            }
          }  // container fast-reroute
    
          container load-balance {
            description
              "Per-packet load-balancing algorithm";
            uses apply-advanced;
    
            leaf bandwidth {
              type empty;
              description
                "Per-packet load balancing proportional to LSP bandwidth";
            }
          }  // container load-balance
    
          container traceoptions {
            description "Trace options for RSVP";
            uses apply-advanced;
    
            container file {
              description "Trace file options";
              leaf filename {
                type string {
                  junos:posix-pattern "![/ %]";
                  junos:pattern-message "Must not contain '/', % or a space";
                  length "1 .. 1024";
                }
                description
                  "Name of file in which to write trace information";
              }
    
              leaf replace {
                type empty;
                status deprecated;
                description
                  "Replace trace file rather than appending to it";
              }
    
              leaf size {
                type string;
                description
                  "Maximum trace file size";
              }
    
              leaf files {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "2 .. 1000";
                  }
                }
                default "10";
                description
                  "Maximum number of trace files";
              }
    
              leaf no-stamp {
                type empty;
                status deprecated;
                description
                  "Do not timestamp trace file";
              }
    
              choice world-readable-choice {
                leaf world-readable {
                  type empty;
                  description
                    "Allow any user to read the log file";
                }
                leaf no-world-readable {
                  type empty;
                  description
                    "Don't allow any user to read the log file";
                }
              }  // choice world-readable-choice
            }  // container file
    
            list flag {
              key "name";
              ordered-by user;
              description "Tracing parameters";
              leaf name {
                type enumeration {
                  enum "io-event" {
                    value 0;
                    description
                      "Trace RSVP IO task related events";
                  }
                  enum "io-packets" {
                    value 1;
                    description
                      "Trace all RSVP periodic refresh activity";
                  }
                  enum "packets" {
                    value 2;
                    description
                      "Trace all RSVP trigger packets";
                  }
                  enum "path" {
                    value 3;
                    description
                      "Trace RSVP trigger path messages";
                  }
                  enum "resv" {
                    value 4;
                    description
                      "Trace RSVP trigger Resv messages";
                  }
                  enum "pathtear" {
                    value 5;
                    description
                      "Trace RSVP PathTear messages";
                  }
                  enum "resvtear" {
                    value 6;
                    description
                      "Trace RSVP ResvTear messages";
                  }
                  enum "state" {
                    value 7;
                    description
                      "Trace state transitions";
                  }
                  enum "error" {
                    value 8;
                    description
                      "Trace error conditions";
                  }
                  enum "route" {
                    value 9;
                    description
                      "Trace routing information";
                  }
                  enum "lmp" {
                    value 10;
                    description
                      "Trace RSVP-LMP related interactions";
                  }
                  enum "event" {
                    value 11;
                    description
                      "Trace RSVP related events";
                  }
                  enum "nsr-synchronization" {
                    value 12;
                    description
                      "Trace NSR synchronization events";
                  }
                  enum "lsp-prefix" {
                    value 13;
                    description
                      "Prefix the trace messages with LSP information";
                  }
                  enum "enhanced-frr" {
                    value 14;
                    description
                      "Enhanced FRR related information";
                  }
                  enum "all" {
                    value 15;
                    description
                      "Trace everything";
                  }
                }
              }
    
              leaf send {
                type empty;
                description
                  "Trace transmitted packets";
              }
    
              leaf receive {
                type empty;
                description
                  "Trace received packets";
              }
    
              leaf detail {
                type empty;
                description
                  "Trace detailed information";
              }
    
              leaf disable {
                type empty;
                description
                  "Disable this trace flag";
              }
            }  // list flag
          }  // container traceoptions
    
          leaf refresh-time {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "1 .. 65535";
              }
            }
            default "1200";
            description
              "Refresh time in seconds";
          }
    
          leaf keep-multiplier {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "1 .. 255";
              }
            }
            default "3";
            description "Keep multiplier";
          }
    
          leaf graceful-deletion-timeout {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "1 .. 300";
              }
            }
            units "seconds";
            default "30";
            description
              "Time to complete graceful deletion signaling";
          }
    
          leaf setup-protection {
            type empty;
            description
              "Enable setup protection";
          }
    
          leaf no-p2mp-re-merge {
            type empty;
            description "Enable p2mp remerge";
          }
    
          leaf cross-credibility-cspf {
            type empty;
            description
              "Compute CSPF paths spanning protocols for bypass LSP, detour LSP and loose hop expansion";
          }
    
          container preemption {
            description
              "Set RSVP session preemption attributes";
            uses apply-advanced;
    
            choice preemption-type {
              leaf disabled {
                type empty;
                description
                  "No RSVP session preemption";
              }
              leaf normal {
                type empty;
                description
                  "Run RSVP session preemption to accommodate new sessions";
              }
              leaf aggressive {
                type empty;
                description
                  "Run RSVP session preemption whenever necessary";
              }
            }  // choice preemption-type
    
            container soft-preemption {
              description
                "Options for establishing new path before tearing down a preempted LSP";
              uses apply-advanced;
    
              leaf cleanup-timer {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type int32 {
                    range "0 .. 10800";
                  }
                }
                units "seconds";
                description
                  "Time a soft-preempted LSP will be maintained";
              }
            }  // container soft-preemption
          }  // container preemption
    
          leaf authentication-key {
            type jt:unreadable;
            description
              "Authentication password";
          }
    
          leaf no-authentication-check {
            type empty;
            description
              "Skip authentication check for received messages";
          }
    
          container associated-bidirectional-lsp {
            description
              "Set associated bidirectional LSP attributes";
            uses apply-advanced;
    
            leaf single-sided-provisioning {
              type empty;
              description
                "Enable unidirectional reverse LSP setup for single sided provisioned forward LSP";
            }
          }  // container associated-bidirectional-lsp
    
          leaf no-enhanced-frr-bypass {
            type empty;
            description
              "Disable enhanced facility backup FRR";
          }
    
          container expand-flood-reflector-hop {
            presence
              "enable expand-flood-reflector-hop";
            description
              "Control expansion of flood reflector ERO strict hops";
          }  // container expand-flood-reflector-hop
    
          list interface {
            key "name";
            ordered-by user;
            description "RSVP interface options";
            leaf name {
              type union {
                type jt:interface-name;
                type string {
                  pattern "<.*>|$.*";
                }
              }
              description "Interface name";
            }
    
            uses apply-advanced;
    
            choice enable-disable {
              leaf disable {
                type empty;
                description
                  "Disable RSVP on this interface";
              }
            }  // choice enable-disable
    
            leaf authentication-key {
              type jt:unreadable;
              description
                "Authentication password";
            }
    
            choice aggregate-choice {
              leaf aggregate {
                type empty;
                status deprecated;
                description
                  "Permit refresh reduction extensions on the interface";
              }
              leaf no-aggregate {
                type empty;
                status deprecated;
                description
                  "Don't permit refresh reduction extensions on the interface";
              }
            }  // choice aggregate-choice
    
            choice reliable-choice {
              leaf reliable {
                type empty;
                description
                  "Permit reliable message delivery on the interface";
              }
              leaf no-reliable {
                type empty;
                description
                  "Don't permit reliable message delivery on the interface";
              }
            }  // choice reliable-choice
    
            leaf hello-interval {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "0 .. 60";
                }
              }
              units "seconds";
              default "9";
              description "Hello interval";
            }
    
            container subscription {
              description
                "Link bandwidth percentage for RSVP reservation";
              uses subscription-type;
            }  // container subscription
    
            leaf bandwidth {
              type string;
              description
                "Available bandwidth for the interface units bps";
            }
    
            container update-threshold {
              description
                "Change in reserved bandwidth to trigger IGP update";
              uses apply-advanced;
    
              leaf threshold-percent {
                type decimal64 {
                  fraction-digits 9;
                  range "0.001 .. 20";
                }
                units "percent";
                default "10.0";
                description
                  "Percentage change in reserved bandwidth to trigger IGP update";
              }
    
              leaf threshold-value {
                type string;
                description
                  "Change in reserved bandwidth to trigger IGP update (will be capped at 20% of link BW)";
              }
            }  // container update-threshold
    
            container update-threshold-max-reservable {
              description
                "Change in non-rsvp bandwidth to trigger IGP update ";
              uses apply-advanced;
    
              leaf bandwidth {
                type string;
                description
                  "Change in non-rsvp bandwidth to trigger IGP update units bps";
              }
    
              leaf percent {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "1 .. 100";
                  }
                }
                units "percent";
                description
                  "Percentage change in max-reservable bandwidth to trigger IGP update";
              }
            }  // container update-threshold-max-reservable
    
            container non-rsvp-bandwdith {
              description
                "Config knobs relating to non-rsvp bandwidth";
              uses apply-advanced;
    
              leaf local-bw-override-threshold {
                type empty;
                description
                  "Overide threshold and update local bandwidth with non-rsvp bandwidth usage";
              }
            }  // container non-rsvp-bandwdith
    
            container link-protection {
              presence "enable link-protection";
              description
                "Protect traffic with a label-stacked LSP";
              uses apply-advanced;
    
              choice enable-disable {
                leaf disable {
                  type empty;
                  description
                    "Disable link protection on this interface";
                }
              }  // choice enable-disable
    
              container bandwidth {
                description
                  "Bandwidth for each bypass";
                uses bandwidth-type;
              }  // container bandwidth
    
              leaf max-bypasses {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "0 .. 99";
                  }
                }
                default "1";
                description
                  "Max number of bypasses permitted for protecting this interface";
              }
    
              leaf subscription {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "1 .. 65535";
                  }
                }
                default "100";
                description
                  "Percent of bandwidth guaranteed when admitting protected LSPs into bypasses";
              }
    
              leaf no-node-protection {
                type empty;
                description
                  "Disallow node protection on this interface";
              }
    
              leaf optimize-timer {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "0 .. 65535";
                  }
                }
                units "seconds";
                default "0";
                description
                  "Interval between bypass reoptimizations";
              }
    
              leaf class-of-service {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type int32 {
                    range "0 .. 7";
                  }
                }
                description
                  "Class of service for the bypass LSP";
              }
    
              leaf hop-limit {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "2 .. 255";
                  }
                }
                description
                  "Maximum allowed router hops for bypass";
              }
    
              leaf no-cspf {
                junos:must "(".. path")";
                junos:must-message "The path of the bypass must be configured when using no-cspf";
                type empty;
                description
                  "Disable automatic path computation";
              }
    
              leaf exclude-srlg {
                type empty;
                description "Exclude SRLG links";
              }
    
              container priority {
                presence "enable priority";
                description
                  "Preemption priorities for the bypass LSP";
              }  // container priority
    
              leaf setup-priority {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "0 .. 7";
                  }
                }
                description "Set-up priority";
              }
    
              leaf reservation-priority {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "0 .. 7";
                  }
                }
                description
                  "Reservation priority";
              }
    
              list path {
                key "name";
                ordered-by user;
                description
                  "Explicit route of bypass path";
                leaf name {
                  type jt:ipv4addr;
                  description
                    "Address of next system in path";
                }
    
                choice loose_strict_none {
                  leaf loose {
                    type empty;
                    description
                      "Next hop might not be adjacent";
                  }
                  leaf strict {
                    type empty;
                    description
                      "Next hop must be adjacent";
                  }
                }  // choice loose_strict_none
              }  // list path
    
              container admin-group {
                description
                  "Administrative group policy";
                uses admin_group_include_exclude;
              }  // container admin-group
    
              list bypass {
                key "name";
                ordered-by user;
                description
                  "Bypass with specific constraints";
                leaf name {
                  type string {
                    length "1 .. 64";
                  }
                  description "Name of bypass";
                }
    
                uses apply-advanced;
    
                leaf to {
                  type jt:ipv4addr;
                  description
                    "Address of egress router";
                }
    
                container bandwidth {
                  description
                    "Bandwidth for each bypass";
                  uses bandwidth-type;
                }  // container bandwidth
    
                container subscription {
                  presence "enable subscription";
                  description
                    "Bandwidth percent available on bypass for protected LSPs";
                  uses bypass-subscription-type;
                }  // container subscription
    
                leaf description {
                  type string {
                    length "1 .. 80";
                  }
                  description
                    "Text description of bypass";
                }
    
                container priority {
                  presence "enable priority";
                  description
                    "Preemption priorities for bypass";
                }  // container priority
    
                leaf setup-priority {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "0 .. 7";
                    }
                  }
                  description "Set-up priority";
                }
    
                leaf reservation-priority {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "0 .. 7";
                    }
                  }
                  description
                    "Reservation priority";
                }
    
                leaf class-of-service {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type int32 {
                      range "0 .. 7";
                    }
                  }
                  description
                    "Class of service for the bypass LSP";
                }
    
                leaf hop-limit {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "2 .. 255";
                    }
                  }
                  description
                    "Maximum allowed router hops for bypass";
                }
    
                leaf no-cspf {
                  junos:must "(".. path")";
                  junos:must-message "The path of the bypass must be configured when using no-cspf";
                  type empty;
                  description
                    "Disable automatic path computation";
                }
    
                leaf exclude-srlg {
                  type empty;
                  description
                    "Exclude SRLG links";
                }
    
                list path {
                  key "name";
                  ordered-by user;
                  description
                    "Explicit route of bypass path";
                  leaf name {
                    type jt:ipv4addr;
                    description
                      "Address of next system in path";
                  }
    
                  choice loose_strict_none {
                    leaf loose {
                      type empty;
                      description
                        "Next hop might not be adjacent";
                    }
                    leaf strict {
                      type empty;
                      description
                        "Next hop must be adjacent";
                    }
                  }  // choice loose_strict_none
                }  // list path
    
                container admin-group {
                  description
                    "Administrative group policy";
                  uses admin_group_include_exclude;
                }  // container admin-group
              }  // list bypass
            }  // container link-protection
          }  // list interface
    
          list peer-interface {
            key "name";
            ordered-by user;
            description
              "Configuration for peer interface";
            leaf name {
              type string;
              description
                "Name of peer interface";
            }
    
            uses apply-advanced;
    
            choice enable-disable {
              leaf disable {
                type empty;
                description
                  "Disable RSVP on this control peer";
              }
            }  // choice enable-disable
    
            leaf authentication-key {
              type jt:unreadable;
              description
                "Authentication password";
            }
    
            choice aggregate-choice {
              leaf aggregate {
                type empty;
                status deprecated;
                description
                  "Permit refresh reduction extensions on the interface";
              }
              leaf no-aggregate {
                type empty;
                status deprecated;
                description
                  "Don't permit refresh reduction extensions on the interface";
              }
            }  // choice aggregate-choice
    
            choice reliable-choice {
              leaf reliable {
                type empty;
                description
                  "Permit reliable message delivery on the interface";
              }
              leaf no-reliable {
                type empty;
                description
                  "Don't permit reliable message delivery on the interface";
              }
            }  // choice reliable-choice
    
            leaf hello-interval {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "0 .. 60";
                }
              }
              units "seconds";
              default "9";
              description "Hello interval";
            }
    
            container dynamic-bidirectional-transport {
              presence
                "enable dynamic-bidirectional-transport";
              description
                "Enable dynamic setup of bidirectional packet LSP for transporting non-packet GMPLS LSP";
              uses apply-advanced;
    
              leaf template {
                junos:must "(!("protocols mpls label-switched-path $$ p2mp"))";
                junos:must-message "Referenced template cannot be a p2mp template";
                junos:must "(("protocols mpls label-switched-path $$" && "protocols mpls label-switched-path $$ template"))";
                junos:must-message "Referenced LSP template does not exist";
                type string {
                  junos:posix-pattern "^.{1,64}$";
                  junos:pattern-message "Must be a string of 64 characters or less";
                }
                description
                  "Template for the dynamic bidirectional packet LSP";
              }
            }  // container dynamic-bidirectional-transport
          }  // list peer-interface
    
          list lsp-set {
            key "name";
            ordered-by user;
            description
              "Configuration for lsp set";
            leaf name {
              type string;
              description "Name of lsp set";
            }
    
            uses apply-advanced;
    
            choice enable-disable {
              leaf disable {
                type empty;
                description
                  "Disable this lsp set";
              }
            }  // choice enable-disable
    
            container match-criteria {
              description
                "Match criteria for this lsp set";
              uses lsp-set-match-type;
            }  // container match-criteria
    
            container traceoptions {
              description
                "Trace options for this lsp set";
              uses apply-advanced;
    
              container file {
                description "Trace file options";
                leaf filename {
                  type string {
                    junos:posix-pattern "![/ %]";
                    junos:pattern-message "Must not contain '/', % or a space";
                    length "1 .. 1024";
                  }
                  description
                    "Name of file in which to write trace information";
                }
    
                leaf replace {
                  type empty;
                  status deprecated;
                  description
                    "Replace trace file rather than appending to it";
                }
    
                leaf size {
                  type string;
                  description
                    "Maximum trace file size";
                }
    
                leaf files {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "2 .. 1000";
                    }
                  }
                  default "10";
                  description
                    "Maximum number of trace files";
                }
    
                leaf no-stamp {
                  type empty;
                  status deprecated;
                  description
                    "Do not timestamp trace file";
                }
    
                choice world-readable-choice {
                  leaf world-readable {
                    type empty;
                    description
                      "Allow any user to read the log file";
                  }
                  leaf no-world-readable {
                    type empty;
                    description
                      "Don't allow any user to read the log file";
                  }
                }  // choice world-readable-choice
              }  // container file
    
              list flag {
                key "name";
                ordered-by user;
                description "Tracing parameters";
                leaf name {
                  type enumeration {
                    enum "io-event" {
                      value 0;
                      description
                        "Trace RSVP IO task related events";
                    }
                    enum "io-packets" {
                      value 1;
                      description
                        "Trace all RSVP periodic refresh activity";
                    }
                    enum "packets" {
                      value 2;
                      description
                        "Trace all RSVP packets";
                    }
                    enum "path" {
                      value 3;
                      description
                        "Trace RSVP path messages";
                    }
                    enum "resv" {
                      value 4;
                      description
                        "Trace RSVP Resv messages";
                    }
                    enum "pathtear" {
                      value 5;
                      description
                        "Trace RSVP PathTear messages";
                    }
                    enum "resvtear" {
                      value 6;
                      description
                        "Trace RSVP ResvTear messages";
                    }
                    enum "state" {
                      value 7;
                      description
                        "Trace state transitions";
                    }
                    enum "error" {
                      value 8;
                      description
                        "Trace error conditions";
                    }
                    enum "route" {
                      value 9;
                      description
                        "Trace routing information";
                    }
                    enum "lmp" {
                      value 10;
                      description
                        "Trace RSVP-LMP related interactions";
                    }
                    enum "event" {
                      value 11;
                      description
                        "Trace RSVP related events";
                    }
                    enum "nsr-synchronization" {
                      value 12;
                      description
                        "Trace NSR synchronization events";
                    }
                    enum "lsp-prefix" {
                      value 13;
                      description
                        "Prefix the trace messages with LSP information";
                    }
                    enum "enhanced-frr" {
                      value 14;
                      description
                        "Enhanced FRR related information";
                    }
                    enum "all" {
                      value 15;
                      description
                        "Trace everything";
                    }
                  }
                }
    
                leaf send {
                  type empty;
                  description
                    "Trace transmitted packets";
                }
    
                leaf receive {
                  type empty;
                  description
                    "Trace received packets";
                }
    
                leaf detail {
                  type empty;
                  description
                    "Trace detailed information";
                }
    
                leaf disable {
                  type empty;
                  description
                    "Disable this trace flag";
                }
              }  // list flag
            }  // container traceoptions
          }  // list lsp-set
        }  // grouping juniper-protocols-rsvp
    
        grouping bypass-subscription-type {
          uses apply-advanced;
    
          leaf subscription {
            type string;
            default "100";
            description
              "Subscription percentage for bandwidth protection";
          }
        }  // grouping bypass-subscription-type
    
        grouping juniper-protocols-stp {
          uses apply-advanced;
    
          choice enable-disable {
            leaf disable {
              type empty;
              description "Disable STP";
            }
          }  // choice enable-disable
    
          leaf bpdu-destination-mac-address {
            type enumeration {
              enum "provider-bridge-group" {
                value 0;
                description
                  "802.1ad provider bridge group address";
              }
            }
            description
              "Destination MAC address in the spanning tree BPDUs";
          }
    
          leaf bridge-priority {
            type string {
              junos:posix-pattern "^(0|4k|4096|8k|8192|12k|12288|16k|16384|20k|20480|24k|24576|28k|28672|32k|32768|36k|36864|40k|40960|44k|45056|48k|49512|52k|53248|56k|57344|60k|61440)$";
              junos:pattern-message "Must be a multiple of 4096";
            }
            description
              "Priority of the bridge (in increments of 4k - 0,4k,8k,..60k)";
          }
    
          leaf backup-bridge-priority {
            type string {
              junos:posix-pattern "^(4k|4096|8k|8192|12k|12288|16k|16384|20k|20480|24k|24576|28k|28672|32k|32768|36k|36864|40k|40960|44k|45056|48k|49512|52k|53248|56k|57344|60k|61440)$";
              junos:pattern-message "Must be a multiple of 4096";
            }
            description
              "Priority of the bridge (in increments of 4k - 4k,8k,..60k)";
          }
    
          leaf max-age {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint16 {
                range "6 .. 40";
              }
            }
            units "seconds";
            description
              "Maximum age of received protocol bpdu";
          }
    
          leaf hello-time {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint16 {
                range "1 .. 10";
              }
            }
            units "seconds";
            description
              "Time interval between configuration BPDUs";
          }
    
          leaf forward-delay {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint16 {
                range "4 .. 30";
              }
            }
            units "seconds";
            description
              "Time spent in listening or learning state";
          }
    
          leaf system-identifier {
            type jt:mac-unicast;
            description
              "Sytem identifier to represent this node";
          }
    
          container traceoptions {
            description
              "Tracing options for debugging protocol operation";
            uses stp-trace-options;
          }  // container traceoptions
    
          leaf vpls-flush-on-topology-change {
            type empty;
            description
              "Enable VPLS MAC flush on root protected CE interface receving topology change";
          }
    
          leaf priority-hold-time {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint16 {
                range "1 .. 255";
              }
            }
            units "seconds";
            description
              "Hold time before switching to primary priority when core domain becomes up";
          }
    
          list system-id {
            key "name";
            ordered-by user;
            description
              "System ID to IP mapping";
            uses system-id-ip-map;
          }  // list system-id
    
          list interface {
            key "name";
            description "Interface options";
            uses stp-interface;
          }  // list interface
    
          leaf extended-system-id {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint16 {
                range "0 .. 4095";
              }
            }
            description
              "Extended system identifier";
          }
    
          leaf force-version {
            type enumeration {
              enum "stp" {
                value 0;
                description
                  "Spanning tree protocol";
              }
            }
            description "Force protocol version";
          }
    
          leaf bpdu-block-on-edge {
            type empty;
            description
              "Block BPDU on all interfaces configured as edge (BPDU Protect)";
          }
        }  // grouping juniper-protocols-stp
    
        grouping juniper-protocols-vni-options {
          uses apply-advanced;
    
          list vni {
            key "name";
            description "Per-vni options";
            leaf name {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type int32 {
                  range "1 .. 16777214";
                }
              }
            }
    
            uses apply-advanced;
    
            container vrf-target {
              description
                "VRF target community configuration";
              uses apply-advanced;
    
              leaf export {
                type string {
                  junos:posix-pattern "^[a-z]+:[0-9.]+L?:[0-9]+$";
                  junos:pattern-message "Use format 'target:x:y' where 'x' is an AS number followed by an optional 'L' (To indicate 4 byte AS), or an IP address and 'y' is a number. e.g. target:123456L:100";
                }
                status deprecated;
                description
                  "Target community to use when marking routes on export";
              }
    
              leaf community {
                type string {
                  junos:posix-pattern "^[a-z]+:[0-9.]+L?:[0-9]+$";
                  junos:pattern-message "Use format 'target:x:y' where 'x' is an AS number followed by an optional 'L' (To indicate 4 byte AS), or an IP address and 'y' is a number. e.g. target:123456L:100";
                }
                description "Target community";
              }
            }  // container vrf-target
          }  // list vni
        }  // grouping juniper-protocols-vni-options
    
        grouping juniper-protocols-vstp {
          uses apply-advanced;
    
          choice enable-disable {
            leaf disable {
              type empty;
              description "Disable VSTP";
            }
          }  // choice enable-disable
    
          leaf force-version {
            type enumeration {
              enum "stp" {
                value 0;
                description
                  "Spanning tree protocol";
              }
            }
            description "Force protocol version";
          }
    
          leaf bpdu-block-on-edge {
            type empty;
            description
              "Block BPDU on all interfaces configured as edge (BPDU Protect)";
          }
    
          leaf vpls-flush-on-topology-change {
            type empty;
            description
              "Enable VPLS MAC flush on root protected CE interface receving topology change";
          }
    
          leaf priority-hold-time {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint16 {
                range "1 .. 255";
              }
            }
            units "seconds";
            description
              "Hold time before switching to primary priority when core domain becomes up";
          }
    
          list system-id {
            key "name";
            ordered-by user;
            description
              "System ID to IP mapping";
            uses system-id-ip-map;
          }  // list system-id
    
          list interface {
            key "name";
            description "Interface options";
            uses stp-interface;
          }  // list interface
    
          list vlan {
            key "name";
            description
              "VLAN spanning tree options";
            leaf name {
              type string;
              description "VLAN id or all";
            }
    
            uses apply-advanced;
    
            leaf bridge-priority {
              type string {
                junos:posix-pattern "^(0|4k|4096|8k|8192|12k|12288|16k|16384|20k|20480|24k|24576|28k|28672|32k|32768|36k|36864|40k|40960|44k|45056|48k|49512|52k|53248|56k|57344|60k|61440)$";
                junos:pattern-message "Must be a multiple of 4096";
              }
              description
                "Priority of the bridge (in increments of 4k - 0,4k,8k,..60k)";
            }
    
            leaf backup-bridge-priority {
              type string {
                junos:posix-pattern "^(4k|4096|8k|8192|12k|12288|16k|16384|20k|20480|24k|24576|28k|28672|32k|32768|36k|36864|40k|40960|44k|45056|48k|49512|52k|53248|56k|57344|60k|61440)$";
                junos:pattern-message "Must be a multiple of 4096";
              }
              description
                "Priority of the bridge (in increments of 4k - 4k,8k,..60k)";
            }
    
            leaf max-age {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint16 {
                  range "6 .. 40";
                }
              }
              units "seconds";
              description
                "Maximum age of received protocol bpdu";
            }
    
            leaf hello-time {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint16 {
                  range "1 .. 10";
                }
              }
              units "seconds";
              description
                "Time interval between configuration BPDUs";
            }
    
            leaf forward-delay {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint16 {
                  range "4 .. 30";
                }
              }
              units "seconds";
              description
                "Time spent in listening or learning state";
            }
    
            leaf system-identifier {
              type jt:mac-unicast;
              description
                "Sytem identifier to represent this node";
            }
    
            container traceoptions {
              description
                "Tracing options for debugging protocol operation";
              uses stp-trace-options;
            }  // container traceoptions
    
            list interface {
              key "name";
              description "Interface options";
              uses stp-interface;
            }  // list interface
          }  // list vlan
    
          container vlan-group {
            presence "enable vlan-group";
            description
              "Spanning tree options for group of VLANs";
            uses apply-advanced;
    
            list group {
              key "name";
              ordered-by user;
              description "Name if VLAN group";
              leaf name {
                type string {
                  junos:posix-pattern "^[[:alpha:]][[:alnum:]_-]+$";
                  junos:pattern-message "Must be a string beginning with a letter and consisting of letters, numbers, dashes, and underscores";
                  length "1 .. 63";
                }
                description "VLAN group name";
              }
    
              uses apply-advanced;
    
              leaf-list vlan {
                type string;
                ordered-by user;
                description
                  "VLAN ID or VLAN ID range [1..4094]";
              }
    
              leaf bridge-priority {
                type string {
                  junos:posix-pattern "^(0|4k|4096|8k|8192|12k|12288|16k|16384|20k|20480|24k|24576|28k|28672|32k|32768|36k|36864|40k|40960|44k|45056|48k|49512|52k|53248|56k|57344|60k|61440)$";
                  junos:pattern-message "Must be a multiple of 4096";
                }
                description
                  "Priority of the bridge (in increments of 4k - 0,4k,8k,..60k)";
              }
    
              leaf backup-bridge-priority {
                type string {
                  junos:posix-pattern "^(4k|4096|8k|8192|12k|12288|16k|16384|20k|20480|24k|24576|28k|28672|32k|32768|36k|36864|40k|40960|44k|45056|48k|49512|52k|53248|56k|57344|60k|61440)$";
                  junos:pattern-message "Must be a multiple of 4096";
                }
                description
                  "Priority of the bridge (in increments of 4k - 4k,8k,..60k)";
              }
    
              leaf max-age {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint16 {
                    range "6 .. 40";
                  }
                }
                units "seconds";
                description
                  "Maximum age of received protocol bpdu";
              }
    
              leaf hello-time {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint16 {
                    range "1 .. 10";
                  }
                }
                units "seconds";
                description
                  "Time interval between configuration BPDUs";
              }
    
              leaf forward-delay {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint16 {
                    range "4 .. 30";
                  }
                }
                units "seconds";
                description
                  "Time spent in listening or learning state";
              }
    
              leaf system-identifier {
                type jt:mac-unicast;
                description
                  "Sytem identifier to represent this node";
              }
    
              container traceoptions {
                description
                  "Tracing options for debugging protocol operation";
                uses stp-trace-options;
              }  // container traceoptions
    
              list interface {
                key "name";
                description "Interface options";
                uses stp-interface;
              }  // list interface
            }  // list group
          }  // container vlan-group
        }  // grouping juniper-protocols-vstp
    
        grouping ldp-sync-obj {
          uses apply-advanced;
    
          choice enable-disable {
            leaf disable {
              type empty;
              description
                "Disable LDP synchronization";
            }
          }  // choice enable-disable
    
          leaf hold-time {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "1 .. 65535";
              }
            }
            description
              "Time during which maximum metric is advertised";
          }
        }  // grouping ldp-sync-obj
    
        grouping ldp_filter_obj {
          description
            "Filter to apply to tracing";
          leaf match-on {
            type enumeration {
              enum "fec" {
                value 0;
                description
                  "Filter based on FEC associated to the traced object.";
              }
              enum "address" {
                value 1;
                description
                  "Filter based on packet source and destination addresses.";
              }
            }
            description
              "Argument on which to match";
          }
    
          leaf-list policy {
            type jt:policy-algebra;
            ordered-by user;
            description "Filter policy";
          }
        }  // grouping ldp_filter_obj
    
        grouping lmp_control_channel_type {
          leaf name {
            type union {
              type jt:interface-name;
              type string {
                pattern "<.*>|$.*";
              }
            }
            description
              "Control channel interface";
          }
    
          uses apply-advanced;
    
          leaf remote-address {
            type jt:ipaddr;
            description
              "Control channel remote address";
          }
        }  // grouping lmp_control_channel_type
    
        grouping lsp-set-match-type {
          uses apply-advanced;
    
          leaf lsp-name {
            junos:must "((!(".. lsp-regex") && (!(".. p2mp-name") && !(".. p2mp-regex"))))";
            junos:must-message "Can't configure lsp-name when lsp-regex or p2mp-name or p2mp-regex is configured";
            type string;
            description
              "LSP name that matches this string";
          }
    
          leaf lsp-regex {
            junos:must "((!(".. lsp-name") && (!(".. p2mp-name") && !(".. p2mp-regex"))))";
            junos:must-message "Can't configure lsp-regex when lsp-name or p2mp-name or p2mp-regex is configured";
            type string;
            description
              "All LSPs that match this regular expression pattern";
          }
    
          leaf p2mp-name {
            junos:must "((!(".. lsp-name") && (!(".. lsp-regex") && !(".. p2mp-regex"))))";
            junos:must-message "Can't configure p2mp-name when lsp-name or lsp-regex or p2mp-regex is configured";
            type string;
            description
              "P2MP names that match this string";
          }
    
          leaf p2mp-regex {
            junos:must "((!(".. lsp-name") && (!(".. lsp-regex") && !(".. p2mp-name"))))";
            junos:must-message "Can't configure p2mp-regex when lsp-name or lsp-regex or p2mp-name is configured";
            type string;
            description
              "P2MP names that match this regular expression pattern";
          }
    
          choice router-type {
            leaf egress {
              type empty;
              description
                "All LSPs for which this router is egress";
            }
            leaf ingress {
              type empty;
              description
                "All LSPs for which this router is ingress";
            }
            leaf transit {
              type empty;
              description
                "All LSPs for which this router is transit";
            }
          }  // choice router-type
        }  // grouping lsp-set-match-type
    
        grouping macro-data-type {
          leaf name {
            type string;
            description
              "Keyword part of the keyword-value pair";
          }
    
          leaf value {
            type string;
            description
              "Value part of the keyword-value pair";
          }
        }  // grouping macro-data-type
    
        grouping mrp-trace-options {
          description
            "Trace options for MMRP Protocol";
          uses apply-advanced;
    
          container file {
            description "Trace file options";
            leaf filename {
              type string {
                junos:posix-pattern "![/ %]";
                junos:pattern-message "Must not contain '/', % or a space";
                length "1 .. 1024";
              }
              description
                "Name of file in which to write trace information";
            }
    
            leaf replace {
              type empty;
              status deprecated;
              description
                "Replace trace file rather than appending to it";
            }
    
            leaf size {
              type string;
              description
                "Maximum trace file size";
            }
    
            leaf files {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "2 .. 1000";
                }
              }
              default "10";
              description
                "Maximum number of trace files";
            }
    
            leaf no-stamp {
              type empty;
              status deprecated;
              description
                "Do not timestamp trace file";
            }
    
            choice world-readable-choice {
              leaf world-readable {
                type empty;
                description
                  "Allow any user to read the log file";
              }
              leaf no-world-readable {
                type empty;
                description
                  "Don't allow any user to read the log file";
              }
            }  // choice world-readable-choice
          }  // container file
    
          list flag {
            junos:must "(".. file")";
            junos:must-message "Trace file name required to enable tracing";
            key "name";
            ordered-by user;
            description "Tracing parameters";
            leaf name {
              type enumeration {
                enum "events" {
                  value 0;
                  description
                    "Trace events to the protocol state machine";
                }
                enum "pdu" {
                  value 1;
                  description
                    "Trace RAPS PDU reception and transmission";
                }
                enum "timers" {
                  value 2;
                  description
                    "Trace protocol timers";
                }
                enum "state-machine" {
                  value 3;
                  description
                    "Trace information of the state machine";
                }
                enum "socket" {
                  value 4;
                  description
                    "Trace soccket activity";
                }
                enum "error" {
                  value 5;
                  description
                    "Trace all failure conditions";
                }
                enum "all" {
                  value 6;
                  description "Trace all";
                }
              }
            }
    
            leaf disable {
              type empty;
              description
                "Disable this trace flag";
            }
          }  // list flag
        }  // grouping mrp-trace-options
    
        grouping mstp-interface {
          leaf name {
            type string;
          }
    
          uses apply-advanced;
    
          leaf priority {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint16 {
                range "0 .. 255";
              }
            }
            description
              "Interface priority (in increments of 16 - 0,16,..240)";
          }
    
          leaf cost {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "1 .. 200000000";
              }
            }
            description "Cost of the interface";
          }
    
          leaf mode {
            type enumeration {
              enum "point-to-point" {
                value 0;
                description
                  "Interface mode is point-to-point";
              }
              enum "shared" {
                value 1;
                description
                  "Interface mode is shared";
              }
            }
            description
              "Interface mode (P2P or shared)";
          }
    
          leaf edge {
            type empty;
            description "Port is an edge port";
          }
    
          leaf access-trunk {
            type empty;
            description
              "Send/Receive untagged RSTP BPDUs on this interface";
          }
    
          container bpdu-timeout-action {
            presence
              "enable bpdu-timeout-action";
            description
              "Define action on BPDU expiry (Loop Protect)";
            uses apply-advanced;
    
            leaf block {
              type empty;
              description "Block the interface";
            }
    
            leaf alarm {
              type empty;
              description "Generate an alarm";
            }
          }  // container bpdu-timeout-action
    
          leaf no-root-port {
            type empty;
            description
              "Do not allow the interface to become root (Root Protect)";
          }
    
          leaf disable {
            type empty;
            description
              "Disable Spanning Tree on port";
          }
        }  // grouping mstp-interface
    
        grouping peer-group {
          leaf name {
            type jt:ipv4addr;
            description
              "IP address for this peer";
          }
    
          uses apply-advanced;
    
          leaf local-ip-addr {
            type jt:ipv4addr;
            description
              "Local IP address to use for this peer alone.";
          }
    
          leaf session-establishment-hold-time {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "45 .. 600";
              }
            }
            units "seconds";
            description
              "Time within which connection must succeed with this peer";
          }
    
          leaf-list redundancy-group-id-list {
            type union {
              type uint32;
              type string {
                pattern "<.*>|$.*";
              }
            }
            max-elements 1;
            ordered-by user;
            description
              "List of redundacy groups this peer is part of";
          }
    
          container backup-liveness-detection {
            junos:must "(!(".. .. .. .. .. logical-systems"))";
            junos:must-message "backup-liveness-detection not supported with Logical Systems";
            presence
              "enable backup-liveness-detection";
            description
              "Backup liveness detection";
            uses apply-advanced;
    
            leaf backup-peer-ip {
              type jt:ipv4addr;
              description
                "Backup livelness detection peer's IP address";
            }
          }  // container backup-liveness-detection
    
          container liveness-detection {
            presence "enable liveness-detection";
            description
              "Bidirectional Forwarding Detection options for the peer";
            uses apply-advanced;
    
            leaf version {
              type enumeration {
                enum "0" {
                  value 0;
                  description
                    "BFD version 0 (deprecated)";
                }
                enum "1" {
                  value 1;
                  description "BFD version 1";
                }
                enum "automatic" {
                  value 2;
                  description
                    "Choose BFD version automatically";
                }
              }
              default "automatic";
              description
                "BFD protocol version number";
            }
    
            leaf minimum-interval {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "1 .. 255000";
                }
              }
              units "milliseconds";
              description
                "Minimum transmit and receive interval";
            }
    
            leaf minimum-transmit-interval {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "1 .. 255000";
                }
              }
              units "milliseconds";
              status deprecated;
              description
                "Minimum transmit interval";
            }
    
            leaf minimum-receive-interval {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "1 .. 255000";
                }
              }
              units "milliseconds";
              description
                "Minimum receive interval";
            }
    
            leaf multiplier {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "1 .. 255";
                }
              }
              default "3";
              description
                "Detection time multiplier";
            }
    
            choice adaptation-choice {
              leaf no-adaptation {
                type empty;
                description "Disable adaptation";
              }
            }  // choice adaptation-choice
    
            container transmit-interval {
              description
                "Transmit-interval options";
              uses apply-advanced;
    
              leaf minimum-interval {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "1 .. 255000";
                  }
                }
                units "milliseconds";
                description
                  "Minimum transmit interval";
              }
    
              leaf threshold {
                type union {
                  type uint32;
                  type string {
                    pattern "<.*>|$.*";
                  }
                }
                units "milliseconds";
                description
                  "High transmit interval triggering a trap";
              }
            }  // container transmit-interval
    
            container detection-time {
              description
                "Detection-time options";
              uses apply-advanced;
    
              leaf threshold {
                type union {
                  type uint32;
                  type string {
                    pattern "<.*>|$.*";
                  }
                }
                units "milliseconds";
                description
                  "High detection-time triggering a trap";
              }
            }  // container detection-time
          }  // container liveness-detection
    
          leaf authentication-key {
            type string {
              length "1 .. 126";
            }
            description "MD5 authentication key";
          }
        }  // grouping peer-group
    
        grouping periodic_oam {
          uses apply-advanced;
    
          container mpls-tp-mode {
            presence "enable mpls-tp-mode";
            description
              "MPLS-TP Mode, Do not use IP addressing for OAM";
            uses apply-advanced;
    
            container lsping-channel-type {
              description
                "Supported Control-channel types for MPLS-TP mode....";
              uses apply-advanced;
    
              choice action-choice {
                leaf ipv4 {
                  type empty;
                  description
                    "Use channel-type IPv4(0x0021), With IP-UDP encapsulation";
                }
                leaf on-demand-cv {
                  type empty;
                  description
                    "Use channel-type On-Demand-CV(0x0025), Without IP-UDP encapsulation";
                }
              }  // choice action-choice
            }  // container lsping-channel-type
          }  // container mpls-tp-mode
    
          container bfd-port {
            description
              "Egress knob to select MHOP-BFD port for MPLS BFD";
            uses apply-advanced;
    
            leaf-list import {
              type jt:policy-algebra;
              ordered-by user;
              description "Import policy";
            }
          }  // container bfd-port
    
          container bfd-liveness-detection {
            description
              "Bidirectional Forwarding Detection options";
            uses apply-advanced;
    
            leaf version {
              type enumeration {
                enum "0" {
                  value 0;
                  description
                    "BFD version 0 (deprecated)";
                }
                enum "1" {
                  value 1;
                  description "BFD version 1";
                }
                enum "automatic" {
                  value 2;
                  description
                    "Choose BFD version automatically";
                }
              }
              default "automatic";
              description
                "BFD protocol version number";
            }
    
            leaf minimum-interval {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "1 .. 255000";
                }
              }
              units "milliseconds";
              description
                "Minimum transmit and receive interval";
            }
    
            leaf minimum-transmit-interval {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "1 .. 255000";
                }
              }
              units "milliseconds";
              status deprecated;
              description
                "Minimum transmit interval";
            }
    
            leaf minimum-receive-interval {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "1 .. 255000";
                }
              }
              units "milliseconds";
              description
                "Minimum receive interval";
            }
    
            leaf multiplier {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "1 .. 255";
                }
              }
              default "3";
              description
                "Detection time multiplier";
            }
    
            choice adaptation-choice {
              leaf no-adaptation {
                type empty;
                description "Disable adaptation";
              }
            }  // choice adaptation-choice
    
            container transmit-interval {
              description
                "Transmit-interval options";
              uses apply-advanced;
    
              leaf minimum-interval {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "1 .. 255000";
                  }
                }
                units "milliseconds";
                description
                  "Minimum transmit interval";
              }
    
              leaf threshold {
                type union {
                  type uint32;
                  type string {
                    pattern "<.*>|$.*";
                  }
                }
                units "milliseconds";
                description
                  "High transmit interval triggering a trap";
              }
            }  // container transmit-interval
    
            container detection-time {
              description
                "Detection-time options";
              uses apply-advanced;
    
              leaf threshold {
                type union {
                  type uint32;
                  type string {
                    pattern "<.*>|$.*";
                  }
                }
                units "milliseconds";
                description
                  "High detection-time triggering a trap";
              }
            }  // container detection-time
    
            container failure-action {
              description
                "Action to take when BFD session goes down";
              choice action-choice {
                leaf teardown {
                  type empty;
                  description
                    "Teardown label switched path and resignal";
                }
                container make-before-break {
                  presence
                    "enable make-before-break";
                  description
                    "Resignal the label switched path before teardown";
                  uses apply-advanced;
    
                  leaf teardown-timeout {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint32 {
                        range "0 .. 30";
                      }
                    }
                    units "seconds";
                    description
                      "Time to wait before teardown";
                  }
                }  // container make-before-break
              }  // choice action-choice
            }  // container failure-action
    
            leaf no-router-alert-option {
              type empty;
              description
                "Do not set Router-Alert options in IP header for MPLS-BFD";
            }
    
            leaf use-ip-ttl-1 {
              type empty;
              description
                "Set TTL value to 1 in IP header for MPLS-BFD";
            }
          }  // container bfd-liveness-detection
    
          container performance-monitoring {
            description
              "Performance monitoring options";
            uses apply-advanced;
    
            container traceoptions {
              description "Trace options for PM";
              uses apply-advanced;
    
              container file {
                description "Trace file options";
                leaf filename {
                  type string {
                    junos:posix-pattern "![/ %]";
                    junos:pattern-message "Must not contain '/', % or a space";
                    length "1 .. 1024";
                  }
                  description
                    "Name of file in which to write trace information";
                }
    
                leaf replace {
                  type empty;
                  status deprecated;
                  description
                    "Replace trace file rather than appending to it";
                }
    
                leaf size {
                  type string;
                  description
                    "Maximum trace file size";
                }
    
                leaf files {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "2 .. 1000";
                    }
                  }
                  default "10";
                  description
                    "Maximum number of trace files";
                }
    
                leaf no-stamp {
                  type empty;
                  status deprecated;
                  description
                    "Do not timestamp trace file";
                }
    
                choice world-readable-choice {
                  leaf world-readable {
                    type empty;
                    description
                      "Allow any user to read the log file";
                  }
                  leaf no-world-readable {
                    type empty;
                    description
                      "Don't allow any user to read the log file";
                  }
                }  // choice world-readable-choice
              }  // container file
    
              list flag {
                key "name";
                ordered-by user;
                description "Tracing parameters";
                leaf name {
                  type enumeration {
                    enum "init" {
                      value 0;
                      description
                        "Trace init commnad";
                    }
                    enum "error" {
                      value 1;
                      description
                        "Trace error conditions";
                    }
                    enum "event" {
                      value 2;
                      description
                        "Trace state machine events";
                    }
                    enum "general" {
                      value 3;
                      description
                        "Trace general events";
                    }
                    enum "packet" {
                      value 4;
                      description
                        "Trace various packets ";
                    }
                    enum "timer" {
                      value 5;
                      description
                        "Trace timer processing";
                    }
                    enum "all" {
                      value 6;
                      description
                        "Trace everything";
                    }
                  }
                }
              }  // list flag
            }  // container traceoptions
    
            container querier {
              junos:must "(".. .. .. ultimate-hop-popping")";
              junos:must-message "Performance monitoring can be configured only on ultimate-hop-popping LSPs";
              junos:must "(".. .. .. associate-lsp")";
              junos:must-message "Performance monitoring can be configured only for associated LSPs";
              description "Querier options";
              uses apply-advanced;
    
              container loss {
                description
                  "Loss measurement options";
                uses apply-advanced;
    
                list traffic-class {
                  key "name";
                  description
                    "Traffic class specific options";
                  leaf name {
                    type enumeration {
                      enum "tc-0" {
                        junos:must "("protocols mpls statistics traffic-class-statistics")";
                        junos:must-message "Traffic class can be configured only for traffic-class-statistics";
                        value 0;
                        description
                          "Traffic class 0";
                      }
                      enum "tc-1" {
                        junos:must "("protocols mpls statistics traffic-class-statistics")";
                        junos:must-message "Traffic class can be configured only for traffic-class-statistics";
                        value 1;
                        description
                          "Traffic class 1";
                      }
                      enum "tc-2" {
                        junos:must "("protocols mpls statistics traffic-class-statistics")";
                        junos:must-message "Traffic class can be configured only for traffic-class-statistics";
                        value 2;
                        description
                          "Traffic class 2";
                      }
                      enum "tc-3" {
                        junos:must "("protocols mpls statistics traffic-class-statistics")";
                        junos:must-message "Traffic class can be configured only for traffic-class-statistics";
                        value 3;
                        description
                          "Traffic class 3";
                      }
                      enum "tc-4" {
                        junos:must "("protocols mpls statistics traffic-class-statistics")";
                        junos:must-message "Traffic class can be configured only for traffic-class-statistics";
                        value 4;
                        description
                          "Traffic class 4";
                      }
                      enum "tc-5" {
                        junos:must "("protocols mpls statistics traffic-class-statistics")";
                        junos:must-message "Traffic class can be configured only for traffic-class-statistics";
                        value 5;
                        description
                          "Traffic class 5";
                      }
                      enum "tc-6" {
                        junos:must "("protocols mpls statistics traffic-class-statistics")";
                        junos:must-message "Traffic class can be configured only for traffic-class-statistics";
                        value 6;
                        description
                          "Traffic class 6";
                      }
                      enum "tc-7" {
                        junos:must "("protocols mpls statistics traffic-class-statistics")";
                        junos:must-message "Traffic class can be configured only for traffic-class-statistics";
                        value 7;
                        description
                          "Traffic class 7";
                      }
                      enum "all" {
                        junos:must "("protocols mpls statistics traffic-class-statistics")";
                        junos:must-message "Traffic class can be configured only for traffic-class-statistics";
                        value 8;
                        description
                          "All Traffic class";
                      }
                      enum "none" {
                        value 9;
                        description
                          "No Traffic class";
                      }
                    }
                    description
                      "Traffic class value";
                  }
    
                  uses apply-advanced;
    
                  leaf query-interval {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint32 {
                        range
                          "1000 .. 4294967295";
                      }
                    }
                    units "milliseconds";
                    description
                      "Minimum transmit interval";
                  }
    
                  leaf measurement-quantity {
                    type enumeration {
                      enum "bytes" {
                        value 0;
                        description
                          "Byte loss measurement";
                      }
                      enum "packets" {
                        value 1;
                        description
                          "Packet loss measurement";
                      }
                    }
                    default "packets";
                    description
                      "Loss measurement quantity";
                  }
    
                  leaf average-sample-size {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint16 {
                        range "1 .. 30";
                      }
                    }
                    description
                      "Number of samples used in average calculation";
                  }
    
                  leaf loss-threshold {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint32 {
                        range "1 .. 4294967295";
                      }
                    }
                    description
                      "Loss threshold value";
                  }
    
                  leaf loss-threshold-window {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint32 {
                        range "1 .. 30";
                      }
                    }
                    description
                      "Number of samples for loss threshold calculation";
                  }
                }  // list traffic-class
              }  // container loss
    
              container delay {
                description
                  "Delay measurement options";
                uses apply-advanced;
    
                list traffic-class {
                  key "name";
                  description
                    "Traffic class specific options";
                  leaf name {
                    type enumeration {
                      enum "tc-0" {
                        junos:must "("protocols mpls statistics traffic-class-statistics")";
                        junos:must-message "Traffic class can be configured only for traffic-class-statistics";
                        value 0;
                        description
                          "Traffic class 0";
                      }
                      enum "tc-1" {
                        junos:must "("protocols mpls statistics traffic-class-statistics")";
                        junos:must-message "Traffic class can be configured only for traffic-class-statistics";
                        value 1;
                        description
                          "Traffic class 1";
                      }
                      enum "tc-2" {
                        junos:must "("protocols mpls statistics traffic-class-statistics")";
                        junos:must-message "Traffic class can be configured only for traffic-class-statistics";
                        value 2;
                        description
                          "Traffic class 2";
                      }
                      enum "tc-3" {
                        junos:must "("protocols mpls statistics traffic-class-statistics")";
                        junos:must-message "Traffic class can be configured only for traffic-class-statistics";
                        value 3;
                        description
                          "Traffic class 3";
                      }
                      enum "tc-4" {
                        junos:must "("protocols mpls statistics traffic-class-statistics")";
                        junos:must-message "Traffic class can be configured only for traffic-class-statistics";
                        value 4;
                        description
                          "Traffic class 4";
                      }
                      enum "tc-5" {
                        junos:must "("protocols mpls statistics traffic-class-statistics")";
                        junos:must-message "Traffic class can be configured only for traffic-class-statistics";
                        value 5;
                        description
                          "Traffic class 5";
                      }
                      enum "tc-6" {
                        junos:must "("protocols mpls statistics traffic-class-statistics")";
                        junos:must-message "Traffic class can be configured only for traffic-class-statistics";
                        value 6;
                        description
                          "Traffic class 6";
                      }
                      enum "tc-7" {
                        junos:must "("protocols mpls statistics traffic-class-statistics")";
                        junos:must-message "Traffic class can be configured only for traffic-class-statistics";
                        value 7;
                        description
                          "Traffic class 7";
                      }
                      enum "all" {
                        junos:must "("protocols mpls statistics traffic-class-statistics")";
                        junos:must-message "Traffic class can be configured only for traffic-class-statistics";
                        value 8;
                        description
                          "All Traffic classes";
                      }
                    }
                    description
                      "Traffic class value";
                  }
    
                  uses apply-advanced;
    
                  leaf query-interval {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint32 {
                        range
                          "1000 .. 4294967295";
                      }
                    }
                    units "milliseconds";
                    description
                      "Minimum transmit interval";
                  }
    
                  leaf padding-size {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint16 {
                        range "1 .. 1500";
                      }
                    }
                    description
                      "Size of padding";
                  }
    
                  leaf average-sample-size {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint16 {
                        range "1 .. 30";
                      }
                    }
                    description
                      "Number of samples used in average calculation";
                  }
    
                  leaf twcd-delay-threshold {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint32 {
                        range "1 .. 4294967295";
                      }
                    }
                    units "microseconds";
                    description
                      "Two way channel delay threshold value";
                  }
    
                  leaf rtt-delay-threshold {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint32 {
                        range "1 .. 4294967295";
                      }
                    }
                    units "microseconds";
                    description
                      "Round trip delay threshold value";
                  }
                }  // list traffic-class
              }  // container delay
    
              container loss-delay {
                description
                  "Combined loss-delay measurement options";
                uses apply-advanced;
    
                list traffic-class {
                  key "name";
                  description
                    "Traffic class specific options";
                  leaf name {
                    type enumeration {
                      enum "tc-0" {
                        junos:must "("protocols mpls statistics traffic-class-statistics")";
                        junos:must-message "Traffic class can be configured only for traffic-class-statistics";
                        value 0;
                        description
                          "Traffic class 0";
                      }
                      enum "tc-1" {
                        junos:must "("protocols mpls statistics traffic-class-statistics")";
                        junos:must-message "Traffic class can be configured only for traffic-class-statistics";
                        value 1;
                        description
                          "Traffic class 1";
                      }
                      enum "tc-2" {
                        junos:must "("protocols mpls statistics traffic-class-statistics")";
                        junos:must-message "Traffic class can be configured only for traffic-class-statistics";
                        value 2;
                        description
                          "Traffic class 2";
                      }
                      enum "tc-3" {
                        junos:must "("protocols mpls statistics traffic-class-statistics")";
                        junos:must-message "Traffic class can be configured only for traffic-class-statistics";
                        value 3;
                        description
                          "Traffic class 3";
                      }
                      enum "tc-4" {
                        junos:must "("protocols mpls statistics traffic-class-statistics")";
                        junos:must-message "Traffic class can be configured only for traffic-class-statistics";
                        value 4;
                        description
                          "Traffic class 4";
                      }
                      enum "tc-5" {
                        junos:must "("protocols mpls statistics traffic-class-statistics")";
                        junos:must-message "Traffic class can be configured only for traffic-class-statistics";
                        value 5;
                        description
                          "Traffic class 5";
                      }
                      enum "tc-6" {
                        junos:must "("protocols mpls statistics traffic-class-statistics")";
                        junos:must-message "Traffic class can be configured only for traffic-class-statistics";
                        value 6;
                        description
                          "Traffic class 6";
                      }
                      enum "tc-7" {
                        junos:must "("protocols mpls statistics traffic-class-statistics")";
                        junos:must-message "Traffic class can be configured only for traffic-class-statistics";
                        value 7;
                        description
                          "Traffic class 7";
                      }
                      enum "all" {
                        junos:must "("protocols mpls statistics traffic-class-statistics")";
                        junos:must-message "Traffic class can be configured only for traffic-class-statistics";
                        value 8;
                        description
                          "All Traffic classes";
                      }
                      enum "none" {
                        value 9;
                        description
                          "No Traffic class";
                      }
                    }
                    description
                      "Traffic class value";
                  }
    
                  uses apply-advanced;
    
                  leaf query-interval {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint32 {
                        range
                          "1000 .. 4294967295";
                      }
                    }
                    units "milliseconds";
                    description
                      "Minimum transmit interval";
                  }
    
                  leaf measurement-quantity {
                    type enumeration {
                      enum "bytes" {
                        value 0;
                        description
                          "Byte loss measurement";
                      }
                      enum "packets" {
                        value 1;
                        description
                          "Packet loss measurement";
                      }
                    }
                    default "packets";
                    description
                      "Loss measurement quantity";
                  }
    
                  leaf padding-size {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint16 {
                        range "1 .. 1500";
                      }
                    }
                    description
                      "Size of padding";
                  }
    
                  leaf average-sample-size {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint16 {
                        range "1 .. 30";
                      }
                    }
                    description
                      "Number of samples used in average calculation";
                  }
    
                  leaf loss-threshold {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint32 {
                        range "1 .. 4294967295";
                      }
                    }
                    description
                      "Loss threshold value";
                  }
    
                  leaf loss-threshold-window {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint32 {
                        range "1 .. 30";
                      }
                    }
                    description
                      "Number of samples for loss threshold calculation";
                  }
    
                  leaf twcd-delay-threshold {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint32 {
                        range "1 .. 4294967295";
                      }
                    }
                    units "microseconds";
                    description
                      "Two way channel delay threshold value";
                  }
    
                  leaf rtt-delay-threshold {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint32 {
                        range "1 .. 4294967295";
                      }
                    }
                    units "microseconds";
                    description
                      "Round trip delay threshold value";
                  }
                }  // list traffic-class
              }  // container loss-delay
            }  // container querier
    
            container responder {
              junos:must "(".. .. .. ultimate-hop-popping")";
              junos:must-message "Performance monitoring can be configured only on ultimate-hop-popping LSPs";
              junos:must "(".. .. .. associate-lsp")";
              junos:must-message "Performance monitoring can be configured only for associated LSPs";
              description "Responder options";
              uses apply-advanced;
    
              container loss {
                description
                  "Loss measurement options";
                uses apply-advanced;
    
                leaf min-query-interval {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "1000 .. 4294967295";
                    }
                  }
                  units "milliseconds";
                  description
                    "Minimum query interval";
                }
              }  // container loss
    
              container delay {
                description
                  "Delay measurement options";
                uses apply-advanced;
    
                leaf min-query-interval {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "1000 .. 4294967295";
                    }
                  }
                  units "milliseconds";
                  description
                    "Minimum query interval";
                }
              }  // container delay
            }  // container responder
          }  // container performance-monitoring
    
          leaf lsp-ping-interval {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint16 {
                range "30 .. 3600";
              }
            }
            units "seconds";
            description
              "Time interval between LSP ping messages";
          }
    
          leaf lsp-ping-multiplier {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint8 {
                range "1 .. 5";
              }
            }
            description
              "Number of ping reply missed before declaring BFD down";
          }
    
          container traceoptions {
            description
              "Trace options for MPLSOAM process";
            uses apply-advanced;
    
            leaf no-remote-trace {
              junos:must "("system tracing")";
              junos:must-message "'no-remote-trace' is valid only when [system tracing] is configured";
              type empty;
              description
                "Disable remote tracing";
            }
    
            container file {
              description
                "Trace file information";
              leaf filename {
                type string {
                  junos:posix-pattern "![/ %]";
                  junos:pattern-message "Must not contain '/', % or a space";
                  length "1 .. 1024";
                }
                description
                  "Name of file in which to write trace information";
              }
    
              leaf size {
                type string;
                description
                  "Maximum trace file size";
              }
    
              leaf files {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "2 .. 1000";
                  }
                }
                default "3";
                description
                  "Maximum number of trace files";
              }
    
              choice world-readable-choice {
                leaf world-readable {
                  type empty;
                  description
                    "Allow any user to read the log file";
                }
                leaf no-world-readable {
                  type empty;
                  description
                    "Don't allow any user to read the log file";
                }
              }  // choice world-readable-choice
    
              leaf match {
                type jt:regular-expression;
                description
                  "Regular expression for lines to be logged";
              }
            }  // container file
    
            list flag {
              key "name";
              ordered-by user;
              description "Tracing parameters";
              leaf name {
                type enumeration {
                  enum "configuration" {
                    value 0;
                    description
                      "Trace configuration events";
                  }
                  enum "pipe" {
                    value 1;
                    description
                      "Trace pipe activity";
                  }
                  enum "rpc-packet-details" {
                    value 2;
                    description
                      "Trace RPC packet details";
                  }
                  enum "database" {
                    value 3;
                    description
                      "Trace database activity";
                  }
                  enum "network" {
                    value 4;
                    description
                      "Trace network activity";
                  }
                  enum "traceroute" {
                    value 5;
                    description
                      "Trace traceroute activity";
                  }
                  enum "all" {
                    value 6;
                    description
                      "Trace everything";
                  }
                }
              }
            }  // list flag
          }  // container traceoptions
        }  // grouping periodic_oam
    
        grouping pim_bootstrap_options_type {
          uses apply-advanced;
    
          leaf priority {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "0 .. 255";
              }
            }
            description
              "Eligibility to be the bootstrap router";
          }
    
          leaf-list import {
            type jt:policy-algebra;
            ordered-by user;
            description
              "Bootstrap import policy";
          }
    
          leaf-list export {
            type jt:policy-algebra;
            ordered-by user;
            description
              "Bootstrap export policy";
          }
        }  // grouping pim_bootstrap_options_type
    
        grouping pim_filter_obj {
          description
            "Filter to apply to tracing";
          leaf match-on {
            type enumeration {
              enum "prefix" {
                value 0;
                description
                  "Filter based on prefix";
              }
            }
            description
              "Argument on which to match";
          }
    
          leaf-list policy {
            type jt:policy-algebra;
            ordered-by user;
            description "Filter policy";
          }
        }  // grouping pim_filter_obj
    
        grouping pim_rp_group_range_type {
          leaf name {
            type jt:ipprefix;
          }
    
          uses apply-advanced;
    
          leaf nexthop-hold-time {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "1 .. 1000";
              }
            }
            units "milliseconds";
            description
              "Nexthop hold time in milliseconds";
          }
        }  // grouping pim_rp_group_range_type
    
        grouping ppp-traceoptions-type {
          description
            "Trace options for PPP process";
          uses apply-advanced;
    
          leaf no-remote-trace {
            junos:must "("system tracing")";
            junos:must-message "'no-remote-trace' is valid only when [system tracing] is configured";
            type empty;
            description "Disable remote tracing";
          }
    
          container file {
            description "Trace file information";
            leaf filename {
              type string {
                junos:posix-pattern "![/ %]";
                junos:pattern-message "Must not contain '/', % or a space";
                length "1 .. 1024";
              }
              description
                "Name of file in which to write trace information";
            }
    
            leaf size {
              type string;
              description
                "Maximum trace file size";
            }
    
            leaf files {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "2 .. 1000";
                }
              }
              default "3";
              description
                "Maximum number of trace files";
            }
    
            choice world-readable-choice {
              leaf world-readable {
                type empty;
                description
                  "Allow any user to read the log file";
              }
              leaf no-world-readable {
                type empty;
                description
                  "Don't allow any user to read the log file";
              }
            }  // choice world-readable-choice
    
            leaf match {
              type jt:regular-expression;
              description
                "Regular expression for lines to be logged";
            }
          }  // container file
    
          leaf level {
            type enumeration {
              enum "error" {
                value 0;
                description
                  "Match error conditions";
              }
              enum "warning" {
                value 1;
                description
                  "Match warning messages";
              }
              enum "notice" {
                value 2;
                description
                  "Match conditions that should be handled specially";
              }
              enum "info" {
                value 3;
                description
                  "Match informational messages";
              }
              enum "verbose" {
                value 4;
                description
                  "Match verbose messages";
              }
              enum "all" {
                value 5;
                description "Match all levels";
              }
            }
            default "error";
            description
              "Level of debugging output";
          }
    
          list flag {
            key "name";
            ordered-by user;
            description
              "Area of PPP process to enable debugging output";
            leaf name {
              type enumeration {
                enum "access" {
                  value 0;
                  description
                    "Trace access code";
                }
                enum "address-pool" {
                  value 1;
                  description
                    "Trace address pool code";
                }
                enum "auth" {
                  value 2;
                  description
                    "Trace authentication code";
                }
                enum "chap" {
                  value 3;
                  description "Trace CHAP code";
                }
                enum "pap" {
                  value 4;
                  description "Trace PAP code";
                }
                enum "config" {
                  value 5;
                  description
                    "Trace configuration code";
                }
                enum "ifdb" {
                  value 6;
                  description
                    "Trace interface database code";
                }
                enum "lcp" {
                  value 7;
                  description
                    "Trace LCP state machine code";
                }
                enum "memory" {
                  value 8;
                  description
                    "Trace memory management code";
                }
                enum "message" {
                  value 9;
                  description
                    "Trace message processing code";
                }
                enum "mlppp" {
                  value 10;
                  description "Trace MLPPP code";
                }
                enum "ncp" {
                  value 11;
                  description
                    "Trace NCP state machine code";
                }
                enum "ppp" {
                  value 12;
                  description
                    "Trace PPP protocol processing code";
                }
                enum "radius" {
                  value 13;
                  description
                    "Trace RADIUS processing code";
                }
                enum "redundancy" {
                  value 14;
                  description
                    "Trace redundancy code";
                }
                enum "rtsock" {
                  value 15;
                  description
                    "Trace routing socket code";
                }
                enum "session" {
                  value 16;
                  description
                    "Trace session management code";
                }
                enum "signal" {
                  value 17;
                  description
                    "Trace signal handling code";
                }
                enum "timer" {
                  value 18;
                  description "Trace timer code";
                }
                enum "ui" {
                  value 19;
                  description
                    "Trace user interface code";
                }
                enum "ci" {
                  value 20;
                  description "Trace ci code";
                }
                enum "all" {
                  value 21;
                  description
                    "Trace all areas of code";
                }
              }
            }
          }  // list flag
        }  // grouping ppp-traceoptions-type
    
        grouping pppoe-traceoptions-type {
          description
            "Trace options for PPPoE process";
          uses apply-advanced;
    
          leaf no-remote-trace {
            junos:must "("system tracing")";
            junos:must-message "'no-remote-trace' is valid only when [system tracing] is configured";
            type empty;
            description "Disable remote tracing";
          }
    
          container file {
            description "Trace file information";
            leaf filename {
              type string {
                junos:posix-pattern "![/ %]";
                junos:pattern-message "Must not contain '/', % or a space";
                length "1 .. 1024";
              }
              description
                "Name of file in which to write trace information";
            }
    
            leaf size {
              type string;
              description
                "Maximum trace file size";
            }
    
            leaf files {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "2 .. 1000";
                }
              }
              default "3";
              description
                "Maximum number of trace files";
            }
    
            choice world-readable-choice {
              leaf world-readable {
                type empty;
                description
                  "Allow any user to read the log file";
              }
              leaf no-world-readable {
                type empty;
                description
                  "Don't allow any user to read the log file";
              }
            }  // choice world-readable-choice
    
            leaf match {
              type jt:regular-expression;
              description
                "Regular expression for lines to be logged";
            }
          }  // container file
    
          leaf level {
            type enumeration {
              enum "error" {
                value 0;
                description
                  "Match error conditions";
              }
              enum "warning" {
                value 1;
                description
                  "Match warning messages";
              }
              enum "notice" {
                value 2;
                description
                  "Match conditions that should be handled specially";
              }
              enum "info" {
                value 3;
                description
                  "Match informational messages";
              }
              enum "verbose" {
                value 4;
                description
                  "Match verbose messages";
              }
              enum "all" {
                value 5;
                description "Match all levels";
              }
            }
            default "error";
            description
              "Level of debugging output";
          }
    
          list flag {
            key "name";
            ordered-by user;
            description
              "Area of PPPoE process to enable debugging output";
            leaf name {
              type enumeration {
                enum "config" {
                  value 0;
                  description
                    "Trace configuration code";
                }
                enum "events" {
                  value 1;
                  description "Trace event code";
                }
                enum "gres" {
                  value 2;
                  description "Trace GRES code";
                }
                enum "init" {
                  value 3;
                  description
                    "Trace initialization code";
                }
                enum "interface-db" {
                  value 4;
                  description
                    "Trace interface database code";
                }
                enum "memory" {
                  value 5;
                  description
                    "Trace memory management code";
                }
                enum "protocol" {
                  value 6;
                  description
                    "Trace PPPoE protocol processing code";
                }
                enum "rtsock" {
                  value 7;
                  description
                    "Trace routing socket code";
                }
                enum "session-db" {
                  value 8;
                  description
                    "Trace Session DB code";
                }
                enum "signal" {
                  value 9;
                  description
                    "Trace signal handling code";
                }
                enum "state" {
                  value 10;
                  description
                    "Trace state handling code";
                }
                enum "stats" {
                  value 11;
                  description
                    "Trace Stats Handling code";
                }
                enum "timer" {
                  value 12;
                  description "Trace timer code";
                }
                enum "ui" {
                  value 13;
                  description
                    "Trace user interface code";
                }
                enum "all" {
                  value 14;
                  description
                    "Trace all areas of code";
                }
              }
            }
          }  // list flag
    
          container filter {
            presence "enable filter";
            description "Trace filtering";
            uses apply-advanced;
    
            leaf aci {
              type string {
                junos:posix-pattern "^[*]*.[^*]*[*]*$";
                junos:pattern-message "Must be a non-reserved string";
                length "1 .. 64";
              }
              description
                "Regular expression to match ACI";
            }
    
            leaf ari {
              type string {
                junos:posix-pattern "^[*]*.[^*]*[*]*$";
                junos:pattern-message "Must be a non-reserved string";
                length "1 .. 64";
              }
              description
                "Regular expression to match ARI";
            }
    
            leaf service-name {
              type string {
                junos:posix-pattern "^([[:alnum:]][[:alnum:]_-]*)|([*][[:alnum:]_-]{1,})[*]?$";
                junos:pattern-message "Must be a non-reserved string";
                length "1 .. 64";
              }
              description "Service name";
            }
    
            leaf underlying-interface {
              junos:must "(("interfaces $$-IFL encapsulation ppp-over-ether" || ("interfaces $$-IFL encapsulation ppp-over-ether-over-atm-llc" || "interfaces $$-IFL family pppoe")))";
              junos:must-message "Underlying interface must be configured";
              type string;
              description
                "Underlying interface name";
            }
          }  // container filter
        }  // grouping pppoe-traceoptions-type
    
        grouping rib-inet3 {
          uses apply-advanced;
    
          container inet.3 {
            presence "enable inet.3";
            description
              "Use inet.3 to exchange labeled unicast routes";
            uses apply-advanced;
          }  // container inet.3
        }  // grouping rib-inet3
    
        grouping rib_group_inet_type {
          description "Routing table group";
          leaf ribgroup-name {
            type string;
            description
              "Name of the routing table group";
          }
        }  // grouping rib_group_inet_type
    
        grouping rib_group_type {
          uses apply-advanced;
    
          leaf inet-old-style {
            type string;
            status deprecated;
            description
              "Name of the IPv4 routing table group";
          }
    
          leaf inet {
            type string;
            description
              "Name of the IPv4 routing table group";
          }
    
          leaf inet3 {
            type string;
            description
              "Name of the IPv4 inet.3 routing table group";
          }
    
          leaf inet6 {
            type string;
            description
              "Name of the IPv6 routing table group";
          }
    
          leaf inet63 {
            type string;
            description
              "Name of the IPv6 inet6.3 routing table group";
          }
        }  // grouping rib_group_type
    
        grouping rip_filter_obj {
          description
            "Filter to apply to tracing";
          leaf match-on {
            type enumeration {
              enum "prefix" {
                value 0;
                description
                  "Filter based on prefix";
              }
            }
            description
              "Argument on which to match";
          }
    
          leaf-list policy {
            type jt:policy-algebra;
            ordered-by user;
            description "Filter policy";
          }
        }  // grouping rip_filter_obj
    
        grouping stp-interface {
          leaf name {
            type string;
          }
    
          uses apply-advanced;
    
          leaf priority {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint16 {
                range "0 .. 255";
              }
            }
            description
              "Interface priority (in increments of 16 - 0,16,..240)";
          }
    
          leaf cost {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "1 .. 200000000";
              }
            }
            description "Cost of the interface";
          }
    
          leaf mode {
            type enumeration {
              enum "point-to-point" {
                value 0;
                description
                  "Interface mode is point-to-point";
              }
              enum "shared" {
                value 1;
                description
                  "Interface mode is shared";
              }
            }
            description
              "Interface mode (P2P or shared)";
          }
    
          leaf edge {
            type empty;
            description "Port is an edge port";
          }
    
          leaf access-trunk {
            type empty;
            description
              "Send/Receive untagged RSTP BPDUs on this interface";
          }
    
          container bpdu-timeout-action {
            presence
              "enable bpdu-timeout-action";
            description
              "Define action on BPDU expiry (Loop Protect)";
            uses apply-advanced;
    
            leaf block {
              type empty;
              description "Block the interface";
            }
    
            leaf alarm {
              type empty;
              description "Generate an alarm";
            }
          }  // container bpdu-timeout-action
    
          leaf no-root-port {
            type empty;
            description
              "Do not allow the interface to become root (Root Protect)";
          }
    
          leaf disable {
            type empty;
            description
              "Disable Spanning Tree on port";
          }
        }  // grouping stp-interface
    
        grouping stp-trace-options {
          description
            "Trace options for Spanning Tree Protocol";
          uses apply-advanced;
    
          container file {
            description "Trace file options";
            leaf filename {
              type string {
                junos:posix-pattern "![/ %]";
                junos:pattern-message "Must not contain '/', % or a space";
                length "1 .. 1024";
              }
              description
                "Name of file in which to write trace information";
            }
    
            leaf replace {
              type empty;
              status deprecated;
              description
                "Replace trace file rather than appending to it";
            }
    
            leaf size {
              type string;
              description
                "Maximum trace file size";
            }
    
            leaf files {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "2 .. 1000";
                }
              }
              default "10";
              description
                "Maximum number of trace files";
            }
    
            leaf no-stamp {
              type empty;
              status deprecated;
              description
                "Do not timestamp trace file";
            }
    
            choice world-readable-choice {
              leaf world-readable {
                type empty;
                description
                  "Allow any user to read the log file";
              }
              leaf no-world-readable {
                type empty;
                description
                  "Don't allow any user to read the log file";
              }
            }  // choice world-readable-choice
          }  // container file
    
          list flag {
            junos:must "(".. file")";
            junos:must-message "Trace file name required to enable tracing";
            key "name";
            ordered-by user;
            description "Tracing parameters";
            leaf name {
              type enumeration {
                enum "events" {
                  value 0;
                  description
                    "Trace events to the protocol state machine";
                }
                enum "bpdu" {
                  value 1;
                  description
                    "Trace BPDU reception and transmission";
                }
                enum "timers" {
                  value 2;
                  description
                    "Trace protocol timers";
                }
                enum
                  "port-information-state-machine" {
                  value 3;
                  description
                    "Trace port information state machine";
                }
                enum
                  "port-receive-state-machine" {
                  value 4;
                  description
                    "Trace port receive state machine";
                }
                enum
                  "port-role-select-state-machine" {
                  value 5;
                  description
                    "Trace port role selection state machine";
                }
                enum
                  "port-role-transit-state-machine" {
                  value 6;
                  description
                    "Trace port role transit state machine";
                }
                enum
                  "port-state-transit-state-machine" {
                  value 7;
                  description
                    "Trace port state transit state machine";
                }
                enum
                  "port-migration-state-machine" {
                  value 8;
                  description
                    "Trace port migration state machine";
                }
                enum
                  "port-transmit-state-machine" {
                  value 9;
                  description
                    "Trace port transmit state machine";
                }
                enum
                  "topology-change-state-machine" {
                  value 10;
                  description
                    "Trace topology change state machine";
                }
                enum
                  "bridge-detection-state-machine" {
                  value 11;
                  description
                    "Trace Bridge detection state machine";
                }
                enum "state-machine-variables" {
                  value 12;
                  description
                    "Trace when state machine variables change";
                }
                enum "ppmd" {
                  value 13;
                  description
                    "Trace state and events for ppmd process";
                }
                enum "all-failures" {
                  value 14;
                  description
                    "Trace all failure conditions";
                }
                enum "all" {
                  value 15;
                  description "Trace all";
                }
              }
            }
    
            leaf disable {
              type empty;
              description
                "Disable this trace flag";
            }
          }  // list flag
        }  // grouping stp-trace-options
    
        grouping subscription-type {
          uses apply-advanced;
    
          leaf link-subscription {
            type string;
            default "100";
            description
              "Link bandwidth percentage for RSVP reservation";
          }
    
          leaf ct0 {
            junos:must "("protocols mpls diffserv-te bandwidth-model")";
            junos:must-message "Must have a diffserv-te bandwidth model configured when configuring subscription per traffic class";
            type string;
            default "100";
            description
              "Subscription percentage for traffic class 0";
          }
    
          leaf ct1 {
            junos:must "("protocols mpls diffserv-te bandwidth-model")";
            junos:must-message "Must have a diffserv-te bandwidth model configured when configuring subscription per traffic class";
            type string;
            default "100";
            description
              "Subscription percentage for traffic class 1";
          }
    
          leaf ct2 {
            junos:must "("protocols mpls diffserv-te bandwidth-model")";
            junos:must-message "Must have a diffserv-te bandwidth model configured when configuring subscription per traffic class";
            type string;
            default "100";
            description
              "Subscription percentage for traffic class 2";
          }
    
          leaf ct3 {
            junos:must "("protocols mpls diffserv-te bandwidth-model")";
            junos:must-message "Must have a diffserv-te bandwidth model configured when configuring subscription per traffic class";
            type string;
            default "100";
            description
              "Subscription percentage for traffic class 3";
          }
    
          list priority {
            key "priority-value";
            ordered-by user;
            description
              "Subscription percentage for a specific priority";
            leaf priority-value {
              junos:must "(!("protocols mpls diffserv-te"))";
              junos:must-message "Cannot configure per-priority subscription alongside diffserv-te";
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "0 .. 7";
                }
              }
              description
                "Priority for which subscription percent is being configured";
            }
    
            uses apply-advanced;
    
            leaf percent {
              junos:must "(!("protocols mpls diffserv-te"))";
              junos:must-message "Cannot configure per-priority subscription alongside diffserv-te";
              type string;
              description
                "Subscription percent for the specific priority";
            }
          }  // list priority
        }  // grouping subscription-type
    
        grouping system-id-ip-map {
          leaf name {
            type jt:mac-unicast;
          }
    
          uses apply-advanced;
    
          leaf ip-address {
            type jt:ipv4prefix;
            description "Peer ID (IP Address)";
          }
        }  // grouping system-id-ip-map
    
        grouping te-class-object {
          leaf traffic-class {
            type enumeration {
              enum "ct0" {
                value 0;
                description "Traffic class 0";
              }
              enum "ct1" {
                value 1;
                description "Traffic class 1";
              }
              enum "ct2" {
                value 2;
                description "Traffic class 2";
              }
              enum "ct3" {
                value 3;
                description "Traffic class 3";
              }
            }
            description "Traffic class";
          }
    
          leaf priority {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "0 .. 7";
              }
            }
            description
              "Preemption priority for this class";
          }
        }  // grouping te-class-object
    
        grouping ufd-group-type {
          description
            "Uplink failure detection group type";
          leaf name {
            type string {
              length "2 .. 64";
            }
            description
              "Uplink failure detection group name";
          }
    
          uses apply-advanced;
    
          list link-to-monitor {
            key "name";
            ordered-by user;
            description
              "Uplinks to be monitored";
            leaf name {
              junos:must "(!("interfaces $$ ether-options 802.3ad"))";
              junos:must-message "link-to-monitor interface cannot be a member of Lag interface";
              junos:must "("interfaces $$")";
              junos:must-message "link-to-monitor interface does not exist";
              type union {
                type jt:interface-unit;
                type string {
                  pattern "<.*>|$.*";
                }
              }
              description
                "Interface to be monitored";
            }
    
            uses apply-advanced;
          }  // list link-to-monitor
    
          list link-to-disable {
            key "name";
            ordered-by user;
            description "Downlinks to disable";
            leaf name {
              junos:must "(!("interfaces $$ ether-options 802.3ad"))";
              junos:must-message "link-to-disable interface cannot be a member of Lag interface";
              junos:must "("interfaces $$")";
              junos:must-message "link-to-disable interface does not exist";
              type union {
                type jt:interface-unit;
                type string {
                  pattern "<.*>|$.*";
                }
              }
              description "Interface to disable";
            }
    
            uses apply-advanced;
          }  // list link-to-disable
    
          leaf debounce-interval {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "5 .. 300";
              }
            }
            units "seconds";
            description
              "Delay before bring up of the link-to-disable port";
          }
        }  // grouping ufd-group-type
      }  // module junos-ex-conf-protocols
    

© 2023 YumaWorks, Inc. All rights reserved.